#include "includes.h" POC_DEF sutPocStatus; void pocDataInit(void){ memset((unsigned char *)&sutPocStatus, 0, sizeof(POC_DEF)); } 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; } /* MakeStringToUpperCap 遍历data,将非大写字母转成大写字母 */ void MakeStringToUpperCap(unsigned char *data, unsigned short len){ unsigned short i; for(i=0;i= 'a' && data[i] <= 'z') data[i] -= 0x20; } } /*控制查询POC设置状? dly:接口被调用的频率,单位ms*/ void pocProCtl(int dly){ //3绉掓煡璇竴娆? static unsigned short cnt=0; static unsigned short timecnt=0;// 5分钟校准一次时间 if(sutApp.gtMode!=0) return;//GT妯″紡鍚庝笉鍐嶆煡璇? if(++cnt<(5*1000/dly)) return; cnt=0; if(getAppObjStatus(ASLEEP_LCD)==0) return;//POC浼戠湢鏃讹紝涓嶅彂鎸囦护 msgAtSend("AT+COPS?\r\n"); msgAtSend("AT+CTEC?\r\n");//鏌ヨ褰撳墠缃戠粶鍒跺紡 msgAtSend("AT+CSQ\r\n");//鏌ヨ淇″彿寮哄害 msgAtSend("AT+POC=280000\r\n");//获取北京时间 #ifdef CONFIG_AUDIO_AFTER_INIT msgAtSend("AT+CACCP=0,0,1,\"\"\r\n");//检测mic是否被mute掉了 #endif } 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 proNoteMsg(char *msg); static void proNetMode(char *msg); static void proSimMode(char *msg); static void proGmrMsg(char *msg); static void proSmsMsg(char *msg); static void proCsqMsg(char *msg); static void proMicSpk(int mic, int spk); static void proCopsMsg(char *msg); static bool proMicGain(char *msg); static void pro96Msg(char *msg); static void pro28Msg(char *msg); static void pro0dMsg(char *msg); static void pro0eMsg(char *msg); static void pro3bMsg (char *msg); static void Pro7DMsg(char *msg); void pro8CMsg(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){ if(msgCmp(msg,"+POC")){ //是POC 信息 唤醒 if(!msgCmp(msg,"+POC:28")&&!msgCmp(msg,"+POC:85")&&!msgCmp(msg,"+POC:97")){ backLightReset(); tryWakeupApp(); MSG_INFO(1,"POCwakeup"); } } MSG_INFO(1,"POC:%s",msg); if(msgCmp(msg, "PocSleep")){//POC休眠? appSleepCtl(ASLEEP_POC, 0); }else if(msgCmp(msg, "+POC:WAKEUP")){//POC唤醒? }else if(msgCmp(msg, "+POC:8B")){ #if 1 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); #endif }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:86")) pro86Msg(msg); else if(msgCmp(msg, "+POC:83")) pro83Msg(msg); 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:0E")) pro0eMsg(msg); else if(msgCmp(msg, "+POC:3B")) pro3bMsg(msg); else if(msgCmp(msg, "+POC:7D")) Pro7DMsg(msg+13); else if(msgCmp(msg, "+POC:84")) pro84Msg(msg+7); else if(msgCmp(msg, "+CTEC:")) proNetMode(msg+7); else if(msgCmp(msg, "+CSQ: ")) proCsqMsg(msg+6); else if(msgCmp(msg, "+POC:8C00")) pro8CMsg(msg); else if(msgCmp(msg, "+POC:1D")) pro1dMsg(msg+7); // else if(msgCmp(msg, "+HEADSET:")) proHeadSet(msg+9); else if(msgCmp(msg, "+POC:START")) pocStartMsg(); else if(msgCmp(msg, "+POC_VER:")) pocGetVer(msg+9); else if(msgCmp(msg, "+NOTE:")) proNoteMsg(msg+6); else if(msgCmp(msg, "+SIMCROSS:")) proSimMode(msg+10); else if(msgCmp(msg, "SV")) proGmrMsg(msg); else if(msgCmp(msg, "+SMS:")) proSmsMsg(msg+5); else if(msgCmp(msg, "+COPS:")) proCopsMsg(msg); else if(msgCmp(msg, "+CPIN: READY")) sutApp.cardStatus=1; //else if(msgCmp(msg, "+CCID: ")) proCCIDMsg(msg+7); else if(msgCmp(msg, "+CACCP: ")){ if(false==proMicGain(msg+8)) proCaccpMsg(msg+8); }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=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]; char len; char Idbuf[5]={0}; if(msg[8]=='2')return; len=strlen(&msg[29]); memcpy(Groupname, &msg[29], len); memcpy(Idbuf,&msg[25],4); //MakeStrEndByNewLine(msg); memset(sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name,0,sizeof(sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name)); msg[25]=0; sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID=htoi(&msg[17]); if(sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID==0xFFFFFFFF){ if(sutUIstatus.Status==UIS_MENU_FRIEND_SEL){ sutPocStatus.ListUpdate=1; sutPocStatus.ListDetailValid=1; sutPocStatus.ListCurOnlineNum=htoi(Idbuf); //if(sutPocStatus.danHuStatus!=0)sutPocStatus.ListCurOnlineNum--;// 茶余单呼去掉临时群组 MSG_INFO(1, "friend:%d", sutPocStatus.ListCurOnlineNum); } 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]==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){ MSG_INFO(1,"get groups finish--\r\n"); sutPocStatus.ListGetOneFlag=1; } } /*所在组成员信息列表 发AT+POC=0E0000xxxxxxxx查询 msg:010000,iiii(成员列表索引),dddddddd(成员ID),mmmmmmmm(成员名称)*/ static void pro81Msg(char *msg){ char Username[POC_GROUP_USER_NAME_LEN]; char len; unsigned char i=0; if(sutPocStatus.NeedGetUser==2){ len=strlen(&msg[25]); memcpy(Username, &msg[25], len); memset(UserArr[sutPocStatus.ListFillIndex].UserName,0,POC_GROUP_USER_NAME_LEN); msg[25]=0; UserArr[sutPocStatus.ListFillIndex].id=htoi(&msg[17]); /* if(sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID==0xFFFFFFFF){ return; } */ if(msg[29]==0) UserArr[sutPocStatus.ListFillIndex].UserName[0]=' '; else { LwEndingToBiEndingStr(Username,len); unicodeToGbk(Username, UserArr[sutPocStatus.ListFillIndex].UserName, &len); } MSG_INFO(1,"GetAllUsers===%s,%d\r\n",UserArr[sutPocStatus.ListFillIndex].UserName,sutPocStatus.ListFillIndex); sutPocStatus.ListFillIndex++; if(sutPocStatus.ListFillIndex==sutPocStatus.UserSum){ sutPocStatus.NeedGetUser=0; /* ûleader */ } } if(sutPocStatus.NeedGetUser!=0)return;//ȡгԱϢ len=strlen(&msg[25]); memcpy(Username, &msg[25], len); memset(sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name,0,POC_GROUP_USER_NAME_LEN); msg[25]=0; sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID=htoi(&msg[17]); if(sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID==0xFFFFFFFF){ return; } sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].status=msg[8]-0x30; //1 if(sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].status==1&&sutUIstatus.Status==UIS_MENU_USER_SEL)return; //不在线 不显示 if(msg[29]==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++; if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){ sutPocStatus.ListGetOneFlag=1; MSG_INFO(1,"get users finish--\r\n"); } } /*登录状态信? 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; break; case 2: sutPocStatus.PocLineOffReason=0; len = strlen(&msg[17]); memcpy(Username,&msg[17],len); Username[len]=0; LwEndingToBiEndingStr(Username,len); unicodeToGbk(Username,sutPocStatus.LocalUser.name,&len); msg[17]=0; sutPocStatus.LocalUser.ID=strtol(&msg[9],&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; unsigned short i=0; unsigned char Needcat=1; char temp[POC_GROUP_USER_NAME_LEN]; len=strlen(msg); paControl(true); sutPocStatus.PaDlyStart=1; if(memcmp(&msg[len-28],"2857B28BDD8B2E002E002E000000",28)!=0)return; backLightReset();//閺€璺哄煂閺堝姹夌拠纾嬬樈 len=strlen(&msg[17])-28;//去掉 正在对讲话字样---茶余 if(len>POC_GROUP_USER_NAME_LEN) len=POC_GROUP_USER_NAME_LEN; //else i++;//把最后0 也拷贝进来 memcpy(callerName,&msg[17],len); LwEndingToBiEndingStr(callerName,len); unicodeToGbk(callerName, sutPocStatus.CallName, &len); //StrUnicodeToAnsiBig(sutPocStatus.Callname,i,&msg[17+8]); *(msg+17) = 0; sutPocStatus.CallID = strtol(&msg[9],&pName,16); msg[17]=0; for(i=0;i= 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); } /* +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;i0 && 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; } /* +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) sutApp.fotaStatus=1; else{ strcpy(sutApp.fotaVersion, msg+2); sutApp.fotaStatus=2; } }else if(msg[1]==0){ if(msg[0]=='0') sutApp.fotaStatus=3; else if(msg[0]=='1') sutApp.fotaStatus=4; else if(msg[0]=='2') sutApp.fotaStatus=5; } } /* 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); } /* +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'){ sutPocStatus.PaDlyStart=1; paControl(true); sutPocStatus.mic=1; } else if(msg[10]=='3'){ paControl(true); backLightReset(); sutPocStatus.logined=1; sutPocStatus.spk=1; sutPocStatus.mic=0; }else if(msg[10]=='4'){ sutPocStatus.spk=0; sutPocStatus.TTS=0; sutPocStatus.PaDlyStart=1; }else if(msg[10]=='1'){ sutPocStatus.PaDlyStart=1; sutPocStatus.mic=0; } } /* +POC:2800000016010A101F2401 */ static void pro28Msg(char *msg){ char buf[20]; if(msg[7]=='F' && msg[8]=='F')return; 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){ if(sutUIstatus.Status!=UIS_MENU_GROUP_SEL)return; sutPocStatus.ListUpdate=1; sutPocStatus.ListDetailValid=1; sutPocStatus.ListCurOnlineNum=htoi(&msg[13])-1; if(sutPocStatus.danHuStatus!=0)sutPocStatus.ListCurOnlineNum--;// 茶余单呼去掉临时群组 MSG_INFO(1, "groupNum:%d", sutPocStatus.ListCurOnlineNum); } static void pro0eMsg(char *msg){ sutPocStatus.ListUpdate=1; sutPocStatus.ListDetailValid=1; sutPocStatus.ListCurOnlineNum=htoi(&msg[13])-1; if(sutPocStatus.danHuStatus!=0)sutPocStatus.ListCurOnlineNum--;// 茶余单呼去掉临时群组 MSG_INFO(1, "friend:%d", sutPocStatus.ListCurOnlineNum); } //+POC:3b 00 0000 006c 0002 0001 //+POC:3b000000006c00020001 static void pro3bMsg (char *msg){ char buf[40]; if(msg[5]=='3' && msg[6]=='B'){ if(sutPocStatus.NeedGetUser==0){ sutPocStatus.ListUpdate=1; sutPocStatus.ListDetailValid=1; } sutPocStatus.ListCurOnlineNum =htoi(&msg[21]); msg[17]=0; sutPocStatus.UserSum= htoi(&msg[13]); if(sutPocStatus.NeedGetUser){ snprintf(buf, sizeof(buf), "AT+POC=130000%08x0000006400000000\r\n",sutPocStatus.LocalGroup.ID);//ĬϳԱ100 sutPocStatus.ListFillIndex=0; sutPocStatus.NeedGetUser=2; if(sutPocStatus.UserSum==0)sutPocStatus.NeedGetUser=0; msgAtSend(buf); //MSG_INFO(1,buf); } MSG_INFO(1, "UserSum:%d,UserOnline:%d",sutPocStatus.UserSum,sutPocStatus.ListCurOnlineNum); } } static void Pro7DMsg(char *msg){ int i,j,len,ver; char bufTemp[40]; len = strlen(msg); j=0; StrAsciiToHex(msg,bufTemp); strncpy(sutApp.pocVersion,bufTemp,sizeof(sutApp.pocVersion)); } /* +HEADSET:1 msg=1 */ void proHeadSet(char *msg){ switch(msg[0]){ case '0'://HEADSET CONNECT sutApp.earLev=1; //msgAtSend("AT+AUDCH=1,3\r\n"); sutApp.pcant=2; VolMicUpdate(); VolSpkUpdate(); break;//HEADSET DISCONNECTED case '1': sutApp.earLev=0; //msgAtSend("AT+AUDCH=0,0\r\n"); sutApp.pcant=4; VolMicUpdate(); VolSpkUpdate(); break;//HEADSET BTN PRESS case '2': micPttHandler(1); break;//HEADSET BTN RELEASED case '3': micPttHandler(0); break; } } /* +CCID: 898604851920C0133569 msg=898604851920C0133569 */ void proCCIDMsg(char *msg){ sutApp.cardStatus=1; msg[6]=0; sutApp.copstype=atoi(msg+4); } void LogoutOutTimeCheck(unsigned int interval){ //掉线后超过3分钟再登录,需要播放登录信息 static unsigned char lastLoginStatus=0; static unsigned int cnt=0; if(sutApp.reloginStatus == lastLoginStatus) return; if(sutApp.reloginStatus==0){//由在线变成掉线 if(++cnt>=(180000/interval)){ cnt=0; sutApp.reloginTts=1; } }else{//由掉线再上线 cnt=0; } lastLoginStatus=sutApp.reloginStatus; } /* +CACCP: "04000a00" msg="04000a00" */ static bool proMicGain(char *msg){ if(0==strncmp(msg+1, "00000000", 8)) sutApp.audioReconfig=1; else sutApp.audioReconfig=0; MSG_INFO(1, ">>NeedReconfigAudio:%s", sutApp.audioReconfig?"yes":"no"); return (sutApp.audioReconfig?true:false); } 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){ return; } //+POC:8C00934C0008 2222222222//data: cmd data void pro8CMsg(char *msg){ char buf[500]; char temp[3]={0}; char cmd=0; memcpy(temp,msg+17,2); cmd=htoi(temp); switch(cmd){ case NULLCMD://ű Recv_PackNewxinbiaopage(msg); break; case YAOYUN: LeaderRecv_handler(msg,1); break; case YAOBI: LeaderRecv_handler(msg,2); break; case GPSALLON: break; } }