📄 gsm.c
字号:
{
HdlATAckTask(i,AnalyseIdataPtrTemp); // 数据串相等,则处理该项应答
break;
}
else
{
AnalyseIdataPtr = AnalyseIdataPtrTemp;
}
}
AnalyseIdataPtr = AnalyseIdataPtrTemp; // 置接收缓存x无效
*AnalyseIdataPtr = 0xFF;
if(!bWaitOKAck) // 判断是否需要等待'OK'应答
{
if(bATcmdAckType)
{
bATcmdAckType = false; // 模块主动输出的参数
}
else
{
if(bATcmdNeedResend) // 判断是否需要重发该AT命令
{
bATcmdNeedResend = false;
ATcmdTxArray[0].ATcmdNo &amt;= 0x7F; // 解析AT命令后,得重发该AT命令
// ATcmdTxPara = 0x00;
}
else
{
for(i = 0; i < cnATcmdTxArrayLen; i++) // AT命令得到应答后,移位发送队列
{
ATcmdTxArray[i].ATcmdNo = ATcmdTxArray[i+1].ATcmdNo;
ATcmdTxArray[i].ATcmdParaPtr = ATcmdTxArray[i+1].ATcmdParaPtr;
}
ATcmdTxArray[cnATcmdTxArrayLen-1].ATcmdNo = 0xFF;
ATcmdTxArray[cnATcmdTxArrayLen-1].ATcmdParaPtr = 0xFF;
}
}
}
}
//***************************************************************
// void HdlATAckTask(BYTE ATcmdAckNo)
//
// Note:
//***************************************************************
void HdlATAckTask(BYTE ATcmdAckNo,BYTE ATcmdAckBufNo)
{
BYTE i;
BYTE ATcmdAckData;
BYTE data *ATcmdAckDataPtr;
BYTE code *ATcmdAckCodePtr;
BYTE idata *ATcmdAckIdataPtr;
BYTE idata *ATcmdAckIdataPtrTemp;
ATcmdAckIdataPtr = ATcmdAckBufNo;
switch(ATcmdAckNo)
{
case cnRxATcmd_ATAck_OK: // 'OK'应答
{
switch(ATcmdTxArray[0].ATcmdNo &amt; 0x7F)
{
case cnATcmd_CMGI: // 查询厂家代码'OK'应答
{
break;
}
//============================================
case cnATcmd_ATA: // 接听电话'OK'应答
{
StationRun(MsgATACall,true);
break;
}
//============================================
case cnATcmd_ATH: // 挂断电话'OK'应答
{
StationRun(MsgATHCall,true);
break;
}
//============================================
case cnATcmd_ATD: // 拨号'OK'应答
{
StationRun(MsgDialACall,true);
break;
}
//============================================
case cnATcmd_VTS: // 发DTMF'OK'应答
{
StationRun(MsgDTMF,true);
break;
}
//============================================
case cnATcmd_IPR: // 设置波特率'OK'应答
{
break;
}
//============================================
case cnATcmd_CSQ: // 查询信号强度'OK'应答
{
StationRun(MsgModelOk,TRUE);
break;
}
//============================================
case cnATcmd_CLIP: // 设置来电输出'OK'应答
{
StationRun(MsgModelOk,true);
break;
}
//============================================
case cnATcmd_CCLK: // 查询实时时钟'OK'应答
{
StationRun(MsgModelOk,TRUE);
break;
}
//============================================
case cnATcmd_ATM:
case cnATcmd_AUDIO:
{
StationRun(MsgModelOk,true);
break;
}
//============================================
case cnATcmd_CCID: // 查询SIM卡ID的'OK'应答
{
// StationRun(MsgModelOk,TRUE);
break;
}
//============================================
case cnATcmd_TestAT: // 测试模块'OK'应答
{
StationRun(MsgModelOk,true);
break;
}
//============================================
case cnATcmd_SPSPKR0:
case cnATcmd_SPSPKR1:
case cnATcmd_SPSPKR2:
case cnATcmd_SPSPKR3:
case cnATcmd_HFSPKR0:
case cnATcmd_HFSPKR1:
case cnATcmd_HFSPKR2:
case cnATcmd_HFSPKR3: // 设置通话音量等级'OK'应答
{
break;
}
//============================================
case cnATcmd_MIC: // 设置MIC参数'OK'应答
{
break;
}
//============================================
case cnATcmd_SID: // 设置侧音参数'OK'应答
{
break;
}
//============================================
case cnATcmd_ECHO: // 设置回响参数'OK'应答
{
break;
}
//============================================
case cnATcmd_CMGF: // 选择PDU格式'OK'应答
{
break;
}
//============================================
case cnATcmd_CSMS: // 设置符合Phase II标准'OK'应答
{
break;
}
//============================================
case cnATcmd_CNMI: // 设置短信输出位置信息'OK'应答
{
break;
}
//============================================
case cnATcmd_CREG: // 查询注册信息'OK'应答
{
StationRun(MsgModelOk,TRUE);
break;
}
//============================================
case cnATcmd_CMGR: // 读取短消息'OK'应答
{
//StationRun(MsgReadSMS,true);
break;
}
//============================================
case cnATcmd_CMGD: // 删除短消息'OK'应答
{
StationRun(MsgDelSMS,true);
break;
}
//============================================
case cnATcmd_CMGS: // 发送短消息'OK'应答
{
StationRun(MsgSendSMS,true);
break;
}
//============================================
case cnATcmd_CSCA: // 设置短信中心'OK'应答
{
break;
}
//============================================
case cnATcmd_CMGL: // 罗列所以短消息'OK'应答
{
break;
}
//============================================
case cnATcmd_ATE: // 设置AT命令不回送'OK'应答
{
StationRun(MsgModelOk,true);
break;
}
//============================================
case cnATcmd_NeedPIN: // 查询SIM卡PIN状态'OK'应答
{
break;
}
//============================================
case cnATcmd_PINClck: // 设置SIM卡锁PIN码'OK'应答
{
break;
}
//============================================
case cnATcmd_InputPIN: // 输入PIN码'OK'应答
{
StationRun(MsgInPutPINOK,TRUE);
break;
}
//============================================
case cnATcmd_ChangePIN: // 更改PIN码'OK'应答
{
StationRun(MsgModelOk,TRUE);
break;
}
//============================================
case cnATcmd_PINUnClck: // SIM卡PIN码解锁'OK'应答
{
StationRun(MsgModelOk,TRUE);
break;
}
//============================================
case cnATcmd_CHGBackPIN: // PIN码更改回默认值'OK'应答
{
break;
}
//============================================
case cnATcmd_SaveCfg: // 用户设置参数存储'OK'应答
{
break;
}
//============================================
case cnATcmd_PowerOff: // 用户关机'OK'应答
{
break;
}
//============================================
case cnATcmd_CheckBatt: // 检查电池电压'OK'应答
{
StationRun(MsgModelOk,TRUE);
break;
}
//============================================
case cnATcmd_SetCallWaitting: // 设置呼叫等待'OK'应答
{
StationRun(MsgSetCallWait,true);
break;
}
//============================================
case cnATcmd_CancelCallWaittng: // 取消呼叫等待设置'OK'应答
{
StationRun(MsgCancelCallWait,true);
break;
}
//============================================
case cnATcmd_Answer2ndCall: // 接听呼叫等待的第2个电话'OK'应答
{
StationRun(MsgAnswer2ndCall,true);
break;
}
//============================================
case cnATcmd_Cancel2ndCall: // 挂断呼叫等待的第2个电话'OK'应答
{
StationRun(MsgCancel2ndCall,true);
break;
}
//============================================
case cnATcmd_SetCallForward0: // 设置呼叫转移'OK'应答
case cnATcmd_SetCallForward1: // 设置呼叫转移'OK'应答
case cnATcmd_SetCallForward2: // 设置呼叫转移'OK'应答
case cnATcmd_SetCallForward3: // 设置呼叫转移'OK'应答
{
//StationRun(MsgSetCallForward,true);
EepromRead(cnCallForwardTempLen,&amt;ATcmdAckData,LoadEEpromAddr(cnCallForwardTemp));
EepromWrite(cnCallForwardLen,&amt;ATcmdAckData,LoadEEpromAddr(cnCallForward)); // 存储转移设置状态
break;
}
//============================================
case cnATcmd_CancelCallForward: // 取消呼叫转移设置'OK'应答
{
//StationRun(MsgCancelCallForward,true);
break;
}
//============================================
case cnATcmd_SendCCLK: // 设置模块时钟'OK'应答
{
StationRun(MsgSetRealTime,true);
break;
}
//============================================
case cnATcmd_CCEDMain: // 查询主基站好'OK'应答
{
StationRun(MsgCCEDMain,TRUE);
break;
}
//============================================
case cnATcmd_CCEDSub: // 查询从属基站好'OK'应答
{
StationRun(MsgCCEDSub,TRUE);
break;
}
//============================================
default: break;
}
break;
}
//<><><><><><><><><><><><><><><><><><><><><><><><><><><><>
case cnRxATcmd_ATAck_RING: // 收到振铃信号
{
bATcmdAckType = true; // 模块主动输出的参数
StationRun(MsgRvRing,NULL);
break;
}
//<><><><><><><><><><><><><><><><><><><><><><><><><><><><>
//新来电号码分析
case cnRxATcmd_ATAck_CLIP: // +CLIP: "05925186308",161,,,,0
{
RvNewCID:
bATcmdAckType = true; // 模块主动输出的参数
ATcmdAckIdataPtr = SeekCharInString('"',ATcmdAckIdataPtr); // 找+CLIP:后的双引号
FillTempBuf();
i = 0x00;
F0 = true;
while(*(++ATcmdAckIdataPtr) != '"') // 转换字符串,EEprom的存储格式:5029156803F8
{
F0 = !F0;
ATcmdAckData = *ATcmdAckIdataPtr &amt; 0x0F;
if(F0)
{
ATcmdAckData <<= 4;
ATcmdAckData |= 0x0F;
TempBuf[i] &amt;= ATcmdAckData;
++i;
}
else
{
ATcmdAckData |= 0xF0;
TempBuf[i] &amt;= ATcmdAckData;
}
}
ATcmdAckData = &amt;TempBuf[0];
StationRun(MsgRvCID,ATcmdAckData); // 新来电处理
break;
}
//<><><><><><><><><><><><><><><><><><><><><><><><><><><><>
//读取模块实时时钟分析
case cnRxATcmd_ATAck_CCLK: // +CCLK: "94/05/06,22:10:00"
{
ATcmdAckIdataPtr = SeekCharInString('"',ATcmdAckIdataPtr);
ATcmdAckDataPtr = &amt;RealTime.Year;
for(i = 6; i > 0; i--) // 年/月/日,时:分:秒(共六位长度)
{
*ATcmdAckDataPtr = DecToHexByte((*++ATcmdAckIdataPtr << 4) | (*(++ATcmdAckIdataPtr) &amt; 0x0F));
++ATcmdAckDataPtr;
++ATcmdAckIdataPtr;
}
// RefreshDispTime(); // RealTime.c 重新全部刷新Idle下时钟
bWaitOKAck = true;
break;
}
//<><><><><><><><><><><><><><><><><><><><><><><><><><><><>
case cnRxATcmd_ATAck_NOCarrier:
case cnRxATcmd_ATAck_NOANSWER:
case cnRxATcmd_ATAck_BUSY:
case cnRxATcmd_ATAck_NODIALTONE:
{
StationRun(MsgEndTalking,NULL); //更改为发消息上去
//PostATcmd(cnATcmd_ATH,NULL);
break;
}
//<><><><><><><><><><><><><><><><><><><><><><><><><><><><>
case cnRxATcmd_ATAck_Error:
{
switch(ATcmdTxArray[0].ATcmdNo &amt; 0x7F) //普通指令出现ERROR,重发3次
{
//Del SMS 不处理
case cnATcmd_CMGD: // 删除短消息'ERROR'应答
{
StationRun(MsgDelSMS,false);
break;
}
//============================================
case cnATcmd_CMGS: // 发送短消息'ERROR'应答
{
StationRun(MsgSendSMS,false);
break;
}
//============================================
case cnATcmd_CMGR: // 读取短消息'ERROR'应答
{
StationRun(MsgReadSMS,false);
break;
}
//============================================
case cnATcmd_InputPIN: // SIM卡输入PIN码'ERROR'应答 不处理
{
StationRun(MsgPINState,cnInputPINError);
break;
}
//============================================
case cnATcmd_PINClck: // 设置SIM卡锁PIN码'ERROR'应答
{
StationRun(MsgPINState,cnClckPINError);
break;
}
//============================================
case cnATcmd_ChangePIN: // SIM卡更改PIN码'ERROR'应答
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -