📄 do_handle.c
字号:
TACTL|=MC1; //定时器A选择连续增记数模式
TAR=0; //定时器A的值清零
TACCTL0|=OUT; //TXD2 Idle as Mark
TACCTL1|=OUT; //TXD3 Idle as Mark
TACCTL2|=OUT; //TXD4 Idle as Mark
gON_OFF_Temp0=0xFF;gON_OFF_Temp1=0xFF;gON_OFF_Temp2=0xFF;
gAlarm_Type=0;gWatch_Type=0;gCycle_Send_Status=NOP_DATA;
gStatus2_Flag&=~ROB_ALARM_F_1;
//设防状态清除
gInternal_Flag&=~VEHICLE_DEFENCE_F_1;
gStatus1_Flag&=~DEFENCE_STATUS_F_1;
//行车轨迹上传的间隔
gCycle_GSM=0;gCycle_TCP=0;
//TCP的IP地址无效
gGeneral_Flag&=~NUM1_VAILD_F_1;
gGeneral_Flag&=~TCP_IP_VALID_1;
gStatus2_Flag&=~IP_VAILD_F_1;
gStatus2_Flag&=~TCP_ON_OFF_F_1;
RX2_Ready();RX3_Ready();RX4_Ready();
Waiting_Allow_Send();
Send_COM3_SubProgram(5,MAIN_RETURN_INIT,COMMAND_OK);
gTimer=0;
gDelay_Flash_Timer=0;
while(gTimer<50){}
break;
}
/********************************************************\
19,手柄返回是否开机的状态(手柄命令)
\********************************************************/
case HANDLE_STATUS:
{
//如果接收到此命令,则根据命令字,来判断是否车载电话是否处于开机和关机状态,同时清除计时判断手柄未接的计数变量
//判断手柄显示终端关机
gHandle_OnLine_Timer=0;
if( gHandle_Buffer[3]==0 )
{
gStatus1_Flag |= HANDLE_ON_0_F_1;
gStatus1_Flag &=~ HANDLE_ON_1_F_1;
}
//判断手柄显示终端开机
else if ( gHandle_Buffer[3]==1 )
{
gStatus1_Flag &=~ HANDLE_ON_0_F_1;
gStatus1_Flag |= HANDLE_ON_1_F_1;
}
break;
}
/********************************************************\
20,手柄查询指定位置的电话号码本的内容(手柄命令)
\********************************************************/
case HANDLE_PHONE_NOTE:
{
gHandle_OnLine_Timer=0;
gStatus1_Flag &=~ HANDLE_ON_0_F_1;
gStatus1_Flag |= HANDLE_ON_1_F_1;
Read_Phone_Note_Record(gHandle_Buffer[3]);
break;
}
/********************************************************\
A1,手柄对指定页数据的擦除(测试命令)
\********************************************************/
/*
case HANDLE_ERASE_PAGEDATA:
{
break;
}
*/
/********************************************************\
A2,手柄对指定页数据的读取(测试命令)
\********************************************************/
case HANDLE_READ_PAGEDATA:
{
gHandle_OnLine_Timer=0;
Handle_ReadOnePage_Data(gHandle_Buffer[3],gHandle_Buffer[4]);
break;
}
/********************************************************\
A3,通过手柄(COM3)设置目标电话号码1(测试命令)
\********************************************************/
/*
case HANDLE_SET_PHONE_NUM:
{
break;
}
*/
/********************************************************\
A4,通过手柄(COM3)发送检查整个FLASH(测试命令)根据情况,则只检查buffer1和buffer2的情况
\********************************************************/
/*
case HANDLE_CHECK_FLASH:
{
break;
}
*/
/********************************************************\
A5,通过手柄(COM3)发送检查GPS数据格式有效性(测试命令)
\********************************************************/
/*
case HANDLE_CHECK_GPS:
{
break;
}
*/
/********************************************************\
A6,通过手柄(COM3)使GSM模块自发自收一个SMS的命令(测试命令)
\********************************************************/
/*
case HANDLE_CHECK_SMS:
{
break;
}
*/
/********************************************************\
A7,手柄接口调试监听语音电路(测试命令)
\********************************************************/
case HANDLED_ACTIVE_MONITOR:
{
gHandle_OnLine_Timer=0;
SRAM_Init();
SRAM_Write(PHONE_AT_2+0,VAILD_2);
SRAM_Write(PHONE_AT_2+1,M_DIAL);
SRAM_Write(PHONE_AT_2+2,gHandle_Buffer[1]-4);
for(i=0;i<gHandle_Buffer[1]-4;i++)
{
SRAM_Write(PHONE_AT_2+3+i,gHandle_Buffer[i+3]);
}
break;
}
/********************************************************\
A8,手柄插除所有的历史轨迹的数据(测试命令)
\********************************************************/
/*
case HANDLE_ERASE_ALLPASS:
{
break;
}
*/
/********************************************************\
A8-1,测试外部SRAM的数据正确性(测试命令)
\********************************************************/
case HANDLE_TEST_SRAM:
{
gHandle_OnLine_Timer=0;
Handle_Test_Sram();
break;
}
/********************************************************\
A9,手柄设置相关TCP的参数(测试命令)
做测试用,设置IP和PORT后,则需要开启进行TCP登陆的操作
以测试此登陆TCP的功能正确
\********************************************************/
/*
case HANDLE_SET_TCP:
{
break;
}
*/
/********************************************************\
A10,手柄读取版本号(测试命令)
\********************************************************/
case HNADLE_READ_EDITION:
{
gHandle_OnLine_Timer=0;
if(gHandle_Buffer[3]=(char)(~gHandle_Buffer[2]))
{
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
for(i=0;i<35;i++) Send_COM1_Byte('=');
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
for(i=0;i<sizeof(String_A);i++)
{
Send_COM1_Byte(String_A[i]-1);
Send_COM1_Byte(String_EDIT[i]+1);
}
for(i=0;i<35;i++) Send_COM1_Byte('=');
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
}
break;
}
/********************************************************\
A12,手柄接口设置基本参数(参数设置命令)
\********************************************************/
case HANDLE_SET_PAR:
{
gHandle_OnLine_Timer=0;
Handle_Set_Par(nHandle_Piont_Temp);
break;
}
/********************************************************\
A13,手柄接口设置TCP的相关参数(参数设置命令)
\********************************************************/
case HANDLE_SET_TCPIP:
{
Handle_Set_TcpIp();
break;
}
/********************************************************\
A14,手柄接口设置时间间隔的相关参数(参数设置命令)
\********************************************************/
case HANDLE_SET_TIME:
{
gHandle_OnLine_Timer=0;
Handle_Set_Time();
break;
}
/********************************************************\
A15,手柄接口设置短消息预置的相关参数(参数设置命令)
\********************************************************/
case HANDLE_SET_SMS:
{
gHandle_OnLine_Timer=0;
Handle_Set_SMS();
break;
}
/********************************************************\
A16,手柄接口设置电话号码本设置置的相关参数(参数设置命令)
\********************************************************/
case HANDLE_SET_PHONE_NOTE:
{
Handle_Set_Phone(nHandle_Piont_Temp);
break;
}
/********************************************************\
A17,手柄接口设置按距离上传数据的相关参数(参数设置命令)
\********************************************************/
case HANDLE_SET_DISTANCE:
{
gHandle_OnLine_Timer=0;
Handle_Set_Dis();
break;
}
/********************************************************\
A18,(查询所有参数设置命令的返回的命令)
\********************************************************/
case HANDLE_ASK_PAR:
{
gHandle_OnLine_Timer=0;
Handle_Ask_Par();
break;
}
/********************************************************\
A19,手柄端口人为设置目标号码在buffer1中错误(调试命令)
\********************************************************/
/*
case HANDLE_ERROR_NUM:
{
break;
}
*/
/********************************************************\
A20,手柄接口端口人为设置短消息中心号码在buffer1中错误(调试命令)
\********************************************************/
/*
case HANDLE_ERROR_CENTER:
{
break;
}
*/
/********************************************************\
A21,手柄端口 人为设置430两个信息扇区的错误(调试命令)
\********************************************************/
/*
case HANDLE_ERROR_IP:
{
for(i=0;i<128;i++)
{
gGeneral_Buffer[i]=0xFF;
}
Write_SegAB(gHandle_Buffer[3]);
break;
}
*/
/********************************************************\
A22,手柄端口 人为设置在扇区中的错误(调试命令)
\********************************************************/
/*
case HANDLE_ERROR_PORT:
{
OperateSPIEnd();ReadOnePageToBuffer2((int)gHandle_Buffer[3]);OperateSPIEnd();
if( (gHandle_Buffer[3]==1)||(gHandle_Buffer[3]==2) )
{
if(gHandle_Buffer[4]==0) k=TARGET_NUMBER1_F_2;
else if(gHandle_Buffer[4]==1) k=GPRS_IP_ADDRESS1_F_2;
WriteOneByteToBuffer2(k+gHandle_Buffer[5],0x47);
for(i=0;i<gHandle_Buffer[6];i++)
{
WriteNextByteToBuffer2(0x47);
}
OperateSPIEnd();
if(gHandle_Buffer[7]==1)
{
RFlash_Sector((int)gHandle_Buffer[3]);
}
else
{
WriteBuffer2ToPage((int)gHandle_Buffer[3]);
gTimer=0;
while(gTimer<1000){Clear_Exter_WatchDog();}
}
}
break;
}
*/
/********************************************************\
A23,手柄端口人为设置在扇区中的错误(调试命令)
\********************************************************/
/*
case HANDLE_SET_ALARM:
{
break;
}
*/
/********************************************************\
A25,手柄端口 读取数据从外部的SRAM中相应的位置(调试命令)
\********************************************************/
/*
case HANDLE_READ_SRAM:
{
break;
}
*/
/********************************************************\
A26,手柄端口 设置命令初始化显示终端
\********************************************************/
case HANDLE_CLEAR_DISP:
{
gHandle_OnLine_Timer=0;
if(gDisp_Buffer_Point+6+2<=sizeof(gDisp_Buffer))
{
gDisp_Buffer[gDisp_Buffer_Point]=6+2;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=0;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='@';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='%';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=6;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=DISP_CLEAR_DOWN;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='$';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='&';
gDisp_Buffer_Point++;
}
break;
}
/********************************************************\
其他
\********************************************************/
default:
break;
}
gHandle_Buffer_Point=0;
for(i=0;i<sizeof(gHandle_Buffer);i++) gHandle_Buffer[i]=0;
}
//判断是否有需要发送的手柄数据
else if( (gHandle_Receive_Over>20)
&&(gDisp_Receive_Over>20)
&&( (gCommon_Flag&ALLOW_R232_F_1)==0)
&&(gGPS_Receive_Over>20)
&&(gReceive1_Over_Count>20) )
{
SRAM_Init();
i=SRAM_Read(SHANDLE_DATA_VAILD);
if(i!=NULL_2)
{
for(k=0;k<SRAM_Read(SHANDLE_DATA_VAILD+2);k++)
{
Send_COM3_Byte( SRAM_Read(SHANDLE_DATA_VAILD+1+k) );
}
RX3_Ready();
SRAM_Init();
SRAM_Write(SHANDLE_DATA_VAILD+0,NULL_2);
}
}
}
/********************************************************\
* 函数名:Check_Handle_Command
作用域:本地文件调用
* 功能: 校验在手柄通讯完后,判断收到数据包的数据是否属于正确数据包
并返回信令字
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
unsigned char Check_Handle_Command(void)
{
if(gHandle_Buffer_Point<4) return(0); //最小的包长为4个字节,如果小于4说明数据包未收全
if(gHandle_Buffer_Point!=gHandle_Buffer[1]) return(0); //接收到的数据包与数据包里的字长不符合,也说明数据未收全
if(gHandle_Buffer[0]!=0x24) return(0); //收到的包头不正确
if(gHandle_Buffer[gHandle_Buffer_Point-1]!=0x0d) return(0); //收到的包尾不正确
return(gHandle_Buffer[2]);
}
/********************************************************\
* 函数名:Handle_Dailing
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Handle_Dailing(unsigned char nPoint_Temp)
{
unsigned int i=0;
unsigned char nTemp=0;
unsigned char nFlag=0;
nTemp=nPoint_Temp;
//1,如果主控状态处于电话禁止呼出状态
if( (gON_OFF_Temp0&PHONE_OUT_ON)==0 )
{
//如果存在中心服务电话,则允许此号码拨出
for(i=0;i<nTemp-4;i++)
{
gGeneral_Buffer[i]=gHandle_Buffer[3+i];
}
i=1;
i=Check_Allow_Phone(nTemp-4);
//判断书否属于112,110,119,13800138000,1860,1861,1001,等一类的服务号码
if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE1,nTemp-4)) i=0;
else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE2,nTemp-4)) i=0;
else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE3,nTemp-4)) i=0;
else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE4,nTemp-4)) i=0;
else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE5,nTemp-4)) i=0;
else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE6,nTemp-4)) i=0;
else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE7,nTemp-4)) i=0;
//拨出号码与比较号码均不匹配,则不允许拨出此号码
if(i==1)
{
nFlag=1;
}
else if( (gGeneral_Flag&MONITOR_ON_F_1)||(gPhone_Status==ACTIVE_MONITOR) )
{
nFlag=2;
}
else if( (gGeneral_Flag&DAILING_UP_F_1)||(gPhone_Status==ACTIVE_HANDLE)||(gGeneral_Flag&RING_F_1) )
{
nFlag=3;
}
else
{
nFlag=0;
}
}
//如果这个时候处于监听状态,或者处于正在监听的拨号状态下,则返回手柄一个busy信令
else if( (gGeneral_Flag&MONITOR_ON_F_1)||(gPhone_Status==ACTIVE_MONITOR) )
{
nFlag=2;
}
//如果这个时候处于手柄拨号,或者正在通话的状态,或者正在来电的状态下,则返回一个busy信令
else if( (gGeneral_Flag&DAILING_UP_F_1)||(gPhone_Status==ACTIVE_HANDLE)||(gGeneral_Flag&RING_F_1) )
{
nFlag=3;
}
//返回一个电话禁止呼出
if(nFlag==1)
{
Send_COM3_Load(4,MAIN_RETURN_NO_CALLOUT,0);
}
//返回给手柄一个Busy信令
else if(nFlag==2)
{
Send_COM3_Load(4,MAIN_BUSY,0);
}
//返回挂机命令
else if(nFlag==3)
{
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);
//Send_COM3_Load(5,MAIN_RETURN_PHONE_ECHO,COMMAND_ERROR);
}
//返回一个正常的拨出号码
else
{
Send_COM3_Load(5,MAIN_RETURN_PHONE_ECHO,COMMAND_OK);
SRAM_Init();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -