📄 do_handle.c
字号:
/********************************************************\
* 文件名: Do_Handle.h
* 创建时间:2004年10月20日
* 创建人:
* 版本号: 1.00
* 功能:
*
* 修改历史:(每条详述)
\********************************************************/
#include <msp430x14x.h>
#include "Handle_Protocol.h"
#include "SPI45DB041.h"
#include "TA_Uart.h"
#include "General.h"
#include "D_Buffer.h"
#include "Other_Define.h"
#include "Define_Bit.h"
#include "Uart01.h"
#include "Sub_C.h"
#include "M22_AT.h"
#include "Do_Handle.h"
#include "W_Protocol.h"
#include "Disp_Protocol.h"
#include "Do_SRAM.h"
#include "Msp430_Flash.h"
/*
#include "Check_GSM.h"
#include "Do_Reset.h"
#include "Main_Init.h"
#include "Do_GSM.h"
*/
//#define Debug_GSM_COM1
unsigned char Check_Handle_Command(void);
void Handle_Dailing(unsigned char nPoint_Temp);
void Handle_Answer(void);
void Write_Dail_Record(unsigned char nPhone_Length);
void Read_Dail_Record(unsigned char nItem);
void Write_Talk_Record(unsigned char nPhone_Length);
void Read_Talk_Record(unsigned char nItem);
void Handle_ReadOnePage_Data(unsigned char Page_H,unsigned char Page_L);
//void Handle_EraseOnePage_Data(unsigned char Page_H,unsigned char Page_L);
void Move_Right_Item(unsigned char Start_Item,unsigned char End_Item,unsigned char Move_Count);
//void Handle_Set_NumPhone(void);
//void Handle_Set_TCP_Par(void);
//unsigned char Check_All_Flash(void);
unsigned int Check_Allow_Phone(unsigned char Length_Phone);
void Read_Phone_Note_Record(unsigned char nItem);
void Handle_Set_Par(unsigned char nLength);
void Handle_Set_TcpIp(void);
void Handle_Set_Time(void);
void Handle_Ask_Par(void);
void Handle_Set_SMS(void);
void Handle_Set_Phone(unsigned char nLength);
void Handle_Set_Dis(void);
void Handle_Test_Sram(void);
/********************************************************\
* 函数名:Do_Handle_Module
作用域:外部文件调用
* 功能: 与手柄通讯模块。
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
补充说明:
收到的每一个手柄数据存储在gGeneral_Buffer[]中。
由Check_Handle_Command()子程序处理接收在gGeneral_Buffer中的数据
根据信令的不一样,需要分别处理,需要通过有G20的AT操作的指令则直接
存储在buffer1中的0x5D----0x7A 区域共30个字节。
手柄与电话有关的AT指令包括如下几类
这里只存储AT指令的类型有如下几类:
1,拨号,2,挂机,3,接听,4,DMTF,5,音量调节,6,CSCA的设置
根据上面的情形,以30个字节足够存储的
还有一类的指令则是需要直接处理的,比如说电话记录的查询,密码设置等等
0x5D----0x7A 区域的分配如下:
0x5D-- 存储后面数据是否处理完的标志,为1则表示后面的数据未处理,为0则表示
已经处理完毕,可以在填写下个指令。
0x5E-- 存储相关的AT指令的类型。如手柄拨号,挂机等等
0x5F-- 存储后面数据的长度,如需要拨号的电话号码等。如果后面无任何数据,则写0。
\********************************************************/
void Do_Handle_Module(void)
{
unsigned int i=0,k=0;
unsigned char nHandle_Piont_Temp=0;
//指令的重发机制,目前只针对主控发送给手柄的挂机指令和接通指令
if( (gSend_Handle_Timer>2)
&&((gSys_Handle==MAIN_HANG_UP)||(gSys_Handle==MAIN_TALKING)) )
{
gSend_Handle_Timer=0;
Send_COM3_Load(4,gSys_Handle,0);
gRe_Send_Count++;
if(gRe_Send_Count>=5)
{
gRe_Send_Count=0;
gSys_Handle=0;
}
}
if(gDTMF_SAVE[0]>0)
{
SRAM_Init();
if(SRAM_Read(PHONE_AT_2)==NULL_2)
{
OperateSPIEnd();
k=gDTMF_SAVE[1];
gDTMF_SAVE[0]--;
for(i=0;i<gDTMF_SAVE[0];i++)
{
gDTMF_SAVE[i+1]=gDTMF_SAVE[i+2];
}
SRAM_Init();
SRAM_Write(PHONE_AT_2+0,VAILD_2);
SRAM_Write(PHONE_AT_2+1,H_DTMF);
SRAM_Write(PHONE_AT_2+2,1);
SRAM_Write(PHONE_AT_2+3,k);
}
OperateSPIEnd();
}
if( (gHandle_Receive_Over>40)&&(gHandle_Buffer_Point>0) )
{
#ifdef Debug_GSM_COM1
Send_COM1_Byte(ASCII(gHandle_Buffer_Point/10));
Send_COM1_Byte(ASCII(gHandle_Buffer_Point%10));
Send_COM1_Byte('[');
Send_COM1_String(gHandle_Buffer,gHandle_Buffer_Point);
Send_COM1_Byte(']');
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
#endif
//作为判断手柄是否被摘除掉或者手柄出现程序异常的判
//接收完数据,则开始处理数据
k=Check_Handle_Command();
nHandle_Piont_Temp=gHandle_Buffer_Point;
gHandle_Buffer_Point=0;
switch(k)
{
/********************************************************\
0,手柄的指令ECHO(手柄命令)
\********************************************************/
case HANDLE_ECHO:
{
gHandle_OnLine_Timer=0;
gStatus1_Flag &=~ HANDLE_ON_0_F_1;
gStatus1_Flag |= HANDLE_ON_1_F_1;
//判断返回的是那一个指令的ECHO
if( (gSys_Handle==MAIN_HANG_UP)&&(gHandle_Buffer[3]==MAIN_HANG_UP) )
{
gRe_Send_Count=0;
gSys_Handle=0;
}
else if( (gSys_Handle==MAIN_TALKING)&&(gHandle_Buffer[3]==MAIN_TALKING) )
{
gRe_Send_Count=0;
gSys_Handle=0;
}
break;
}
/********************************************************\
1,手柄拨号(手柄命令)
\********************************************************/
case HANDLE_DIAL:
{
gCommon_Flag&=~CHECK_RINGPHONE_F_1;
gHandle_OnLine_Timer=0;
gStatus1_Flag &=~ HANDLE_ON_0_F_1;
gStatus1_Flag |= HANDLE_ON_1_F_1;
k=SRAM_Read(PHONE_AT_2);
i=SRAM_Read(PHONE_AT_2+1);
if( (i==H_HUNGUP)&&(k==VAILD_2) )
{
Send_COM3_Load(5,MAIN_RETURN_PHONE_ECHO,COMMAND_ERROR);
}
else
{
Handle_Dailing(nHandle_Piont_Temp);
}
break;
}
/********************************************************\
2,手柄接听(手柄命令)
\********************************************************/
case HANDLE_ANSWER:
{
gCommon_Flag&=~CHECK_RINGPHONE_F_1;
gHandle_OnLine_Timer=0;
gStatus1_Flag &=~ HANDLE_ON_0_F_1;
gStatus1_Flag |= HANDLE_ON_1_F_1;
Send_COM3_Load(5,MAIN_RETURN_PHONE_ECHO,COMMAND_OK);
Handle_Answer();
break;
}
/********************************************************\
3,手柄挂机(手柄命令)
\********************************************************/
case HANDLE_HANGUP:
{
gCommon_Flag&=~CHECK_RINGPHONE_F_1;
gHandle_OnLine_Timer=0;
gStatus1_Flag &=~ HANDLE_ON_0_F_1;
gStatus1_Flag |= HANDLE_ON_1_F_1;
Send_COM3_Load(5,MAIN_RETURN_PHONE_ECHO,COMMAND_OK);
//如果这个时候处于监听状态,则下面不用处理
if( (gGeneral_Flag&MONITOR_ON_F_1)||(gPhone_Status==ACTIVE_MONITOR))
{
gHandle_Buffer_Point=0;
}
else
{
SRAM_Init();
SRAM_Write(PHONE_AT_2+0,VAILD_2);
SRAM_Write(PHONE_AT_2+1,H_HUNGUP);
SRAM_Write(PHONE_AT_2+2,0);
}
break;
}
/********************************************************\
4,手柄调节音量(手柄命令)
\********************************************************/
case HANDLE_VOL:
{
gCommon_Flag&=~CHECK_RINGPHONE_F_1;
gHandle_OnLine_Timer=0;
gStatus1_Flag &=~ HANDLE_ON_0_F_1;
gStatus1_Flag |= HANDLE_ON_1_F_1;
SRAM_Init();
SRAM_Write(PHONE_AT_2+0,VAILD_2);
SRAM_Write(PHONE_AT_2+1,H_VOLADJ);
SRAM_Write(PHONE_AT_2+2,1);
SRAM_Write(PHONE_AT_2+3,gHandle_Buffer[3]);
break;
}
/********************************************************\
5,手柄的DTMF(手柄命令)
\********************************************************/
case HANDLE_DTMF:
{
gCommon_Flag&=~CHECK_RINGPHONE_F_1;
gHandle_OnLine_Timer=0;
gStatus1_Flag &=~ HANDLE_ON_0_F_1;
gStatus1_Flag |= HANDLE_ON_1_F_1;
if(gDTMF_SAVE[0]<sizeof(gDTMF_SAVE)-1)
{
gDTMF_SAVE[0]++;
gDTMF_SAVE[gDTMF_SAVE[0]]=gHandle_Buffer[3];
}
break;
}
/********************************************************\
6,手柄读最新拨出电话号码(手柄命令)
\********************************************************/
case HANDLE_READ_DIAL:
{
gCommon_Flag&=~CHECK_RINGPHONE_F_1;
gHandle_OnLine_Timer=0;
gStatus1_Flag &=~ HANDLE_ON_0_F_1;
gStatus1_Flag |= HANDLE_ON_1_F_1;
if(gPhone_Status==ACTIVE_MONITOR);
else if(gGeneral_Flag&TCP_PHONE_F_1)
{
gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
}
//while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
Read_Dail_Record(gHandle_Buffer[3]);
gDelay_Flash_Timer=0;
break;
}
/********************************************************\
7,手柄读前一个拨出电话号码(手柄命令)
\********************************************************/
case HANDLE_UP_DIAL:
{
gCommon_Flag&=~CHECK_RINGPHONE_F_1;
gHandle_OnLine_Timer=0;
gStatus1_Flag &=~ HANDLE_ON_0_F_1;
gStatus1_Flag |= HANDLE_ON_1_F_1;
/*
if(gPhone_Status==ACTIVE_MONITOR);
else if(gGeneral_Flag&TCP_PHONE_F_1)
{
gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
}
&*/
//while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
Read_Dail_Record(gHandle_Buffer[3]);
gDelay_Flash_Timer=0;
break;
}
/********************************************************\
8,手柄读后一个拨出电话号码(手柄命令)
\********************************************************/
case HANDLE_DOWN_DIAL:
{
gCommon_Flag&=~CHECK_RINGPHONE_F_1;
gHandle_OnLine_Timer=0;
gStatus1_Flag &=~ HANDLE_ON_0_F_1;
gStatus1_Flag |= HANDLE_ON_1_F_1;
/*
if(gPhone_Status==ACTIVE_MONITOR);
else if(gGeneral_Flag&TCP_PHONE_F_1)
{
gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
}
*/
//while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
Read_Dail_Record(gHandle_Buffer[3]);
gDelay_Flash_Timer=0;
break;
}
/********************************************************\
9,手柄读最新一次的通话记录(手柄命令)
\********************************************************/
/*
case HANDLE_READ_TALK:
{
gHandle_OnLine_Timer=0;
if(gPhone_Status==ACTIVE_MONITOR);
else if(gGeneral_Flag&TCP_PHONE_F_1)
{
gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
}
//while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
Read_Talk_Record(gHandle_Buffer[3]);
gDelay_Flash_Timer=0;
break;
}
*/
/********************************************************\
10,手柄读前一个通话记录(手柄命令)
\********************************************************/
/*
case HANDLE_UP_TALK:
{
gHandle_OnLine_Timer=0;
if(gPhone_Status==ACTIVE_MONITOR);
else if(gGeneral_Flag&TCP_PHONE_F_1)
{
gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
}
//while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
Read_Talk_Record( gHandle_Buffer[3] );
gDelay_Flash_Timer=0;
break;
}
*/
/********************************************************\
11,手柄读后一个通话记录(手柄命令)
\********************************************************/
/*
case HANDLE_DOWN_TALK:
{
gHandle_OnLine_Timer=0;
if(gPhone_Status==ACTIVE_MONITOR);
else if(gGeneral_Flag&TCP_PHONE_F_1)
{
gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
}
//while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
Read_Talk_Record(gHandle_Buffer[3]);
gDelay_Flash_Timer=0;
break;
}
*/
/********************************************************\
12,手柄送给主控存储的通话记录(手柄命令)
\********************************************************/
/*
case HANDLE_SEND_TALK:
{
gHandle_OnLine_Timer=0;
if(gPhone_Status==ACTIVE_MONITOR);
else if(gGeneral_Flag&TCP_PHONE_F_1)
{
gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
}
//while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
Init_Buffer2();
Write_Talk_Record(nHandle_Piont_Temp);
gDelay_Flash_Timer=0;
Init_Buffer2();
break;
}
*/
/********************************************************\
13,手柄送被盗设防命令(手柄命令),取消
\********************************************************/
/*
case HANDLE_SET_DEFENCE:
{
gHandle_OnLine_Timer=0;
break;
}
*/
/********************************************************\
14,手柄解除设防命令(手柄命令)
\********************************************************/
/*
case HANDLE_FREE_DEFENCE:
{
gHandle_OnLine_Timer=0;
break;
}
*/
/********************************************************\
15,手柄提取短消息中心号码(手柄命令,暂时取消)
\********************************************************/
/*
case HANDLE_ASK_CENTER_NUM:
{
gHandle_OnLine_Timer=0;
break;
}
*/
/********************************************************\
16,手柄设置短消息中心号码(手柄命令,暂时取消)
\********************************************************/
/*
case HANDLE_SET_CENTER_NUM:
{
break;
}
*/
/********************************************************\
17,手柄更改设置密码(手柄命令)
\********************************************************/
/*
case HANDLE_PASSWORD:
{
break;
}
*/
/********************************************************\
18,手柄进行对车载终端进行出厂设置操作(初始化系统)
\********************************************************/
case HANDLE_DEFAULT_SET:
{
gHandle_OnLine_Timer=0;
//1,清除信息区1
OperateSPIEnd();EraseOnePage(FLASH_INFO1_ONE_2);OperateSPIEnd();
OperateSPIEnd();EraseOnePage(FLASH_INFO1_TWO_2);OperateSPIEnd();
Clear_Exter_WatchDog();
RX2_Ready();RX3_Ready();RX4_Ready();
//2,清除信息区2
OperateSPIEnd();EraseOnePage(FLASH_INFO2_ONE_2);OperateSPIEnd();
OperateSPIEnd();EraseOnePage(FLASH_INFO2_TWO_2);OperateSPIEnd();
Clear_Exter_WatchDog();
RX2_Ready();RX3_Ready();RX4_Ready();
//3,清除电话号码拨出和通话记录区域
OperateSPIEnd();EraseOnePage(FLASH_DIAL_PHONE);OperateSPIEnd();
OperateSPIEnd();EraseOnePage(FLASH_RECORD_PHONE_2);OperateSPIEnd();
Clear_Exter_WatchDog();
RX2_Ready();RX3_Ready();RX4_Ready();
//4,清除存储区域数据的区域
OperateSPIEnd();EraseOnePage(FLASH_AREA_ONE_2);OperateSPIEnd();
OperateSPIEnd();EraseOnePage(FLASH_AREA_TWO_2);OperateSPIEnd();
Clear_Exter_WatchDog();
RX2_Ready();RX3_Ready();RX4_Ready();
//5,清除存储线路数据的区域1的数据
OperateSPIEnd();EraseOnePage(FLASH_LINEDATA1_ONE_2);OperateSPIEnd();
OperateSPIEnd();EraseOnePage(FLASH_LINEDATA1_TWO_2);OperateSPIEnd();
Clear_Exter_WatchDog();
RX2_Ready();RX3_Ready();RX4_Ready();
//6,清除存储线路数据的区域2的数据
OperateSPIEnd();EraseOnePage(FLASH_LINEDATA2_ONE_2);OperateSPIEnd();
OperateSPIEnd();EraseOnePage(FLASH_LINEDATA2_TWO_2);OperateSPIEnd();
Clear_Exter_WatchDog();
RX2_Ready();RX3_Ready();RX4_Ready();
//7,清除存储电话号码本的区域数据
OperateSPIEnd();EraseOnePage(FLASH_PHONE_INFO_ONE_2);OperateSPIEnd();
OperateSPIEnd();EraseOnePage(FLASH_PHONE_INFO_TWO_2);OperateSPIEnd();
Clear_Exter_WatchDog();
RX2_Ready();RX3_Ready();RX4_Ready();
//
for(i=0;i<128;i++)
{
gGeneral_Buffer[i]=0xFF;
}
Write_SegAB(0);
gTimer=0;
while(gTimer<3000){Clear_Exter_WatchDog();}
RX2_Ready();RX3_Ready();RX4_Ready();
Write_SegAB(1);
gTimer=0;
while(gTimer<1500){Clear_Exter_WatchDog();}
TACTL|=TASSEL1; //输入时钟选择MCLK
TACTL|=TACLR; //定时器A清除位CLR清零
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -