MC8332GpsTask.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558
  1. /********************************************************************************
  2. * File Name: MC8332GpsTask.h
  3. * Function Describe: Header file for MC8332GpsTask.c
  4. * Explain:
  5. * Writer:
  6. * Date: 2016-3-11
  7. *******************************************************************************/
  8. #include "includes.h"
  9. unsigned int Mododrex_Net;
  10. unsigned int netshowvalue;
  11. //FOTA_UPDATE fota_update;
  12. void MC8332_GPS_RecvHandle(unsigned char *pMsg,unsigned short tempLen)
  13. {
  14. char buf[20];
  15. char buf2[50];
  16. char result[10];
  17. unsigned short cmd,ackCmd,smsLen;
  18. unsigned char Result,i,buBiaoResponsed;
  19. short targetIndex;
  20. SUTDS ds;
  21. PrintBufferData(pMsg,tempLen);
  22. //////////处理布标类型指令
  23. cmd = (pMsg[1]<<8) | (pMsg[2]&0xff);
  24. buBiaoResponsed=1;
  25. snprintf(buf2, sizeof(buf2), "\r\ncmd=%04x", cmd);
  26. SlwTrace(INF, buf2,1);
  27. switch(cmd)
  28. {//布标命令返回
  29. case TS_TERMINAL_REGISTRATION_REPLY://终端注册应答
  30. //7E 8100 000A 000166000016 0250 0100 00 20161118165030 E07E 成功
  31. //7E 8100 0003 000166000016 0251 0100 01 A07E 已注册
  32. Result = pMsg[15];
  33. snprintf(buf2, sizeof(buf2), "\r\nresult=%02x", Result);
  34. SlwTrace(INF, buf2,1);
  35. switch(Result)
  36. {
  37. case 0://00注册成功
  38. if(0 != memcmp(newPara.authPara.authCode, pMsg+16, 7)){
  39. memcpy(newPara.authPara.authCode, pMsg+16,7);
  40. //save sys
  41. ModifyConfigureFile(0);
  42. }
  43. snprintf(result, sizeof(result), "Ok");
  44. break;
  45. case 1://01 车辆已注册
  46. snprintf(result, sizeof(result), "Car Exist");break;
  47. case 2://02 无此车辆
  48. snprintf(result, sizeof(Result), "No car");break;
  49. case 3://03 终端已经被注册
  50. snprintf(result, sizeof(result), "Device Exist");break;
  51. case 4://04 数据库无此终端
  52. snprintf(result, sizeof(result), "No Record");break;
  53. default://无效值
  54. //统称失败
  55. snprintf(result, sizeof(result), "Faile");
  56. break;
  57. }
  58. snprintf(buf2, sizeof(buf2), "\r\n[Register]%d %s", Result,result);
  59. SlwTrace(INF, buf2,1);
  60. //注册应答后直接进行一次鉴权
  61. Authentication();
  62. break;
  63. case TS_TEXT_INFORMATION_ISSUED://文本下发
  64. //7E83000005000166000009000001 31323334ED7E
  65. smsLen = pMsg[3];
  66. smsLen <<= 8;
  67. smsLen &= 0xff00;
  68. smsLen |= pMsg[4];
  69. smsLen -= 1;//去掉后面较验码
  70. if(SMS_SIGNAL_LEN <= smsLen)
  71. smsLen = SMS_SIGNAL_LEN;
  72. memset(sutMess.GBKMess1, 0, sizeof(sutMess.GBKMess1));
  73. memcpy(sutMess.GBKMess1, pMsg+14, smsLen);
  74. sutMess.len = smsLen;
  75. //////////////////////////
  76. sutFeed.feedID=TS_SETTING_TERMINAL_PARAMETERS;
  77. ds.Data.ucData.b1=pMsg[11];
  78. ds.Data.ucData.b2=pMsg[12];
  79. sutFeed.feedliushuiID=ds.Data.usData;
  80. sutFeed.result=2;
  81. //////////////////////////
  82. if(sutMess.len > 0)
  83. SetGotNewMessage();
  84. break;
  85. case TS_EVENT_SETTINGS: ////事件设置
  86. Result = pMsg[13];
  87. switch(Result){
  88. case 5://点名
  89. UISetNextStatus(UIS_CALL_THE_ROLL);
  90. break;
  91. }
  92. break;
  93. case TS_PLATFORM_UNIVERSAL_ANSWER://通用平台应答
  94. //7E8001000500016600001602400000010201B57E
  95. //buf[0]=0x7e;
  96. //if(-1 != (targetIndex=FindTargetIndex((char *)pMsg, '\r', buf, 1,2)))
  97. targetIndex = tempLen;//这个长度是去掉了两个7E的长度
  98. {
  99. ackCmd=(pMsg[targetIndex-3]<<8) | (pMsg[targetIndex-2]&0xff);
  100. Result = pMsg[targetIndex-1];
  101. snprintf(buf2, sizeof(buf2), "\r\nLen=%d,ackCmd=%04x,result=%02x", tempLen,ackCmd,Result);
  102. SlwTrace(INF, buf2,1);
  103. switch(ackCmd)
  104. {
  105. case TS_TERMINAL_AUTHENTICATION://终端鉴权应答
  106. if(Result == 0)
  107. {//鉴权成功
  108. sutGpsInfo.isGpsAuthOk=1;
  109. snprintf(buf2, sizeof(buf2), "\r\n[ATH]Ok");
  110. enableDataSend();
  111. //TSGpsServerConect();//鉴权成功后发一包终端应答包即可以支持文本接收了
  112. }else
  113. {
  114. sutGpsInfo.isGpsAuthOk=0;
  115. snprintf(buf2, sizeof(buf2), "\r\n[ATH]Faile");
  116. }
  117. SlwTrace(INF, buf2,1);
  118. break;
  119. case TS_LOCATION_INFORMATION_REPORTING://位置包应答
  120. SlwTrace(INF, "\r\nLocation ACK",1);
  121. break;
  122. case TS_TERMINAL_HEARTBEAT://心跳应答
  123. SlwTrace(INF, "\r\nHearTick ACK",1);
  124. break;
  125. case TS_SEND_SOS_SMS://SOS应答
  126. SlwTrace(INF, "\r\nSOS ACK",1);
  127. sutPocStatus.SOS_Flag++;
  128. break;
  129. case TS_TERMINAL_ATTRIBUTEINFO_ANSWER:
  130. if(!Result) {
  131. TeminalInfoRevOK=1;
  132. SlwTrace(INF, "TerminalInfo Send OK\r\n",1);
  133. }
  134. break;
  135. }
  136. }
  137. break;
  138. case TS_PLATFORM_ATTRIBUTEINFO_ANSWER:
  139. TeminalInfoRevOK=0;
  140. break;
  141. case TS_TERMINAL_REQTIME://时间ACK
  142. //7e0f020007001899000022003a e20704130e2f02 427e
  143. SlwTrace(INF, "\r\nTimeAck",1);
  144. ds.Data.ucData.b1=pMsg[13];
  145. ds.Data.ucData.b2=pMsg[14];
  146. g_usModeYTime=ds.Data.usData-2000;
  147. g_usModemTime=pMsg[15];
  148. g_usModeDTime=pMsg[16];
  149. g_usModeHTime=pMsg[17];
  150. g_usModeMTime=pMsg[18];
  151. g_usModeSTime=pMsg[19];
  152. SetTime(g_usModeHTime, g_usModeMTime, g_usModeSTime);//保存下来,以便下次启动,没登陆前可以使用本地时间显示
  153. break;
  154. default:
  155. buBiaoResponsed=0;
  156. break;
  157. }
  158. if(buBiaoResponsed)
  159. g_ucModemSentTcpCt=0;
  160. /////////////处理其它类型指令
  161. }
  162. void chekPipGip(char *src,char type)
  163. {
  164. char buf[40];
  165. char *p;
  166. p=src+6;
  167. if(!type)snprintf(buf,sizeof(buf),"+GPIP:%s\r\n",showPIP);
  168. else snprintf(buf,sizeof(buf),"+GGIP:%s\r\n",showGIP);
  169. if(strlen(src)<9||(0==ModemStrCmp(src, "+GGIP:0.0.0.0"))||(0==strcmp(src,buf))||(0==ModemStrCmp(src, "+GPIP:0.0.0.0")))return ;
  170. if(!type){
  171. memcpy(showPIP,p,strlen(p)-2);
  172. showPIP[strlen(p)-2]=0;
  173. printf("get new PIP====%s\r\n",showPIP);
  174. }else{
  175. memcpy(showGIP,p,strlen(p)-2);
  176. showGIP[strlen(p)-2]=0;
  177. printf("get new GIP====%s\r\n",showGIP);
  178. //strcpy(gSocket.socketList[0].Ip,showGIP);
  179. }
  180. }
  181. void AtHandle(char *pMsg)
  182. {
  183. int csq;
  184. short targetIndex;
  185. unsigned char tempSocket,i,temp;
  186. unsigned short tempLen;
  187. char buf[80]="\r\n";
  188. char bufTemp[3];
  189. char buf3[40];//////////////////////////
  190. STATUE ipStatus;
  191. // if(0==ModemStrCmp(pMsg,"+POC:UPDATE"))
  192. //{
  193. // fota_update.NewPocFlag=1;
  194. //}else if(0==ModemStrCmp(pMsg,"+POC:DONE"))
  195. //{
  196. // fota_update.NewPocOver=1;
  197. //}
  198. if(0==ModemStrCmp(pMsg,"^SYSINFO:"))
  199. {
  200. if(pMsg[15]!=','){
  201. netshowvalue=atoi(&pMsg[15]);
  202. }else{
  203. netshowvalue=atoi(&pMsg[16]);
  204. }
  205. }
  206. if(0==ModemStrCmp(pMsg,"+CCSQ:"))
  207. {
  208. UpdateCsqValue(GetCCSQ(pMsg));
  209. }else if(0==ModemStrCmp(pMsg,"+CSQ:"))
  210. {
  211. UpdateCsqValue(GetCSQ(pMsg));
  212. }else if(0==ModemStrCmp(pMsg,"+MODODREX:")){
  213. Mododrex_Net=atoi(&pMsg[11]);
  214. snprintf(buf3,sizeof(buf3),"Mododrex_Netvalue=%d\r\n",Mododrex_Net);
  215. SlwTrace(INF, buf3,1);
  216. }else if(0==ModemStrCmp(pMsg,"+POC_PPP:")){
  217. sutGpsStatus.PPPStatus=GetPPPStatus(pMsg);
  218. if(sutGpsStatus.PPPStatus == CLOSE){
  219. sutGpsStatus.IPStatus=0;
  220. ColonyParaReset();
  221. }
  222. }else if(0==ModemStrCmp(pMsg,"+TCPSTATUS:"))
  223. {//查询指令返回状态
  224. IPStatusAna((char *)pMsg, &tempSocket,&ipStatus);
  225. switch(tempSocket)
  226. {
  227. case GPS_DATA_SOCKET:
  228. sutGpsStatus.IPStatus = ipStatus;
  229. if(sutGpsStatus.IPStatus == CLOSE) sutGpsInfo.isGpsAuthOk=0;//鉴权清掉,再次连接后要重新鉴权
  230. break;
  231. case COLONY_SER_SOCKET:
  232. ColonyTcpStatus(ipStatus);
  233. break;
  234. }
  235. }else if(0==ModemStrCmp(pMsg,"+TCPRECV:")){//+TCPRECV:0,2,31
  236. if(-1 != (targetIndex=FindTargetIndex(pMsg, '\r', ":", 1,1)))
  237. {
  238. tempSocket = atoi(&pMsg[targetIndex]);//找到socket
  239. if(-1 != (targetIndex=FindTargetIndex(pMsg, '\r', ",",1,1)))
  240. {
  241. tempLen = atoi(&pMsg[targetIndex]);
  242. if(-1 != (targetIndex=FindTargetIndex(pMsg, '\r', ",",1,2)))
  243. {
  244. switch(tempSocket)
  245. {
  246. case GPS_DATA_SOCKET:
  247. //走布标判断
  248. if(pMsg[targetIndex] == 0x7e && pMsg[targetIndex+tempLen-1] == 0x7e)
  249. {//是布标协议,进行转义
  250. tempLen=reduce((unsigned char *)&pMsg[targetIndex+1], tempLen-1);
  251. MC8332_GPS_RecvHandle((unsigned char *)&pMsg[targetIndex],tempLen);
  252. }else
  253. {
  254. SlwTrace(INF, "Unknown Protocol",1);
  255. }
  256. break;
  257. case COLONY_SER_SOCKET:
  258. SlwTrace(INF,"colony coming..........",1);
  259. Colony_RecvHandle(&pMsg[targetIndex],tempLen);
  260. break;
  261. }
  262. }
  263. }
  264. }
  265. }else if(0==ModemStrCmp(pMsg,"+TCPOPEN:"))//连接指令返回状态
  266. { //+TCPOPEN:OK
  267. //+TCPOPEN:Already connected
  268. #if 0 //这条指令不具备socket号回来,不处理,直接通过查询方式来检测连接结果
  269. if((pMsg[9] == 'O' && pMsg[10] == 'K') ||
  270. (pMsg[9] == 'A' && pMsg[14] == 'd' && pMsg[23] =='t'))
  271. {
  272. if(tcpControl == 0)
  273. {
  274. HgsConnetStatus=1;
  275. HigosSendFlag=0;
  276. }else if(tcpControl== 1)
  277. {
  278. sutGpsStatus.IPStatus = OPEN;
  279. }else if(tcpControl == 2)
  280. {
  281. #if(USE_CONFIG_FUN==1)
  282. sutConfig.g_ubConfigTcpStatus=1;
  283. #endif
  284. }
  285. }
  286. #endif
  287. }else if(0==ModemStrCmp(pMsg, "+TCPCLOSE:OK"))
  288. {
  289. }else if(0==ModemStrCmp(pMsg, "+TCPCLOSE:"))
  290. {//主动关掉或者服务器关掉都是这样
  291. tempSocket=pMsg[10]-0x30;
  292. switch(tempSocket)
  293. {
  294. case GPS_DATA_SOCKET:
  295. sutGpsStatus.IPStatus=CLOSE;
  296. break;
  297. case COLONY_SER_SOCKET:
  298. ColonyParaReset();
  299. break;
  300. }
  301. }else if(0==ModemStrCmp(pMsg, "+CCLK:"))
  302. {//+CCLK: "17/09/28,04:48:35"
  303. //+CCLK: "80/01/06,00:10:44"
  304. //+CCLK: "17/10/19,07:22:35"
  305. g_usModeYTime=atoi(&pMsg[8]);
  306. g_usModemTime=atoi(&pMsg[11]);
  307. g_usModeDTime=atoi(&pMsg[14]);
  308. g_usModeHTime=atoi(&pMsg[17])+8;
  309. if(g_usModeHTime >= 24) g_usModeHTime -= 24;
  310. g_usModeMTime=atoi(&pMsg[20]);
  311. g_usModeSTime=atoi(&pMsg[23]);
  312. SetTime(g_usModeHTime, g_usModeMTime, g_usModeSTime);//保存下来,以便下次启动,没登陆前可以使用本地时间显示
  313. SlwTrace(INF, "UpdateTime",1);
  314. }else if(0==ModemStrCmp(pMsg, "^MODE:"))
  315. {//^MODE: 9 与下面位置不一,模块问题
  316. //^MODE:2 与上面位置不一,模块问题
  317. if(pMsg[6] == ' ') bufTemp[0]=pMsg[7];
  318. else bufTemp[0]=pMsg[6];
  319. snprintf(buf, sizeof(buf), "[Mode %c]", bufTemp[0]);
  320. switch(bufTemp[0])
  321. {
  322. case 0x30:strcat(buf, "No server");break;
  323. case 0x32:strcat(buf, "CDMA Mode");break;
  324. case 0x33:strcat(buf, "GSM");break;
  325. case 0x34:strcat(buf, "TD-SCDMA/EVDO");break;
  326. case 0x35:strcat(buf, "WCDMA");break;
  327. case 0x39:strcat(buf, "LTE");break;
  328. default:strcat(buf, "Unknow");break;
  329. }
  330. SlwTrace(INF, buf, 1);
  331. }else if(0==ModemStrCmp(pMsg, "^MSG:"))
  332. {
  333. if(0==ModemStrCmp(&pMsg[5], "Ready"))
  334. {//升级应用程序已开启
  335. UpdateStatus(MODEM_STATUS_READY);
  336. }else if(0==ModemStrCmp(&pMsg[5], "http:err"))
  337. {//指令执行失败
  338. UpdateStatus(MODEM_STATUS_CMD_VER_ERR);
  339. }else if(0==ModemStrCmp(&pMsg[5], "VerErr"))
  340. {//请求版本号有非数字数据
  341. UpdateStatus(MODEM_STATUS_CMD_VER_ERR);
  342. }else if(0==ModemStrCmp(&pMsg[5], "ver:err"))
  343. {//检查版本错误
  344. UpdateStatus(MODEM_STATUS_CMD_VER_ERR);
  345. }else if(0==ModemStrCmp(&pMsg[5], "nonewver"))
  346. {//没有更新版本
  347. UpdateStatus(MODEM_STATUS_NO_NEWVER);
  348. }else if(0==ModemStrCmp(&pMsg[5], "loading"))
  349. {//开始下载
  350. m_process=0;
  351. UpdateStatus(MODEM_STATUS_LOADING);
  352. }else if(0==ModemStrCmp(&pMsg[5], "HBD:"))
  353. {//正在下在百分比
  354. m_process=atoi(pMsg+9);
  355. UpdateStatus(MODEM_STATUS_LOADING);
  356. }else if(0==ModemStrCmp(&pMsg[5], "Done"))
  357. {//下载完成
  358. UpdateStatus(MODEM_STATUS_DONE);
  359. }else if(0==ModemStrCmp(&pMsg[5], "Installed"))
  360. {//升级完成
  361. UpdateStatus(MODEM_STATUS_INSTALLED);
  362. }else if(0==ModemStrCmp(&pMsg[5], "wget:"))
  363. {
  364. UpdateStatus(MODEM_STATUS_SER_ERR);
  365. }
  366. }else if(0==ModemStrCmp(pMsg, "+POC:START"))
  367. {
  368. sutPocStatus.modemRstFlag=1;
  369. sutPocStatus.ModemInactiveCt=0;//当模块重启后重新计数串口通讯异常计数器
  370. }
  371. else if(0==ModemStrCmp(pMsg, "+GGIP:"))
  372. { //GSPIP返回
  373. //GetDomainIp(&pMsg[6],'g');
  374. if(newPara.serList.defaultuse == SER_IP||newPara.serList.defaultuse == SER_JIQUN) chekPipGip(pMsg,1);
  375. }else if(0==ModemStrCmp(pMsg, "+GPIP:"))
  376. {
  377. //GetDomainIp(&pMsg[6],'p');
  378. if(newPara.serList.defaultuse == SER_IP||newPara.serList.defaultuse == SER_JIQUN)chekPipGip(pMsg,0);
  379. }
  380. else if(0==ModemStrCmp(pMsg, "+FOTA:")){
  381. FotaStatusProcess(pMsg+6);
  382. }else if(0==ModemStrCmp(pMsg, "+POC:WAKEUP")){
  383. enableDataSend();
  384. }else if(0==ModemStrCmp(pMsg, "+UDP:")){
  385. GetPwrMode(pMsg+5);
  386. }
  387. }
  388. static char csqSendFlag=1;
  389. void UpdateCsqValue(int csq)
  390. {
  391. static int tCsq[2];
  392. char validCsq=0,validcsq=0;
  393. if(csq == 99 ||
  394. (csq >=0 && csq <=31))
  395. {
  396. tCsq[csqSendFlag]=csq;
  397. }
  398. if(csqSendFlag==1)
  399. {//收到了两组CSQ命令值,对比,如果都有效值,取大的值
  400. if(tCsq[0] >=0 && tCsq[0] <=31) validCsq=1;
  401. else if(tCsq[1] >=0 && tCsq[1] <=31) validcsq=1;
  402. else g_iCSQ=99;
  403. if(validCsq&&validcsq)
  404. {
  405. if(tCsq[0]>tCsq[1]) g_iCSQ=tCsq[0];
  406. else g_iCSQ=99;
  407. }else if(validCsq) g_iCSQ=tCsq[0];
  408. else if(validcsq) g_iCSQ=tCsq[1];
  409. tCsq[0]=99;
  410. tCsq[1]=99;
  411. }
  412. }
  413. void CloseGPSSocket(void)
  414. {
  415. char buf[20];
  416. snprintf(buf, sizeof(buf), "AT+TCPCLOSE=%d\r\n",GPS_DATA_SOCKET);
  417. ModemSendAT(buf);
  418. sutGpsStatus.IPStatus=CLOSE;
  419. }
  420. /************************************************
  421. 每10ms处理一次
  422. **************************************************/
  423. void GpsTaskTick(unsigned char reset)
  424. {
  425. static unsigned int sucSecCt=0;
  426. static unsigned char sucSteep=0;
  427. static unsigned char sucSynSentCt=0;
  428. unsigned char temp[4];
  429. char buf[55];
  430. int i;
  431. if(reset){
  432. sucSecCt=0;
  433. sucSteep=0;
  434. return;
  435. }
  436. //GPS Uart消息处理
  437. if(g_usUart3RecvLen)
  438. {
  439. process_nema((char *)RxBuffer3);
  440. g_usUart3RecvLen=0;
  441. }
  442. //===========以下控制每秒执行一次============
  443. if(os_time_get() < sucSecCt) return;
  444. sucSecCt=os_time_get()+100;
  445. //////////////////20170112////////////////////
  446. GpsCtrlSendPos();//里面涉及到鉴权,所以得跑起来
  447. //TCP发送防护,如果IPSTATUS一直等于SYN_SENT持续达10秒,则关闭TCP链路
  448. if(sutGpsStatus.IPStatus==SYN_SENT)
  449. {
  450. if(++sucSynSentCt>10){
  451. sucSynSentCt=0;
  452. g_ucModemSentTcpCt=0;
  453. CloseGPSSocket();
  454. g_ucModemSentTcpCt=0;
  455. sutGpsInfo.isServerLogin=0;
  456. }
  457. }else sucSynSentCt=0;
  458. //---以下控制---
  459. if(++sucSteep>4)sucSteep=0;
  460. //----
  461. if(sucSteep==0)
  462. {
  463. if(csqSendFlag==1)
  464. {//模块在电信卡的cdma和evdo下使用CCSQ
  465. //其它所有情况使用CSQ
  466. csqSendFlag=0;
  467. ModemSendAT("AT+CSQ\r\n");
  468. }else{
  469. csqSendFlag=1;
  470. ModemSendAT("AT+CCSQ\r\n");
  471. }
  472. snprintf(buf, sizeof(buf), "[ATH]%d,[GPS]%d,[BAT]%0.2f,[TICK]%d,%d,[CSQ]%d",
  473. sutGpsInfo.isGpsAuthOk,
  474. sutGpsInfo.isGpsValid,
  475. (double)g_iVbat/100,
  476. os_time_get(),
  477. sutGpsInfo.GPS_SecondCnt,
  478. g_iCSQ);
  479. SlwTrace(INF,buf,1);
  480. }
  481. else if(1==sucSteep)
  482. {
  483. ModemSendAT("AT+POC_PPP\r\n");
  484. }else if(2==sucSteep)
  485. {
  486. if(99==g_iCSQ)return;
  487. if(sutGpsStatus.PPPStatus==OPEN){
  488. snprintf(buf, sizeof(buf), "AT+TCPSTATUS=%d\r\n", GPS_DATA_SOCKET);
  489. ModemSendAT(buf);
  490. }else{
  491. SlwTrace(INF, "Wait POC_PPP",1);
  492. }
  493. }else if(3==sucSteep)
  494. {
  495. if(99==g_iCSQ) return;
  496. if(sutGpsInfo.isGpsWork==0)
  497. {
  498. if(sutGpsStatus.CheckCnt < 50)
  499. {
  500. if(++sutGpsStatus.CheckCnt >= 2)
  501. {
  502. sutGpsStatus.CheckCnt = NO_GPS_CHECK_TIMEOUT;//设置为此值时认为是没有GPS机型
  503. }
  504. }
  505. SlwTrace(INF,"GPS modem not work!",1);
  506. }
  507. if(sutGpsStatus.IPStatus!=OPEN && sutGpsStatus.PPPStatus==OPEN)
  508. {
  509. // if(tcpControl == 1)
  510. // {//当控制为GPS时才去连接
  511. sutGpsInfo.isServerLogin=0;
  512. snprintf(buf, sizeof(buf),"AT+TCPOPEN=%d,%s:%d\r\n",GPS_DATA_SOCKET,showGIP,newPara.gpsPort);
  513. SlwTrace(INF,buf,0);
  514. ModemSendAT(buf);
  515. //}
  516. }
  517. }else if(4==sucSteep)
  518. {
  519. if(99==g_iCSQ)return;
  520. if(sutGpsStatus.IPStatus==OPEN && 0==sutGpsInfo.isServerLogin)
  521. {
  522. sutGpsInfo.isServerLogin = OPEN;
  523. }
  524. }
  525. }