📄 do_m22.c
字号:
if( (gTimer_CSQ>5)
&&((gPhone_Status==ACTIVE_HANDLE)||(gPhone_Status==ACTIVE_MONITOR)) )
{
if( gTimer_GSM_AT>200 )
{
Send_COM0_String((unsigned char *)AT_CLCC,sizeof(AT_CLCC));
gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
gTimer_GSM_AT=0;
gTimer_CSQ=0;
gGSM_OTHER_Step=5;
}
else Check_GSM();
}
/********************************************************\
A,1,无电话业务,2,处于GSM工作方式下。3。GSM信号查询时间到
\********************************************************/
else if((gPhone_Status==READY)&&(gM22_Status==GSM_WORK)&&(gTimer_CSQ>GSM_CHECKCSQ_TIME) )
{
if( gTimer_GSM_AT>200 )
{
Send_COM0_String((unsigned char *)AT_CSQ,sizeof(AT_CSQ));
gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
gTimer_GSM_AT=0;
gTimer_CSQ=0;
gGSM_OTHER_Step=2;
}
else Check_GSM();
}
/********************************************************\
B,1,无电话业务,2,处于TCP挂起的工作方式下。4,GSM信号查询时间到
\********************************************************/
else if((gPhone_Status==READY)&&(gM22_Status==TCP_HANG_WORK)&&(gTimer_CSQ>TCP_CHECKCSQ_TIME))
{
if( gTimer_GSM_AT>200 )
{
Send_COM0_String((unsigned char *)AT_CSQ,sizeof(AT_CSQ));
gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
gTimer_GSM_AT=0;
gTimer_CSQ=0;
gGSM_OTHER_Step=2;
}
else Check_GSM();
}
else Case2_OTHER_Out();
}
/********************************************************\
AB-1:查询信号的模块返回
\********************************************************/
else if(gGSM_OTHER_Step==2)
{
if(Check_GSM()!=0)
{
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;
if(Compare_String(gGeneral_Buffer,(unsigned char *)String_CSQ,sizeof(String_CSQ)))
{
if(gGeneral_Buffer[9]==',')
{
gSignal=(gGeneral_Buffer[7]-0x30)*10+(gGeneral_Buffer[8]-0x30);
}
else if(gGeneral_Buffer[7]==',')
{
gSignal=gGeneral_Buffer[6]-0x30;
}
else if(gGeneral_Buffer[8]==',')
{
gSignal=(gGeneral_Buffer[6]-0x30)*10+(gGeneral_Buffer[7]-0x30);
}
if(gSignal>31)
{
gSignal=0;
CSQ_Single_Error++;
if(CSQ_Single_Error>20)
{
CSQ_Single_Error=0;
gGeneral_Flag|=OFF_M22_F_1;
gOFF_Power_S=1;
gPhone_Status=READY;
gM22_ReturnER_SIM_Count=0;
gStatus1_Flag&=~PHONE_ONLINE_F_1;
return;
}
}
else
{
CSQ_Single_Error=0;
}
gGSM_OTHER_Step=3;
gTimer_GSM_AT=0;
gTimer_CSQ=0;
}
else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_ER,sizeof(String_ER)))
{
gGSM_OTHER_Step=3;
gTimer_GSM_AT=0;
gTimer_CSQ=0;
}
else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_OK,sizeof(String_OK)))
{
gGSM_OTHER_Step=3;
gTimer_GSM_AT=0;
gTimer_CSQ=0;
}
}
else
{
if(gTimer_GSM_AT>10000)
{
Case_OverTime_Return();
}
}
}
//查询SIM卡的状态是否正常
else if(gGSM_OTHER_Step==3)
{
if(gTimer_GSM_AT>200)
{
Send_COM0_String((unsigned char *)AT_CSCA_C,sizeof(AT_CSCA_C));
gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
gTimer_GSM_AT=0;
gGSM_OTHER_Step=4;
}
else Check_GSM();
}
else if(gGSM_OTHER_Step==4)
{
if(Check_GSM()!=0)
{
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;gTimer_GSM_AT=0;gTimer_CSQ=0;
if(Compare_String(gGeneral_Buffer,(unsigned char *)String_CSCA,sizeof(String_CSCA))!=0)
{
if( ((gInternal_Flag&CENTER_NUM_VAILD_F_1)==0)
&&(gInternal_Flag&SET_CSCA_F_1) )
{
if(gGeneral_Buffer[7]=='"')
{
i=8;
while(1)
{
if(gGeneral_Buffer[i]=='"') break;
i++;if(i>8+18) {gReset_M22_On_Setp=1;return;} //非法长度,则退出
}
if(i>8+1)
{
Load_SMS_CenterNum(i);
Send_COM1_String( (unsigned char *)CENTER_RELOAD,sizeof(CENTER_RELOAD) );
gInternal_Flag|=CENTER_NUM_VAILD_F_1;
gInternal_Flag&=~SET_CSCA_F_1;
}
else
{
gInternal_Flag&=~CENTER_NUM_VAILD_F_1;
gInternal_Flag|=SET_CSCA_F_1;
}
}
}
//表示已经找到SIM卡的网络
gM22_ReturnER_SIM_Count=0;
if(gM22_Status==TCP_HANG_WORK)
{
//进入TCP的在线状态
gGSM_OTHER_Step=0;
gGSM_Oper_Type=LAND_TCP_OPER;
gLand_GPRS_Step=0;
gGeneral_Flag|=TCP_STATUS_F_1;
}
else
{
Case2_OTHER_Out();
}
SRAM_Init();
SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
SRAM_Write(SHANDLE_DATA_VAILD+2,0x06);
SRAM_Write(SHANDLE_DATA_VAILD+3,MAIN_SEND_STATUS);
SRAM_Write(SHANDLE_DATA_VAILD+4,gStatus1_Flag);
SRAM_Write(SHANDLE_DATA_VAILD+5,gStatus2_Flag);
SRAM_Write(SHANDLE_DATA_VAILD+6,0x0d);
}
else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_ER,sizeof(String_ER))!=0)
{
//表示还没有找到SIM卡的网络
gM22_ReturnER_SIM_Count++;
if(gM22_ReturnER_SIM_Count>20)
{
gGeneral_Flag|=OFF_M22_F_1;
gOFF_Power_S=1;
gPhone_Status=READY;
gM22_ReturnER_SIM_Count=0;
gStatus1_Flag&=~PHONE_ONLINE_F_1;
return;
}
else
{
if(gM22_Status==TCP_HANG_WORK)
{
//进入TCP的在线状态
gGSM_OTHER_Step=0;
gGSM_Oper_Type=LAND_TCP_OPER;
gLand_GPRS_Step=0;
gGeneral_Flag|=TCP_STATUS_F_1;
}
else
{
Case2_OTHER_Out();
}
gTimer_CSQ=0;
}
}
}
else
{
if(gTimer_GSM_AT>10000)
{
Case_OverTime_Return();
}
}
}
/********************************************************\
CLCC查询返回
\********************************************************/
else if(gGSM_OTHER_Step==5)
{
if(Check_GSM()!=0)
{
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;gTimer_GSM_AT=0;gTimer_CSQ=0;
if(Compare_String(gGeneral_Buffer,(unsigned char *)String_CLCC,sizeof(String_CLCC))!=0)
{
Case2_OTHER_Out();
}
else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_OK,sizeof(String_OK)))
{
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(4,MAIN_HANG_UP,0);
gSys_Handle=MAIN_HANG_UP;
Case2_OTHER_Out();
}
else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_ER,sizeof(String_ER))!=0)
{
Case2_OTHER_Out();
}
}
else
{
if(gTimer_GSM_AT>10000)
{
Case2_OTHER_Out();
}
}
}
}
/********************************************************\
* 函数名:Case2_OTHER_Out
作用域:本地文件调用
* 功能: 将CASE2中处理的出口
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Case2_OTHER_Out(void)
{
gGSM_Oper_Type=GSM_SMS_IN;
gGSM_OTHER_Step=0;gPhone_Step=0;
gTimer_GSM_AT=0;
Check_GSM();
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;
OperateSPIEnd();
}
/********************************************************\
* 函数名:Case3_GSM_SMS_IN
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
补充说明:
\********************************************************/
void Case3_GSM_SMS_IN(void)
{
Check_GSM();
Case3_SMSIN_Out();
}
/********************************************************\
* 函数名:Case3_SMSIN_Out
作用域:本地文件调用
* 功能: 将CASE3中处理的出口
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Case3_SMSIN_Out(void)
{
gGSM_Oper_Type=GSM_SMS_OUT;
gSMS_OUT_Step=0;
gTimer_GSM_AT=0;
Check_GSM();
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;
OperateSPIEnd();
}
/********************************************************\
* 函数名:Case4_GSM_SMS_OUT
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
2004年12月15日
补充说明:
\********************************************************/
void Case4_GSM_SMS_OUT(void)
{
unsigned int i=0,j=0,k=0,x=0,y=0;
unsigned char nTemp_Length=0;
unsigned int iLength=0;
//1,手柄正在拨号,2,监听正在拨号,3有电话打入
if( (gGeneral_Flag&RING_F_1)||(gGeneral_Flag&DAILING_UP_F_1)||(gGeneral_Flag&MONITOR_ON_F_1) )
{
Case4_SMSOUT_Out();
return;
}
//2,如果目标号码无效,则不能进行SMS的发送操作
if( (gGeneral_Flag&NUM1_VAILD_F_1)==0 )
{
Case4_SMSOUT_Out();
return;
}
//3,如果短消息中心号码无效,则不能 SMS的发送操作
if( (gInternal_Flag&CENTER_NUM_VAILD_F_1)==0)
{
Case4_SMSOUT_Out();
return;
}
//4,否则的可以进行下面的操作
if(gSMS_OUT_Step==0) gSMS_OUT_Step=1;
else if(gSMS_OUT_Step==1)
{
gSend_Type1=0;
SRAM_Init();
i=SRAM_Read(ECHO_SMS_2);
j=SRAM_Read(OTHER_SMS_2);
//第一类的数据发送
if( (i!=NULL_2)&&(gInternal_Flag&ALLOW_DATA_F_1) )
{
gSMS_OUT_Step=7;gTimer_GSM_AT=0;
#ifdef Debug_GSM_COM1
Send_COM1_Byte('2');
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
#endif
gSend_Type1=1;
}
else if( (j!=NULL_2)&&(gInternal_Flag&ALLOW_DATA_F_1) )
{
gSMS_OUT_Step=7;gTimer_GSM_AT=0;
#ifdef Debug_GSM_COM1
Send_COM1_Byte('3');
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
#endif
gSend_Type1=2;
}
//第二类数据的发送
else if( (gInternal_Flag&SEND_CIRCLE_F_1)&&(gInternal_Flag&ALLOW_DATA_F_1) )
{
gInternal_Flag&=~SEND_CIRCLE_F_1;
gInternal_Flag&=~ALLOW_DATA_F_1;
gGSM_Work_Count=0;gCheck_Data=0;
gSMS_OUT_Step=17;
gTimer_GSM_AT=0;
#ifdef Debug_GSM_COM1
Send_COM1_Byte('4');
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
#endif
if(gCycle_Send_Status==WATCH_DATA)
{
if(gWatch_Count>0) gWatch_Count--;
}
}
/**************************************************************************************\
第三类数据的TCP发送(外接部件的大量数据-存储在外部SRAM中)
\**************************************************************************************/
else if( (gOther_Flag&ALLOW_SEND_RECORD_F_1)&&(gInternal_Flag&ALLOW_DATA_F_1) )
{
SRAM_Init();
if( SRAM_Read(SRAM_SEND_VAILD)==VAILD_2 )
{
//判断长度
j = SRAM_Read(SRAM_SEND_LENGTH_H);
j <<= 8;
j += SRAM_Read(SRAM_SEND_LENGTH_L);
if(j>120)
{
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);
}
else
{
gSMS_OUT_Step=22;
gTimer_GSM_AT=0;
#ifdef Debug_GSM_COM1
Send_COM1_Byte('F');Send_COM1_String((unsigned char *)TYPE,sizeof(TYPE));
#endif
}
}
else
{
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);
Case4_SMSOUT_Out();
}
}
else
{
Case4_SMSOUT_Out();
}
}
/********************************************************\
第一类GSM数据的发送:
1-1:
0x7B 存储表示这个区域的SMS是否处理,为1则表示后面还有未处理的SMS,为0则表示已经处理完了SMS
0x7C 存储数据包的命令字在这里则为nCommand
0x7D 存储数据包的ACK的值ACK
0x7E 存储后面数据包的长度(但注意没有存储CHK(MSB),CHK(LSB),EOT,这三个字节)
0x7F 从这开始存储数据包
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -