#include "includes.h" POC_DEF sutPocStatus; MY_CLOCK My_Clock; unsigned long long htoi(char s[]) { int i = 0; unsigned long long n = 0; if (s[0] == '0' && (s[1]=='x' || s[1]=='X')) i = 2; else i = 0; for (; (s[i] >= '0' && s[i] <= '9') || (s[i] >= 'a' && s[i] <= 'z') || (s[i] >='A' && s[i] <= 'Z');++i){ if (tolower(s[i]) > '9') n = 16 * n + (10 + tolower(s[i]) - 'a'); else n = 16 * n + (tolower(s[i]) - '0'); } return n; } void pocDataInit(void){ memset((unsigned char *)&sutPocStatus, 0, sizeof(POC_DEF)); } /* MakeStringToUpperCap ����data�����Ǵ�д��ĸת�ɴ�д��ĸ */ void MakeStringToUpperCap(T_UINT8 *data, T_UINT16 len){ T_UINT16 i; for(i=0;i<len;i++) { if(data[i] >= 'a' && data[i] <= 'z') data[i] -= 0x20; } } /*控制查询POC设置状�? dly:接口被调用的频率,单位ms*/ void pocProCtl(int dly){ //3秒查询一�? static unsigned short cnt=0; if(sutApp.gtMode!=0) return;//GT模式后不再查�? if(++cnt<(5*1000/dly)) return; cnt=0; if(getAppObjStatus(ASLEEP_POC)==0) return;//POC休眠时,不发指令 //if(sutApp.pocParaDone==0) msgAtSend("AT+POC=020000\r\n");//用于检测并设置POC参数 if(sutApp.PocGetTime==0&&sutPocStatus.logined) msgAtSend("AT+POC=280000\r\n");//��ȡ����ʱ�� msgAtSend("AT+COPS?\r\n"); msgAtSend("AT+CTEC?\r\n");//查询当前网络制式 msgAtSend("AT+CSQ\r\n");//查询信号强度 } static void micPro(int mic); static void spkPro(int spk); static void pocStartMsg(void); static void pro80Msg(char *msg); static void pro81Msg(char *msg); static void pro82Msg(char *msg); static void pro83Msg(char *msg); static void pro84Msg(char *msg); static void pro86Msg(char *msg); static void pro3dMsg(char *msg); static void pro3eMsg(char *msg); static void pro0eMsg(char *msg); static void pro1eMsg(char *msg); static void pro1dMsg(char *msg); static void pocGetVer(char *msg); static void pocGetPpp(char *msg); static void proGauthMsg(char *msg); static void proNoteMsg(char *msg); static void proNetMode(char *msg); static void proSimMode(char *msg); static void proPwrMode(char *msg); static void proFotaMsg(char *msg); static void proGmrMsg(char *msg); static void proSmsMsg(char *msg); static void proAlarmMsg(void); static void proPendMsg(void); static void proToneMsg(char *msg); static void proGPIPMsg(char *msg); static void proGGIPMsg(char *msg); static void proCsqMsg(char *msg); static void proMicSpk(int mic, int spk); static void proCopsMsg(char *msg); static void proHeadSet(char *msg); static void pro96Msg(char *msg); static void pro28Msg(char *msg); static void pro0dMsg(char *msg); static void pro3bMsg (char *msg); void cmdsProcess(char *msg, int len){//已去掉回车换�? int i,j; char buf[10]; if(sutApp.pocInitStatus==0) sutApp.pocInitStatus=1; if(sutApp.gtMode==0){ appSleepCtl(ASLEEP_POC, 1); tryWakeupApp(); MSG_INFO(1,"POC->app:%s",msg); if(msgCmp(msg, "PocSleep")){//POC休眠�? appSleepCtl(ASLEEP_POC, 0); }else if(msgCmp(msg, "+POC:WAKEUP")){//POC唤醒�? }else if(msgCmp(msg, "+POC:8B")){ buf[0]=msg[7];buf[1]=msg[8];buf[2]=0; i=atoi(buf); buf[0]=msg[9];buf[1]=msg[10];buf[2]=0; j=atoi(buf); proMicSpk(i, j); }else if(msgCmp(msg, "+LSHTTS: END")){ sutPocStatus.TTS=0; }else if(msgCmp(msg, "+HTTS: START")){ paControl(true); sutPocStatus.TTS=1; }else if(msgCmp(msg, "+POC:02000000")) setPocPara(msg+13,len-13); else if(msgCmp(msg,"+POC:9600")) pro96Msg(msg); else if(msgCmp(msg, "+POC:82")) pro82Msg(msg); else if(msgCmp(msg, "+POC:START")) pocStartMsg(); else if(msgCmp(msg, "+POC:86")) pro86Msg(msg); else if(msgCmp(msg, "+POC:83")) pro83Msg(msg); else if(msgCmp(msg, "+CTEC:")) proNetMode(msg+7); else if(msgCmp(msg, "+CSQ: ")) proCsqMsg(msg+6); else if(msgCmp(msg, "+SIMCROSS:")) proSimMode(msg+10); else if(msgCmp(msg, "+COPS:")) proCopsMsg(msg); else if(msgCmp(msg, "+CPIN: READY")) sutApp.cardStatus=1; else if(msgCmp(msg, "+POC:28")) pro28Msg(msg); else if(msgCmp(msg, "+POC:80")) pro80Msg(msg); else if(msgCmp(msg, "+POC:81")) pro81Msg(msg); else if(msgCmp(msg, "+POC:0D")) pro0dMsg(msg); else if(msgCmp(msg, "+POC:3B")) pro3bMsg(msg); else if(msgCmp(msg, "+CGPS:")) proGpsMsg(msg+6); else if(msgCmp(msg, "+TONE:")) proToneMsg(msg+6); else if(msgCmp(msg, "+UDP:")) proPwrMode(msg+5); else if(msgCmp(msg, "+POC:3D")) pro3dMsg(msg+7); else if(msgCmp(msg, "+POC:3E")) pro3eMsg(msg+7); else if(msgCmp(msg, "+POC:1E")) pro1eMsg(msg+7); else if(msgCmp(msg, "+POC:84")) pro84Msg(msg+7); else if(msgCmp(msg, "+POC:0E")) pro0eMsg(msg+7); else if(msgCmp(msg, "+POC:1D")) pro1dMsg(msg+7); else if(msgCmp(msg, "+HEADSET:")) proHeadSet(msg+9); else if(msgCmp(msg, "+POC_VER:")) pocGetVer(msg+9); else if(msgCmp(msg, "+POC_PPP:")) pocGetPpp(msg+9); else if(msgCmp(msg, "+GAUTH:")) proGauthMsg(msg+7); else if(msgCmp(msg, "+NOTE:")) proNoteMsg(msg+6); else if(msgCmp(msg, "+FOTA:")) proFotaMsg(msg+6); else if(msgCmp(msg, "+CGPS:")) proGpsMsg(msg+6); else if(msgCmp(msg, "+GPIP:")) proGPIPMsg(msg+6); else if(msgCmp(msg, "+GGIP:")) proGGIPMsg(msg+6); else if(msgCmp(msg, "SV")) proGmrMsg(msg); else if(msgCmp(msg, "+SMS:")) proSmsMsg(msg+5); else if(msgCmp(msg, "+ALARM")) proAlarmMsg(); else if(msgCmp(msg, "+POC:PEND")) proPendMsg(); else MSG_INFO(1, "skip:%d,%s", len,msg); } } //处理POC模块信息 void pocCmdHandler(unsigned char *msg, int len){ //有消息进来,如果不是+POC:SLEEP,POC都唤醒了 static char tmp[300],ch; static int k=0; unsigned int j; if(sutApp.authReady==0) return; if(sutApp.gtMode !=0 && sutApp.gtTMode != 0){ usbOutPut(msg, len);//TM模式下直接透传 return; } for(j=0;j<len;j++){//过滤 if(k>=sizeof(tmp)) k=0; tmp[k++]=msg[j]; if(ch=='\r' && msg[j]=='\n'){ if(k!=2){ //处理 k -=2;tmp[k]=0;//去掉回车换行 MakeStringToUpperCap(tmp, k); cmdsProcess(tmp,k); } k=0; } ch=msg[j]; } } static void proMicSpk(int mic, int spk){ if(mic==0 && spk==0){//0000 if(newPara.KeySound!=0) pttBeepStart(false); sutPocStatus.spk=0; sutPocStatus.mic=0; sutPocStatus.TONE=0; }else if(mic==1 && spk==0){//0100 if(newPara.KeySound!=0) pttBeepStart(false); sutPocStatus.mic=1; }else if(mic==0 && spk==1){//0001 if(newPara.KeySound!=0) paControl(true);//pttBeepStart(false); else paControl(true);//关闭提示音时,也要打开喇叭 sutPocStatus.spk=1; sutPocStatus.mic=0; }else if(mic==0 && spk==13){//0013 if(newPara.KeySound!=0) beepStart(TONE_SPECIAL); }else if(mic==0 && spk==2){ paControl(true); sutPocStatus.TONE=1; } } static void micPro(int mic){ switch(mic){ case 0://关闭mic sutPocStatus.mic=0; break; case 1://打开mic if(newPara.KeySound!=0) beepStart(TONE_NORMAL); sutPocStatus.mic=1; //sutPocStatus.spk=0; break; } } static void spkPro(int spk){ switch(spk){ case 0://tone音后关闭spk if(newPara.KeySound!=0) beepStart(TONE_NORMAL); sutPocStatus.spk=0; break; case 1://tone音后保持spk打开 if(newPara.KeySound!=0) beepStart(TONE_NORMAL); paControl(true); sutPocStatus.spk=1; sutPocStatus.mic=0; break; case 2://播放TTS paControl(true); sutPocStatus.TTS=1; break; case 13://抢麦失败,可以tone特殊�? if(newPara.KeySound!=0) beepStart(TONE_SPECIAL); break; } } /*POC已启动成�?*/ static void pocStartMsg(void){ sutApp.pocInitStatus=1; } /*当前账号所属群组列表信�?一次性获取所�? 不同应用采用不同需求指�? 从不在线到登录会主动上报一次列�? 发AT+POC=0D0000也会上报一次列�? msg:000000,iiii(组列表索�?,dddddddd(组ID),nnnn(组成员数),mmmmmm(组名�?*/ static void pro80Msg(char *msg){ char Groupname[POC_GROUP_USER_NAME_LEN*2]; char len; len=strlen(&msg[29+8]); memcpy(Groupname, &msg[29+8], len); //MakeStrEndByNewLine(msg); memset(sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name,0,POC_GROUP_USER_NAME_LEN*2); msg[25+8]=0; sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID=htoi(&msg[17+8]); if(sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID==0xFFFFFFFF)return; if(sutPocStatus.ListFillIndex>0){ if(sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID==sutPocStatus.AllGroups[sutPocStatus.ListFillIndex-1].ID){ MSG_INFO(1,"id===chongfu==================%d\r\n",sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID); return; } } if(msg[29+8]==0) sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name[0]=' '; else { LwEndingToBiEndingStr(Groupname,len); unicodeToGbk(Groupname, sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name, &len); } //msg[29+8]=0; MSG_INFO(1,"AllGroups===%s,%d,%d\r\n",sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name,sutPocStatus.ExceptionReadNum,sutPocStatus.ListFillIndex); sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].status=2; sutPocStatus.ListFillIndex++; MSG_INFO(1,"get groups end\r\n"); if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){ sutPocStatus.ListGetOneFlag=1; } } /*所在组成员信息列表 发AT+POC=0E0000xxxxxxxx查询 msg:010000,iiii(成员列表索引),dddddddd(成员ID),mmmmmmmm(成员名称)*/ static void pro81Msg(char *msg){ char Username[POC_GROUP_USER_NAME_LEN*2]; char len; len=strlen(&msg[25+8]); memcpy(Username, &msg[25+8], len); //MakeStrEndByNewLine(msg); memset(sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name,0,POC_GROUP_USER_NAME_LEN*2); msg[25+8]=0; sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID=htoi(&msg[17+8]); if(sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID==0xFFFFFFFF)return; if(sutPocStatus.ListFillIndex>0){ if(sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID==sutPocStatus.AllUsers[sutPocStatus.ListFillIndex-1].ID){ MSG_INFO(1,"id===chongfu==================%d\r\n",sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID); return; } } if(msg[29+8]==0) sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name[0]=' '; else { LwEndingToBiEndingStr(Username,len); unicodeToGbk(Username, sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name, &len); } //msg[29+8]=0; MSG_INFO(1,"AllUsers===%s,%d,%d\r\n",sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name,sutPocStatus.ExceptionReadNum,sutPocStatus.ListFillIndex); sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].status=msg[8]-0x30; sutPocStatus.ListFillIndex++; MSG_INFO(1,"get groups end\r\n"); if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){ sutPocStatus.ListGetOneFlag=1; } } /*登录状态信�? msg:ss(00未登�?02已登�?,dddddddd(成员id),mmmmmmmm(状态信息内�? 00 CEDECDF8C2E7C1ACBDD3 表示不在线,输出信息�?无网络连�?拨号�?成功) 00 CEDEB7A8C1ACBDD3 表示不在线,输出信息�?无法连接(IP 不对或定 向卡) 00 C3BBD3D0B7FECEF1 表示不在线,输出信息�?没有服务(没注�? 00 B5C7C2BDCAA7B0DC 表示不在线,输出信息�?登陆失败(账号错误) 00 0D5CBBAC5D0C5CFA2B4EDCEF3 账号信息错误 02 0001A750 B2E2CAD431BAC5(测试 1 �?,*/ static void pro82Msg(char *msg){ char buf[3],*pName; int type,len,i; char Username[POC_GROUP_USER_NAME_LEN*2]; buf[0]=msg[7];buf[1]=msg[8];buf[2]=0; type=atoi(buf); switch(type){ case 0: sutPocStatus.logined=0; // if(0==memcmp(msg+10, "CEDECDF8C2E7C1ACBDD3",20)) sutPocStatus.PocLineOffReason=1; // else if(0==memcmp(msg+10, "CEDEB7A8C1ACBDD3",16)) sutPocStatus.PocLineOffReason=2; // else if(0==memcmp(msg+10, "C3BBD3D0B7FECEF1",16)) sutPocStatus.PocLineOffReason=3; // else if(0==memcmp(msg+10, "B5C7C2BDCAA7B0DC",16)) sutPocStatus.PocLineOffReason=4; break; case 2: /* sutPocStatus.PocLineOffReason=0; len=strlen(msg+10); if(len>POC_GROUP_USER_NAME_LEN) len=POC_GROUP_USER_NAME_LEN; memcpy(Username, msg+10,len); Username[len]=0; StrAsciiToHex(Username, sutPocStatus.LocalUser.name); msg[10]=0; sutPocStatus.LocalUser.ID=strtol(&msg[2], &pName, 16); MSG_INFO(1, "Login ok"); sutPocStatus.loginResult=3; */ sutPocStatus.PocLineOffReason=0; len = strlen(&msg[17+8]); memcpy(Username,&msg[17+8],len); Username[len]=0; LwEndingToBiEndingStr(Username,len); unicodeToGbk(Username,sutPocStatus.LocalUser.name,&len); msg[17+8]=0; sutPocStatus.LocalUser.ID=strtol(&msg[9+8],&pName,16); MSG_INFO(1, "Login ok"); //getNameFlag=1;// sutPocStatus.loginResult=3; break; } } /*有人说话 msg:00,dddddddd(成员id),nnnnnnnn(成员名称)*/ static void pro83Msg(char *msg){ int len; char callerName[POC_GROUP_USER_NAME_LEN*2]; char *pName; backLightReset();//鏀跺埌鏈変汉璇磋瘽 len=strlen(msg+25);//17 if(len>POC_GROUP_USER_NAME_LEN) len=POC_GROUP_USER_NAME_LEN; //else i++;//�����0 Ҳ�������� memcpy(callerName,&msg[17+8],len); LwEndingToBiEndingStr(callerName,len); unicodeToGbk(callerName, sutPocStatus.CallName, &len); //StrUnicodeToAnsiBig(sutPocStatus.Callname,i,&msg[17+8]); *(msg+17+8) = 0; sutPocStatus.CallID = strtol(&msg[9+8],&pName,16); msg[17+8]=0; // memcpy(callerName, msg+10,len); // callerName[len]=0; // if(0!=memcmp(callerName, sutPocStatus.CallName,len)) StrAsciiToHex(callerName, sutPocStatus.CallName); } /*单呼响应信息 msg:00,mmmmmmmmmm(单呼结果信息) BAF4BDD0B3C9B9A6 表示 呼叫成功 BAF4BDD0CAA7B0DC 表示 呼叫失败 CDCBB3F6C1D9CAB1BAF4BDD0 表示 退出临时呼�? C1D9CAB1BAF4BDD031BAC5BBFA 表示 临时呼叫 1 号机*/ static void pro84Msg(char *msg){ //unsigned char danhureport[POC_GROUP_USER_NAME_LEN+1]; //StrAsciiToHex(msg+2, danhureport); ttsPlay(ENCODE_USER_GBK, msg+2); if(0==memcmp(msg+2, "C1D9CAB1", 8)) sutPocStatus.danHuStatus=1; else if(0==memcmp(msg+2, "CDCBB3F6", 8)) sutPocStatus.danHuStatus=0; else if(0==memcmp(msg+2, "BAF4BDD0B3C9B9A6", 16)) sutPocStatus.danHuStatus=1; } /*切换群组完成指令(表示已登�? msg:00,dddddddd(组id),nnnnnnnn(组名�?*/ static void pro86Msg(char *msg){ char buf[POC_GROUP_USER_NAME_LEN*4+40],*pName; int len,i; char GroupName[POC_GROUP_USER_NAME_LEN*2]={0}; char tmp[POC_GROUP_USER_NAME_LEN*2+20]={0}; char needTTs=0; if(msg[9]=='F'&&msg[10]=='F')return ; sutPocStatus.logined=1; if(msg[8]=='0'){ len = strlen(&msg[17+8]); MSG_INFO(1,"len====%d",len); memcpy(GroupName,&msg[17+8],len); GroupName[len]=0; msg[17+8]=0; sutPocStatus.LocalGroup.ID=strtol(&msg[9+8],&pName,16); LwEndingToBiEndingStr(GroupName,len); unicodeToGbk(GroupName, sutPocStatus.LocalGroup.name, &len); MSG_INFO(1,"groupnamelen======%d",len); MSG_INFO(1,"groupname======%s",sutPocStatus.LocalGroup.name); sutPocStatus.danHuStatus=0; }else if(msg[8]=='1'){ //����ģʽ sutPocStatus.danHuStatus=1; } /* len=strlen(msg+17)-2; if(len>POC_GROUP_USER_NAME_LEN) len=POC_GROUP_USER_NAME_LEN; memcpy(GroupName, msg+10,len); GroupName[len]=0; msg[17]=0; sutPocStatus.LocalGroup.ID=strtol(msg+2+9, &pName,16); StrAsciiToHex(GroupName, sutPocStatus.LocalGroup.name); if(sutPocStatus.firstLogin==0){ snprintf(tmp, sizeof(tmp), "%s,�ѵ�¼,%s", sutPocStatus.LocalUser.name,sutPocStatus.LocalGroup.name); backLightReset();//第一次登录时,保持屏亮起�? needTTs=1; }else{ snprintf(tmp, sizeof(tmp), "����,%s",sutPocStatus.LocalGroup.name); if(sutApp.groupTTSEnable!=0){ needTTs=1; sutApp.groupTTSEnable=0; } } if(needTTs!=0){ memset(buf, 0, sizeof(buf)); for(i=0;i<strlen(tmp);i++){ snprintf(GroupName, sizeof(GroupName), "%02x", tmp[i]); strcat(buf, GroupName); } ttsPlay(ENCODE_USER_GBK, buf); } */ sutPocStatus.firstLogin=1; } /*查询所属群组总数的响�? 发AT+POC=3D0000获得 msg:000000,nnnn(所属多少个群组)*/ static void pro3dMsg(char *msg){ char *pName; sutPocStatus.ListCurOnlineNum=strtol(&msg[6],&pName,16); sutPocStatus.ListUpdate=1; MSG_INFO(1, "groupNum:%d", sutPocStatus.ListCurOnlineNum); } /*查询所属在线成员总数的响�? 发AT+POC=3E0000获得 msg:000000,nnnn(所属多少个在线成员)*/ static void pro3eMsg(char *msg){ char *pName; sutPocStatus.ListCurOnlineNum=strtol(&msg[6],&pName,16); sutPocStatus.ListUpdate=1; MSG_INFO(1, "userNum:%d", sutPocStatus.ListCurOnlineNum); } /*查询所在组成员信息时返回,得到在线成员总数 msg:000000,nnnn(在线成员总数)*/ static void pro0eMsg(char *msg){ } /*定量查询所在群组中的在线成员信息响�? 发AT+POC=1E0000xxxxx获得 msg:010000,iiii(成员列表索引),dddddddd(成员ID),mmmmmmmm(成员名称)*/ static void pro1eMsg(char *msg){ char name[POC_GROUP_USER_NAME_LEN*2+1]; int len; unsigned long id; char *pTemp; if(!uiAssist.status)return 1; len = strlen(&msg[18]); if(len >= POC_GROUP_USER_NAME_LEN*2) len = POC_GROUP_USER_NAME_LEN*2; memcpy(name, &msg[18], len); name[len]=0; msg[18]=0; id=strtol(&msg[10],&pTemp,16); sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID=id; if(name[0]==0){ sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name[0]=' '; sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name[1]=0; }else StrAsciiToHex(name, sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name); sutPocStatus.ListFillIndex++; if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){ sutPocStatus.ListGetOneFlag=1; sutPocStatus.ListDetailValid=1; } } /*定时查询所属组信息 发AT+POC=1D0000xxxxx获得 msg:000000,iiii(组列表索�?,dddddddd(组ID),nnnn(成员个数),mmmmmmmmm(名称)*/ static void pro1dMsg(char *msg){ unsigned short num; char name[POC_GROUP_USER_NAME_LEN*2+1]; unsigned long id; unsigned short index; char *pTemp; int len; if(!uiAssist.status)return ; len = strlen(&msg[22]);//已去掉回车换�? if(len >= POC_GROUP_USER_NAME_LEN*2) len = POC_GROUP_USER_NAME_LEN*2; memcpy(name, &msg[22], len); name[len]=0; msg[22]=0; num=strtol(&msg[18],&pTemp,16); msg[18]=0; id=strtol(&msg[10],&pTemp,16); sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID=id; sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].usernum=num; if(name[0]==0){ sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name[0]=' '; sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name[1]=0; }else StrAsciiToHex(name, sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name); sutPocStatus.ListFillIndex++; if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){ sutPocStatus.ListGetOneFlag=1; sutPocStatus.ListDetailValid=1; } } /* +POC_VER:01027 msg=01027 */ static void pocGetVer(char *msg){ snprintf(sutApp.pocVersion, sizeof(sutApp.pocVersion), "%s",msg); } static void pocGetPpp(char *msg){ if(msg[0]=='1') sutApp.pocPpp=1; else sutApp.pocPpp=0; } /* +GAUTH:AD86EBCCECC4 msg=AD86EBCCECC4+回车 */ static void proGauthMsg(char *msg){ } /* +NOTE:0,1 msg=0,1+回车 */ static void proNoteMsg(char *msg){ MSG_INFO(1,"authAck:%s",msg); } /* +CTEC: 0,0 msg=0,0 */ static void proNetMode(char *msg){ unsigned char netModeValue; char cmd[30]; if(msg[0]<'0' || msg[0]>'9') return; netModeValue=atoi(msg); ctecCurrentSet=netModeValue; if(ctecCurrentSet != newPara.netMode){ snprintf(cmd, sizeof(cmd),"AT+CTEC=%d,%d\r\n", ctecCurrentSet, newPara.netMode); msgAtSend(cmd); } } /* +COPS: 0,2,"46000",7 msg=+COPS: 0,2,"46000",7 */ static void proCopsMsg(char *msg){ int i,j=0,codeType; char w=0; unsigned char netModeValue; for(i=0;i<strlen(msg);i++){ if(msg[i]==','){ if(++j==3){ codeType=msg[i+1]-0x30; if(codeType==7) codeType=4; if(netshowvalue!=codeType) netshowvalue=codeType; return; } }else if(msg[i]=='"'){ if(++w==1){ codeType=atoi(msg+i+1); if(codeType>0 && codeType != sutApp.copstype) sutApp.copstype=codeType; } } } } /* +SIMCROSS:0 msg=0/1 */ static void proSimMode(char *msg){ unsigned char tmpSim; tmpSim=msg[0]-0x30; if(tmpSim!=0 && tmpSim!=1) return; sutApp.simSel=tmpSim; } /* +UDP:0,5,30 msg=0,5,30 */ static void proPwrMode(char *msg){ int seg1,seg2; short i; char buf[15]; for(i=2;i<strlen(msg);i++){ if(msg[i]==','){ seg1=atoi(msg+2); seg2=atoi(msg+i+1); pwrModeAckHandler(seg1,seg2); } } } /* +FOTA:1,0 +FOTA:1,XXX +FOTA:0 +FOTA:1 +FOTA:2 msg=1,xxxx */ static void proFotaMsg(char *msg){ if(msg[1]==','){ if(msg[2]=='0' && msg[3]==0){ fotaStepSet(6); }else{ strcpy(sutApp.fotaVersion, msg+2); fotaStepSet(9); } }else if(msg[1]==0){ if(msg[0]=='0'){ fotaStepSet(7); }else if(msg[0]=='1') showLoading(); else if(msg[0]=='2'){ fotaStepSet(8); } } } /* SV63302_T02 msg=SV63302_T02 */ static void proGmrMsg(char *msg){ snprintf(sutApp.modemVer, sizeof(sutApp.modemVer), "%s", msg); } /* +SMS:1,B2E2CAD4313233 msg=1,B2E2CAD4313233 */ static void proSmsMsg(char *msg){ unsigned char smsType=msg[0]-0x30; unsigned len=strlen(msg+2); if(len%2 || 0!=restoreDataFormatByHex(msg+2,len)){ MSG_WARN(1, "sms data error"); return; } len /= 2; sutMess.codeType=smsType; sutSms.smsUpdate=1; memcpy(sutMess.GBKMess1+4, msg+2, len); } /*服务器报下发报警TTS,POC已播报,本信息只提示*/ static void proAlarmMsg(void){ } static void proPendMsg(void){ MSG_INFO(1, "active auth now"); msgAtSend("AT+GAUTH\r\n");//用于授权检�? } static void proToneMsg(char *msg){ #ifndef ENABLE_PWM_BEEP if(msg[0]=='1'){ sutPocStatus.TONE=1; paControl(true); }else if(msg[0]=='0'){ sutPocStatus.TONE=0; } #endif } /* +GPIP:183.131.13.10 msg=183.131.13.10 */ static void proGPIPMsg(char *msg){ if(strlen(msg)<7) return; if(strcmp(showPIP, msg)==0) return; snprintf(showPIP, sizeof(showPIP), "%s",msg); MSG_INFO(1, "updatePIP:%s", showPIP); } /* +GGIP:183.131.13.6 msg=183.131.13.6 */ static void proGGIPMsg(char *msg){ if(strlen(msg)<7) return; if(strcmp(showGIP, msg)==0) return; snprintf(showGIP, sizeof(showGIP), "%s",msg); MSG_INFO(1, "updateGIP:%s", showGIP); } /* +CSQ: 14,99 msg=14,99 */ static void proCsqMsg(char *msg){ int csq=atoi(msg); if(csq != sutApp.g_iCSQ) sutApp.g_iCSQ=csq; } static void pro96Msg(char *msg){ if(msg[10]=='0'){ paControl(true); sutPocStatus.mic=1; } else if(msg[10]=='3'){ paControl(true); // LCDBackLight(1); // LcdOnTimeCt=0; backLightReset(); sutPocStatus.logined=1; sutPocStatus.spk=1; sutPocStatus.mic=0; }else if(msg[10]=='4'){ sutPocStatus.spk=0; }else if(msg[10]=='1'){ sutPocStatus.mic=0; //uTimerCreate(UTIMER_CYTONE,30);//hyl-210630 } } static void pro28Msg(char *msg){ char buf[20]; if(msg[5]=='2' && msg[6]=='8'){ //PocGetTime=1; //+POC:2800000014040e10132002 StrAsciiToHex(&msg[13],buf); My_Clock.year=buf[0];; My_Clock.month=buf[1];; My_Clock.day=buf[2];; My_Clock.hour=buf[3];; My_Clock.min=buf[4];; My_Clock.sec=buf[5]; MSG_INFO(1,"NewTime:%02d-%02d-%02d %02d:%02d:%02d", My_Clock.year,My_Clock.month,My_Clock.day, My_Clock.hour,My_Clock.min,My_Clock.sec); sutApp.PocGetTime=1; return ; } } static void pro0dMsg(char *msg){ sutPocStatus.ListUpdate=1; sutPocStatus.ListCurOnlineNum=htoi(&msg[13])-1; MSG_INFO(1, "groupNum:%d", sutPocStatus.ListCurOnlineNum); } static void pro3bMsg (char *msg){ if(msg[5]=='3' && msg[6]=='B'){ sutPocStatus.ListUpdate=1; sutPocStatus.ListCurOnlineNum =htoi(&msg[21]); MSG_INFO(1, "UserNum:%d", sutPocStatus.ListCurOnlineNum); } } /* +HEADSET:1 msg=1 */ static void proHeadSet(char *msg){ switch(msg[0]){ case '0'://HEADSET CONNECT sutApp.earLev=1; msgAtSend("AT+AUDCH=1,3\r\n"); sutApp.pcant=2; break;//HEADSET DISCONNECTED case '1': sutApp.earLev=0; msgAtSend("AT+AUDCH=0,0\r\n"); sutApp.pcant=4; break;//HEADSET BTN PRESS case '2': micPttHandler(1); break;//HEADSET BTN RELEASED case '3': micPttHandler(0); break; } } char *ohpocGetICCID(void){ return NULL; } char *ohpocGetIMEI(void){ static char imei[16]={0}; if(imei[0]==0){ if(LSAPI_SIM_GetIMEI(imei)==0){ return imei; } } return NULL; } void ohpocGetClock(MY_CLOCK *myclock){ //current_zone_time(myclock); }