GpsTask.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611
  1. /********************************************************************************
  2. * File Name: GpsTask.c
  3. * Function Describe:The GpsTask for the system
  4. * Relate Module:
  5. * Explain: Hardware version is HS110C
  6. * Writer: ShiLiangWen
  7. * Date: 2015.4.12
  8. *******************************************************************************/
  9. #define THIS_FILE_ID 16
  10. //--------------------------------------------------------------------------------
  11. #include "includes.h"
  12. //OS_TID idGpsTask=0;
  13. //U64 stkGpsTask[GPS_TASK_STK_SIZE];
  14. SUT_GPS_STATUS sutGpsStatus;
  15. SUT_MESS sutMess;
  16. int g_iCSQ=-1;
  17. const unsigned char GPS_TimeTable[]={0,5,10,15,30,60};
  18. //======================================
  19. static STATUE GpsServerStatus=CLOSE;
  20. unsigned char TimeFlag=1;//获取服务器时间标记
  21. unsigned char sucGpsSentTcpCt=0;//从启动发送到收到计数器
  22. unsigned int heartTickCt=0;
  23. unsigned char registerActFlag=0;//是否发了注册(为了保证发了注册才去发鉴权,因为TCP一连接后会去发鉴权或心跳,这里保证为1时才会去发)
  24. /*******************************************************************************
  25. 校验
  26. *******************************************************************************/
  27. unsigned char GetCheck(unsigned char *data, unsigned short datalen)
  28. {
  29. unsigned char ck=0;
  30. int i;
  31. for(i=0;i<datalen;i++){
  32. ck^=data[i];
  33. }
  34. return ck;
  35. }
  36. /*****************************************************************************
  37. *发送数据封包
  38. format: 0x29 0x29 CMD Len PSN[4] Data Check 0x0D
  39. Len=DataLen+6
  40. ******************************************************************************/
  41. int SendBufPack(char *pBuf,unsigned char cmd,unsigned short DataLen,unsigned char *data)
  42. {
  43. SUTDS ds;
  44. SUTDL dl;
  45. int i,j;
  46. if(DataLen>UART3_TX_BUFFER_SIZE)return 0;
  47. //包头
  48. pBuf[0]=0x29;//Head
  49. pBuf[1]=0x29;//Head
  50. pBuf[2]=cmd;//CMD
  51. //DataLen
  52. ds.Data.usData=DataLen+6;
  53. pBuf[3]=ds.Data.ucData.b2;
  54. pBuf[4]=ds.Data.ucData.b1;
  55. //PSN
  56. dl.Data.ulData=sutProductPara.PSN;
  57. pBuf[5]=dl.Data.ucData.b4;
  58. pBuf[6]=dl.Data.ucData.b3;
  59. pBuf[7]=dl.Data.ucData.b2;
  60. pBuf[8]=dl.Data.ucData.b1;
  61. //Data
  62. j=9;
  63. for(i=0;i<DataLen;i++){
  64. pBuf[j++]=data[i];
  65. }
  66. //check
  67. pBuf[j++]= GetCheck(TxBuffer3,(DataLen+6));
  68. pBuf[j++]=0x0D;
  69. return j;
  70. }
  71. /********************************************************************************************************
  72. *SendTick 发送心跳包
  73. *********************************************************************************************************/
  74. void SendTick(void)
  75. {
  76. int len;
  77. char AT[100];
  78. len=SendBufPack((char *)TxBuffer3,0,0,NULL);
  79. sprintf(AT,"AT+ZIPSEND=1,%d\r",len);
  80. ModemSendAT(AT);
  81. ModemSendData(TxBuffer3,len);
  82. }
  83. /*******************************************************************
  84. *GetCSQ
  85. ********************************************************************/
  86. int GetCSQ(char* msg)
  87. {
  88. int CSQ;
  89. //if( msg[1]!='C' || msg[2]!='S' || msg[3]!='Q' || msg[4]!=':')return -1;
  90. CSQ=atoi(&msg[6]);
  91. return CSQ;
  92. }
  93. /*******************************************************************
  94. *GetPPPStatus
  95. ********************************************************************/
  96. STATUE GetPPPStatus(char *msg)
  97. {//+POC_PPP:0
  98. //+POC_PPP:1
  99. if(msg[9]=='1')return OPEN;
  100. else return CLOSE;
  101. }
  102. STATUE GetGpsServerStatus(char *msg){
  103. if(ModemStrCmp(msg,"+RECV:")){
  104. if(msg[13]=='O' && msg[15]=='E' && msg[18]=='D'){ //OPENED
  105. return OPEN;
  106. }else{
  107. return CLOSE;
  108. }
  109. } else return INVALID;
  110. }
  111. /*******************************************************************
  112. *NetRecvMsgHandle
  113. ********************************************************************/
  114. int NetRecvMsgHandle(char *msg)
  115. {
  116. if(!ModemStrCmp(msg,"+ZIPRECV:0,"))//+ZIPRECV:0,10,XXXX
  117. return 0;
  118. }
  119. /*******************************************************************
  120. *GetIPStatus
  121. ********************************************************************/
  122. STATUE GetIPStatus(char *msg)
  123. {
  124. //if(ModemStrCmp(msg,"+ZIPSTATUS:")){ //+ZIPSTATUS: xxxx
  125. if(msg[12]=='E' && msg[14]=='T' && msg[22]=='D'){//+ZIPSTATUS: ESTABLISHED
  126. // if(TimeFlag==0){
  127. // ModeGetTime();//获取时间 文工说只有IP通了 才正确
  128. // TimeFlag+=1;
  129. // }
  130. return OPEN;
  131. }else if(msg[12]=='S' && msg[14]=='N' && msg[19]=='T'){//+ZIPSTATUS: SYN_SENT
  132. return SYN_SENT;
  133. }else{
  134. return CLOSE;
  135. }
  136. //}else return INVALID;
  137. }
  138. /*******************************************************************
  139. *GetIPStatusu
  140. ********************************************************************/
  141. STATUE GetIPStatusu(char *msg)
  142. {
  143. //if(ModemStrCmp(msg,"+ZIPSTATUSU:")){ //+ZIPSTATUSU: ESTABLISHED
  144. if(msg[13]=='E' && msg[15]=='T' && msg[23]=='D'){
  145. return OPEN;
  146. }else if(msg[13]=='S' && msg[15]=='N' && msg[20]=='T'){
  147. return SYN_SENT;
  148. }else{
  149. return CLOSE;
  150. }
  151. //}else return INVALID;
  152. }
  153. /*******************************************************************
  154. *GetCNUM
  155. 返回:0--未获取 1--获取成功
  156. ********************************************************************/
  157. int GetCNUM(void)
  158. {
  159. /*
  160. int timerout=300;
  161. int i,len;
  162. char *msg;
  163. INT8U err;
  164. int ct=100;
  165. while(timerout){
  166. timerout--;
  167. if(++ct>100){
  168. ct=0;
  169. ModemSendAT("AT+CNUM?\r\n");
  170. OSQFlush(ModemQ);
  171. }
  172. msg = (char *)OSQPend(ModemQ, 1, &err);
  173. if(err==OS_ERR_NONE){
  174. if(ModemStrCmp(msg,"+CNUM:")){ //+CNUM:1064910139657
  175. len=strlen(&msg[6]);
  176. if(15==len){
  177. for(i=0;i<13;i++)sutProductPara.CNUM[i]=msg[6+i];
  178. sutNetPara.CNUM[13]=0;
  179. return 1;
  180. }
  181. }
  182. }
  183. }*/
  184. return 0;
  185. }
  186. /*******************************************************************
  187. *GetIPStatus
  188. 返回:0--未获取 1--获取成功
  189. ********************************************************************/
  190. int GetUIMID(void)
  191. {
  192. /*
  193. int timerout=300;
  194. int i,len;
  195. char *msg;
  196. INT8U err;
  197. int ct=100;
  198. while(timerout){
  199. timerout--;
  200. if(++ct>100){
  201. ct=0;
  202. ModemSendAT("AT+CIMI\r\n");
  203. OSQFlush(ModemQ);
  204. }
  205. msg = (char *)OSQPend(ModemQ, 1, &err);
  206. if(err==OS_ERR_NONE){
  207. if(ModemStrCmp(msg,"+CIMI:")){ //+CIMI: 460037590079119
  208. len=strlen(&msg[7]);
  209. if(17==len){
  210. for(i=0;i<15;i++)sutNetPara.UIMID[i]=msg[7+i];
  211. sutNetPara.UIMID[15]=0;
  212. return 1;
  213. }
  214. }
  215. }
  216. }
  217. */
  218. return 0;
  219. }
  220. void StartFeedBack(void)
  221. {
  222. if(sutFeed.feedBackStart==0) return;
  223. TSGpsServerConect();
  224. sutFeed.feedBackStart=0;
  225. }
  226. /*************************************************************
  227. *^IPRECV:1,端口,IP域名,远程服务端口,五socket 1--UDP 0--TCP
  228. *************************************************************/
  229. //+ZIPRECV:1,xxx,"7e8300 000c 000009771810000001 4130313233343536373839 b87e"
  230. void RecvModemData(char *msg)
  231. {
  232. int i;
  233. char *pData;
  234. unsigned short DataLen,temLen;
  235. unsigned char cmd;
  236. char tmp[5];
  237. char buf[100];
  238. DataLen=atoi((char *)&msg[11]);
  239. if(DataLen<10){ //+ZIPRECV:1,8,xxx
  240. pData=msg+13;
  241. }else if(DataLen<100){
  242. pData=msg+14;
  243. }else if(DataLen<1000){
  244. pData=msg+15;
  245. }else{//非法
  246. pData=msg+16;
  247. }
  248. sprintf(buf,"\r\nTcpRecv[%d]",DataLen);
  249. SlwTrace(INF,buf,1);
  250. #if 0 //0
  251. temLen = DataLen;
  252. if(temLen>30)temLen=30;
  253. buf[0]='<';buf[1]='<';buf[2]=0;
  254. for(i=0;i<temLen;i++){
  255. sprintf(tmp,"%02x,",pData[i]);
  256. strcat(buf,tmp);
  257. }
  258. strcat(buf,"\r\n");
  259. SlwTrace(DEBUG,buf);
  260. #endif
  261. //处理
  262. cmd=TSGpsServerProcess((unsigned char *)pData,DataLen);
  263. g_ucModemSentTcpCt=0;
  264. }
  265. unsigned short g_usGpsMinMsgBoxCheck=20;
  266. /*******************************************************************
  267. *MainTask
  268. *主任务
  269. ********************************************************************
  270. __task void GpsTask(void)
  271. {
  272. unsigned short MsgBoxCheck;
  273. int i;
  274. uint32_t AvgSpeed;
  275. unsigned char SecFlag=0;
  276. STATUE PPPStatus=CLOSE;
  277. STATUE IPStatus=CLOSE;
  278. unsigned char sucNetStatusCt=0;
  279. unsigned short susGpsTimingSendCt=0;
  280. unsigned short SendTime;
  281. unsigned long sucAspect=0;
  282. SUT_MODEM_AT_MSG *pMsg;
  283. STATUE status;
  284. int csq;
  285. char buf[30];
  286. g_ucModemSentTcpCt=0;
  287. g_iCSQ=99;
  288. GpsDataInit();
  289. PPPStatus=INVALID;
  290. IPStatus=INVALID;
  291. GpsServerStatus=INVALID;
  292. #ifdef GPS_ENABLE
  293. //Gps Init
  294. GPSInit();
  295. #endif
  296. while(1)
  297. {
  298. //Modem AT 消息处理 每次大约等待20ms
  299. if(OS_R_TMO!=os_mbx_wait(AtMsgBox,(void **)&pMsg,2)){
  300. #ifdef SLW_DEBUG
  301. //统计消息邮箱最小空闲数量
  302. MsgBoxCheck=os_mbx_check(AtMsgBox);
  303. if(g_usGpsMinMsgBoxCheck>MsgBoxCheck)g_usGpsMinMsgBoxCheck=MsgBoxCheck;
  304. SlwTrace(DEBUG,(char *)pMsg->MsgData);
  305. #endif
  306. if(0==ModemStrCmp((char *)pMsg->MsgData,"+CSQ:")){
  307. //SlwTrace(INF,(char *)pMsg->MsgData);
  308. csq=GetCSQ((char *)pMsg->MsgData);
  309. if(csq>=0 && csq<100)g_iCSQ=csq;
  310. if(g_iCSQ==99 ){
  311. if(sutPocStatus.CSQ99Ct<255)sutPocStatus.CSQ99Ct++;
  312. if(sutPocStatus.CSQ99Ct==5){
  313. sutPocStatus.Logined=0;//POC 离线
  314. #ifdef GPS_ENABLE
  315. // if(sutGpsInfo.isServerLogin==1){
  316. // sutGpsInfo.isServerLogin=0;
  317. // ModemSendAT("AT+ZIPCLOSE=0\r");
  318. // SlwTrace(DEBUG,"AT+ZIPCLOSE=0\r\n");
  319. // //ModemSendAT("AT+ZPPPCLOSE\r");
  320. // IPStatus=CLOSE;
  321. // //PPPStatus=CLOSE;
  322. // }
  323. #endif
  324. }
  325. }else{
  326. sutPocStatus.CSQ99Ct=0;
  327. }
  328. }
  329. #ifdef GPS_ENABLE
  330. else if(0==ModemStrCmp((char *)pMsg->MsgData,"+ZPPPSTATUS:")){
  331. //SlwTrace(INF,(char *)pMsg->MsgData);
  332. PPPStatus=GetPPPStatus((char *)pMsg->MsgData);
  333. }else if(0==ModemStrCmp((char *)pMsg->MsgData,"+ZIPSTATUS:")){
  334. //SlwTrace(INF,(char *)pMsg->MsgData);
  335. IPStatus=GetIPStatus((char *)pMsg->MsgData);
  336. }else if(0==ModemStrCmp((char *)pMsg->MsgData,"+ZIPRECV:")){
  337. RecvModemData((char *)pMsg->MsgData);
  338. }else if(0==ModemStrCmp((char *)pMsg->MsgData,"+ZIPSEND:")){
  339. //+ZIPSEND: 12
  340. // if(pMsg->MsgData[10]>0x30 && pMsg->MsgData[10] <0x3A){
  341. // g_ucModemSentTcpCt=0;
  342. // }
  343. }
  344. #endif
  345. _free_box(AtMpool,pMsg);
  346. }
  347. #ifdef GPS_ENABLE
  348. //GPS Uart消息处理
  349. if(g_usUart2RecvLen){
  350. process_nema((char *)RxBuffer2);
  351. g_usUart2RecvLen=0;
  352. }
  353. #endif
  354. //=======控制大概每1秒往下执行=========
  355. if(++SecFlag>49)SecFlag=0;
  356. else continue;
  357. //连续发3次未见成功,则断开链接并重启链接
  358. if(g_ucModemSentTcpCt>3){
  359. sutGpsInfo.isServerLogin=0;
  360. g_ucModemSentTcpCt=0;
  361. ModemSendAT("AT+ZIPCLOSE=0\r");
  362. IPStatus=CLOSE;
  363. }
  364. #ifdef GPS_ENABLE
  365. //计算平均速度
  366. sutGpsInfo.speedbuf[4]=sutGpsInfo.speedbuf[3];
  367. sutGpsInfo.speedbuf[3]=sutGpsInfo.speedbuf[2];
  368. sutGpsInfo.speedbuf[2]=sutGpsInfo.speedbuf[1];
  369. sutGpsInfo.speedbuf[1]=sutGpsInfo.speedbuf[0];
  370. sutGpsInfo.speedbuf[0]=sutGpsInfo.speed;
  371. for(i=0;i<5;i++){
  372. AvgSpeed=sutGpsInfo.speedbuf[i];
  373. }
  374. AvgSpeed/=5;
  375. sutGpsInfo.AvgSpeed=AvgSpeed;
  376. //根据方向变化上报GPS数据
  377. // if(sutGpsInfo.aspect>(sucAspect+15) || sutGpsInfo.aspect< (sucAspect-15) ){
  378. // GpsTimingSendPos();
  379. // susGpsTimingSendCt=0;
  380. // }
  381. // sucAspect=sutGpsInfo.aspect;
  382. //---控制定时发送GPS数据 ---
  383. if(g_iCSQ!=99 && IPStatus==OPEN && 0!=sutGpsInfo.isServerLogin){
  384. //根据平均速度决定发送时间间隔
  385. if(sutGpsInfo.AvgSpeed<20){//步行
  386. SendTime=30;
  387. }else if(AvgSpeed<60){//慢速
  388. SendTime=15;
  389. }else if(AvgSpeed<80){//中速
  390. SendTime=10;
  391. }else{//高速
  392. SendTime=5;
  393. }
  394. //控制按时间间隔发送GPS位置
  395. if(++susGpsTimingSendCt>=SendTime){
  396. susGpsTimingSendCt=0;
  397. GpsTimingSendPos();
  398. }
  399. }else{
  400. susGpsTimingSendCt=0;
  401. }
  402. #endif
  403. //--------------------
  404. if(++sucNetStatusCt>4)sucNetStatusCt=0;
  405. switch(sucNetStatusCt)
  406. {
  407. case 0:
  408. ModemSendAT("AT+CSQ?\r");
  409. break;
  410. #ifdef GPS_ENABLE
  411. case 1:
  412. if(g_iCSQ==99)break;
  413. ModemSendAT("AT+ZPPPSTATUS\r");
  414. break;
  415. case 2:
  416. if(g_iCSQ==99)break;
  417. if(PPPStatus==OPEN){
  418. SlwTrace(DEBUG,"AT+ZIPSTATUS=0\r\n");
  419. ModemSendAT("AT+ZIPSTATUS=0\r");
  420. }else{
  421. SlwTrace(DEBUG,"AT+ZPPPOPEN\r\n");
  422. ModemSendAT("AT+ZPPPOPEN\r");
  423. }
  424. break;
  425. case 3:
  426. if(g_iCSQ==99)break;
  427. if(IPStatus!=OPEN && PPPStatus==OPEN){
  428. sutGpsInfo.isServerLogin=0;
  429. sprintf(buf,"AT+ZIPSETUP=0,%s,%d\r\n",sutProductPara.GIP,sutProductPara.GpsPort);
  430. SlwTrace(DEBUG,buf);
  431. ModemSendAT(buf);
  432. }
  433. break;
  434. case 4:
  435. if(g_iCSQ==99)break;
  436. if(IPStatus==OPEN && 0==sutGpsInfo.isServerLogin){
  437. if(sutGpsInfo.isGpsWork)GpsServerConect();
  438. }
  439. break;
  440. #endif
  441. }
  442. }
  443. }
  444. */
  445. /***********************************************************
  446. *控制发送位置信息
  447. 此函数每秒执行一次
  448. ************************************************************/
  449. void GpsCtrlSendPos(void)
  450. {
  451. static unsigned short SendTime=0;
  452. static unsigned char suctt;
  453. uint32_t AvgSpeed;
  454. int i;
  455. static unsigned int susGpsTimingSendCt=0;//控制按时间发送
  456. // static unsigned short sucGpsSentTcpCt=0;//从启动发送到收到计数器
  457. // static unsigned int heartTickCt=0;
  458. char buf[30];
  459. //连续发3次未见成功,则断开链接并重启链接
  460. if(g_ucModemSentTcpCt>3){
  461. sutGpsInfo.isServerLogin=0;
  462. g_ucModemSentTcpCt=0;
  463. sprintf(buf, "AT+ZIPCLOSE=%d\r", GPS_DATA_SOCKET);
  464. ModemSendAT(buf);
  465. sutGpsStatus.IPStatus=CLOSE;
  466. g_ucModemSentTcpCt=0;
  467. sutGpsInfo.isServerLogin=0;
  468. }
  469. //
  470. if(g_iCSQ==99 || sutGpsStatus.IPStatus!=OPEN || 0==sutGpsInfo.isServerLogin)
  471. {
  472. susGpsTimingSendCt=0;
  473. return;
  474. }
  475. //计算平均速度
  476. sutGpsInfo.speedbuf[4]=sutGpsInfo.speedbuf[3];
  477. sutGpsInfo.speedbuf[3]=sutGpsInfo.speedbuf[2];
  478. sutGpsInfo.speedbuf[2]=sutGpsInfo.speedbuf[1];
  479. sutGpsInfo.speedbuf[1]=sutGpsInfo.speedbuf[0];
  480. sutGpsInfo.speedbuf[0]=sutGpsInfo.speed;
  481. for(i=0;i<5;i++){
  482. AvgSpeed=sutGpsInfo.speedbuf[i];
  483. }
  484. AvgSpeed/=5;
  485. sutGpsInfo.AvgSpeed=AvgSpeed;
  486. ////////////////////////////////////////////////
  487. if(sutGpsInfo.isGpsAuthOk==0)
  488. {//鉴权失败
  489. if(++sucGpsSentTcpCt>15)//定时再去鉴权
  490. {//5秒
  491. sucGpsSentTcpCt=0;
  492. susGpsTimingSendCt=0;
  493. if(sutPocStatus.Logined)
  494. {//20161009登陆了才去鉴权
  495. SlwTrace(INF,"Re-Authentication!",1);
  496. Authentication();
  497. }
  498. }
  499. return;//鉴权未成功的返回
  500. }else
  501. {
  502. if(g_ucModemSentTcpCt==0)
  503. {
  504. sucGpsSentTcpCt=0;
  505. g_ucModemSentTcpCt=0;
  506. }
  507. }
  508. //鉴权成功并且定位上则定时发送位置包
  509. //---控制按时间间隔发送GPS位置
  510. //if(++susGpsTimingSendCt>=sutGpsInfo.SendTime){
  511. // susGpsTimingSendCt=0;
  512. #if 0
  513. sutGpsInfo.GPS_SecondCnt = RTC_GetCounter();
  514. if(sutGpsInfo.GPS_SecondCnt>=susGpsTimingSendCt)
  515. {
  516. susGpsTimingSendCt=sutGpsInfo.GPS_SecondCnt+sutGpsInfo.GPS_UploadTime;
  517. if(sutGpsInfo.isGpsValid && g_uiGpsStat)
  518. {//定位上了
  519. sprintf(buf,"TSGpsTimingSendPos %d\r\n",sutGpsInfo.GPS_UploadTime);
  520. SlwTrace(INF,buf);
  521. TSGpsTimingSendPos();
  522. }else
  523. {//发心跳
  524. if(sutGpsInfo.GPS_SecondCnt >= heartTickCt)
  525. {
  526. heartTickCt = sutGpsInfo.GPS_SecondCnt+60;
  527. SlwTrace(INF, "HeartTick",1);
  528. TS_SendHeartTick();
  529. }
  530. }
  531. }
  532. #else
  533. sutGpsInfo.GPS_SecondCnt = RTC_GetCounter();
  534. if(sutGpsInfo.isGpsValid && g_uiGpsStat)
  535. {//可以发位置包,检测时间是否到了
  536. if(sutGpsInfo.GPS_SecondCnt>=susGpsTimingSendCt){
  537. susGpsTimingSendCt=sutGpsInfo.GPS_SecondCnt+sutGpsInfo.GPS_UploadTime;
  538. sprintf(buf,"TSGpsTimingSendPos %d",sutGpsInfo.GPS_UploadTime);
  539. SlwTrace(INF,buf,1);
  540. TSGpsTimingSendPos();
  541. }
  542. }else
  543. {//没定位,不发位置包,则发心跳
  544. if(sutGpsInfo.GPS_SecondCnt >= heartTickCt)
  545. {
  546. heartTickCt = sutGpsInfo.GPS_SecondCnt+60;
  547. SlwTrace(INF, "HeartTick",1);
  548. TS_SendHeartTick();
  549. }
  550. }
  551. #endif
  552. if(++suctt >= 30)
  553. {
  554. suctt = 0;
  555. if(!g_uiGpsStat) SlwTrace(INF, "GPS close",1);
  556. }
  557. }
  558. STATUE GetIPNewStatus(char *msg, unsigned char socketNum)
  559. {//+TCPSTATUS:x:s [socket: status]
  560. //+TCPSTATUS:1:1
  561. STATUE sta=CLOSE;
  562. unsigned char thisSocket;
  563. thisSocket = atoi(&msg[11]);
  564. if(msg[13] == '1') sta = OPEN;
  565. if(thisSocket == socketNum) return sta;
  566. else return CLOSE;
  567. }