poc.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866
  1. #include "includes.h"
  2. POC_DEF sutPocStatus;
  3. void pocDataInit(void){
  4. memset((unsigned char *)&sutPocStatus, 0, sizeof(POC_DEF));
  5. }
  6. unsigned long long htoi(char s[])
  7. {
  8. int i = 0;
  9. unsigned long long n = 0;
  10. if (s[0] == '0' && (s[1]=='x' || s[1]=='X')) i = 2;
  11. else i = 0;
  12. for (; (s[i] >= '0' && s[i] <= '9') || (s[i] >= 'a' && s[i] <= 'z') || (s[i] >='A' && s[i] <= 'Z');++i){
  13. if (tolower(s[i]) > '9') n = 16 * n + (10 + tolower(s[i]) - 'a');
  14. else n = 16 * n + (tolower(s[i]) - '0');
  15. }
  16. return n;
  17. }
  18. /*
  19. MakeStringToUpperCap
  20. �滚�data嚗���𧼮之�坔�瘥滩蓮�𣂼之�坔�瘥�
  21. */
  22. void MakeStringToUpperCap(unsigned char *data, unsigned short len){
  23. unsigned short i;
  24. for(i=0;i<len;i++)
  25. {
  26. if(data[i] >= 'a' && data[i] <= 'z')
  27. data[i] -= 0x20;
  28. }
  29. }
  30. /*�批��亥砭POC霈曄蔭�嗆�?
  31. dly:�亙藁鋡怨��函�憸𤑳�嚗��雿㤈s*/
  32. void pocProCtl(int dly){
  33. //3蝏㗇��∠��剔契憡�?
  34. static unsigned short cnt=0;
  35. static unsigned short timecnt=0;// 5����∪�銝�甈⊥𧒄��
  36. if(sutApp.gtMode!=0) return;//GT憒胼�喟插�𡁜�蝚厰�撊����?
  37. if(++cnt<(5*1000/dly)) return;
  38. cnt=0;
  39. if(getAppObjStatus(ASLEEP_LCD)==0) return;//POC瘚潭�皝a�霈寧�瘨枏�敶�纒�行擪
  40. msgAtSend("AT+COPS?\r\n");
  41. msgAtSend("AT+CTEC?\r\n");//�䎚��𡑒什�喳�蝻��蝎園�頝箇插
  42. msgAtSend("AT+CSQ\r\n");//�䎚��埈��喳蝙撖桀�摰�
  43. msgAtSend("AT+POC=280000\r\n");//�瑕��𦯀漪�園𡢿
  44. #ifdef CONFIG_AUDIO_AFTER_INIT
  45. msgAtSend("AT+CACCP=0,0,1,\"\"\r\n");//璉�瘚𢞵ic�臬炏鋡匍ute�劐�
  46. #endif
  47. }
  48. static void micPro(int mic);
  49. static void spkPro(int spk);
  50. static void pocStartMsg(void);
  51. static void pro80Msg(char *msg);
  52. static void pro81Msg(char *msg);
  53. static void pro82Msg(char *msg);
  54. static void pro83Msg(char *msg);
  55. static void pro84Msg(char *msg);
  56. static void pro86Msg(char *msg);
  57. static void pro3dMsg(char *msg);
  58. static void pro3eMsg(char *msg);
  59. static void pro0eMsg(char *msg);
  60. static void pro1eMsg(char *msg);
  61. static void pro1dMsg(char *msg);
  62. static void pocGetVer(char *msg);
  63. static void proNoteMsg(char *msg);
  64. static void proNetMode(char *msg);
  65. static void proSimMode(char *msg);
  66. static void proGmrMsg(char *msg);
  67. static void proSmsMsg(char *msg);
  68. static void proCsqMsg(char *msg);
  69. static void proMicSpk(int mic, int spk);
  70. static void proCopsMsg(char *msg);
  71. static bool proMicGain(char *msg);
  72. static void pro96Msg(char *msg);
  73. static void pro28Msg(char *msg);
  74. static void pro0dMsg(char *msg);
  75. static void pro0eMsg(char *msg);
  76. static void pro3bMsg (char *msg);
  77. static void Pro7DMsg(char *msg);
  78. void cmdsProcess(char *msg, int len){//撌脣縧�匧�頧行揢銵?
  79. int i,j;
  80. char buf[10];
  81. if(sutApp.pocInitStatus==0) sutApp.pocInitStatus=1;
  82. if(sutApp.gtMode==0){
  83. if(msgCmp(msg,"+POC")){
  84. //�烈OC 靽⊥� �日�
  85. if(!msgCmp(msg,"+POC:28")&&!msgCmp(msg,"+POC:85")&&!msgCmp(msg,"+POC:97")){
  86. backLightReset();
  87. tryWakeupApp();
  88. MSG_INFO(1,"POCwakeup");
  89. }
  90. }
  91. MSG_INFO(1,"POC:%s",msg);
  92. if(msgCmp(msg, "PocSleep")){//POC隡𤑳�鈭?
  93. appSleepCtl(ASLEEP_POC, 0);
  94. }else if(msgCmp(msg, "+POC:WAKEUP")){//POC�日�鈭?
  95. }else if(msgCmp(msg, "+POC:8B")){
  96. #if 1
  97. buf[0]=msg[7];buf[1]=msg[8];buf[2]=0;
  98. i=atoi(buf);
  99. buf[0]=msg[9];buf[1]=msg[10];buf[2]=0;
  100. j=atoi(buf);
  101. proMicSpk(i, j);
  102. #endif
  103. }else if(msgCmp(msg, "+LSHTTS: END")){
  104. sutPocStatus.TTS=0;
  105. }else if(msgCmp(msg, "+HTTS: START")){
  106. paControl(true);
  107. sutPocStatus.TTS=1;
  108. }else if(msgCmp(msg, "+POC:02000000")) setPocPara(msg+13,len-13);
  109. else if(msgCmp(msg,"+POC:9600")) pro96Msg(msg);
  110. else if(msgCmp(msg, "+POC:82")) pro82Msg(msg);
  111. else if(msgCmp(msg, "+POC:86")) pro86Msg(msg);
  112. else if(msgCmp(msg, "+POC:83")) pro83Msg(msg);
  113. else if(msgCmp(msg, "+POC:28")) pro28Msg(msg);
  114. else if(msgCmp(msg, "+POC:80")) pro80Msg(msg);
  115. else if(msgCmp(msg, "+POC:81")) pro81Msg(msg);
  116. else if(msgCmp(msg, "+POC:0D")) pro0dMsg(msg);
  117. //else if(msgCmp(msg, "+POC:0E")) pro0eMsg(msg);
  118. else if(msgCmp(msg, "+POC:3B")) pro3bMsg(msg);
  119. else if(msgCmp(msg, "+POC:7D")) Pro7DMsg(msg+13);
  120. else if(msgCmp(msg, "+POC:84")) pro84Msg(msg+7);
  121. else if(msgCmp(msg, "+CTEC:")) proNetMode(msg+7);
  122. else if(msgCmp(msg, "+CSQ: ")) proCsqMsg(msg+6);
  123. else if(msgCmp(msg, "+POC:1D")) pro1dMsg(msg+7);
  124. // else if(msgCmp(msg, "+HEADSET:")) proHeadSet(msg+9);
  125. else if(msgCmp(msg, "+POC:START")) pocStartMsg();
  126. else if(msgCmp(msg, "+POC_VER:")) pocGetVer(msg+9);
  127. else if(msgCmp(msg, "+NOTE:")) proNoteMsg(msg+6);
  128. else if(msgCmp(msg, "+SIMCROSS:")) proSimMode(msg+10);
  129. else if(msgCmp(msg, "SV")) proGmrMsg(msg);
  130. else if(msgCmp(msg, "+SMS:")) proSmsMsg(msg+5);
  131. else if(msgCmp(msg, "+COPS:")) proCopsMsg(msg);
  132. else if(msgCmp(msg, "+CPIN: READY")) sutApp.cardStatus=1;
  133. //else if(msgCmp(msg, "+CCID: ")) proCCIDMsg(msg+7);
  134. else if(msgCmp(msg, "+CACCP: ")){
  135. if(false==proMicGain(msg+8)) proCaccpMsg(msg+8);
  136. }else MSG_INFO(1, "skip:%d,%s", len,msg);
  137. }
  138. }
  139. //憭��POC璅∪�靽⊥�
  140. void pocCmdHandler(unsigned char *msg, int len){
  141. //�㗇��航��伐�憒��銝齿糓+POC:SLEEP嚗釶OC�賢𤧅�雴�
  142. static char tmp[300],ch;
  143. static int k=0;
  144. unsigned int j;
  145. if(sutApp.authReady==0) return;
  146. if(sutApp.gtMode !=0 && sutApp.gtTMode != 0){
  147. usbOutPut(msg, len);//TM璅∪�銝讠凒�仿�譍�
  148. return;
  149. }
  150. for(j=0;j<len;j++){//餈�誘
  151. if(k>=sizeof(tmp)) k=0;
  152. tmp[k++]=msg[j];
  153. if(ch=='\r' && msg[j]=='\n'){
  154. if(k!=2){
  155. //憭��
  156. k -=2;tmp[k]=0;//�餅��噼膠�Z�
  157. MakeStringToUpperCap(tmp, k);
  158. cmdsProcess(tmp,k);
  159. }
  160. k=0;
  161. }
  162. ch=msg[j];
  163. }
  164. }
  165. static void proMicSpk(int mic, int spk){
  166. if(mic==0 && spk==0){//0000
  167. if(newPara.KeySound!=0) pttBeepStart(false);
  168. sutPocStatus.spk=0;
  169. sutPocStatus.mic=0;
  170. sutPocStatus.TONE=0;
  171. }else if(mic==1 && spk==0){//0100
  172. if(newPara.KeySound!=0) pttBeepStart(false);
  173. sutPocStatus.mic=1;
  174. }else if(mic==0 && spk==1){//0001
  175. if(newPara.KeySound!=0) paControl(true);//pttBeepStart(false);
  176. else paControl(true);//�喲𡡒�鞟內�單𧒄嚗䔶�閬��撘���号
  177. sutPocStatus.spk=1;
  178. sutPocStatus.mic=0;
  179. }else if(mic==0 && spk==13){//0013
  180. if(newPara.KeySound!=0) beepStart(TONE_SPECIAL);
  181. }else if(mic==0 && spk==2){
  182. paControl(true);
  183. sutPocStatus.TONE=1;
  184. }
  185. }
  186. static void micPro(int mic){
  187. switch(mic){
  188. case 0://�喲𡡒mic
  189. sutPocStatus.mic=0;
  190. break;
  191. case 1://�枏�mic
  192. if(newPara.KeySound!=0) beepStart(TONE_NORMAL);
  193. sutPocStatus.mic=1;
  194. //sutPocStatus.spk=0;
  195. break;
  196. }
  197. }
  198. static void spkPro(int spk){
  199. switch(spk){
  200. case 0://tone�喳��喲𡡒spk
  201. if(newPara.KeySound!=0) beepStart(TONE_NORMAL);
  202. sutPocStatus.spk=0;
  203. break;
  204. case 1://tone�喳�靽脲�spk�枏�
  205. if(newPara.KeySound!=0) beepStart(TONE_NORMAL);
  206. paControl(true);
  207. sutPocStatus.spk=1;
  208. sutPocStatus.mic=0;
  209. break;
  210. case 2://�剜𦆮TTS
  211. paControl(true);
  212. sutPocStatus.TTS=1;
  213. break;
  214. case 13://�a漲憭梯揖嚗�虾隞另one�寞��?
  215. if(newPara.KeySound!=0) beepStart(TONE_SPECIAL);
  216. break;
  217. }
  218. }
  219. /*POC撌脣鍳�冽��?*/
  220. static void pocStartMsg(void){
  221. sutApp.pocInitStatus=1;
  222. }
  223. /*敶枏�韐血噡��撅䂿黎蝏��銵其縑�?銝�甈⊥�扯繮�𡝗��?
  224. 銝滚�摨𠉛鍂��鍂銝滚���瘙��隞?
  225. 隞𦒘��函瑪�啁蒈敶蓥�銝餃𢆡銝𦠜𥁒銝�甈∪�銵?
  226. �飊T+POC=0D0000銋煺�銝𦠜𥁒銝�甈∪�銵?
  227. msg:000000,iiii(蝏��銵函揣撘?,dddddddd(蝏�D),nnnn(蝏���䀹㺭),mmmmmm(蝏��蝘?*/
  228. static void pro80Msg(char *msg){
  229. char Groupname[POC_GROUP_USER_NAME_LEN];
  230. char len;
  231. char Idbuf[5]={0};
  232. if(msg[8]=='2')return;
  233. len=strlen(&msg[29]);
  234. memcpy(Groupname, &msg[29], len);
  235. memcpy(Idbuf,&msg[25],4);
  236. //MakeStrEndByNewLine(msg);
  237. memset(sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name,0,sizeof(sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name));
  238. msg[25]=0;
  239. sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID=htoi(&msg[17]);
  240. if(sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID==0xFFFFFFFF){
  241. sutPocStatus.ListUpdate=1;
  242. sutPocStatus.ListDetailValid=1;
  243. sutPocStatus.ListCurOnlineNum=htoi(Idbuf);
  244. //if(sutPocStatus.danHuStatus!=0)sutPocStatus.ListCurOnlineNum--;// �嗡��訫鐤�餅�銝湔𧒄蝢斤�
  245. MSG_INFO(1, "friend:%d", sutPocStatus.ListCurOnlineNum);
  246. return;
  247. }
  248. if(sutPocStatus.ListFillIndex>0){
  249. if(sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID==sutPocStatus.AllGroups[sutPocStatus.ListFillIndex-1].ID){
  250. MSG_INFO(1,"id===chongfu==================%d\r\n",sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID);
  251. return;
  252. }
  253. }
  254. if(msg[29]==0) sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name[0]=' ';
  255. else {
  256. LwEndingToBiEndingStr(Groupname,len);
  257. unicodeToGbk(Groupname, sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name, &len);
  258. }
  259. //msg[29+8]=0;
  260. MSG_INFO(1,"AllGroups===%s,%d,%d\r\n",sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name,sutPocStatus.ExceptionReadNum,sutPocStatus.ListFillIndex);
  261. sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].status=2;
  262. sutPocStatus.ListFillIndex++;
  263. MSG_INFO(1,"get groups end\r\n");
  264. if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){
  265. MSG_INFO(1,"get groups finish--\r\n");
  266. sutPocStatus.ListGetOneFlag=1;
  267. }
  268. }
  269. /*���函��𣂼�靽⊥��𡑒”
  270. �飊T+POC=0E0000xxxxxxxx�亥砭
  271. msg:010000,iiii(�𣂼��𡑒”蝝W�),dddddddd(�𣂼�ID),mmmmmmmm(�𣂼��滨妍)*/
  272. static void pro81Msg(char *msg){
  273. char Username[POC_GROUP_USER_NAME_LEN];
  274. char len;
  275. len=strlen(&msg[25]);
  276. memcpy(Username, &msg[25], len);
  277. memset(sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name,0,POC_GROUP_USER_NAME_LEN);
  278. msg[25]=0;
  279. sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID=htoi(&msg[17]);
  280. if(sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID==0xFFFFFFFF){
  281. return;
  282. }
  283. sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].status=msg[8]-0x30;
  284. //1 蝳餌瑪嚗� 2 �函瑪嚗���冽迨蝢斤�銝哨� 嚗� 3 �冽迨蝢斤�銝哨��函瑪嚗�
  285. if(sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].status==1&&sutUIstatus.Status==UIS_MENU_USER_SEL)return; //銝滚銁蝥� 銝齿遬蝷�
  286. if(msg[29]==0) sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name[0]=' ';
  287. else {
  288. LwEndingToBiEndingStr(Username,len);
  289. unicodeToGbk(Username, sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name, &len);
  290. }
  291. //msg[29+8]=0;
  292. MSG_INFO(1,"AllUsers===%s,%d,%d\r\n",sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name,sutPocStatus.ExceptionReadNum,sutPocStatus.ListFillIndex);
  293. sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].status=msg[8]-0x30;
  294. sutPocStatus.ListFillIndex++;
  295. MSG_INFO(1,"get groups end\r\n");
  296. if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){
  297. sutPocStatus.ListGetOneFlag=1;
  298. }
  299. }
  300. /*�餃��嗆��縑�?
  301. msg:ss(00�芰蒈敶?02撌脩蒈敶?,dddddddd(�𣂼�id),mmmmmmmm(�嗆��縑�臬�摰?
  302. 00 CEDECDF8C2E7C1ACBDD3 銵函內銝滚銁蝥選�颲枏枂靽⊥�銝?�删�蝏𡏭��?�典噡瘝?�𣂼�)
  303. 00 CEDEB7A8C1ACBDD3 銵函內銝滚銁蝥選�颲枏枂靽⊥�銝?�䭾�餈墧𦻖(IP 銝滚笆�硋� �穃㨃)
  304. 00 C3BBD3D0B7FECEF1 銵函內銝滚銁蝥選�颲枏枂靽⊥�銝?瘝⊥��滚𦛚(瘝⊥釣�?
  305. 00 B5C7C2BDCAA7B0DC 銵函內銝滚銁蝥選�颲枏枂靽⊥�銝?�駁�憭梯揖(韐血噡�躰秤)
  306. 00 0D5CBBAC5D0C5CFA2B4EDCEF3 韐血噡靽⊥��躰秤
  307. 02 0001A750 B2E2CAD431BAC5(瘚贝� 1 �?,*/
  308. static void pro82Msg(char *msg){
  309. char buf[3],*pName;
  310. int type,len,i;
  311. char Username[POC_GROUP_USER_NAME_LEN*2];
  312. buf[0]=msg[7];buf[1]=msg[8];buf[2]=0;
  313. type=atoi(buf);
  314. switch(type){
  315. case 0:
  316. sutPocStatus.logined=0;
  317. break;
  318. case 2:
  319. sutPocStatus.PocLineOffReason=0;
  320. len = strlen(&msg[17]);
  321. memcpy(Username,&msg[17],len);
  322. Username[len]=0;
  323. LwEndingToBiEndingStr(Username,len);
  324. unicodeToGbk(Username,sutPocStatus.LocalUser.name,&len);
  325. msg[17]=0;
  326. sutPocStatus.LocalUser.ID=strtol(&msg[9],&pName,16);
  327. MSG_INFO(1, "Login ok");
  328. //getNameFlag=1;//
  329. sutPocStatus.loginResult=3;
  330. break;
  331. }
  332. }
  333. /*�劐犖霂渲�
  334. msg:00,dddddddd(�𣂼�id),nnnnnnnn(�𣂼��滨妍)*/
  335. static void pro83Msg(char *msg){
  336. int len;
  337. char callerName[POC_GROUP_USER_NAME_LEN*2];
  338. char *pName;
  339. len=strlen(msg);
  340. paControl(true);
  341. sutPocStatus.PaDlyStart=1;
  342. if(memcmp(&msg[len-28],"2857B28BDD8B2E002E002E000000",28)!=0)return;
  343. backLightReset();//�算��箏���𤄄�㗎玏憪孵��删瑣戭祆�
  344. len=strlen(&msg[17])-28;//�餅� 甇�銁撖寡挈霂嘥���---�嗡�
  345. if(len>POC_GROUP_USER_NAME_LEN) len=POC_GROUP_USER_NAME_LEN;
  346. //else i++;//�𦠜���0 銋�鼧韐肽���
  347. memcpy(callerName,&msg[17],len);
  348. LwEndingToBiEndingStr(callerName,len);
  349. unicodeToGbk(callerName, sutPocStatus.CallName, &len);
  350. //StrUnicodeToAnsiBig(sutPocStatus.Callname,i,&msg[17+8]);
  351. *(msg+17) = 0;
  352. sutPocStatus.CallID = strtol(&msg[9+8],&pName,16);
  353. msg[17]=0;
  354. }
  355. /*�訫鐤�滚�靽⊥�
  356. msg:00,mmmmmmmmmm(�訫鐤蝏𤘪�靽⊥�)
  357. BAF4BDD0B3C9B9A6 銵函內 �澆㙈�𣂼�
  358. BAF4BDD0CAA7B0DC 銵函內 �澆㙈憭梯揖
  359. CDCBB3F6C1D9CAB1BAF4BDD0 銵函內 ���箔葩�嗅鐤�?
  360. C1D9CAB1BAF4BDD031BAC5BBFA 銵函內 銝湔𧒄�澆㙈 1 �瑟㦤*/
  361. static void pro84Msg(char *msg){
  362. LwEndingToBiEndingStr(msg+2,strlen(msg+2));
  363. ttsPlay(ENCODE_USER_UNICODE_BE, msg+2); //ENCODE_USER_UNICODE_BE
  364. if(0==memcmp(msg+2, "C1D9CAB1", 8)) sutPocStatus.danHuStatus=1;
  365. else if(0==memcmp(msg+2, "CDCBB3F6", 8)) sutPocStatus.danHuStatus=0;
  366. else if(0==memcmp(msg+2, "BAF4BDD0B3C9B9A6", 16)) sutPocStatus.danHuStatus=1;
  367. }
  368. /*��揢蝢斤�摰峕���誘(銵函內撌脩蒈敶?
  369. msg:00,dddddddd(蝏�d),nnnnnnnn(蝏��蝘?*/
  370. static void pro86Msg(char *msg){
  371. char buf[POC_GROUP_USER_NAME_LEN*4+40],*pName;
  372. int len,i;
  373. char GroupName[POC_GROUP_USER_NAME_LEN*2]={0};
  374. char tmp[POC_GROUP_USER_NAME_LEN*2+20]={0};
  375. char needTTs=0;
  376. if(msg[9]=='F'&&msg[10]=='F')return ;
  377. sutPocStatus.logined=1;
  378. if(msg[8]=='0'){
  379. len = strlen(&msg[17]);
  380. MSG_INFO(1,"len====%d",len);
  381. memcpy(GroupName,&msg[17],len);
  382. GroupName[len]=0;
  383. msg[17]=0;
  384. sutPocStatus.LocalGroup.ID=strtol(&msg[9],&pName,16);
  385. LwEndingToBiEndingStr(GroupName,len);
  386. unicodeToGbk(GroupName, sutPocStatus.LocalGroup.name, &len);
  387. MSG_INFO(1,"groupnamelen======%d",len);
  388. MSG_INFO(1,"groupname======%s",sutPocStatus.LocalGroup.name);
  389. sutPocStatus.danHuStatus=0;
  390. }else if(msg[8]=='1'){
  391. //�訫鐤璅∪�
  392. sutPocStatus.danHuStatus=1;
  393. }
  394. backLightReset();
  395. sutPocStatus.firstLogin=1;
  396. }
  397. /*�亥砭��撅䂿黎蝏��餅㺭���摨?
  398. �飊T+POC=3D0000�瑕�
  399. msg:000000,nnnn(��撅𧼮�撠睲葵蝢斤�)*/
  400. static void pro3dMsg(char *msg){
  401. char *pName;
  402. sutPocStatus.ListCurOnlineNum=strtol(&msg[6],&pName,16);
  403. sutPocStatus.ListUpdate=1;
  404. MSG_INFO(1, "groupNum:%d", sutPocStatus.ListCurOnlineNum);
  405. }
  406. /*�亥砭��撅𧼮銁蝥踵��䀹�餅㺭���摨?
  407. �飊T+POC=3E0000�瑕�
  408. msg:000000,nnnn(��撅𧼮�撠睲葵�函瑪�𣂼�)*/
  409. static void pro3eMsg(char *msg){
  410. char *pName;
  411. sutPocStatus.ListCurOnlineNum=strtol(&msg[6],&pName,16);
  412. sutPocStatus.ListUpdate=1;
  413. MSG_INFO(1, "userNum:%d", sutPocStatus.ListCurOnlineNum);
  414. }
  415. /*摰𡁻��亥砭���函黎蝏�葉��銁蝥踵��䀝縑�臬�摨?
  416. �飊T+POC=1E0000xxxxx�瑕�
  417. msg:010000,iiii(�𣂼��𡑒”蝝W�),dddddddd(�𣂼�ID),mmmmmmmm(�𣂼��滨妍)*/
  418. static void pro1eMsg(char *msg){
  419. char name[POC_GROUP_USER_NAME_LEN*2+1];
  420. int len;
  421. unsigned long id;
  422. char *pTemp;
  423. if(!uiAssist.status)return 1;
  424. len = strlen(&msg[18]);
  425. if(len >= POC_GROUP_USER_NAME_LEN*2) len = POC_GROUP_USER_NAME_LEN*2;
  426. memcpy(name, &msg[18], len);
  427. name[len]=0;
  428. msg[18]=0;
  429. id=strtol(&msg[10],&pTemp,16);
  430. sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID=id;
  431. if(name[0]==0){
  432. sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name[0]=' ';
  433. sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name[1]=0;
  434. }else StrAsciiToHex(name, sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name);
  435. sutPocStatus.ListFillIndex++;
  436. if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){
  437. sutPocStatus.ListGetOneFlag=1;
  438. sutPocStatus.ListDetailValid=1;
  439. }
  440. }
  441. /*摰𡁏𧒄�亥砭��撅䂿�靽⊥�
  442. �飊T+POC=1D0000xxxxx�瑕�
  443. msg:000000,iiii(蝏��銵函揣撘?,dddddddd(蝏�D),nnnn(�𣂼�銝芣㺭),mmmmmmmmm(�滨妍)*/
  444. static void pro1dMsg(char *msg){
  445. unsigned short num;
  446. char name[POC_GROUP_USER_NAME_LEN*2+1];
  447. unsigned long id;
  448. unsigned short index;
  449. char *pTemp;
  450. int len;
  451. if(!uiAssist.status)return ;
  452. len = strlen(&msg[22]);//摰豢�撟㯄鑬憭𦠜��痹蜇撏脩�?
  453. if(len >= POC_GROUP_USER_NAME_LEN*2) len = POC_GROUP_USER_NAME_LEN*2;
  454. memcpy(name, &msg[22], len);
  455. name[len]=0;
  456. msg[22]=0;
  457. num=strtol(&msg[18],&pTemp,16);
  458. msg[18]=0;
  459. id=strtol(&msg[10],&pTemp,16);
  460. sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID=id;
  461. sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].usernum=num;
  462. if(name[0]==0){
  463. sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name[0]=' ';
  464. sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name[1]=0;
  465. }else
  466. StrAsciiToHex(name, sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name);
  467. sutPocStatus.ListFillIndex++;
  468. if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){
  469. sutPocStatus.ListGetOneFlag=1;
  470. sutPocStatus.ListDetailValid=1;
  471. }
  472. }
  473. /*
  474. +POC_VER:01027
  475. msg=01027
  476. */
  477. static void pocGetVer(char *msg){
  478. snprintf(sutApp.pocVersion, sizeof(sutApp.pocVersion), "%s",msg);
  479. }
  480. /*
  481. +NOTE:0,1
  482. msg=0,1+�噼膠
  483. */
  484. static void proNoteMsg(char *msg){
  485. MSG_INFO(1,"authAck:%s",msg);
  486. }
  487. /*
  488. +CTEC: 0,0
  489. msg=0,0
  490. */
  491. static void proNetMode(char *msg){
  492. unsigned char netModeValue;
  493. char cmd[30];
  494. if(msg[0]<'0' || msg[0]>'9') return;
  495. netModeValue=atoi(msg);
  496. ctecCurrentSet=netModeValue;
  497. if(ctecCurrentSet != newPara.netMode){
  498. snprintf(cmd, sizeof(cmd),"AT+CTEC=%d,%d\r\n", ctecCurrentSet, newPara.netMode);
  499. msgAtSend(cmd);
  500. }
  501. }
  502. /*
  503. +COPS: 0,2,"46000",7
  504. msg=+COPS: 0,2,"46000",7
  505. */
  506. static void proCopsMsg(char *msg){
  507. int i,j=0,codeType;
  508. char w=0;
  509. unsigned char netModeValue;
  510. for(i=0;i<strlen(msg);i++){
  511. if(msg[i]==','){
  512. if(++j==3){
  513. codeType=msg[i+1]-0x30;
  514. if(codeType==7) codeType=4;
  515. if(netshowvalue!=codeType) netshowvalue=codeType;
  516. return;
  517. }
  518. }else if(msg[i]=='"'){
  519. if(++w==1){
  520. codeType=atoi(msg+i+1);
  521. if(codeType>0 && codeType != sutApp.copstype) sutApp.copstype=codeType;
  522. }
  523. }
  524. }
  525. }
  526. /*
  527. +SIMCROSS:0
  528. msg=0/1
  529. */
  530. static void proSimMode(char *msg){
  531. unsigned char tmpSim;
  532. tmpSim=msg[0]-0x30;
  533. if(tmpSim!=0 && tmpSim!=1) return;
  534. sutApp.simSel=tmpSim;
  535. }
  536. /*
  537. +FOTA:1,0
  538. +FOTA:1,XXX
  539. +FOTA:0
  540. +FOTA:1
  541. +FOTA:2
  542. msg=1,xxxx
  543. */
  544. static void proFotaMsg(char *msg){
  545. if(msg[1]==','){
  546. if(msg[2]=='0' && msg[3]==0) sutApp.fotaStatus=1;
  547. else{
  548. strcpy(sutApp.fotaVersion, msg+2);
  549. sutApp.fotaStatus=2;
  550. }
  551. }else if(msg[1]==0){
  552. if(msg[0]=='0') sutApp.fotaStatus=3;
  553. else if(msg[0]=='1') sutApp.fotaStatus=4;
  554. else if(msg[0]=='2') sutApp.fotaStatus=5;
  555. }
  556. }
  557. /*
  558. SV63302_T02
  559. msg=SV63302_T02
  560. */
  561. static void proGmrMsg(char *msg){
  562. snprintf(sutApp.modemVer, sizeof(sutApp.modemVer), "%s", msg);
  563. }
  564. /*
  565. +SMS:1,B2E2CAD4313233
  566. msg=1,B2E2CAD4313233
  567. */
  568. static void proSmsMsg(char *msg){
  569. unsigned char smsType=msg[0]-0x30;
  570. unsigned len=strlen(msg+2);
  571. if(len%2 || 0!=restoreDataFormatByHex(msg+2,len)){
  572. MSG_WARN(1, "sms data error");
  573. return;
  574. }
  575. len /= 2;
  576. sutMess.codeType=smsType;
  577. sutSms.smsUpdate=1;
  578. memcpy(sutMess.GBKMess1+4, msg+2, len);
  579. }
  580. /*
  581. +CSQ: 14,99
  582. msg=14,99
  583. */
  584. static void proCsqMsg(char *msg){
  585. int csq=atoi(msg);
  586. if(csq != sutApp.g_iCSQ) sutApp.g_iCSQ=csq;
  587. }
  588. static void pro96Msg(char *msg){
  589. if(msg[10]=='0'){
  590. sutPocStatus.PaDlyStart=1;
  591. paControl(true);
  592. sutPocStatus.mic=1;
  593. }
  594. else if(msg[10]=='3'){
  595. paControl(true);
  596. backLightReset();
  597. sutPocStatus.logined=1;
  598. sutPocStatus.spk=1;
  599. sutPocStatus.mic=0;
  600. }else if(msg[10]=='4'){
  601. sutPocStatus.spk=0;
  602. sutPocStatus.TTS=0;
  603. sutPocStatus.PaDlyStart=1;
  604. }else if(msg[10]=='1'){
  605. sutPocStatus.PaDlyStart=1;
  606. sutPocStatus.mic=0;
  607. }
  608. }
  609. /*
  610. +POC:2800000016010A101F2401
  611. */
  612. static void pro28Msg(char *msg){
  613. char buf[20];
  614. if(msg[7]=='F' && msg[8]=='F')return;
  615. if(msg[5]=='2' && msg[6]=='8'){
  616. //PocGetTime=1;
  617. //+POC:2800000014040e10132002
  618. StrAsciiToHex(&msg[13],buf);
  619. My_Clock.year=buf[0];;
  620. My_Clock.month=buf[1];;
  621. My_Clock.day=buf[2];;
  622. My_Clock.hour=buf[3];;
  623. My_Clock.min=buf[4];;
  624. My_Clock.sec=buf[5];
  625. MSG_INFO(1,"NewTime:%02d-%02d-%02d %02d:%02d:%02d",
  626. My_Clock.year,My_Clock.month,My_Clock.day,
  627. My_Clock.hour,My_Clock.min,My_Clock.sec);
  628. sutApp.PocGetTime=1;
  629. return ;
  630. }
  631. }
  632. static void pro0dMsg(char *msg){
  633. if(sutUIstatus.Status!=UIS_MENU_GROUP_SEL)return;
  634. sutPocStatus.ListUpdate=1;
  635. sutPocStatus.ListDetailValid=1;
  636. sutPocStatus.ListCurOnlineNum=htoi(&msg[13])-1;
  637. if(sutPocStatus.danHuStatus!=0)sutPocStatus.ListCurOnlineNum--;// �嗡��訫鐤�餅�銝湔𧒄蝢斤�
  638. MSG_INFO(1, "groupNum:%d", sutPocStatus.ListCurOnlineNum);
  639. }
  640. static void pro0eMsg(char *msg){
  641. sutPocStatus.ListUpdate=1;
  642. sutPocStatus.ListDetailValid=1;
  643. sutPocStatus.ListCurOnlineNum=htoi(&msg[13])-1;
  644. if(sutPocStatus.danHuStatus!=0)sutPocStatus.ListCurOnlineNum--;// �嗡��訫鐤�餅�銝湔𧒄蝢斤�
  645. MSG_INFO(1, "friend:%d", sutPocStatus.ListCurOnlineNum);
  646. }
  647. static void pro3bMsg (char *msg){
  648. if(msg[5]=='3' && msg[6]=='B'){
  649. sutPocStatus.ListUpdate=1;
  650. sutPocStatus.ListDetailValid=1;
  651. sutPocStatus.ListCurOnlineNum =htoi(&msg[21]);
  652. MSG_INFO(1, "UserNum:%d", sutPocStatus.ListCurOnlineNum);
  653. }
  654. }
  655. static void Pro7DMsg(char *msg){
  656. int i,j,len,ver;
  657. char bufTemp[40];
  658. len = strlen(msg);
  659. j=0;
  660. StrAsciiToHex(msg,bufTemp);
  661. strncpy(sutApp.pocVersion,bufTemp,sizeof(sutApp.pocVersion));
  662. }
  663. /*
  664. +HEADSET:1
  665. msg=1
  666. */
  667. void proHeadSet(char *msg){
  668. switch(msg[0]){
  669. case '0'://HEADSET CONNECT
  670. sutApp.earLev=1;
  671. //msgAtSend("AT+AUDCH=1,3\r\n");
  672. sutApp.pcant=2;
  673. VolMicUpdate();
  674. VolSpkUpdate();
  675. break;//HEADSET DISCONNECTED
  676. case '1':
  677. sutApp.earLev=0;
  678. //msgAtSend("AT+AUDCH=0,0\r\n");
  679. sutApp.pcant=4;
  680. VolMicUpdate();
  681. VolSpkUpdate();
  682. break;//HEADSET BTN PRESS
  683. case '2':
  684. micPttHandler(1);
  685. break;//HEADSET BTN RELEASED
  686. case '3':
  687. micPttHandler(0);
  688. break;
  689. }
  690. }
  691. /*
  692. +CCID: 898604851920C0133569
  693. msg=898604851920C0133569
  694. */
  695. void proCCIDMsg(char *msg){
  696. sutApp.cardStatus=1;
  697. msg[6]=0;
  698. sutApp.copstype=atoi(msg+4);
  699. }
  700. void LogoutOutTimeCheck(unsigned int interval){
  701. //�厩瑪�舘�餈�3����滨蒈敶𤏪���閬�偘�曄蒈敶蓥縑��
  702. static unsigned char lastLoginStatus=0;
  703. static unsigned int cnt=0;
  704. if(sutApp.reloginStatus == lastLoginStatus) return;
  705. if(sutApp.reloginStatus==0){//�勗銁蝥踹��鞉�蝥�
  706. if(++cnt>=(180000/interval)){
  707. cnt=0;
  708. sutApp.reloginTts=1;
  709. }
  710. }else{//�望�蝥踹�銝羓瑪
  711. cnt=0;
  712. }
  713. lastLoginStatus=sutApp.reloginStatus;
  714. }
  715. /*
  716. +CACCP: "04000a00"
  717. msg="04000a00"
  718. */
  719. static bool proMicGain(char *msg){
  720. if(0==strncmp(msg+1, "00000000", 8)) sutApp.audioReconfig=1;
  721. else sutApp.audioReconfig=0;
  722. MSG_INFO(1, ">>NeedReconfigAudio:%s", sutApp.audioReconfig?"yes":"no");
  723. return (sutApp.audioReconfig?true:false);
  724. }
  725. char *ohpocGetIMEI(void){
  726. static char imei[16]={0};
  727. if(imei[0]==0){
  728. if(LSAPI_SIM_GetIMEI(imei)==0){
  729. return imei;
  730. }
  731. }
  732. return NULL;
  733. }
  734. void ohpocGetClock(MY_CLOCK *myclock){
  735. return;
  736. }