📄 check_gsm.c
字号:
//1,IP地址有效果,并且2,TCP的开关量是否开启
if( (gGeneral_Flag&TCP_IP_VALID_1)&&((gON_OFF_Temp0&TCP_LAND_ON_OFF_1)==0) )
{
if( (gCycle_TCP>0)&&(gCycle_Send_Status!=ALARM_DATA)&&(gCycle_Send_Status!=PASS_DATA) )
{
gCycle_Send_Status=TRACK_DATA_TIME;
}
else if( (gCycle_TCP==0)&&(gCycle_Send_Status==TRACK_DATA_TIME))
{
gCycle_Send_Status=NOP_DATA;
}
}
//1,IP地址无效,或者TCP的开关量关闭
else
{
if( (gCycle_GSM>0)&&(gCycle_Send_Status!=ALARM_DATA)&&(gCycle_Send_Status!=PASS_DATA) )
{
gCycle_Send_Status=TRACK_DATA_TIME;
}
else if( (gCycle_GSM==0)&&(gCycle_Send_Status==TRACK_DATA_TIME))
{
gCycle_Send_Status=NOP_DATA;
}
}
}
/********************************************************\
* 函数名:Pass_Data_Echo()
作用域:本地文件调用
* 功能: 接收到下行的查询历史轨迹的命令
将需要查询的历史轨迹的起始时间附给变量Check_Track_Time_Start
将需要查询的历史轨迹的结束时间附给变量Check_Track_Time_end
然后设置有需要进行历史轨迹操作的标志位 gInternal_Flag|=PASS_DATA_F_1
* 参数: 无
* 返回值:无
* 创建人:
*
* 修改历史:(每条详述)
补充说明:这个时候需要处理的gGeneral_Buffer[]缓冲中的数据
SMS_ACK[TRACK_ASKECHO_ACK]=gGeneral_Buffer[5] 存储ACK
\********************************************************/
void Pass_Data_Echo(void)
{
unsigned int i=0;
//存储发送历史轨迹的开始的ACK
gSMS_ACK[TRACK_ASKECHO_ACK]=gGeneral_Buffer[5];
//存储计算历史轨迹的开始时间
gCheck_Track_Time_Start=0;
gCheck_Track_Time_Start= ( (gGeneral_Buffer[10]%100)/10*16+ (gGeneral_Buffer[10]%10) );
gCheck_Track_Time_Start <<= 8;
gCheck_Track_Time_Start += ( (gGeneral_Buffer[11]%100)/10*16+ (gGeneral_Buffer[11]%10) );
gCheck_Track_Time_Start <<= 8;
gCheck_Track_Time_Start += ( (gGeneral_Buffer[12]%100)/10*16+ (gGeneral_Buffer[12]%10) );
gCheck_Track_Time_Start <<= 8;
gCheck_Track_Time_Start += ( (gGeneral_Buffer[13]%100)/10*16+ (gGeneral_Buffer[13]%10) );
//存储计算历史轨迹的结束时间
gCheck_Track_Time_end=0;
gCheck_Track_Time_end= ( (gGeneral_Buffer[15]%100)/10*16+ (gGeneral_Buffer[15]%10) );
gCheck_Track_Time_end <<= 8;
gCheck_Track_Time_end += ( (gGeneral_Buffer[16]%100)/10*16+ (gGeneral_Buffer[16]%10) );
gCheck_Track_Time_end <<= 8;
gCheck_Track_Time_end += ( (gGeneral_Buffer[17]%100)/10*16+ (gGeneral_Buffer[17]%10) );
gCheck_Track_Time_end <<= 8;
gCheck_Track_Time_end+= ( (gGeneral_Buffer[18]%100)/10*16+ (gGeneral_Buffer[18]%10) );;
//如果接收到的历史轨迹开始查询时间和结束时间相同,则表示接收到的是结束历史轨迹查询的命令
if(gCheck_Track_Time_Start==gCheck_Track_Time_end)
{
gCycle_Send_Status=NOP_DATA;
gCircle_Buffer_Point=0;
for(i=0;i<sizeof(gCircle_Buffer);i++) gCircle_Buffer[i]=0;
gOther_Flag&=~FIND_PASSPAGE_F_1;gOther_Flag&=~FIRST_PASSPAGE_F_1;gOther_Flag&=~SEND_PASSPAGE_F_1;
gOther_Flag&=~PASS_DATA_LASE_F_1;
gOther_Flag&=~SEND_PASSPAGE_F_1;
//设置发送历史轨迹结束的标志
Load_Buffer1_Echo(TRACK_ENDECHO_UP,gGeneral_Buffer[5]);
Send_COM1_String( (unsigned char *)PASS_END,sizeof(PASS_END) );
return;
}
if (gCycle_Send_Status!=ALARM_DATA )
{
gCycle_Send_Status=PASS_DATA;gOther_Flag|=FIND_PASSPAGE_F_1;
gOther_Flag&=~FIRST_PASSPAGE_F_1;gOther_Flag&=~SEND_PASSPAGE_F_1;
if(gPassTrack_Store_Sector==FLASH_PASTDATA_E_2-1)
{
gPassPage_First=FLASH_PASTDATA_S_2;
gPassPage_End=FLASH_PASTDATA_E_2-1;
}
else if(gPassTrack_Store_Sector>=FLASH_PASTDATA_E_2)
{
gPassPage_First=FLASH_PASTDATA_S_2+1;
gPassPage_End=FLASH_PASTDATA_E_2;
}
else
{
gPassPage_First=gPassTrack_Store_Sector+2;
gPassPage_End=FLASH_PASTDATA_E_2;
}
}
#ifdef Debug_GSM_COM1
Send_COM1_String( (unsigned char *)TIME_START,sizeof(TIME_START) );
Send_COM1_Byte('[');
Send_COM1_Byte(ASCII(gCheck_Track_Time_Start/0x10000000));
Send_COM1_Byte(ASCII((gCheck_Track_Time_Start%0x10000000)/0x1000000));
Send_COM1_Byte(ASCII((gCheck_Track_Time_Start%0x1000000)/0x100000));
Send_COM1_Byte(ASCII((gCheck_Track_Time_Start%0x100000)/0x10000));
Send_COM1_Byte(ASCII((gCheck_Track_Time_Start%0x10000)/0x1000));
Send_COM1_Byte(ASCII((gCheck_Track_Time_Start%0x1000)/0x100));
Send_COM1_Byte(ASCII((gCheck_Track_Time_Start%0x100)/0x10));
Send_COM1_Byte(ASCII(gCheck_Track_Time_Start%0x10));
Send_COM1_Byte(']');
Send_COM1_String( (unsigned char *)TIME_END,sizeof(TIME_END) );
Send_COM1_Byte('[');
Send_COM1_Byte(ASCII(gCheck_Track_Time_end/0x10000000));
Send_COM1_Byte(ASCII((gCheck_Track_Time_end%0x10000000)/0x1000000));
Send_COM1_Byte(ASCII((gCheck_Track_Time_end%0x1000000)/0x100000));
Send_COM1_Byte(ASCII((gCheck_Track_Time_end%0x100000)/0x10000));
Send_COM1_Byte(ASCII((gCheck_Track_Time_end%0x10000)/0x1000));
Send_COM1_Byte(ASCII((gCheck_Track_Time_end%0x1000)/0x100));
Send_COM1_Byte(ASCII((gCheck_Track_Time_end%0x100)/0x10));
Send_COM1_Byte(ASCII(gCheck_Track_Time_end%0x10));
Send_COM1_Byte(']');
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
Send_COM1_String( (unsigned char *)PAGE_S,sizeof(PAGE_S) );
Send_COM1_Byte('[');
Send_COM1_Byte(ASCII(gPassPage_First/1000));
Send_COM1_Byte(ASCII((gPassPage_First%1000)/100));
Send_COM1_Byte(ASCII(((gPassPage_First%1000)%100)/10));
Send_COM1_Byte(ASCII(gPassPage_First%10));
Send_COM1_Byte(']');
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
Send_COM1_String( (unsigned char *)PAGE_E,sizeof(PAGE_E) );
Send_COM1_Byte('[');
Send_COM1_Byte(ASCII(gPassPage_End/1000));
Send_COM1_Byte(ASCII((gPassPage_End%1000)/100));
Send_COM1_Byte(ASCII(((gPassPage_End%1000)%100)/10));
Send_COM1_Byte(ASCII(gPassPage_End%10));
Send_COM1_Byte(']');
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
#endif
Judge_SMS_Way();
}
/********************************************************\
* 函数名:Disp_Dispaly_Info();
作用域:本地文件调用
* 功能:
* 参数: 无
* 返回值:无
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Disp_Dispaly_Info(void)
{
unsigned int i=0;
if(gDisp_Buffer_Point+gGeneral_Buffer[0]+2+6<=sizeof(gDisp_Buffer))
{
gDisp_Buffer[gDisp_Buffer_Point]=gGeneral_Buffer[0]+2+6;
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]=gGeneral_Buffer[0]+2+4;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_WORD_DOWN;
gDisp_Buffer_Point++;
//从0xFF开始存储数据(转移整个中心的数据包)
Copy_String(gGeneral_Buffer+1,gDisp_Buffer+gDisp_Buffer_Point,gGeneral_Buffer[0]);
gDisp_Buffer_Point=gDisp_Buffer_Point+gGeneral_Buffer[0];
gDisp_Buffer[gDisp_Buffer_Point]='$';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='&';
gDisp_Buffer_Point++;
}
//下面是显示调试信息
/*
#ifdef Debug_GSM_COM1
Send_COM1_Byte(ASCII(gDisp_Buffer[0]/16));
Send_COM1_Byte(ASCII(gDisp_Buffer[0]%16));
Send_COM1_Byte('=');
Send_COM1_Byte(ASCII(gDisp_Buffer_Point/16));
Send_COM1_Byte(ASCII(gDisp_Buffer_Point%16));
Send_COM1_Byte('{');
for(i=0;i<gDisp_Buffer[0];i++)
{
Send_COM1_Byte(ASCII(gDisp_Buffer[i]/16));
Send_COM1_Byte(ASCII(gDisp_Buffer[i]%16));
}
Send_COM1_Byte('}');
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
#endif
*/
}
/********************************************************\
* 函数名:Set_TCP_OnOrOff();
作用域:本地文件调用
* 功能:
* 参数: 无
* 返回值:无
* 创建人:
*
* 修改历史:(每条详述)
补充说明:接收到下行的是设置进入/退出联网状态的命令,
需要进行如下几个操作,存储需要响应的ACK
1,改变进入TCP的开关量,并存储扇区0
2,写入B类数据区此命令的回应上行命令
\********************************************************/
void Set_TCP_OnOrOff(void)
{
unsigned int i=0,j=0;
SRAM_Init();
SRAM_Write(ECHO_SMS_2+0,VAILD_2);
SRAM_Write(ECHO_SMS_2+1,SET_TCP_ONOROFF_ECHO_UP);
SRAM_Write(ECHO_SMS_2+2,gGeneral_Buffer[5]);
SRAM_Write(ECHO_SMS_2+3,1);
SRAM_Write(ECHO_SMS_2+4,gGeneral_Buffer[10]);
Judge_SMS_Way();
}
/********************************************************\
* 函数名:Query_SYS_Ver();
作用域:本地文件调用
* 功能:
* 参数: 无
* 返回值:无
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Query_SYS_Ver(void)
{
unsigned int i=0;
SRAM_Init();
SRAM_Write(ECHO_SMS_2+0,VAILD_2);
SRAM_Write(ECHO_SMS_2+1,QUERY_VERSION_ECHO_UP);
SRAM_Write(ECHO_SMS_2+2,gGeneral_Buffer[5]);
SRAM_Write(ECHO_SMS_2+3,14);
SRAM_Write(ECHO_SMS_2+4,SYS_EDITION[0]);
SRAM_Write(ECHO_SMS_2+5,SYS_EDITION[1]);
for(i=0;i<6;i++)
{
SRAM_Write(ECHO_SMS_2+6+i,SYS_TIME[i]);
}
for(i=0;i<6;i++)
{
SRAM_Write(ECHO_SMS_2+12+i,SYS_UPDATATIME[i]);
}
Judge_SMS_Way();
}
/********************************************************\
* 函数名:Deal_Alarm_Echo();
作用域:本地文件调用
* 功能:
* 参数: 无
* 返回值:无
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Deal_Alarm_Echo(void)
{
unsigned int i=0,j=0;
gSMS_ACK[ALARM_ACK]=gGeneral_Buffer[5];
gCycle_Alarm = gGeneral_Buffer[10];
gCycle_Alarm <<= 8;
gCycle_Alarm += gGeneral_Buffer[11];
if( gCycle_Alarm == 0)
{
gAlarm_Type=NOP_ALARM;
gCycle_Send_Status=NOP_DATA;
gAlarm_Count=0;
gStatus2_Flag&=~ROB_ALARM_F_1;
Load_Buffer1_Echo(ALARM_END_UP,gGeneral_Buffer[5]);
}
else if( gCycle_Alarm <= 5 ) gCycle_Alarm=5;
}
/********************************************************\
* 函数名:Deal_Vehicle_Monitor();
作用域:本地文件调用
* 功能:
* 参数: 无
* 返回值:无
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Deal_Vehicle_Monitor(void)
{
unsigned int i=0,j=0;
i=10;j=0;
while(gGeneral_Buffer[i]!=0x00)
{
i++;j++;if(j>16) {j=0;break;}
}
//接收到下行的监听信令。
if(j>4)
{
SRAM_Init();
SRAM_Write(PHONE_AT_2+0,VAILD_2);
SRAM_Write(PHONE_AT_2+1,M_DIAL);
SRAM_Write(PHONE_AT_2+2,j);
for(i=0;i<j;i++)
{
SRAM_Write(PHONE_AT_2+3+i,gGeneral_Buffer[i+10]);
}
}
}
/********************************************************\
* 函数名:Defence_Password_Ask_Echo();
作用域:本地文件调用
* 功能:
* 参数: 无
* 返回值:无
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Defence_Password_Ask_Echo(void)
{
unsigned int i=0;
unsigned char OldPassWord_Length=0;
//读取FLASH相应存储密码区域的密码信息,将密码暂时存储在gGeneral_Buffer[]中
OperateSPIEnd();
ReadOnePageToBuffer2(FLASH_INFO1_ONE_2);
OperateSPIEnd();
gGeneral_Buffer[0]=ReadByteFromBuffer2(PASSWORD1_F_2);
for(i=1;i<6;i++)
{
gGeneral_Buffer[i]=ReadNextFromBuffer2();
}
OperateSPIEnd();
//调试显示出读出的密码是否正确
#ifdef Debug_GSM_COM1
Send_COM1_Byte('P');Send_COM1_Byte('[');
for(i=0;i<6;i++) Send_COM1_Byte(gGeneral_Buffer[i]);
Send_COM1_Byte(']');Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
#endif
//读出的密码存储在gGeneral_Buffer[0]---gGeneral_Buffer[5]
for(i=0;i<6;i++)
{
if( (gGeneral_Buffer[i]<'0')||(gGeneral_Buffer[i]>'9') ) break;
}
//知道密码的长度
OldPassWord_Length=i;
//调试显示密码的数据
#ifdef Debug_GSM_COM1
Send_COM1_Byte(ASCII(OldPassWord_Length/10));
Send_COM1_Byte(ASCII(OldPassWord_Length%10));
Send_COM1_Byte('[');
for(i=0;i<OldPassWord_Length;i++) Send_COM1_Byte(gGeneral_Buffer[i]);
Send_COM1_Byte(']');Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
#endif
SRAM_Init();
SRAM_Write(OTHER_SMS_2+0,VAILD_2);
SRAM_Write(OTHER_SMS_2+1,PASSWORD_ASKECHO_UP);
SRAM_Write(OTHER_SMS_2+2,gGeneral_Buffer[5]);
SRAM_Write(OTHER_SMS_2+3,OldPassWord_Length+1);
for(i=0;i<OldPassWord_Length;i++)
{
SRAM_Write(OTHER_SMS_2+4+i,gGeneral_Buffer[i]);
}
SRAM_Write(OTHER_SMS_2+4+OldPassWord_Length,0x00);
Judge_SMS_Way();
}
/********************************************************\
* 函数名:Set_Phone_Limit();
作用域:本地文件调用
* 功能:
* 参数: 无
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -