123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801 |
- #include "includes.h"
- POC_DEF sutPocStatus;
- #if ENABLE_GWSD_POC
- char *ohpocGetIMEI(void){
- static char imei[16]={0};
- if(imei[0]==0){
- nwy_sim_result_type info={0};
- if(NWY_SMS_SUCCESS==nwy_sim_get_imei(&info)){
- snprintf(imei, sizeof(imei), "%s",info.nImei);
- }
- }
- return imei;
- }
- #endif
- void pocDataInit(void){
- memset((unsigned char *)&sutPocStatus, 0, sizeof(POC_DEF));
- }
- /*控制查询POC设置状态
- dly:接口被调用的频率,
- 单位ms*/
- void pocProCtl(int dly){
- //3秒查询一次
- static unsigned short cnt=0;
- static char step=0;
-
- if(sutApp.gtMode!=0) return;//GT模式后不再查询
- if(++cnt<(2*1000/dly)) return;
- cnt=0;
-
- if(getAppObjStatus(ASLEEP_POC)==0) return;//POC休眠时,不发指令
- if(sutApp.pocParaDone==0) msgAtSend("AT+POC=020000\r\n");//用于检测并设置POC参数
- if(step==0) msgToModem("AT$MYSYSINFO\r\n");//查询当前网络制式
- else if(step==1) msgToModem("AT+CSQ\r\n");//查询信号强度
- if(++step>=2) step=0;
- }
- static void micPro(int mic);
- static void spkPro(int spk);
- 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 pro0dMsg(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 proMic(int mic);
- static void proSpk(int spk);
- static void proVoiceMode(char *msg);
- void cmdsProcess(char *msg, int len){//已去掉回车换行
- int i;
- char *p,taddr[30],buf[100];
- if(sutApp.gtMode==0){
- appSleepCtl(ASLEEP_POC, 1);
- tryWakeupApp();
- MSG_INFO(1,"POC[%d]:%s",len,msg);
- if(msgCmp(msg, "+POC:SLEEP")){//POC休眠了
- appSleepCtl(ASLEEP_POC, 0);
- }else if(msgCmp(msg, "+POC:WAKEUP")){//POC唤醒了
- }else if(msgCmp(msg, "+POC:8B")){
- buf[0]=msg[9];buf[1]=msg[10];buf[2]=0;
- proSpk(atoi(buf));
- }else if(msgCmp(msg, "+POC:0B")){//+POC:0B000000
- buf[0]=msg[7];buf[1]=msg[8];buf[2]=0;
- proMic(atoi(buf));
- }else if(msgCmp(msg, "+POC:0C00")){
- proMic(1);//录音结束
- }else if(msgCmp(msg, "+CGPS:")) proGpsMsg(msg+6);
- else if(msgCmp(msg, "+TONE:")) proToneMsg(msg+6);
- else if(msgCmp(msg, "+POC:7A000000")) proPwrMode(msg+13);
- else if(msgCmp(msg, "+POC:81")) pro81Msg(msg+7);
- else if(msgCmp(msg, "+POC:82")) pro82Msg(msg+7);
- else if(msgCmp(msg, "+POC:3D")) pro3dMsg(msg+7);
- else if(msgCmp(msg, "+POC:3E")) pro3eMsg(msg+7);
- else if(msgCmp(msg, "+POC:80")) pro80Msg(msg+7);
- else if(msgCmp(msg, "+POC:1E")) pro1eMsg(msg+7);
- else if(msgCmp(msg, "+POC:86")) pro86Msg(msg+7);
- else if(msgCmp(msg, "+POC:83")) pro83Msg(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, "+POC:0D")) pro0dMsg(msg+7);
- else if(msgCmp(msg, "PTT_") || msgCmp(msg, "GW_")) pocGetVer(msg);
- else if(msgCmp(msg, "+NTTS: 0")) sutPocStatus.TTS=0;
- else if(msgCmp(msg, "+POC_PPP:")) pocGetPpp(msg+9);
- else if(msgCmp(msg, "+POC:02000000")){
- setPocPara(msg+13,len-13);
- sutApp.startPoc=1;
- }else if(msgCmp(msg, "+GAUTH:")) proGauthMsg(msg+7);
- else if(msgCmp(msg, "+NOTE:")) proNoteMsg(msg+6);
- else if(msgCmp(msg, "+RSIM:")) proSimMode(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, "+SMS:")) proSmsMsg(msg+5);
- else if(msgCmp(msg, "+ALARM")) proAlarmMsg();
- else if(msgCmp(msg, "+POC:PEND")) proPendMsg();
- else if(msgCmp(msg, "+POC:7F000000")) proVoiceMode(msg+13);
- 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.gtMode !=0 && sutApp.gtTMode != 0){
- nwy_usb_serial_send(msg, len);//TM模式下直接透传
- return;
- }
- for(j=0;j<len;j++){//过滤
- if(k>=sizeof(tmp)) k=0;
- tmp[k++]=msg[j];
-
- if(msg[j]=='\n'){
- if(k!=2){
- tmp[--k]=0;//去掉'\n'
- if(tmp[k-1]=='\r') tmp[--k]=0;//去掉'\r'
- MakeStringToUpperCap(tmp, k);
- cmdsProcess(tmp,k);
- }
- k=0;
- }
- ch=msg[j];
- }
- }
- static void proSpk( int spk){
- if(spk==0){//播放结束
- if(newPara.KeySound!=0) beepStart(TONE_NORMAL);
- sutPocStatus.spk=0;
- }else if(spk==1){//播放开始
- if(newPara.KeySound!=0) beepStart(TONE_NORMAL);
- paControl(true);
- sutPocStatus.spk=1;
- }
- }
- static void proMic(int mic){
- if(mic==1 || mic==2){//录音结束,2是禁止
- if(newPara.KeySound!=0) beepStart(TONE_NORMAL);
- sutPocStatus.mic=0;
- }else if(mic==0){//录音开始
- if(newPara.KeySound!=0) beepStart(TONE_NORMAL);
- sutPocStatus.mic=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;
- }
- }
- /*当前账号所属群组列表信息,一次性获取所有
- 不同应用采用不同需求指令
- 从不在线到登录会主动上报一次列表
- 发AT+POC=0D0000也会上报一次列表
- msg:000000,iiii(组列表索引),dddddddd(组ID),nnnn(组成员数),mmmmmm(组名称)*/
- static void pro80Msg(char *msg){
- int index,len,i;
- char buf[5],*pName;
- //先获取组索引
- memcpy(buf, msg+6, 4);
- buf[4]=0;index=strtol(buf, &pName,16);
- if(index<1 || index>POC_ALL_GROUPS_NUM) return;//索引从1开始
- index -= 1;
- //获取组名称
- len=strlen(msg+22);
- LwEndingToBiEndingStr(msg+22,len);
- unicodeToGbk(msg+22, sutPocStatus.AllGroups[index].name, &len);
- sutPocStatus.AllGroups[index].name[len]=0;
- //获取成员数
- msg[22]=0;
- sutPocStatus.AllGroups[index].usernum=strtol(&msg[18], &pName,16);
- //获取组ID
- msg[18]=0;
- sutPocStatus.AllGroups[index].ID=strtol(&msg[10], &pName, 16);
- }
- /*所在组成员信息列表
- 发AT+POC=0E0000xxxxxxxx查询
- msg:01(成员状态),0000,iiii(成员列表索引),dddddddd(成员ID),mmmmmmmm(成员名称)*/
- static void pro81Msg(char *msg){
- int index,len,status;
- char buf[5],*pName;
- //获取成员状态
- buf[0]=msg[0];buf[1]=msg[1];buf[2]=0;
- status=atoi(buf);
- if(status<=1 || status >4) return;
- //先获取成员索引值
- memcpy(buf, msg+6, 4);buf[4]=0;
- index=strtol(buf, &pName, 16);
- if(index<=0 || index>POC_ALL_USERS_NUM) return;
- index --;
- sutPocStatus.AllUsers[index].status=status;
- //获取成员名字
- len=strlen(msg+18);
- LwEndingToBiEndingStr(msg+18,len);
- unicodeToGbk(msg+18, sutPocStatus.AllUsers[index].name, &len);
- sutPocStatus.AllUsers[index].name[len]=0;
- //获取成员ID
- msg[18]=0;
- sutPocStatus.AllUsers[index].ID=strtol(msg+10, &pName, 16);
- }
- /*登录状态信息
- 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;
- char Username[POC_GROUP_USER_NAME_LEN*2];
- buf[0]=msg[0];buf[1]=msg[1];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.TTS=1;
- paControl(true);
- 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;
-
- LwEndingToBiEndingStr(Username,len);
- unicodeToGbk(Username, sutPocStatus.LocalUser.name, &len);
- sutPocStatus.LocalUser.name[len]=0;
-
- msg[10]=0;
- sutPocStatus.LocalUser.ID=strtol(&msg[2], &pName, 16);
- MSG_INFO(1, "Login ok");
- sutPocStatus.loginResult=3;
- break;
- }
- }
- /*有人说话
- msg:00,dddddddd(成员id),nnnnnnnn(成员名称)*/
- static void pro83Msg(char *msg){
- int len;
- char callerName[POC_GROUP_USER_NAME_LEN*2];
- backLightReset();//鏀跺埌鏈変汉璇磋瘽
- len=strlen(msg+10);
- if(len>POC_GROUP_USER_NAME_LEN) len=POC_GROUP_USER_NAME_LEN;
- memcpy(callerName, msg+10,len);
- callerName[len]=0;
- if(0!=memcmp(callerName, sutPocStatus.CallName,len)){
- LwEndingToBiEndingStr(callerName,len);
- unicodeToGbk(callerName, sutPocStatus.CallName, &len);
- sutPocStatus.CallName[len]=0;
- }
- }
- /*单呼响应信息
- 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_UNICODE_LE, 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;
- }
- void showHexBuf(unsigned char *data, int len){
- char info[100];
- char tmp[3];
- int i;
- memset(info, 0,sizeof(info));
- for(i=0;i<len;i++){
- sprintf(tmp, "%02x", data[i]);
- strcat(info, tmp);
- }
- MSG_INFO(1, "[%d]%s",len,info);
- }
- /*切换群组完成指令(表示已登录)
- 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];
- char tmp[POC_GROUP_USER_NAME_LEN*2+20];
- char needTTs=0;
-
- sutPocStatus.TTS=1;
- paControl(true);
- sutPocStatus.logined=1;
- len=strlen(msg+10);
- if(len>POC_GROUP_USER_NAME_LEN) len=POC_GROUP_USER_NAME_LEN;
- memcpy(GroupName, msg+10,len);
- GroupName[len]=0;
- LwEndingToBiEndingStr(GroupName,len);
- unicodeToGbk(GroupName, sutPocStatus.LocalGroup.name, &len);
- sutPocStatus.LocalGroup.name[len]=0;
-
- msg[10]=0;
- sutPocStatus.LocalGroup.ID=strtol(msg+2, &pName,16);
-
- 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.danHuStatus=0;
- 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){
- char *pName;
- //获取在线成员总数
- sutPocStatus.ListCurOnlineNum=strtol(msg+6, &pName, 16);
- MSG_INFO(1, "total user num:%d", sutPocStatus.ListCurOnlineNum);
- sutPocStatus.ListDetailValid=1;
- }
- /*定量查询所在群组中的在线成员信息响应
- 发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{
- LwEndingToBiEndingStr(name,len);
- unicodeToGbk(name, sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name, &len);
- sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name[len]=0;
- }
- 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
- LwEndingToBiEndingStr(name,len);
- unicodeToGbk(name, sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name, &len);
- sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name[len]=0;
-
- sutPocStatus.ListFillIndex++;
- if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){
- sutPocStatus.ListGetOneFlag=1;
- sutPocStatus.ListDetailValid=1;
- }
- }
- /*
- +POC:0D0000000002
- msg:0000 00 0002
- */
- static void pro0dMsg(char *msg){
- char *pName;
- //获取群组总数
- sutPocStatus.ListCurOnlineNum=strtol(msg+6, &pName, 16);
- MSG_INFO(1, "total group num:%d", sutPocStatus.ListCurOnlineNum);
- sutPocStatus.ListDetailValid=1;
- }
- /*
- PTT_RTOS_TT-V1.1.22 [Dec 17 2020 11:23:24]
- */
- static void pocGetVer(char *msg){
- int i;
- sutApp.pocInitStatus=1;
- for(i=0;i<strlen(msg);i++){
- if(msg[i]==' '){
- msg[i]=0;
- snprintf(sutApp.pocVersion, sizeof(sutApp.pocVersion), "%s",msg);
- return;
- }
- }
- }
- 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){
- #ifdef ENABLE_HGS_POC
- #define FACTORY_MARK "PC-TOOL"
- #define MODULE_MARK "PC-TEST-TOOL"
- unsigned char randBuf[20];
- unsigned char tmp[16+16+20];
- unsigned char imei[20];
- char sendBuf[sizeof(tmp)*2+20]="AT+SAUTH=";
- char *fillPtr=sendBuf+9;
- char buf[3];
- char *imeiPtr;
- int len,i,j;
- len=0;
- for(i=0;i<strlen(msg);i++){
- if(msg[i]=='\r' || msg[i]=='\n' || msg[i]=='\0') goto MSG_DONE;
- randBuf[len++]=msg[i];
- }
- MSG_DONE:
- //获取串并转换成16进制加密串
- if(len%2 || 0!=restoreDataFormatByHex(randBuf,len)){
- MSG_WARN(1, "auth get error");
- return;
- }
- len /= 2;//得到加密信息:长度为len的randBuf
- //对串进行加密码,加密对像为厂商+机型+设备ID[32+32+20]
- imeiPtr=ohpocGetIMEI();
- if(NULL==imeiPtr){
- MSG_WARN(1, "imei is not ready");
- return;
- }
- MSG_INFO(1, "IMEI:%s",imeiPtr);
- i=strlen(imeiPtr);
- if(i>sizeof(imei)){
- MSG_ERR(1, "imei buffer overflow:%d",i);
- return;
- }
- memcpy(imei, imeiPtr,i);//得到IMEI数据:长度为i的imei
- //组织协议数据
- memset(tmp, 0,sizeof(tmp));
- memcpy(tmp,FACTORY_MARK,strlen(FACTORY_MARK));
- memcpy(tmp+16, MODULE_MARK,strlen(MODULE_MARK));
- tmp[32]=i;
- memcpy(tmp+33,imei,i);
- i=32+1+i;
- //使用长度为len的randBuf加密串对长度为i的tmp进行加密
- extCodeBuffer(randBuf, len, tmp, i);
- //将长度为i的tmp内存以十六进制串打包发送
- for(j=0;j<i;j++){
- snprintf(buf, sizeof(buf),"%02x",tmp[j]);
- *fillPtr++=buf[0];
- *fillPtr++=buf[1];
- }
- *fillPtr++='\r';
- *fillPtr++='\n';
- *fillPtr++='\0';
- msgAtSend(sendBuf);
- MSG_INFO(0, sendBuf);
- #endif
- }
- /*
- +NOTE:0,1
- msg=0,1+回车
- */
- static void proNoteMsg(char *msg){
- MSG_INFO(1,"authAck:%s",msg);
- }
- /*
- $MYSYSINFO: 4,03
- msg=4,03
- */
- static void proNetMode(char *msg){
- unsigned char netModeValue;
-
- if(msg[0]<'0' || msg[0]>'9') return;
- netModeValue=msg[0]-0x30;
- netshowvalue=netModeValue;
- }
- /*
- +RSIM:1
- msg=1/2
- */
- static void proSimMode(char *msg){
- unsigned char tmpSim;
-
- tmpSim=msg[0]-0x31;
- if(tmpSim!=0 && tmpSim!=1) return;
- sutApp.simSel=tmpSim;
- }
- /*
- +POC:7A00000000
- msg=00
- */
- static void proPwrMode(char *msg){
- char buf[3];
- buf[0]=msg[0];buf[1]=msg[1];buf[2]=0;
-
- pwrModeAckHandler(atoi(buf));
- }
- /*
- +FOTA:1,0
- +FOTA:1,XXX
- +FOTA:0
- +FOTA:1
- +FOTA:2
- msg=1,xxxx
- */
- static void proFotaMsg(char *msg){
- char buf[50];
- if(msg[1]==','){
- if(msg[2]=='0' && msg[3]==0){
- fotaMsgShow("无更新版本");
- fotaStepSet(4);
- }else{
- strcpy(sutApp.fotaVersion, msg+2);
- snprintf(buf, sizeof(buf), "是否更新到:%s",sutApp.fotaVersion);
- fotaMsgShow(buf);
- fotaStepSet(1);
- }
- }else if(msg[1]==0){
- if(msg[0]=='0'){
- fotaMsgShow("升级失败");
- fotaStepSet(4);
- }else if(msg[0]=='1') fotaMsgShow("正在下载");
- else if(msg[0]=='2'){
- fotaMsgShow("下载成功,重启更新");
- fotaStepSet(3);
- }
- }
- }
- /*
- +GMR: N58-R07-STD-OE_V20-03
- msg= N58-R07-STD-OE_V20-03
- */
- static void proGmrMsg(char *msg){
- snprintf(sutApp.modemVer, sizeof(sutApp.modemVer), "%s", msg+1);
- }
- /*
- +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;
- }
- //////////////////////模块AT指令处理////////////////////
- void modemMsgProcess(char *msg){
- char tmp[60],ch;
- int i,j=0;
- if(sutApp.gtTMode!=0){
- nwy_usb_serial_send(msg, strlen(msg));
- return;
- }
- for(i=0;i<strlen(msg);i++){
- if(j>=sizeof(tmp)) j=0;
- tmp[j++]=msg[i];
- if(ch=='\r' && msg[i]=='\n'){
- if(j<sizeof(tmp)) tmp[j]=0;
- if(j>2){
- //去掉回车换行
- tmp[j-2]=0;
- if(msgCmp(tmp, "+GMR:")) proGmrMsg(tmp+5);
- else if(msgCmp(tmp, "+CSQ: ")) proCsqMsg(tmp+6);
- else if(msgCmp(tmp, "$MYSYSINFO:")) proNetMode(tmp+12);
- else if(msgCmp(tmp, "+CPIN: READY")) sutApp.cardStatus=1;
- MSG_INFO(1, "%s",tmp);
- }
- j=0;
- }
- ch=msg[i];
- }
-
- }
- ///////////////////////其它指令///////////////////////////
- void modemSetMic(int vol){
- if(vol != nwy_audio_get_mic_vol()) nwy_audio_set_mic_vol(vol);
- }
- void pocSetDomain(void){//设置域名前缀
- const char platform[]="platform2";
- const char pFormatMark[]="chn-gwsd-";
- char info[100]="AT+POC=120000";
- char tbuf[50];
-
- snprintf(tbuf, sizeof(tbuf), "%s,%s", platform,pFormatMark);
- AscStrTurnHexStr(tbuf, info+strlen(info));
- strcat(info, "00\r\n");
- msgAtSend(info);
- //MSG_INFO(0, "**%s",info);
- }
- void voiceModeSet(unsigned char voiceSel){
- if(voiceSel==0) msgAtSend("AT+POC=7E000000\r\n");
- else if(voiceSel==1) msgAtSend("AT+POC=7E000001\r\n");
- }
- void voiceModeQuery(void){
- msgAtSend("AT+POC=7F0000\r\n");
- }
- /*
- +POC:7f00000001
- msg=01
- */
- void proVoiceMode(char *msg){
- char buf[3];
- buf[0]=msg[0];buf[1]=msg[1];buf[2]=0;
- int mode=atol(buf);
- if((mode==0 || mode==1)&&mode != newPara.voiceSel){
- newPara.voiceSel=mode;
- sysIniSave();
- }
- }
|