📄 do_m22.c
字号:
}
else
{
//3,固定调节AUVOL的接收增益为1
gTimer=0;
while(gTimer<200){Check_GSM();}
Send_COM0_String((unsigned char *)AT_AUVOL,sizeof(AT_AUVOL));
Send_COM0_Byte('0');Send_COM0_Byte(0x0d);
gInternal_Flag&=~M22_RETURN_OK_1;
Wait_OK();
if( (gInternal_Flag&M22_RETURN_OK_1)==0 )
{
gPhone_Step=5;gTimer_GSM_AT=0;
}
else
{
gPhone_Step=9;gTimer_GSM_AT=0;
}
}
}
}
else
{
Case1_PHONE_Out();
}
}
else Check_GSM();
}
else if(gPhone_Step==9)
{
if( gTimer_GSM_AT>400 )
{
if(gPhone_Status==READY)
{
Send_COM0_String((unsigned char *)ATD,sizeof(ATD));
//电话号码的长度
k=SRAM_Read(PHONE_AT_2+2);
for(j=0;j<k;j++)
{
Send_COM0_Byte(SRAM_Read(PHONE_AT_2+3+j));
}
Send_COM0_Byte(';');
Send_COM0_Byte(0x0d);
gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
gPhone_Step=14;
gGeneral_Flag|=MONITOR_ON_F_1;
gGeneral_Flag|=TCP_PHONE_F_1;
gStatus1_Flag|=PHONE_ONLINE_F_1;
gHangUp_Timer=0;
gPhone_Status=DAILING;
gTimer_GSM_AT=0;
P6OUT|=SEL_MIC;
}
else
{
Case1_PHONE_Out();
}
}
else Check_GSM();
}
/********************************************************\
3,手柄接听处理
\********************************************************/
else if(gPhone_Step==10)
{
if( gTimer_GSM_AT>400 )
{
Send_COM0_String((unsigned char *)ATA,sizeof(ATA));
gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
gPhone_Step=15;
gTimer_GSM_AT=0;
OperateSPIEnd();
}
else Check_GSM();
}
/********************************************************\
4,手柄DTMF处理
\********************************************************/
else if(gPhone_Step==11)
{
OperateSPIEnd();
if( gTimer_GSM_AT>400 )
{
if(gPhone_Status==ACTIVE_HANDLE)
{
//检测DTMF中的数据
#ifdef Debug_GSM_COM1
Send_COM1_Byte('[');
Send_COM1_Byte(ASCII(gDTMF_SAVE[0]/10));
Send_COM1_Byte(ASCII(gDTMF_SAVE[0]%10));
Send_COM1_Byte(']');
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
#endif
////////////////////////////////////////////
Send_COM0_String((unsigned char *)AT_VTS,sizeof(AT_VTS));
//需要发送的音频数据
k=SRAM_Read(PHONE_AT_2+3);
//直接存储的是数字ASCII形式
Send_COM0_Byte(k);
Send_COM0_Byte(0x0d);
gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
gPhone_Step=15;
gTimer_GSM_AT=0;
OperateSPIEnd();
}
else Case1_PHONE_Out();
}
else Check_GSM();
}
/********************************************************\
5,手柄音量调节处理
\********************************************************/
else if(gPhone_Step==12)
{
OperateSPIEnd();
if( gTimer_GSM_AT>400 )
{
if( gM22_Status!=TCP_ONLINE_WORK )
{
Send_COM0_String((unsigned char *)AT_AUGAIN,sizeof(AT_AUGAIN));
k=SRAM_Read(PHONE_AT_2+3);
//直接存储的是数字ASCII形式
if( (k<1)||(k>4) ) k=2;
Send_COM0_Byte('2');Send_COM0_Byte(',');
Send_COM0_Byte(Handle_VOL[k]);
Send_COM0_Byte(0x0d);
gVolume=k;
gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
gPhone_Step=15;
gTimer_GSM_AT=0;
OperateSPIEnd();
}
else Case1_PHONE_Out();
}
else Check_GSM();
}
/********************************************************\
6,手柄挂机处理
\********************************************************/
else if(gPhone_Step==13)
{
if( gTimer_GSM_AT>400)
{
if( gPhone_Status==ACTIVE_MONITOR)
{
Case1_PHONE_Out();
}
else
{
Send_COM0_String((unsigned char *)ATH,sizeof(ATH));
gInternal_Flag|=GSM_ONEAT_SUCCESS_1;
gPhone_Step=16;
gTimer_GSM_AT=0;
OperateSPIEnd();
}
}
else Check_GSM();
}
/********************************************************\
手柄拨号,监听拨号的返回状态处理
\********************************************************/
else if(gPhone_Step==14)
{
if( Check_GSM()!=0 )
{
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;gTimer_GSM_AT=0;
//接通
if(Compare_String(gGeneral_Buffer,(unsigned char *)String_COLP,sizeof(String_COLP)))
{
if(gGeneral_Flag&DAILING_UP_F_1)
{
gGeneral_Flag&=~DAILING_UP_F_1;
gPhone_Status=ACTIVE_HANDLE;
Send_COM3_Load(4,MAIN_TALKING,0);
gSys_Handle=MAIN_TALKING;
//返回手柄一个接通命令
}
else if(gGeneral_Flag&MONITOR_ON_F_1)
{
gGeneral_Flag&=~MONITOR_ON_F_1;
gPhone_Status=ACTIVE_MONITOR;
}
Case1_PHONE_Out();
}
//未接通,则自己主动挂断
else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_OK,sizeof(String_OK)))
{
if(gM22_Status==TCP_HANG_WORK) gGeneral_Flag|=TCP_STATUS_F_1;
if(gGeneral_Flag&DAILING_UP_F_1)
{
gGeneral_Flag&=~DAILING_UP_F_1;
gPhone_Status=READY;
gGeneral_Flag&=~TCP_PHONE_F_1;
gStatus1_Flag&=~PHONE_ONLINE_F_1;
}
else if(gGeneral_Flag&MONITOR_ON_F_1)
{
gGeneral_Flag&=~MONITOR_ON_F_1;
gPhone_Status=READY;
P6OUT&=~SEL_MIC;
}
Case1_PHONE_Out();
}
//未接通,返回手柄挂机
else if( Compare_String(gGeneral_Buffer,(unsigned char *)String_ER,sizeof(String_ER)) )
{
if(gM22_Status==TCP_HANG_WORK) gGeneral_Flag|=TCP_STATUS_F_1;
if(gGeneral_Flag&DAILING_UP_F_1)
{
gGeneral_Flag&=~DAILING_UP_F_1;
gPhone_Status=READY;
gGeneral_Flag&=~TCP_PHONE_F_1;
gStatus1_Flag&=~PHONE_ONLINE_F_1;
Send_COM3_Load(4,MAIN_HANG_UP,0);
gSys_Handle=MAIN_HANG_UP;
//返回手柄挂机命令
}
else if(gGeneral_Flag&MONITOR_ON_F_1)
{
gGeneral_Flag&=~MONITOR_ON_F_1;
gPhone_Status=READY;
gGeneral_Flag&=~TCP_PHONE_F_1;
gStatus1_Flag&=~PHONE_ONLINE_F_1;
P6OUT&=~SEL_MIC;
}
Case1_PHONE_Out();
}
//未接通,对方主动挂机,返回手柄挂机
else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_BUSY,sizeof(String_BUSY)))
{
if(gM22_Status==TCP_HANG_WORK) gGeneral_Flag|=TCP_STATUS_F_1;
if(gGeneral_Flag&DAILING_UP_F_1)
{
gGeneral_Flag&=~DAILING_UP_F_1;
gStatus1_Flag&=~PHONE_ONLINE_F_1;
gPhone_Status=READY;
gGeneral_Flag&=~TCP_PHONE_F_1;
Send_COM3_Load(4,MAIN_HANG_UP,0);
gSys_Handle=MAIN_HANG_UP;
//返回主动挂机命令
}
else if(gGeneral_Flag&MONITOR_ON_F_1)
{
gGeneral_Flag&=~MONITOR_ON_F_1;
gPhone_Status=READY;
gGeneral_Flag&=~TCP_PHONE_F_1;
gStatus1_Flag&=~PHONE_ONLINE_F_1;
P6OUT&=~SEL_MIC;
}
Case1_PHONE_Out();
}
//未接通,对方无应答
else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_NOANSWER,sizeof(String_NOANSWER)))
{
if(gM22_Status==TCP_HANG_WORK) gGeneral_Flag|=TCP_STATUS_F_1;
if(gGeneral_Flag&DAILING_UP_F_1)
{
gGeneral_Flag&=~DAILING_UP_F_1;
gPhone_Status=READY;
gGeneral_Flag&=~TCP_PHONE_F_1;
gStatus1_Flag&=~PHONE_ONLINE_F_1;
Send_COM3_Load(4,MAIN_HANG_UP,0);
gSys_Handle=MAIN_HANG_UP;
//返回手柄挂机命令
}
else if(gGeneral_Flag&MONITOR_ON_F_1)
{
gGeneral_Flag&=~MONITOR_ON_F_1;
gPhone_Status=READY;
gGeneral_Flag&=~TCP_PHONE_F_1;
gStatus1_Flag&=~PHONE_ONLINE_F_1;
P6OUT&=~SEL_MIC;
}
Case1_PHONE_Out();
}
//未接通,对方占线
else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_NOCARRIER,sizeof(String_NOCARRIER)) )
{
if(gM22_Status==TCP_HANG_WORK) gGeneral_Flag|=TCP_STATUS_F_1;
if(gGeneral_Flag&DAILING_UP_F_1)
{
gGeneral_Flag&=~DAILING_UP_F_1;
gPhone_Status=READY;
gGeneral_Flag&=~TCP_PHONE_F_1;
gStatus1_Flag&=~PHONE_ONLINE_F_1;
Send_COM3_Load(4,MAIN_BUSY,0);
//返回手柄挂机命令
}
else if(gGeneral_Flag&MONITOR_ON_F_1)
{
gGeneral_Flag&=~MONITOR_ON_F_1;
gPhone_Status=READY;
gGeneral_Flag&=~TCP_PHONE_F_1;
gStatus1_Flag&=~PHONE_ONLINE_F_1;
P6OUT&=~SEL_MIC;
}
Case1_PHONE_Out();
}
}
else
{
if(gGeneral_Flag&DAILING_UP_F_1)
{
//手柄未接通主动挂机命令的操作
SRAM_Init();
i=SRAM_Read(PHONE_AT_2+1);
if( i==H_HUNGUP )
{
Send_COM0_String((unsigned char *)ATH,sizeof(ATH));
gGeneral_Flag&=~MONITOR_ON_F_1;
gPhone_Status=READY;
gGeneral_Flag&=~TCP_PHONE_F_1;
gStatus1_Flag&=~PHONE_ONLINE_F_1;
}
}
if(gTimer_GSM_AT>65000)
{
gGeneral_Flag&=~MONITOR_ON_F_1;
gPhone_Status=READY;
gGeneral_Flag&=~TCP_PHONE_F_1;
gStatus1_Flag&=~PHONE_ONLINE_F_1;
Case1_PHONE_Out();
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);
}
}
}
/********************************************************\
手柄接听,DTMF拨号,音量调节的返回状态处理
\********************************************************/
else if(gPhone_Step==15)
{
if( Check_GSM()!=0 )
{
if(Compare_String(gGeneral_Buffer,(unsigned char *)String_OK,sizeof(String_OK)))
{
if(gPhone_Status==INCOMING)
{
gPhone_Status=ACTIVE_HANDLE;
gGeneral_Flag&=~RING_F_1;
gPhone_Step=0;
Send_COM3_Load(4,MAIN_TALKING,0);
gSys_Handle=MAIN_TALKING;
Case1_PHONE_Out();
}
else
{
Case1_PHONE_Out();
}
}
else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_ER,sizeof(String_ER)))
{
Case1_PHONE_Out();
}
}
else
{
if(gTimer_GSM_AT>10000) Case1_PHONE_Out();
}
}
/********************************************************\
手柄挂机的返回状态处理
\********************************************************/
else if(gPhone_Step==16)
{
if( Check_GSM()!=0 )
{
if(Compare_String(gGeneral_Buffer,(unsigned char *)String_OK,sizeof(String_OK)))
{
gGeneral_Flag&=~DAILING_UP_F_1;
gGeneral_Flag&=~MONITOR_ON_F_1;
gPhone_Status=READY;
gGeneral_Flag&=~TCP_PHONE_F_1;
gStatus1_Flag&=~PHONE_ONLINE_F_1;
gGeneral_Flag&=~RING_F_1;
if(gM22_Status==TCP_HANG_WORK) gGeneral_Flag|=TCP_STATUS_F_1;
Case1_PHONE_Out();
}
}
else
{
if(gTimer_GSM_AT>6000) Case_OverTime_Return();
}
}
OperateSPIEnd();
}
/********************************************************\
* 函数名:Case1_PHONE_Out
作用域:本地文件调用
* 功能: 将CASE1中处理的出口,但这这个出口在下一个程序循环中,仍然会进入这个CASE中
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Case1_PHONE_Out(void)
{
unsigned int i=0;
gPhone_Step=0;
gTimer_GSM_AT=0;
gInternal_Flag&=~GSM_ONEAT_SUCCESS_1;
SRAM_Init();
SRAM_Write(PHONE_AT_2+0,NULL_2);
for(i=PHONE_AT_2+1;i<ECHO_SMS_2;i++)
{
SRAM_Write(i,0);
}
}
/********************************************************\
* 函数名:Case2_GSM_OTHER
作用域:本地文件调用
* 功能: 主要是处理有电话方面的时候CLCC查询,没电话的时候CSQ的查询,还有如果收到参数设置的话,则
在需要进行短消息中心号码的设置,GPRS的IP改变,端口改变后的GPRS的重新登陆设置等
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
补充说明:因为在这个case中有需要对短消息中心号码的设置,根据通过SMS接收到新的参数设置,需要将
短消息中心号码存储先存储在buffer1的0x4B----0x5C区域。第一个字节开始就存储短消息中心
号码的第一个字节,以0x00作为结束符号。在这个case中需要将存储在buffer1中的短消息中心
号码通过AT+CSCA指令进行SIM设置。
\********************************************************/
void Case2_GSM_OTHER(void)
{
unsigned int i=0,j=0,k=0;
static unsigned char CSQ_Single_Error=0;
if(gGSM_OTHER_Step==0) {gGSM_OTHER_Step=1;gTimer_GSM_AT=0;Check_GSM();}
/********************************************************\
1,gGSM_OTHER_Step=1的时候,判断是否在这个case中进行处理
A:如果无电话方面的业务,满足一定时间间隔查询信号,则进行AT+CSQ的指令操作
B:判断是否有需要进行短消息中心号码的设置,如果判断有gInternal_Flag&SET_CSCA_F_1置位,则进行
AT+CSCA的指令操作
C:如果满足需要恢复语音方面的设置(监听后的的模块语音方面的参数设置)
\********************************************************/
else if(gGSM_OTHER_Step==1)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -