GpsProcess.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660
  1. /**********************************************************************************
  2. * File Name: GpsProcess.c
  3. * Function Describe:device for Gps Process
  4. * Relate Module:
  5. * Explain:
  6. * Writer: ShiLiangWen
  7. * Date: 2015.1.26
  8. ***********************************************************************************/
  9. #define THIS_FILE_ID 11
  10. //-------------------------------------------------------------------------------------------
  11. #include "includes.h"
  12. //SUT_GPS_SEND_DATA sutGpsSendData;
  13. /**********************************************************************************
  14. GpsSendHead
  15. ***********************************************************************************/
  16. void GpsServerConect(void)
  17. { //"AT+ZIPSEND=0,12\r"=41542B5A495053454E443D302C31320D
  18. //"AT+ZIPSENDU=0,12\r"=41542B5A495053454E44553D302C31320D
  19. //unsigned char Data[]={0x29,0x29,0xB1,0x00,0x07,0x59,0x69,0xB5,0xA1,0x00,0x92,0x0D}; //2929B100075969B5A100920D
  20. //ModemSendAT("AT+ZIPSEND=0,12\r"); //41542B5A495053454E443D302C31320D2929B100075969B5A100920D
  21. //ModemSendData(Data,sizeof(Data));
  22. int len;
  23. unsigned char buf[100];
  24. unsigned char temp=0;
  25. len=GpsPacket(buf,sutProductPara.PSN,XINGAN_PACKET_CLIENT_CMD_CONNECT,&temp,1);
  26. ModemSendTcpData(0,buf,len);
  27. }
  28. unsigned char GetCheckSum(unsigned char *pData,int len)
  29. {
  30. int i;
  31. unsigned char sum=0;
  32. for(i=0;i<len;i++){
  33. sum=sum^pData[i];
  34. }
  35. return sum;
  36. }
  37. /*************************************************************************************
  38. *
  39. **************************************************************************************/
  40. int GpsPacket(unsigned char *Buffer,unsigned long PSN,unsigned char CMD,unsigned char *pData,int DataLen)
  41. {
  42. unsigned char *pBuf=Buffer;
  43. int j,i=0;
  44. unsigned short Len=DataLen+6;
  45. pBuf[i++]=0x29;
  46. pBuf[i++]=0x29;
  47. pBuf[i++]=CMD;
  48. pBuf[i++]=(unsigned char)((Len>>8)&0xff);
  49. pBuf[i++]=(unsigned char)(Len&0xff);
  50. pBuf[i++]=(unsigned char)((PSN>>24)&0xff);
  51. pBuf[i++]=(unsigned char)((PSN>>16)&0xff);
  52. pBuf[i++]=(unsigned char)((PSN>>8)&0xff);
  53. pBuf[i++]=(unsigned char)(PSN&0xff);
  54. for(j=0;j<DataLen;j++){
  55. pBuf[i++]= pData[j];
  56. }
  57. pBuf[i]=GetCheckSum(pBuf,i);
  58. i++;
  59. pBuf[i++]=0x0D;
  60. return i;
  61. }
  62. /**********************************************************************************
  63. GpsSendPosition
  64. 发送位置数据
  65. Head(2) Cmd(1) Len(2) PSN(4) GpsData(34) Check(1) End(1)
  66. Cmd=0x80
  67. 总长度=2+1+2+40=45
  68. ***********************************************************************************/
  69. void GpsSendPosition(void)
  70. {
  71. int i;
  72. int len;
  73. char tmp[5];
  74. char buf[150];
  75. unsigned char GpsBuf[50];
  76. len=GpsPacket(GpsBuf,sutProductPara.PSN,0x80,(unsigned char *)&sutGpsSendData,sizeof(SUT_GPS_SEND_DATA));
  77. sprintf(buf,"AT+ZIPSEND=0,%d\r",len);
  78. ModemSendAT(buf);
  79. ModemSendData(GpsBuf,len);
  80. strcpy(buf,"SendGpsD:");
  81. for(i=0;i<len;i++){
  82. sprintf(tmp,"%02x,",GpsBuf[i]);
  83. strcat(buf,tmp);
  84. }
  85. strcat(buf,"\r\n");
  86. SlwTrace(INF,buf);
  87. }
  88. /*******************************************************
  89. GPRMC信息,与,之间的子信息处理,存储到相应的结构体中元素中
  90. *******************************************************/
  91. void GPS_GPRMC_Handle(unsigned char *ch,unsigned char ch1)
  92. {
  93. unsigned char x,y;
  94. // send_byte('d');
  95. switch(ch1)
  96. {
  97. case 0: //时间
  98. for(x=0,y=0;x<8;x++)
  99. {
  100. if(x==2||x==5){ sutGpsInfo.Time[x]=0x3a;}
  101. else sutGpsInfo.Time[x]=ch[y++];
  102. }
  103. // send_byte(time[7]);
  104. break;
  105. case 1: //状态
  106. sutGpsInfo.Status=ch[0];
  107. break;
  108. case 2: //纬度
  109. for(x=10,y=0;x<17;x++)
  110. {
  111. if(x==12||x==15) {}
  112. else sutGpsInfo.Location[x]=ch[y++];
  113. }
  114. break;
  115. case 3: //南北纬
  116. sutGpsInfo.Location[9]=ch[0];
  117. break;
  118. case 4: //经度
  119. for(x=1,y=0;x<8;x++){
  120. if(x==4||x==7){}
  121. else sutGpsInfo.Location[x]=ch[y++];
  122. }
  123. break;
  124. case 5: //东西经
  125. sutGpsInfo.Location[0]=ch[0];
  126. break;
  127. case 6: //航速
  128. for(x=0;x<6;x++){
  129. sutGpsInfo.Speed[x+1]=ch[x];
  130. }
  131. sutGpsInfo.Speed[6]=0x20;
  132. sutGpsInfo.Speed[7]=0x20;
  133. break;
  134. case 7: //信息自己定义
  135. break;
  136. case 8: //信息自己定义
  137. break;
  138. case 9: //信息自己定义
  139. break;
  140. case 10: //信息自己定义
  141. break;
  142. case 11: //信息自己定义
  143. break;
  144. default:break;
  145. }
  146. }
  147. /*******************************************************
  148. 处理GPRMC信息
  149. *******************************************************/
  150. void GPS_GPRMC_Alysis(char *RMC_Data)
  151. {
  152. unsigned char i,j,k;
  153. unsigned char count;
  154. unsigned char temp[10];
  155. //send_byte('a');
  156. for(i=0;i<strlen(RMC_Data);)
  157. {
  158. switch(RMC_Data[i])
  159. {
  160. case '$':
  161. j=i++; //标记$的起始位置
  162. while(RMC_Data[i]!=',') //RMC_Data[i]==','时结束循环。
  163. {i++;}
  164. // uart1_sendbytes(GPRMC[RMC_Count].RMC_ID);
  165. break;
  166. case ',':
  167. j=i++; //标记,的起始位置
  168. while((RMC_Data[i]!=',')&&(RMC_Data[i]!='*')) //RMC_Data[i]==','或者=='*'时结束循环。
  169. {i++;}
  170. if(j+1!=i)
  171. {
  172. for(j=j+1,k=0;j<i;j++)
  173. {
  174. temp[k++]=RMC_Data[j];
  175. }
  176. temp[k]='\0';
  177. // send_byte(temp[0]);
  178. }
  179. else temp[0]='\0';
  180. // send_byte('c');
  181. GPS_GPRMC_Handle(temp,count++);
  182. break;
  183. case '*':
  184. i=strlen(RMC_Data); //处理完成,软件结束。
  185. break;
  186. default:break;
  187. }
  188. }
  189. // send_byte('e');
  190. }
  191. void GpsDataInit(void)
  192. {
  193. unsigned char *p;
  194. p=(unsigned char *)&sutGpsSendData;
  195. memset(p, 0, sizeof(SUT_GPS_SEND_DATA));
  196. p=(unsigned char *)&sutGpsInfo;
  197. memset(p, 0, sizeof(SUT_GPS_INF));
  198. sutGpsInfo.SendTime=15;//默认主动上报时间间隔 单位为15秒
  199. sutGpsInfo.isGpsAuthOk = 0;//未鉴权
  200. }
  201. /*************************************************************************
  202. *检查GPS 服务器发过来的数据包是否正确
  203. 非法 返回0
  204. 合法 返回命令码
  205. **************************************************************************/
  206. unsigned char GpsServerCheckPack(unsigned char *data,unsigned short DataLen)
  207. {
  208. int i=0;
  209. unsigned char cmd;
  210. unsigned short len;
  211. unsigned long PSN;
  212. //判断数据包的包头是否正确
  213. if(data[0]!=GPS_PACK_HEAD1)return 0;
  214. if(data[1]!=GPS_PACK_HEAD2)return 0;
  215. //判断数据包的校验是否正确
  216. if(data[DataLen-2] != GetCheckSum(data,DataLen-2))
  217. {
  218. return 0;
  219. }
  220. //判断数据包的结尾是否正确
  221. if(data[DataLen-1] != GPS_PACK_END)
  222. {
  223. return 0;
  224. }
  225. //获取数据包的长度 并判断长度是否正确
  226. len=(unsigned short)data[3]*256+data[4];
  227. if(DataLen!=(len+5))return 0;
  228. // //判断终端编号是否正确
  229. // PSN=(unsigned long)data[5]<<24;
  230. // PSN+=(unsigned long)data[6]<<16;
  231. // PSN+=(unsigned long)data[7]<<8;
  232. // PSN+=(unsigned long)data[8];
  233. // if(PSN!=sutNetPara.PSN) return 0;
  234. //解析当前命令
  235. cmd = data[2];
  236. sutGpsInfo.HostCmd = cmd;
  237. return cmd;
  238. }
  239. /**************************************************************************************************
  240. *
  241. ***************************************************************************************************/
  242. uint32_t Process_XinganCenterGetPos_rsp(unsigned char* buf, unsigned short len)
  243. {
  244. unsigned char SendBuf[100];
  245. unsigned short PacketLen;
  246. MakeGpsSendData();
  247. PacketLen=GpsPacket(SendBuf,sutProductPara.PSN,XINGAN_PACKET_CENTER_CMD_GET_POS_RSP,(unsigned char *)&sutGpsSendData,sizeof(SUT_GPS_SEND_DATA));
  248. ModemSendTcpData(0,SendBuf,PacketLen);
  249. return 0;
  250. }
  251. uint32_t Process_XinganClient_rsp(char* buf, unsigned short len)
  252. {
  253. if(!sutGpsInfo.isServerLogin){
  254. sutGpsInfo.isServerLogin=1;
  255. SlwTrace(INF,"[Gps Logined]\r\n");
  256. }
  257. return 0;
  258. }
  259. /**************************************************************************************************
  260. *
  261. ***************************************************************************************************/
  262. void GpsTimingSendPos(void)
  263. {
  264. unsigned char SendBuf[100];
  265. unsigned short PacketLen;
  266. //if(sutGpsInfo.isGpsWork==0)return;
  267. MakeGpsSendData();
  268. PacketLen=GpsPacket(SendBuf,sutProductPara.PSN,XINGAN_PACKET_CLIENT_SEND_POS_DATA,(unsigned char *)&sutGpsSendData,sizeof(SUT_GPS_SEND_DATA));
  269. ModemSendTcpData(0,SendBuf,PacketLen);
  270. return ;
  271. }
  272. /***********************************************************************************
  273. *服务器设置主动上报时间
  274. *数据格式
  275. HEAD1 HEAD2 CMD LEN1 LEN2 PSN1 PSN2 PSN3 PSN4 X1 X2 CHECK END
  276. 29 29 34 00 08 PSN[4] X1 X2 CHECK 0D
  277. time=X1*256+X2
  278. ***********************************************************************************/
  279. uint32_t Process_XinganCenterGetPosTimerout(char* buf, uint32_t len)
  280. {
  281. char SendBuf[100];
  282. unsigned short t;
  283. unsigned short PacketLen;
  284. //跳过终端序列号4 bytes
  285. //获取时间
  286. sutGpsInfo.SendTime =((unsigned short)buf[9]&0xff<<8) + (unsigned short)buf[10]&0xff ;
  287. sprintf(SendBuf,"[GpsTime=%d]\r\n",sutGpsInfo.SendTime);
  288. SlwTrace(INF,SendBuf);
  289. //ol_start_AppTimer( XINGAN_SENDBACK_TIMER, g_xingan_info.timeout * KAL_TICKS_1_SEC);
  290. MakeGpsSendData();
  291. PacketLen=GpsPacket(SendBuf,sutProductPara.PSN,XINGAN_PACKET_CENTER_CMD_COMMON_RSP,(unsigned char *)&sutGpsSendData,sizeof(SUT_GPS_SEND_DATA));
  292. ModemSendTcpData(0,SendBuf,PacketLen);
  293. return len;
  294. }
  295. /******************************************************************************
  296. *
  297. *******************************************************************************/
  298. XinganCmd_struct XinganCmd_info[] =
  299. {
  300. {XINGAN_PACKET_CENTER_CMD_GET_POS, Process_XinganCenterGetPos_rsp},
  301. // {XINGAN_PACKET_CENTER_CMD_GET_STAT, Process_XinganCenterGetStat_rsp},
  302. // {XINGAN_PACKET_CENTER_CMD_RESET, Process_XinganCenterReset_rsp},
  303. // {XINGAN_PACKET_CENTER_CMD_DEFAULT_SET, Process_XinganCenterDefaultSet_rsp},
  304. {XINGAN_PACKET_CENTER_CMD_GET_POS_TIMEOUT, Process_XinganCenterGetPosTimerout},
  305. // {XINGAN_PACKET_CENTER_CMD_GET_POS_LENOUT, Process_XinganCenterGetPosLenout},
  306. // {XINGAN_PACKET_CENTER_CMD_CLOSE_WARNING, Process_XinganCenterCloseWarning_rsp},
  307. // {XINGAN_PACKET_CENTER_CMD_OPEN_OIL_WAY, Process_XinganCenterOpenOilWay_rsp},
  308. // {XINGAN_PACKET_CENTER_CMD_CLOSE_OIL_WAY, Process_XinganCenterCloseOilWay_rsp},
  309. // {XINGAN_PACKET_CENTER_CMD_GET_VER, Process_XinganCenterGetVer_rsp},
  310. // {XINGAN_PACKET_CENTER_CMD_DIAL_CALL, Process_XinganCenterDialCall_rsp} ,
  311. // {XINGAN_PACKET_CENTER_CMD_HIGH_SPEED_WARNING, Process_XinganCenterHighSpeedWarning_rsp},
  312. // {XINGAN_PACKET_CENTER_CMD_STATISTICS_MILE, Process_XinganCenterStatisticsMile_rsp},
  313. // {XINGAN_PACKET_CENTER_CMD_UDP_IPPORT, Process_XinganCenterIPport_rsp},
  314. // {XINGAN_PACKET_CENTER_CMD_APN, Process_XinganCenterApn_rsp},
  315. //
  316. {XINGAN_PACKET_CLIENT_CMD_COMMON_RSP, Process_XinganClient_rsp},
  317. //
  318. // {XINGAN_PACKET_CLIENT_CMD_CONNECT, Process_XinganClientConnectReq},
  319. // {XINGAN_PACKET_CLIENT_SEND_POS_DATA, Process_XinganClientSendPosData},
  320. // {XINGAN_PACKET_CLIENT_CMD_SEND_WARNING_DATA, Process_XinganClientSendWarnData},
  321. };
  322. Xingan_process_packet GetXinganProcessFun(uint32_t Cmd)
  323. {
  324. uint32_t j;
  325. for(j=0;j<sizeof(XinganCmd_info)/sizeof(XinganCmd_struct);j++)
  326. {
  327. if(Cmd == XinganCmd_info[j].cmd)
  328. {
  329. return XinganCmd_info[j].process_packet;
  330. }
  331. }
  332. return NULL;
  333. }
  334. /***************************************************************
  335. 处理GPS服务器发过来的信息
  336. 返回:
  337. 无效消息 不处理 返回0
  338. 否则返回命令码
  339. ****************************************************************/
  340. unsigned char GpsServerProcess(unsigned char *data, unsigned short DataLen)
  341. {
  342. unsigned char cmd;
  343. Xingan_process_packet ProcessFun;
  344. cmd=GpsServerCheckPack(data,DataLen);
  345. if(!cmd)return 0;
  346. ProcessFun = GetXinganProcessFun(cmd);
  347. if(ProcessFun !=NULL)
  348. {
  349. ProcessFun(data, DataLen);
  350. }
  351. return cmd;
  352. }
  353. //#define GPS_DEBUG_GPS_SEND_DATA
  354. /***************************************************************************
  355. *MakeGpsSendData
  356. 根据sutGpsInfo生成sutGpsSendData
  357. ****************************************************************************/
  358. void MakeGpsSendData2(void)
  359. {
  360. #ifdef GPS_DEBUG_GPS_SEND_DATA
  361. int i;
  362. const unsigned char acucTemp[]={
  363. 0x15,0x07,0x25,0x15,0x41,0x18,//yymmddhhmmss
  364. 0x02,0x23,0x75,0x49, //wwww 纬度
  365. 0x11,0x40,0x13,0x22, //jjjj 经度
  366. 0x00,0x07,0x01,0x28, //ssff 速度方向
  367. 0xf8,//st 状态
  368. 0x01,0xE2,0x40,//里程数 1E240=123456米
  369. 0x00,0x00,0x7f,//车辆状态 St1~St4
  370. 0x00,0x00,0x05,0x00,0x00,0x00,0x01,0x00,//V1~V8
  371. };
  372. unsigned char *p=(unsigned char *)&sutGpsSendData;
  373. for(i=0;i<sizeof(acucTemp);i++){
  374. p[i]=acucTemp[i];
  375. }
  376. #else
  377. unsigned char *data=(unsigned char *)&sutGpsSendData;
  378. memset(data, 0, sizeof(SUT_GPS_SEND_DATA));
  379. data[0] = sutGpsInfo.year;
  380. data[1] = sutGpsInfo.month;
  381. data[2] = sutGpsInfo.day;
  382. data[3] = sutGpsInfo.hour;
  383. data[4] = sutGpsInfo.minu;
  384. data[5] = sutGpsInfo.sec;
  385. data[6] = (sutGpsInfo.latitue>>24)&0xFF;
  386. data[7] = (sutGpsInfo.latitue>>16)&0xFF;
  387. data[8] = (sutGpsInfo.latitue>>8)&0xFF;
  388. data[9] = (sutGpsInfo.latitue)&0xFF;
  389. data[10] = (sutGpsInfo.longitue>>24)&0xFF;
  390. data[11] = (sutGpsInfo.longitue>>16)&0xFF;
  391. data[12] = (sutGpsInfo.longitue>>8)&0xFF;
  392. data[13] = (sutGpsInfo.longitue)&0xFF;
  393. data[14] = (sutGpsInfo.speed>>8)&0xFF;
  394. data[15] = (sutGpsInfo.speed)&0xFF;
  395. data[16] = (sutGpsInfo.aspect>>8)&0xFF;
  396. data[17] = (sutGpsInfo.aspect)&0xFF;
  397. //st;
  398. if(sutGpsInfo.isGpsWork==1 && sutGpsInfo.isGpsValid == 1){
  399. data[18] = 0x80;
  400. }
  401. /*
  402. if(sutGpsInfo.isGpsValid == 1 )
  403. {
  404. data[18] |= (0x01<<7);
  405. }
  406. if(sutGpsInfo.isGpsValid == 0)
  407. {
  408. data[18] |= (0x01<<6);
  409. data[18] |= (0x01<<5);
  410. }
  411. else if(sutGpsInfo.isGpsValid == 0)//:GPS天线短路
  412. {
  413. data[18] |= (0x01<<6);
  414. }
  415. else if(sutGpsInfo.isGpsValid == 0)//:GPS天线开路;
  416. {
  417. data[18] |= (0x01<<5);
  418. }
  419. else if(sutGpsInfo.isGpsValid == 0) //0x03:GPS模块故障
  420. {
  421. }
  422. */
  423. // if(sutGpsInfo.MainPowerStat ==0 )//主电源正常
  424. // {
  425. // data[18] |= (0x01<<4);
  426. // data[18] |= (0x01<<3);
  427. // }
  428. // else if(sutGpsInfo.MainPowerStat == 1)//主电源掉电
  429. // {
  430. // data[18] |= (0x01<<4);
  431. // }
  432. // else if(sutGpsInfo.MainPowerStat == 2 || g_xingan_info.MainPowerStat ==3)//主电源过高或过低
  433. // {
  434. // data[18] |= (0x01<<3);
  435. // }
  436. //里程数
  437. data[19] = (sutGpsInfo.StatisticsMile>>16)&0xFF;
  438. data[20] = (sutGpsInfo.StatisticsMile>>8)&0xFF;
  439. data[21] = (sutGpsInfo.StatisticsMile)&0xFF;
  440. //St1:
  441. // if(GetAccStat() == FALSE)//ACC关
  442. // {
  443. // data[22] |= (0x01<<7);
  444. // }
  445. // if(GetHighSensor1Stat() == FALSE)//自定义1路高传感器状态为低
  446. // {
  447. // data[22] |= (0x01<<6);
  448. // }
  449. // if(GetHighSensor2Stat() == FALSE)//自定义2路高传感器状态为低
  450. // {
  451. // data[22] |= (0x01<<5);
  452. // }
  453. // if(GetLowSensor1Stat() == TRUE)//自定义1路低传感器状态为高
  454. // {
  455. // data[22] |= (0x01<<4);
  456. // }
  457. // if(GetLowSensor2Stat()== TRUE)//自定义2路低传感器状态为高
  458. // {
  459. // data[22] |= (0x01<<3);
  460. // }
  461. //
  462. // if(GetOilWayStat()== TRUE)//油路正常
  463. // {
  464. // data[22] |= (0x01<<2);
  465. // }
  466. //
  467. // if(GetLoginStat() == FALSE)//没有登签
  468. // {
  469. // data[22] |= (0x01<<1);
  470. // }
  471. //
  472. // if(GetWarningStat() == FALSE)//未设防
  473. // {
  474. // data[22] |= (0x01);
  475. // }
  476. //st2:
  477. // if(GetRobWarningStat()== FALSE)//不为劫警报警
  478. // {
  479. // data[23] |= (0x01<<7);
  480. // }
  481. //
  482. // if(GetHighSpeedWarningStat()== FALSE)//不为超速报警
  483. // {
  484. // data[23] |= (0x01<<6);
  485. // }
  486. // if(GetStopTimeoutStat()== FALSE)//不为停车超长报警
  487. // {
  488. // data[23] |= (0x01<<5);
  489. // }
  490. // if(GooutOfRegion()== FALSE)//不为驶出区域报警
  491. // {
  492. // data[23] |= (0x01<<4);
  493. // }
  494. // if(ComeintoRegion()==FALSE)//不为驶入区域报警
  495. // {
  496. // data[23] |= (0x01<<3);
  497. // }
  498. //
  499. // if(PasswordIsOK()== TRUE)//不为看车密码错误报警
  500. // {
  501. // data[23] |= (0x01<<2);
  502. // }
  503. //
  504. // if(GprsIsLogin() == FALSE)//不为GPRS已上线
  505. // {
  506. // data[23] |= (0x01<<1);
  507. // }
  508. //
  509. // if(PppIsOK() == FALSE)//不为终端拨号成功
  510. // {
  511. // data[23] |= (0x01);
  512. // }
  513. //st3:
  514. // if(GprsIsLogin() == FALSE)//GPRS未注册
  515. // {
  516. // data[24] |= (0x01<<7);
  517. // }else{
  518. data[24] &= ~(0x01<<7);
  519. // }
  520. // if(CenterNeedSendCmd21() == TRUE)//中心应下发21指令
  521. // {
  522. data[24] |= (0x01<<6);
  523. // }
  524. // if(g_xingan_info.SendMode == XINGAN_PACKET_SEND_TCP)//TCP通讯方式
  525. // {
  526. data[24] |= (0x01<<5);
  527. // }
  528. //:CSQ信号状态0-31
  529. data[24] += (char)g_iCSQ;
  530. //st4
  531. // if(IsHandleOK()== TRUE)//手柄接入
  532. // {
  533. // data[25] |= (0x01<<7);
  534. // }
  535. // if(IsLcdOK() == TRUE)//LCD显示屏接入
  536. // {
  537. // data[25] |= (0x01<<6);
  538. // }
  539. // if(IsImageCollectorOK()== TRUE)//图像采集器接入
  540. // {
  541. // data[25] |= (0x01<<5);
  542. // }
  543. // if(IsFareMeterOK()== TRUE)//计价器接入
  544. // {
  545. // data[25] |= (0x01<<4);
  546. // }
  547. // if(IsVoiceDialerOK()==TRUE)//语音波号器接入
  548. // {
  549. // data[25] |= (0x01<<3);
  550. // }
  551. // if(IsForbiddenDialCall()==TRUE)//禁止打出
  552. // {
  553. // data[25] |= (0x01<<2);
  554. // }
  555. // if(IsForbiddenReceiveCall()==TRUE)//禁止打入
  556. // {
  557. // data[25] |= (0x01<<1);
  558. // }
  559. // if(IsForbiddenAllCalls()==TRUE)//禁止通话
  560. // {
  561. // data[25] |= (0x01);
  562. // }
  563. //v1v2v3v4:终端设置状态
  564. //V1V2:定时发送时间
  565. data[26] = (sutGpsInfo.SendTime>>8)&0xFF;
  566. data[27] = (sutGpsInfo.SendTime)&0xFF;
  567. //V3: 停车设置时间
  568. //data[28]= sutGpsInfo.StopTimeout&0xFF;
  569. //V4: 超速设置时间
  570. // data[29]= sutGpsInfo.HighSpeed;
  571. //V5; 电子围栏设置个数
  572. // data[30]= sutGpsInfo.ElectronicFenceNum;
  573. //V6: 登签
  574. if(sutGpsInfo.isServerLogin)data[31] = 1;
  575. else data[31] = 0;
  576. //: 定时发送图片的时间
  577. data[32] = 0;//
  578. //: 中心下发的主命令
  579. data[33]= sutGpsInfo.HostCmd;
  580. #endif
  581. }
  582. /*
  583. void MakeGpsData(void)
  584. {
  585. unsigned char *data=(unsigned char *)&sutGpsSendData;
  586. if(!sutGpsInfo.isGpsValid)return;
  587. data[0] = sutGpsInfo.year;
  588. data[1] = sutGpsInfo.month;
  589. data[2] = sutGpsInfo.day;
  590. data[3] = sutGpsInfo.hour;
  591. data[4] = sutGpsInfo.minu;
  592. data[5] = sutGpsInfo.sec;
  593. data[6] = sutGpsInfo.longitue>>24;
  594. data[7] = sutGpsInfo.longitue>>16;
  595. data[8] = sutGpsInfo.longitue>>8;
  596. data[9] = sutGpsInfo.longitue;
  597. data[10] = sutGpsInfo.latitue>>24;
  598. data[11] = sutGpsInfo.latitue>>16;
  599. data[12] = sutGpsInfo.latitue>>8;
  600. data[13] = sutGpsInfo.latitue;
  601. data[14] = sutGpsInfo.speed>>8;
  602. data[15] = sutGpsInfo.speed;
  603. data[16] = sutGpsInfo.aspect>>8;
  604. data[17] = sutGpsInfo.aspect;
  605. //st
  606. data[18] = 1;
  607. //空重载状态:表示范围:0-1采用压缩BCD编码.
  608. // 1 表示重载 0 表示空载
  609. data[19]= 0;
  610. //登退签状态:表示范围:0-1采用压缩BCD编码。
  611. // 1 表示登签 0 表示退签
  612. data[20] = 1;
  613. }
  614. */