📄 do_m22.c
字号:
gLand_GPRS_Step=0;
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;
}
//如果其他
else
{
gGSM_Oper_Type=GSM_PHONE;gPhone_Step=0;
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;
gLand_GPRS_Step=0;
}
}
else
{
gGSM_Oper_Type=GSM_PHONE;gPhone_Step=0;
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;
gLand_GPRS_Step=0;
}
gTimer_GSM_AT=0;
OperateSPIEnd();
}
}
else if(gLand_GPRS_Step==2)
{
if( Check_GSM()!=0 )
{
gLand_GPRS_Step=3;
}
else
{
if(gTimer_GSM_AT>10000) Case_OverTime_Return();
}
}
else if(gLand_GPRS_Step==3)
{
if( gTimer_GSM_AT>500 )
{
Send_COM0_String((unsigned char *)AT_CGDCONT,sizeof(AT_CGDCONT));
j=SRAM_Read(GPRS_APN_ADDRESS2_2);
for(i=0;i<j;i++)
{
Send_COM0_Byte(SRAM_Read(GPRS_APN_ADDRESS2_2+1+i));
}
Send_COM0_Byte(0x0d);
gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
gTimer_GSM_AT=0;
gLand_GPRS_Step=4;
}
else Check_GSM();
}
//A-1
else if(gLand_GPRS_Step==4)
{
if( Check_GSM()!=0 )
{
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;gTimer_GSM_AT=0;
if(Compare_String(gGeneral_Buffer,(unsigned char *)String_OK,sizeof(String_OK)))
{
gLand_GPRS_Step=5;
}
}
else
{
if(gTimer_GSM_AT>10000)
{
TCP_Land_Error_Return();
}
}
}
//A-2
else if(gLand_GPRS_Step==5)
{
if( gTimer_GSM_AT>500 )
{
Send_COM0_String((unsigned char *)AT_CGPCO,sizeof(AT_CGPCO));
gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
gTimer_GSM_AT=0;
gLand_GPRS_Step=6;
}
else Check_GSM();
}
//A-3
else if(gLand_GPRS_Step==6)
{
if( Check_GSM()!=0 )
{
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;gTimer_GSM_AT=0;
if(Compare_String(gGeneral_Buffer,(unsigned char *)String_OK,sizeof(String_OK)))
{
gLand_GPRS_Step=7;
}
}
else
{
if(gTimer_GSM_AT>10000)
{
//表示登陆TCP失败的处理
TCP_Land_Error_Return();
}
}
}
//A-4
else if(gLand_GPRS_Step==7)
{
if( gTimer_GSM_AT>500 )
{
Send_COM0_String((unsigned char *)AT_DESTINFO,sizeof(AT_DESTINFO));
//1,从buffer1中取出IP地址
Send_COM0_Byte('"');
j=SRAM_Read(GPRS_IP_ADDRESS1_2);
for(i=0;i<j;i++)
{
Send_COM0_Byte(SRAM_Read(GPRS_IP_ADDRESS1_2+1+i));
}
Send_COM0_Byte('"');
Send_COM0_Byte(',');
Send_COM0_Byte('1');
Send_COM0_Byte(',');
//2,从buffer中取出端口号,在buffer1中端口号是以5位ASCII形式存储的,如果实际有效数据不够5位,则以前面填0
//例如:端口号为9988,在buffer1中相应的区域存储为30 39 39 38 38
gGeneral_Buffer[0]=SRAM_Read(GPRS_SOCKET1_2);
gGeneral_Buffer[1]=SRAM_Read(GPRS_SOCKET1_2+1);
gGeneral_Buffer[2]=SRAM_Read(GPRS_SOCKET1_2+2);
gGeneral_Buffer[3]=SRAM_Read(GPRS_SOCKET1_2+3);
gGeneral_Buffer[4]=SRAM_Read(GPRS_SOCKET1_2+4);
OperateSPIEnd();
i=0;
while(1)
{
//从最高位开始判断,如果不为0,则后面的均为有效数据
if(gGeneral_Buffer[i]!=0x30) break;
i++;
if(i==5) break;
}
if(i<5)
{
for(j=i;j<5;j++)
{
Send_COM0_Byte(gGeneral_Buffer[j]);
}
}
else
{
gLand_GPRS_Step=0;
return;
}
Send_COM0_Byte(0x0d);
gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
gLand_GPRS_Step=8;
gTimer_GSM_AT=0;
}
else Check_GSM();
}
//A-5
else if(gLand_GPRS_Step==8)
{
if( Check_GSM()!=0 )
{
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;gTimer_GSM_AT=0;
if(Compare_String(gGeneral_Buffer,(unsigned char *)String_DESTINFO,sizeof(String_DESTINFO)))
{
gLand_GPRS_Step=9;
}
else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_ER,sizeof(String_ER)))
{
TCP_Land_Error_Return();
}
}
else
{
if(gTimer_GSM_AT>10000)
{
//表示登陆TCP失败的处理
TCP_Land_Error_Return();
}
}
}
//A-6
else if(gLand_GPRS_Step==9)
{
if(gTimer_GSM_AT>1500)
{
Send_COM0_String((unsigned char *)ATD_97,sizeof(ATD_97));
gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
gLand_GPRS_Step=10;
gTimer_GSM_AT=0;
}
else Check_GSM();
}
//A-7
else if(gLand_GPRS_Step==10)
{
if( Check_GSM()!=0 )
{
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;gTimer_GSM_AT=0;
if(Compare_String(gGeneral_Buffer,(unsigned char *)String_L_TCP,sizeof(String_L_TCP)))
{
gLand_GPRS_Step=11;
}
//返回ERROR,说明SIM卡不支持TCP的工作方式或者说任何场强信号很弱的时候
else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_ER,sizeof(String_ER)))
{
TCP_Land_Error_Return();
}
}
else
{
if(gTimer_GSM_AT>65000)
{
TCP_Land_Error_Return();
}
}
}
//A-8
else if(gLand_GPRS_Step==11)
{
if( Check_GSM()!=0 )
{
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;gTimer_GSM_AT=0;
if(Compare_String(gGeneral_Buffer,(unsigned char *)String_OK,sizeof(String_OK)))
{
//说明登陆成功,此时不能进行AT指令的任何操作,直接进入CASE6中
gGeneral_Flag&=~LAND_TCP_F_1;
gLand_TCP_ERROR_Count=0;
gGSM_Oper_Type=GPRS_DATA_OPER;
gM22_Status=TCP_ONLINE_WORK;
gLand_GPRS_Step=0;
gTimer_CSQ=0;
for(i=0;i<sizeof(gReceive0_GSM_Buffer);i++) gReceive0_GSM_Buffer[i]=0;
gReceive0_GSM_Buffer_End=sizeof(gReceive0_GSM_Buffer)-1;
gReceive0_GSM_Buffer_Point=0;
gReceive0_GSM_Buffer_Move=0;
gGSM_Work_Count=0;gCheck_Data=0;
gInternal_Flag&=~ALLOW_DATA_F_1;
//发送登陆TCP的数据
gOther_Flag|=ALLOW_SENDLAND_F_1;
gGeneral_Flag&=~LAND_TCP_SUCCESS_F_1;
}
else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_ER,sizeof(String_ER)))
{
gLand_GPRS_Step=111;
}
}
else
{
if(gTimer_GSM_AT>65000)
{
TCP_Land_Error_Return();
}
}
}
else if(gLand_GPRS_Step==111)
{
if( Check_GSM()!=0 )
{
TCP_Land_Error_Return();
}
else
{
if(gTimer_GSM_AT>40000)
{
TCP_Land_Error_Return();
}
}
}
//B-1
else if(gLand_GPRS_Step==12)
{
if( Check_GSM()!=0 )
{
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;gTimer_GSM_AT=0;
if(Compare_String(gGeneral_Buffer,(unsigned char *)String_OK,sizeof(String_OK)))
{
gLand_GPRS_Step=13;
gOther_Flag&=~QUIT_TCP_F_1;
}
}
else
{
if(gTimer_GSM_AT>20000)
{
Case_OverTime_Return();
}
}
}
//B-2
else if(gLand_GPRS_Step==13)
{
if( Check_GSM()!=0 )
{
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;gTimer_GSM_AT=0;
if(Compare_String(gGeneral_Buffer,(unsigned char *)String_NOCARRIER,sizeof(String_NOCARRIER)))
{
gM22_Status=GSM_WORK;
gGeneral_Flag&=~LAND_TCP_SUCCESS_F_1;
gGSM_Oper_Type=GSM_PHONE;
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;
gPhone_Step=0;gTimer_GSM_AT=0;
gOther_Flag&=~QUIT_TCP_F_1;
}
}
else
{
if(gTimer_GSM_AT>20000)
{
Case_OverTime_Return();
}
}
}
//C-1
else if(gLand_GPRS_Step==14)
{
if( Check_GSM()!=0 )
{
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;gTimer_GSM_AT=0;
if(Compare_String(gGeneral_Buffer,(unsigned char *)String_CONNECT,sizeof(String_CONNECT)))
{
//进入TCP在线状态
gM22_Status=TCP_ONLINE_WORK;
gLand_GPRS_Step=0;
gGeneral_Flag&=~TCP_STATUS_F_1;
gReceive0_GSM_Buffer_Move=gReceive0_GSM_Buffer_Point;
if(gReceive0_GSM_Buffer_Point==0) gReceive0_GSM_Buffer_End=sizeof(gReceive0_GSM_Buffer)-1;
else gReceive0_GSM_Buffer_End=gReceive0_GSM_Buffer_Point-1;
gGSM_Oper_Type=GPRS_DATA_OPER;
gGPRS_Data_Step=0;
gTimer_CSQ=0;
//登陆成功,如果有报警,
if(gCycle_Send_Status==ALARM_DATA)
{
gCycle_Alarm=ALARM_CIRCLE_TIME;
gAlarm_Count=0;
}
}
else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_ER,sizeof(String_ER)))
{
//进入GSM的工作方式下
gReset_M22_On_Setp=0;
gGeneral_Flag&=~RESET_GSM_ON_F_1;
gM22_Status=GSM_WORK;
gGeneral_Flag&=~LAND_TCP_SUCCESS_F_1;
gGSM_Oper_Type=GSM_PHONE;
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;
gPhone_Step=0;gTimer_GSM_AT=0;
}
}
else
{
if(gTimer_GSM_AT>65000) Case_OverTime_Return();
}
}
}
/********************************************************\
* 函数名:TCP_Land_Error_Return
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
现在如果TCP登陆失败,则重新初始化M22模块,不采用掉电的方式,,如果连续登陆失败5次,则需要进行
模块掉电处理。
\********************************************************/
void TCP_Land_Error_Return(void)
{
Send_COM1_String((unsigned char *)TCP_LAND_ERROR,sizeof(TCP_LAND_ERROR));
gGeneral_Flag|=RESET_GSM_ON_F_1;
gReset_M22_On_Setp=1;
gM22_Status=GSM_WORK;
gM22_GSM_ECHO_Timer=0;
gLand_Interval_Timer=0;
gTCP_FF0D_Send_Timer=0;
gGPS_No_Output_Timer=0;
gTimer_GSM_AT=0;
gTimer_CSQ=0;
gGPS_Receive_Over=0;
gPhone_Status=READY;
gStatus1_Flag&=~PHONE_ONLINE_F_1;
gGeneral_Flag&=~DAILING_UP_F_1;
gGeneral_Flag&=~MONITOR_ON_F_1;
gGeneral_Flag&=~TCP_PHONE_F_1;
gGeneral_Flag&=~RING_F_1;
gGSM_Oper_Type=0;
gSMS_IN_Step=0;
gSMS_OUT_Step=0;
gLand_GPRS_Step=0;
gGPRS_Data_Step=0;
gGSM_OTHER_Step=0;
gGeneral_Flag|=LAND_TCP_ERROR_F_1;
gLand_TCP_ERROR_Count++;
if(gLand_TCP_ERROR_Count>5)
{
gLand_TCP_ERROR_Count=0;
gGeneral_Flag|=OFF_M22_F_1;
gOFF_Power_S=1;
gPhone_Status=READY;
gStatus1_Flag&=~PHONE_ONLINE_F_1;
}
//如果属于周期数据的发送
if(gInternal_Flag&SEND_CIRCLE_F_1)
{
//1,按时间间隔上报数据,且间隔大于分界值
if( (gCycle_Send_Status==TRACK_DATA_TIME)&&(gCycle_TCP>TCP_TRACK_MINTIME) )
{
gInternal_Flag|=ALLOW_DATA_F_1;
}
else
{
gInternal_Flag&=~ALLOW_DATA_F_1;
gInternal_Flag&=~SEND_CIRCLE_F_1;
}
}
//如果属于外部行使记录仪数据的发送,
else if(gOther_Flag&RECORD_DATA_F_1)
{
gOther_Flag&=~RECORD_DATA_F_1;
gOther_Flag&=~ALLOW_SEND_RECORD_F_1;
SRAM_Init();
SRAM_Write(SRAM_SEND_VAILD,NULL_2);
SRAM_Write(SRAM_SEND_LENGTH_H,0);
SRAM_Write(SRAM_SEND_LENGTH_L,0);
gInternal_Flag&=~ALLOW_DATA_F_1;
}
else
{
gInternal_Flag|=ALLOW_DATA_F_1;
}
}
/********************************************************\
* 函数名:Case6_GPRS_DATA_OPER
作用域:本地文件调用
* 功能: 进行与GPRS相关的数据操作,以发送为主,接收数据则在Check_GSM()中直接处理
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
2004年12月15日
补充说明:
1,如果在这个CASE外判断有数据要发送,同时TCP处于被挂起状态,则首先执行ATO指令后,然后进入这个
CASE中进行通过TCP方式发送数据:一旦数据发送完成,则执行+++,将TCP的状态挂起,但如果发送的数据
属于握手信号FF 0D,则需要发送完数据后,执行一个等待的时
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -