poc.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905
  1. #include "includes.h"
  2. POC_DEF sutPocStatus;
  3. MY_CLOCK My_Clock;
  4. unsigned long long htoi(char s[])
  5. {
  6. int i = 0;
  7. unsigned long long n = 0;
  8. if (s[0] == '0' && (s[1]=='x' || s[1]=='X')) i = 2;
  9. else i = 0;
  10. for (; (s[i] >= '0' && s[i] <= '9') || (s[i] >= 'a' && s[i] <= 'z') || (s[i] >='A' && s[i] <= 'Z');++i){
  11. if (tolower(s[i]) > '9') n = 16 * n + (10 + tolower(s[i]) - 'a');
  12. else n = 16 * n + (tolower(s[i]) - '0');
  13. }
  14. return n;
  15. }
  16. void pocDataInit(void){
  17. memset((unsigned char *)&sutPocStatus, 0, sizeof(POC_DEF));
  18. }
  19. /*
  20. MakeStringToUpperCap
  21. 遍历data,将非大写字母转成大写字母
  22. */
  23. void MakeStringToUpperCap(T_UINT8 *data, T_UINT16 len){
  24. T_UINT16 i;
  25. for(i=0;i<len;i++)
  26. {
  27. if(data[i] >= 'a' && data[i] <= 'z')
  28. data[i] -= 0x20;
  29. }
  30. }
  31. /*鎺у埗鏌ヨ�POC璁剧疆鐘舵€?
  32. dly:鎺ュ彛琚�皟鐢ㄧ殑棰戠巼锛屽崟浣峬s*/
  33. void pocProCtl(int dly){
  34. //3绉掓煡璇�竴娆?
  35. static unsigned short cnt=0;
  36. if(sutApp.gtMode!=0) return;//GT妯″紡鍚庝笉鍐嶆煡璇?
  37. if(++cnt<(5*1000/dly)) return;
  38. cnt=0;
  39. if(getAppObjStatus(ASLEEP_POC)==0) return;//POC浼戠湢鏃讹紝涓嶅彂鎸囦护
  40. //if(sutApp.pocParaDone==0) msgAtSend("AT+POC=020000\r\n");//鐢ㄤ簬妫€娴嬪苟璁剧疆POC鍙傛暟
  41. if(sutApp.PocGetTime==0&&sutPocStatus.logined) msgAtSend("AT+POC=280000\r\n");//获取北京时间
  42. msgAtSend("AT+COPS?\r\n");
  43. msgAtSend("AT+CTEC?\r\n");//鏌ヨ�褰撳墠缃戠粶鍒跺紡
  44. msgAtSend("AT+CSQ\r\n");//鏌ヨ�淇″彿寮哄害
  45. }
  46. static void micPro(int mic);
  47. static void spkPro(int spk);
  48. static void pocStartMsg(void);
  49. static void pro80Msg(char *msg);
  50. static void pro81Msg(char *msg);
  51. static void pro82Msg(char *msg);
  52. static void pro83Msg(char *msg);
  53. static void pro84Msg(char *msg);
  54. static void pro86Msg(char *msg);
  55. static void pro3dMsg(char *msg);
  56. static void pro3eMsg(char *msg);
  57. static void pro0eMsg(char *msg);
  58. static void pro1eMsg(char *msg);
  59. static void pro1dMsg(char *msg);
  60. static void pocGetVer(char *msg);
  61. static void pocGetPpp(char *msg);
  62. static void proGauthMsg(char *msg);
  63. static void proNoteMsg(char *msg);
  64. static void proNetMode(char *msg);
  65. static void proSimMode(char *msg);
  66. static void proPwrMode(char *msg);
  67. static void proFotaMsg(char *msg);
  68. static void proGmrMsg(char *msg);
  69. static void proSmsMsg(char *msg);
  70. static void proAlarmMsg(void);
  71. static void proPendMsg(void);
  72. static void proToneMsg(char *msg);
  73. static void proGPIPMsg(char *msg);
  74. static void proGGIPMsg(char *msg);
  75. static void proCsqMsg(char *msg);
  76. static void proMicSpk(int mic, int spk);
  77. static void proCopsMsg(char *msg);
  78. static void proHeadSet(char *msg);
  79. static void pro96Msg(char *msg);
  80. static void pro28Msg(char *msg);
  81. static void pro0dMsg(char *msg);
  82. static void pro3bMsg (char *msg);
  83. void cmdsProcess(char *msg, int len){//宸插幓鎺夊洖杞︽崲琛?
  84. int i,j;
  85. char buf[10];
  86. if(sutApp.pocInitStatus==0) sutApp.pocInitStatus=1;
  87. if(sutApp.gtMode==0){
  88. appSleepCtl(ASLEEP_POC, 1);
  89. tryWakeupApp();
  90. MSG_INFO(1,"POC->app:%s",msg);
  91. if(msgCmp(msg, "PocSleep")){//POC浼戠湢浜?
  92. appSleepCtl(ASLEEP_POC, 0);
  93. }else if(msgCmp(msg, "+POC:WAKEUP")){//POC鍞ら啋浜?
  94. }else if(msgCmp(msg, "+POC:8B")){
  95. buf[0]=msg[7];buf[1]=msg[8];buf[2]=0;
  96. i=atoi(buf);
  97. buf[0]=msg[9];buf[1]=msg[10];buf[2]=0;
  98. j=atoi(buf);
  99. proMicSpk(i, j);
  100. }else if(msgCmp(msg, "+LSHTTS: END")){
  101. sutPocStatus.TTS=0;
  102. }else if(msgCmp(msg, "+HTTS: START")){
  103. paControl(true);
  104. sutPocStatus.TTS=1;
  105. }else if(msgCmp(msg, "+POC:02000000")) setPocPara(msg+13,len-13);
  106. else if(msgCmp(msg,"+POC:9600")) pro96Msg(msg);
  107. else if(msgCmp(msg, "+POC:82")) pro82Msg(msg);
  108. else if(msgCmp(msg, "+POC:START")) pocStartMsg();
  109. else if(msgCmp(msg, "+POC:86")) pro86Msg(msg);
  110. else if(msgCmp(msg, "+POC:83")) pro83Msg(msg);
  111. else if(msgCmp(msg, "+CTEC:")) proNetMode(msg+7);
  112. else if(msgCmp(msg, "+CSQ: ")) proCsqMsg(msg+6);
  113. else if(msgCmp(msg, "+SIMCROSS:")) proSimMode(msg+10);
  114. else if(msgCmp(msg, "+COPS:")) proCopsMsg(msg);
  115. else if(msgCmp(msg, "+CPIN: READY")) sutApp.cardStatus=1;
  116. else if(msgCmp(msg, "+POC:28")) pro28Msg(msg);
  117. else if(msgCmp(msg, "+POC:80")) pro80Msg(msg);
  118. else if(msgCmp(msg, "+POC:81")) pro81Msg(msg);
  119. else if(msgCmp(msg, "+POC:0D")) pro0dMsg(msg);
  120. else if(msgCmp(msg, "+POC:3B")) pro3bMsg(msg);
  121. else if(msgCmp(msg, "+CGPS:")) proGpsMsg(msg+6);
  122. else if(msgCmp(msg, "+TONE:")) proToneMsg(msg+6);
  123. else if(msgCmp(msg, "+UDP:")) proPwrMode(msg+5);
  124. else if(msgCmp(msg, "+POC:3D")) pro3dMsg(msg+7);
  125. else if(msgCmp(msg, "+POC:3E")) pro3eMsg(msg+7);
  126. else if(msgCmp(msg, "+POC:1E")) pro1eMsg(msg+7);
  127. else if(msgCmp(msg, "+POC:84")) pro84Msg(msg+7);
  128. else if(msgCmp(msg, "+POC:0E")) pro0eMsg(msg+7);
  129. else if(msgCmp(msg, "+POC:1D")) pro1dMsg(msg+7);
  130. else if(msgCmp(msg, "+HEADSET:")) proHeadSet(msg+9);
  131. else if(msgCmp(msg, "+POC_VER:")) pocGetVer(msg+9);
  132. else if(msgCmp(msg, "+POC_PPP:")) pocGetPpp(msg+9);
  133. else if(msgCmp(msg, "+GAUTH:")) proGauthMsg(msg+7);
  134. else if(msgCmp(msg, "+NOTE:")) proNoteMsg(msg+6);
  135. else if(msgCmp(msg, "+FOTA:")) proFotaMsg(msg+6);
  136. else if(msgCmp(msg, "+CGPS:")) proGpsMsg(msg+6);
  137. else if(msgCmp(msg, "+GPIP:")) proGPIPMsg(msg+6);
  138. else if(msgCmp(msg, "+GGIP:")) proGGIPMsg(msg+6);
  139. else if(msgCmp(msg, "SV")) proGmrMsg(msg);
  140. else if(msgCmp(msg, "+SMS:")) proSmsMsg(msg+5);
  141. else if(msgCmp(msg, "+ALARM")) proAlarmMsg();
  142. else if(msgCmp(msg, "+POC:PEND")) proPendMsg();
  143. else MSG_INFO(1, "skip:%d,%s", len,msg);
  144. }
  145. }
  146. //澶勭悊POC妯″潡淇℃伅
  147. void pocCmdHandler(unsigned char *msg, int len){
  148. //鏈夋秷鎭�繘鏉ワ紝濡傛灉涓嶆槸+POC:SLEEP锛孭OC閮藉敜閱掍簡
  149. static char tmp[300],ch;
  150. static int k=0;
  151. unsigned int j;
  152. if(sutApp.authReady==0) return;
  153. if(sutApp.gtMode !=0 && sutApp.gtTMode != 0){
  154. usbOutPut(msg, len);//TM妯″紡涓嬬洿鎺ラ€忎紶
  155. return;
  156. }
  157. for(j=0;j<len;j++){//杩囨护
  158. if(k>=sizeof(tmp)) k=0;
  159. tmp[k++]=msg[j];
  160. if(ch=='\r' && msg[j]=='\n'){
  161. if(k!=2){
  162. //澶勭悊
  163. k -=2;tmp[k]=0;//鍘绘帀鍥炶溅鎹㈣�
  164. MakeStringToUpperCap(tmp, k);
  165. cmdsProcess(tmp,k);
  166. }
  167. k=0;
  168. }
  169. ch=msg[j];
  170. }
  171. }
  172. static void proMicSpk(int mic, int spk){
  173. if(mic==0 && spk==0){//0000
  174. if(newPara.KeySound!=0) pttBeepStart(false);
  175. sutPocStatus.spk=0;
  176. sutPocStatus.mic=0;
  177. sutPocStatus.TONE=0;
  178. }else if(mic==1 && spk==0){//0100
  179. if(newPara.KeySound!=0) pttBeepStart(false);
  180. sutPocStatus.mic=1;
  181. }else if(mic==0 && spk==1){//0001
  182. if(newPara.KeySound!=0) paControl(true);//pttBeepStart(false);
  183. else paControl(true);//鍏抽棴鎻愮ず闊虫椂锛屼篃瑕佹墦寮€鍠囧彮
  184. sutPocStatus.spk=1;
  185. sutPocStatus.mic=0;
  186. }else if(mic==0 && spk==13){//0013
  187. if(newPara.KeySound!=0) beepStart(TONE_SPECIAL);
  188. }else if(mic==0 && spk==2){
  189. paControl(true);
  190. sutPocStatus.TONE=1;
  191. }
  192. }
  193. static void micPro(int mic){
  194. switch(mic){
  195. case 0://鍏抽棴mic
  196. sutPocStatus.mic=0;
  197. break;
  198. case 1://鎵撳紑mic
  199. if(newPara.KeySound!=0) beepStart(TONE_NORMAL);
  200. sutPocStatus.mic=1;
  201. //sutPocStatus.spk=0;
  202. break;
  203. }
  204. }
  205. static void spkPro(int spk){
  206. switch(spk){
  207. case 0://tone闊冲悗鍏抽棴spk
  208. if(newPara.KeySound!=0) beepStart(TONE_NORMAL);
  209. sutPocStatus.spk=0;
  210. break;
  211. case 1://tone闊冲悗淇濇寔spk鎵撳紑
  212. if(newPara.KeySound!=0) beepStart(TONE_NORMAL);
  213. paControl(true);
  214. sutPocStatus.spk=1;
  215. sutPocStatus.mic=0;
  216. break;
  217. case 2://鎾�斁TTS
  218. paControl(true);
  219. sutPocStatus.TTS=1;
  220. break;
  221. case 13://鎶㈤害澶辫触锛屽彲浠�one鐗规畩闊?
  222. if(newPara.KeySound!=0) beepStart(TONE_SPECIAL);
  223. break;
  224. }
  225. }
  226. /*POC宸插惎鍔ㄦ垚鍔?*/
  227. static void pocStartMsg(void){
  228. sutApp.pocInitStatus=1;
  229. }
  230. /*褰撳墠璐﹀彿鎵€灞炵兢缁勫垪琛ㄤ俊鎭?涓€娆℃€ц幏鍙栨墍鏈?
  231. 涓嶅悓搴旂敤閲囩敤涓嶅悓闇€姹傛寚浠?
  232. 浠庝笉鍦ㄧ嚎鍒扮櫥褰曚細涓诲姩涓婃姤涓€娆″垪琛?
  233. 鍙慉T+POC=0D0000涔熶細涓婃姤涓€娆″垪琛?
  234. msg:000000,iiii(缁勫垪琛ㄧ储寮?,dddddddd(缁処D),nnnn(缁勬垚鍛樻暟),mmmmmm(缁勫悕绉?*/
  235. static void pro80Msg(char *msg){
  236. char Groupname[POC_GROUP_USER_NAME_LEN*2];
  237. char len;
  238. len=strlen(&msg[29+8]);
  239. memcpy(Groupname, &msg[29+8], len);
  240. //MakeStrEndByNewLine(msg);
  241. memset(sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name,0,POC_GROUP_USER_NAME_LEN*2);
  242. msg[25+8]=0;
  243. sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID=htoi(&msg[17+8]);
  244. if(sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID==0xFFFFFFFF)return;
  245. if(sutPocStatus.ListFillIndex>0){
  246. if(sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID==sutPocStatus.AllGroups[sutPocStatus.ListFillIndex-1].ID){
  247. MSG_INFO(1,"id===chongfu==================%d\r\n",sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID);
  248. return;
  249. }
  250. }
  251. if(msg[29+8]==0) sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name[0]=' ';
  252. else {
  253. LwEndingToBiEndingStr(Groupname,len);
  254. unicodeToGbk(Groupname, sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name, &len);
  255. }
  256. //msg[29+8]=0;
  257. MSG_INFO(1,"AllGroups===%s,%d,%d\r\n",sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name,sutPocStatus.ExceptionReadNum,sutPocStatus.ListFillIndex);
  258. sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].status=2;
  259. sutPocStatus.ListFillIndex++;
  260. MSG_INFO(1,"get groups end\r\n");
  261. if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){
  262. sutPocStatus.ListGetOneFlag=1;
  263. }
  264. }
  265. /*鎵€鍦ㄧ粍鎴愬憳淇℃伅鍒楄〃
  266. 鍙慉T+POC=0E0000xxxxxxxx鏌ヨ�
  267. msg:010000,iiii(鎴愬憳鍒楄〃绱㈠紩),dddddddd(鎴愬憳ID),mmmmmmmm(鎴愬憳鍚嶇О)*/
  268. static void pro81Msg(char *msg){
  269. char Username[POC_GROUP_USER_NAME_LEN*2];
  270. char len;
  271. len=strlen(&msg[25+8]);
  272. memcpy(Username, &msg[25+8], len);
  273. //MakeStrEndByNewLine(msg);
  274. memset(sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name,0,POC_GROUP_USER_NAME_LEN*2);
  275. msg[25+8]=0;
  276. sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID=htoi(&msg[17+8]);
  277. if(sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID==0xFFFFFFFF)return;
  278. if(sutPocStatus.ListFillIndex>0){
  279. if(sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID==sutPocStatus.AllUsers[sutPocStatus.ListFillIndex-1].ID){
  280. MSG_INFO(1,"id===chongfu==================%d\r\n",sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID);
  281. return;
  282. }
  283. }
  284. if(msg[29+8]==0) sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name[0]=' ';
  285. else {
  286. LwEndingToBiEndingStr(Username,len);
  287. unicodeToGbk(Username, sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name, &len);
  288. }
  289. //msg[29+8]=0;
  290. MSG_INFO(1,"AllUsers===%s,%d,%d\r\n",sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name,sutPocStatus.ExceptionReadNum,sutPocStatus.ListFillIndex);
  291. sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].status=msg[8]-0x30;
  292. sutPocStatus.ListFillIndex++;
  293. MSG_INFO(1,"get groups end\r\n");
  294. if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){
  295. sutPocStatus.ListGetOneFlag=1;
  296. }
  297. }
  298. /*鐧诲綍鐘舵€佷俊鎭?
  299. msg:ss(00鏈�櫥褰?02宸茬櫥褰?,dddddddd(鎴愬憳id),mmmmmmmm(鐘舵€佷俊鎭�唴瀹?
  300. 00 CEDECDF8C2E7C1ACBDD3 琛ㄧず涓嶅湪绾匡紝杈撳嚭淇℃伅涓?鏃犵綉缁滆繛鎺?鎷ㄥ彿娌?鎴愬姛)
  301. 00 CEDEB7A8C1ACBDD3 琛ㄧず涓嶅湪绾匡紝杈撳嚭淇℃伅涓?鏃犳硶杩炴帴(IP 涓嶅�鎴栧畾 鍚戝崱)
  302. 00 C3BBD3D0B7FECEF1 琛ㄧず涓嶅湪绾匡紝杈撳嚭淇℃伅涓?娌℃湁鏈嶅姟(娌℃敞鍐?
  303. 00 B5C7C2BDCAA7B0DC 琛ㄧず涓嶅湪绾匡紝杈撳嚭淇℃伅涓?鐧婚檰澶辫触(璐﹀彿閿欒�)
  304. 00 0D5CBBAC5D0C5CFA2B4EDCEF3 璐﹀彿淇℃伅閿欒�
  305. 02 0001A750 B2E2CAD431BAC5(娴嬭瘯 1 鍙?,*/
  306. static void pro82Msg(char *msg){
  307. char buf[3],*pName;
  308. int type,len,i;
  309. char Username[POC_GROUP_USER_NAME_LEN*2];
  310. buf[0]=msg[7];buf[1]=msg[8];buf[2]=0;
  311. type=atoi(buf);
  312. switch(type){
  313. case 0:
  314. sutPocStatus.logined=0;
  315. // if(0==memcmp(msg+10, "CEDECDF8C2E7C1ACBDD3",20)) sutPocStatus.PocLineOffReason=1;
  316. // else if(0==memcmp(msg+10, "CEDEB7A8C1ACBDD3",16)) sutPocStatus.PocLineOffReason=2;
  317. // else if(0==memcmp(msg+10, "C3BBD3D0B7FECEF1",16)) sutPocStatus.PocLineOffReason=3;
  318. // else if(0==memcmp(msg+10, "B5C7C2BDCAA7B0DC",16)) sutPocStatus.PocLineOffReason=4;
  319. break;
  320. case 2:
  321. /*
  322. sutPocStatus.PocLineOffReason=0;
  323. len=strlen(msg+10);
  324. if(len>POC_GROUP_USER_NAME_LEN) len=POC_GROUP_USER_NAME_LEN;
  325. memcpy(Username, msg+10,len);
  326. Username[len]=0;
  327. StrAsciiToHex(Username, sutPocStatus.LocalUser.name);
  328. msg[10]=0;
  329. sutPocStatus.LocalUser.ID=strtol(&msg[2], &pName, 16);
  330. MSG_INFO(1, "Login ok");
  331. sutPocStatus.loginResult=3;
  332. */
  333. sutPocStatus.PocLineOffReason=0;
  334. len = strlen(&msg[17+8]);
  335. memcpy(Username,&msg[17+8],len);
  336. Username[len]=0;
  337. LwEndingToBiEndingStr(Username,len);
  338. unicodeToGbk(Username,sutPocStatus.LocalUser.name,&len);
  339. msg[17+8]=0;
  340. sutPocStatus.LocalUser.ID=strtol(&msg[9+8],&pName,16);
  341. MSG_INFO(1, "Login ok");
  342. //getNameFlag=1;//
  343. sutPocStatus.loginResult=3;
  344. break;
  345. }
  346. }
  347. /*鏈変汉璇磋瘽
  348. msg:00,dddddddd(鎴愬憳id),nnnnnnnn(鎴愬憳鍚嶇О)*/
  349. static void pro83Msg(char *msg){
  350. int len;
  351. char callerName[POC_GROUP_USER_NAME_LEN*2];
  352. char *pName;
  353. backLightReset();//閺€璺哄煂閺堝�姹夌拠纾嬬樈
  354. len=strlen(msg+25);//17
  355. if(len>POC_GROUP_USER_NAME_LEN) len=POC_GROUP_USER_NAME_LEN;
  356. //else i++;//把最后0 也拷贝进来
  357. memcpy(callerName,&msg[17+8],len);
  358. LwEndingToBiEndingStr(callerName,len);
  359. unicodeToGbk(callerName, sutPocStatus.CallName, &len);
  360. //StrUnicodeToAnsiBig(sutPocStatus.Callname,i,&msg[17+8]);
  361. *(msg+17+8) = 0;
  362. sutPocStatus.CallID = strtol(&msg[9+8],&pName,16);
  363. msg[17+8]=0;
  364. // memcpy(callerName, msg+10,len);
  365. // callerName[len]=0;
  366. // if(0!=memcmp(callerName, sutPocStatus.CallName,len)) StrAsciiToHex(callerName, sutPocStatus.CallName);
  367. }
  368. /*鍗曞懠鍝嶅簲淇℃伅
  369. msg:00,mmmmmmmmmm(鍗曞懠缁撴灉淇℃伅)
  370. BAF4BDD0B3C9B9A6 琛ㄧず 鍛煎彨鎴愬姛
  371. BAF4BDD0CAA7B0DC 琛ㄧず 鍛煎彨澶辫触
  372. CDCBB3F6C1D9CAB1BAF4BDD0 琛ㄧず 閫€鍑轰复鏃跺懠鍙?
  373. C1D9CAB1BAF4BDD031BAC5BBFA 琛ㄧず 涓存椂鍛煎彨 1 鍙锋満*/
  374. static void pro84Msg(char *msg){
  375. //unsigned char danhureport[POC_GROUP_USER_NAME_LEN+1];
  376. //StrAsciiToHex(msg+2, danhureport);
  377. ttsPlay(ENCODE_USER_GBK, msg+2);
  378. if(0==memcmp(msg+2, "C1D9CAB1", 8)) sutPocStatus.danHuStatus=1;
  379. else if(0==memcmp(msg+2, "CDCBB3F6", 8)) sutPocStatus.danHuStatus=0;
  380. else if(0==memcmp(msg+2, "BAF4BDD0B3C9B9A6", 16)) sutPocStatus.danHuStatus=1;
  381. }
  382. /*鍒囨崲缇ょ粍瀹屾垚鎸囦护(琛ㄧず宸茬櫥褰?
  383. msg:00,dddddddd(缁刬d),nnnnnnnn(缁勫悕绉?*/
  384. static void pro86Msg(char *msg){
  385. char buf[POC_GROUP_USER_NAME_LEN*4+40],*pName;
  386. int len,i;
  387. char GroupName[POC_GROUP_USER_NAME_LEN*2]={0};
  388. char tmp[POC_GROUP_USER_NAME_LEN*2+20]={0};
  389. char needTTs=0;
  390. if(msg[9]=='F'&&msg[10]=='F')return ;
  391. sutPocStatus.logined=1;
  392. if(msg[8]=='0'){
  393. len = strlen(&msg[17+8]);
  394. MSG_INFO(1,"len====%d",len);
  395. memcpy(GroupName,&msg[17+8],len);
  396. GroupName[len]=0;
  397. msg[17+8]=0;
  398. sutPocStatus.LocalGroup.ID=strtol(&msg[9+8],&pName,16);
  399. LwEndingToBiEndingStr(GroupName,len);
  400. unicodeToGbk(GroupName, sutPocStatus.LocalGroup.name, &len);
  401. MSG_INFO(1,"groupnamelen======%d",len);
  402. MSG_INFO(1,"groupname======%s",sutPocStatus.LocalGroup.name);
  403. sutPocStatus.danHuStatus=0;
  404. }else if(msg[8]=='1'){
  405. //单呼模式
  406. sutPocStatus.danHuStatus=1;
  407. }
  408. /*
  409. len=strlen(msg+17)-2;
  410. if(len>POC_GROUP_USER_NAME_LEN) len=POC_GROUP_USER_NAME_LEN;
  411. memcpy(GroupName, msg+10,len);
  412. GroupName[len]=0;
  413. msg[17]=0;
  414. sutPocStatus.LocalGroup.ID=strtol(msg+2+9, &pName,16);
  415. StrAsciiToHex(GroupName, sutPocStatus.LocalGroup.name);
  416. if(sutPocStatus.firstLogin==0){
  417. snprintf(tmp, sizeof(tmp), "%s,已登录,%s", sutPocStatus.LocalUser.name,sutPocStatus.LocalGroup.name);
  418. backLightReset();//绗�竴娆$櫥褰曟椂锛屼繚鎸佸睆浜�捣鏉?
  419. needTTs=1;
  420. }else{
  421. snprintf(tmp, sizeof(tmp), "进入,%s",sutPocStatus.LocalGroup.name);
  422. if(sutApp.groupTTSEnable!=0){
  423. needTTs=1;
  424. sutApp.groupTTSEnable=0;
  425. }
  426. }
  427. if(needTTs!=0){
  428. memset(buf, 0, sizeof(buf));
  429. for(i=0;i<strlen(tmp);i++){
  430. snprintf(GroupName, sizeof(GroupName), "%02x", tmp[i]);
  431. strcat(buf, GroupName);
  432. }
  433. ttsPlay(ENCODE_USER_GBK, buf);
  434. }
  435. */
  436. sutPocStatus.firstLogin=1;
  437. }
  438. /*鏌ヨ�鎵€灞炵兢缁勬€绘暟鐨勫搷搴?
  439. 鍙慉T+POC=3D0000鑾峰緱
  440. msg:000000,nnnn(鎵€灞炲�灏戜釜缇ょ粍)*/
  441. static void pro3dMsg(char *msg){
  442. char *pName;
  443. sutPocStatus.ListCurOnlineNum=strtol(&msg[6],&pName,16);
  444. sutPocStatus.ListUpdate=1;
  445. MSG_INFO(1, "groupNum:%d", sutPocStatus.ListCurOnlineNum);
  446. }
  447. /*鏌ヨ�鎵€灞炲湪绾挎垚鍛樻€绘暟鐨勫搷搴?
  448. 鍙慉T+POC=3E0000鑾峰緱
  449. msg:000000,nnnn(鎵€灞炲�灏戜釜鍦ㄧ嚎鎴愬憳)*/
  450. static void pro3eMsg(char *msg){
  451. char *pName;
  452. sutPocStatus.ListCurOnlineNum=strtol(&msg[6],&pName,16);
  453. sutPocStatus.ListUpdate=1;
  454. MSG_INFO(1, "userNum:%d", sutPocStatus.ListCurOnlineNum);
  455. }
  456. /*鏌ヨ�鎵€鍦ㄧ粍鎴愬憳淇℃伅鏃惰繑鍥烇紝寰楀埌鍦ㄧ嚎鎴愬憳鎬绘暟
  457. msg:000000,nnnn(鍦ㄧ嚎鎴愬憳鎬绘暟)*/
  458. static void pro0eMsg(char *msg){
  459. }
  460. /*瀹氶噺鏌ヨ�鎵€鍦ㄧ兢缁勪腑鐨勫湪绾挎垚鍛樹俊鎭�搷搴?
  461. 鍙慉T+POC=1E0000xxxxx鑾峰緱
  462. msg:010000,iiii(鎴愬憳鍒楄〃绱㈠紩),dddddddd(鎴愬憳ID),mmmmmmmm(鎴愬憳鍚嶇О)*/
  463. static void pro1eMsg(char *msg){
  464. char name[POC_GROUP_USER_NAME_LEN*2+1];
  465. int len;
  466. unsigned long id;
  467. char *pTemp;
  468. if(!uiAssist.status)return 1;
  469. len = strlen(&msg[18]);
  470. if(len >= POC_GROUP_USER_NAME_LEN*2) len = POC_GROUP_USER_NAME_LEN*2;
  471. memcpy(name, &msg[18], len);
  472. name[len]=0;
  473. msg[18]=0;
  474. id=strtol(&msg[10],&pTemp,16);
  475. sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].ID=id;
  476. if(name[0]==0){
  477. sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name[0]=' ';
  478. sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name[1]=0;
  479. }else StrAsciiToHex(name, sutPocStatus.AllUsers[sutPocStatus.ListFillIndex].name);
  480. sutPocStatus.ListFillIndex++;
  481. if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){
  482. sutPocStatus.ListGetOneFlag=1;
  483. sutPocStatus.ListDetailValid=1;
  484. }
  485. }
  486. /*瀹氭椂鏌ヨ�鎵€灞炵粍淇℃伅
  487. 鍙慉T+POC=1D0000xxxxx鑾峰緱
  488. msg:000000,iiii(缁勫垪琛ㄧ储寮?,dddddddd(缁処D),nnnn(鎴愬憳涓�暟),mmmmmmmmm(鍚嶇О)*/
  489. static void pro1dMsg(char *msg){
  490. unsigned short num;
  491. char name[POC_GROUP_USER_NAME_LEN*2+1];
  492. unsigned long id;
  493. unsigned short index;
  494. char *pTemp;
  495. int len;
  496. if(!uiAssist.status)return ;
  497. len = strlen(&msg[22]);//宸插幓鎺夊洖杞︽崲琛?
  498. if(len >= POC_GROUP_USER_NAME_LEN*2) len = POC_GROUP_USER_NAME_LEN*2;
  499. memcpy(name, &msg[22], len);
  500. name[len]=0;
  501. msg[22]=0;
  502. num=strtol(&msg[18],&pTemp,16);
  503. msg[18]=0;
  504. id=strtol(&msg[10],&pTemp,16);
  505. sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].ID=id;
  506. sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].usernum=num;
  507. if(name[0]==0){
  508. sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name[0]=' ';
  509. sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name[1]=0;
  510. }else
  511. StrAsciiToHex(name, sutPocStatus.AllGroups[sutPocStatus.ListFillIndex].name);
  512. sutPocStatus.ListFillIndex++;
  513. if(sutPocStatus.ListFillIndex==sutPocStatus.ExceptionReadNum){
  514. sutPocStatus.ListGetOneFlag=1;
  515. sutPocStatus.ListDetailValid=1;
  516. }
  517. }
  518. /*
  519. +POC_VER:01027
  520. msg=01027
  521. */
  522. static void pocGetVer(char *msg){
  523. snprintf(sutApp.pocVersion, sizeof(sutApp.pocVersion), "%s",msg);
  524. }
  525. static void pocGetPpp(char *msg){
  526. if(msg[0]=='1') sutApp.pocPpp=1;
  527. else sutApp.pocPpp=0;
  528. }
  529. /*
  530. +GAUTH:AD86EBCCECC4
  531. msg=AD86EBCCECC4+鍥炶溅
  532. */
  533. static void proGauthMsg(char *msg){
  534. }
  535. /*
  536. +NOTE:0,1
  537. msg=0,1+鍥炶溅
  538. */
  539. static void proNoteMsg(char *msg){
  540. MSG_INFO(1,"authAck:%s",msg);
  541. }
  542. /*
  543. +CTEC: 0,0
  544. msg=0,0
  545. */
  546. static void proNetMode(char *msg){
  547. unsigned char netModeValue;
  548. char cmd[30];
  549. if(msg[0]<'0' || msg[0]>'9') return;
  550. netModeValue=atoi(msg);
  551. ctecCurrentSet=netModeValue;
  552. if(ctecCurrentSet != newPara.netMode){
  553. snprintf(cmd, sizeof(cmd),"AT+CTEC=%d,%d\r\n", ctecCurrentSet, newPara.netMode);
  554. msgAtSend(cmd);
  555. }
  556. }
  557. /*
  558. +COPS: 0,2,"46000",7
  559. msg=+COPS: 0,2,"46000",7
  560. */
  561. static void proCopsMsg(char *msg){
  562. int i,j=0,codeType;
  563. char w=0;
  564. unsigned char netModeValue;
  565. for(i=0;i<strlen(msg);i++){
  566. if(msg[i]==','){
  567. if(++j==3){
  568. codeType=msg[i+1]-0x30;
  569. if(codeType==7) codeType=4;
  570. if(netshowvalue!=codeType) netshowvalue=codeType;
  571. return;
  572. }
  573. }else if(msg[i]=='"'){
  574. if(++w==1){
  575. codeType=atoi(msg+i+1);
  576. if(codeType>0 && codeType != sutApp.copstype) sutApp.copstype=codeType;
  577. }
  578. }
  579. }
  580. }
  581. /*
  582. +SIMCROSS:0
  583. msg=0/1
  584. */
  585. static void proSimMode(char *msg){
  586. unsigned char tmpSim;
  587. tmpSim=msg[0]-0x30;
  588. if(tmpSim!=0 && tmpSim!=1) return;
  589. sutApp.simSel=tmpSim;
  590. }
  591. /*
  592. +UDP:0,5,30
  593. msg=0,5,30
  594. */
  595. static void proPwrMode(char *msg){
  596. int seg1,seg2;
  597. short i;
  598. char buf[15];
  599. for(i=2;i<strlen(msg);i++){
  600. if(msg[i]==','){
  601. seg1=atoi(msg+2);
  602. seg2=atoi(msg+i+1);
  603. pwrModeAckHandler(seg1,seg2);
  604. }
  605. }
  606. }
  607. /*
  608. +FOTA:1,0
  609. +FOTA:1,XXX
  610. +FOTA:0
  611. +FOTA:1
  612. +FOTA:2
  613. msg=1,xxxx
  614. */
  615. static void proFotaMsg(char *msg){
  616. if(msg[1]==','){
  617. if(msg[2]=='0' && msg[3]==0){
  618. fotaStepSet(6);
  619. }else{
  620. strcpy(sutApp.fotaVersion, msg+2);
  621. fotaStepSet(9);
  622. }
  623. }else if(msg[1]==0){
  624. if(msg[0]=='0'){
  625. fotaStepSet(7);
  626. }else if(msg[0]=='1') showLoading();
  627. else if(msg[0]=='2'){
  628. fotaStepSet(8);
  629. }
  630. }
  631. }
  632. /*
  633. SV63302_T02
  634. msg=SV63302_T02
  635. */
  636. static void proGmrMsg(char *msg){
  637. snprintf(sutApp.modemVer, sizeof(sutApp.modemVer), "%s", msg);
  638. }
  639. /*
  640. +SMS:1,B2E2CAD4313233
  641. msg=1,B2E2CAD4313233
  642. */
  643. static void proSmsMsg(char *msg){
  644. unsigned char smsType=msg[0]-0x30;
  645. unsigned len=strlen(msg+2);
  646. if(len%2 || 0!=restoreDataFormatByHex(msg+2,len)){
  647. MSG_WARN(1, "sms data error");
  648. return;
  649. }
  650. len /= 2;
  651. sutMess.codeType=smsType;
  652. sutSms.smsUpdate=1;
  653. memcpy(sutMess.GBKMess1+4, msg+2, len);
  654. }
  655. /*鏈嶅姟鍣ㄦ姤涓嬪彂鎶ヨ�TTS锛孭OC宸叉挱鎶ワ紝鏈�俊鎭�彧鎻愮ず*/
  656. static void proAlarmMsg(void){
  657. }
  658. static void proPendMsg(void){
  659. MSG_INFO(1, "active auth now");
  660. msgAtSend("AT+GAUTH\r\n");//鐢ㄤ簬鎺堟潈妫€娴?
  661. }
  662. static void proToneMsg(char *msg){
  663. #ifndef ENABLE_PWM_BEEP
  664. if(msg[0]=='1'){
  665. sutPocStatus.TONE=1;
  666. paControl(true);
  667. }else if(msg[0]=='0'){
  668. sutPocStatus.TONE=0;
  669. }
  670. #endif
  671. }
  672. /*
  673. +GPIP:183.131.13.10
  674. msg=183.131.13.10
  675. */
  676. static void proGPIPMsg(char *msg){
  677. if(strlen(msg)<7) return;
  678. if(strcmp(showPIP, msg)==0) return;
  679. snprintf(showPIP, sizeof(showPIP), "%s",msg);
  680. MSG_INFO(1, "updatePIP:%s", showPIP);
  681. }
  682. /*
  683. +GGIP:183.131.13.6
  684. msg=183.131.13.6
  685. */
  686. static void proGGIPMsg(char *msg){
  687. if(strlen(msg)<7) return;
  688. if(strcmp(showGIP, msg)==0) return;
  689. snprintf(showGIP, sizeof(showGIP), "%s",msg);
  690. MSG_INFO(1, "updateGIP:%s", showGIP);
  691. }
  692. /*
  693. +CSQ: 14,99
  694. msg=14,99
  695. */
  696. static void proCsqMsg(char *msg){
  697. int csq=atoi(msg);
  698. if(csq != sutApp.g_iCSQ) sutApp.g_iCSQ=csq;
  699. }
  700. static void pro96Msg(char *msg){
  701. if(msg[10]=='0'){
  702. paControl(true);
  703. sutPocStatus.mic=1;
  704. }
  705. else if(msg[10]=='3'){
  706. paControl(true);
  707. // LCDBackLight(1);
  708. // LcdOnTimeCt=0;
  709. backLightReset();
  710. sutPocStatus.logined=1;
  711. sutPocStatus.spk=1;
  712. sutPocStatus.mic=0;
  713. }else if(msg[10]=='4'){
  714. sutPocStatus.spk=0;
  715. }else if(msg[10]=='1'){
  716. sutPocStatus.mic=0;
  717. //uTimerCreate(UTIMER_CYTONE,30);//hyl-210630
  718. }
  719. }
  720. static void pro28Msg(char *msg){
  721. char buf[20];
  722. if(msg[5]=='2' && msg[6]=='8'){
  723. //PocGetTime=1;
  724. //+POC:2800000014040e10132002
  725. StrAsciiToHex(&msg[13],buf);
  726. My_Clock.year=buf[0];;
  727. My_Clock.month=buf[1];;
  728. My_Clock.day=buf[2];;
  729. My_Clock.hour=buf[3];;
  730. My_Clock.min=buf[4];;
  731. My_Clock.sec=buf[5];
  732. MSG_INFO(1,"NewTime:%02d-%02d-%02d %02d:%02d:%02d",
  733. My_Clock.year,My_Clock.month,My_Clock.day,
  734. My_Clock.hour,My_Clock.min,My_Clock.sec);
  735. sutApp.PocGetTime=1;
  736. return ;
  737. }
  738. }
  739. static void pro0dMsg(char *msg){
  740. sutPocStatus.ListUpdate=1;
  741. sutPocStatus.ListCurOnlineNum=htoi(&msg[13])-1;
  742. MSG_INFO(1, "groupNum:%d", sutPocStatus.ListCurOnlineNum);
  743. }
  744. static void pro3bMsg (char *msg){
  745. if(msg[5]=='3' && msg[6]=='B'){
  746. sutPocStatus.ListUpdate=1;
  747. sutPocStatus.ListCurOnlineNum =htoi(&msg[21]);
  748. MSG_INFO(1, "UserNum:%d", sutPocStatus.ListCurOnlineNum);
  749. }
  750. }
  751. /*
  752. +HEADSET:1
  753. msg=1
  754. */
  755. static void proHeadSet(char *msg){
  756. switch(msg[0]){
  757. case '0'://HEADSET CONNECT
  758. sutApp.earLev=1;
  759. msgAtSend("AT+AUDCH=1,3\r\n");
  760. sutApp.pcant=2;
  761. break;//HEADSET DISCONNECTED
  762. case '1':
  763. sutApp.earLev=0;
  764. msgAtSend("AT+AUDCH=0,0\r\n");
  765. sutApp.pcant=4;
  766. break;//HEADSET BTN PRESS
  767. case '2':
  768. micPttHandler(1);
  769. break;//HEADSET BTN RELEASED
  770. case '3':
  771. micPttHandler(0);
  772. break;
  773. }
  774. }
  775. char *ohpocGetICCID(void){
  776. return NULL;
  777. }
  778. char *ohpocGetIMEI(void){
  779. static char imei[16]={0};
  780. if(imei[0]==0){
  781. if(LSAPI_SIM_GetIMEI(imei)==0){
  782. return imei;
  783. }
  784. }
  785. return NULL;
  786. }
  787. void ohpocGetClock(MY_CLOCK *myclock){
  788. //current_zone_time(myclock);
  789. }