⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gsm.c

📁 GPS驱动集合
💻 C
📖 第 1 页 / 共 4 页
字号:
        { 
            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 + -