MC8332GpsTask.c 14 KB

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