Do_Disp.C
上传用户:zanguozi01
上传日期:2014-02-19
资源大小:155k
文件大小:19k
源码类别:

GPS编程

开发平台:

Others

  1. /********************************************************
  2. * 文件名:  Do_Disp.h
  3. * 创建时间:2004年10月20日
  4. * 创建人:  
  5. * 版本号:  1.00
  6. * 功能:
  7. *
  8. * 修改历史:(每条详述)
  9. ********************************************************/
  10. #include <msp430x14x.h>
  11. #include "General.h"
  12. #include "Uart01.h"
  13. #include "Define_Bit.h"
  14. #include "Other_Define.h"
  15. #include "Disp_Protocol.h"
  16. #include "Sub_C.h"
  17. #include "W_Protocol.h"
  18. #include "SPI45DB041.h"
  19. #include "D_Buffer.h"
  20. #include "Do_Other.h"
  21. #include "TA_Uart.h"
  22. #include "Handle_Protocol.h"
  23. #include "Do_Handle.h"
  24. #include "M22_AT.h"
  25. #include "Do_SRAM.h"
  26. /*
  27. #include "Main_Init.h"
  28. #include "Check_GSM.h"
  29. #include "Do_Reset.h"
  30. #include "Do_GSM.h"
  31. #include "Do_Handle.h"
  32. #include "Do_GPS.h"
  33. #include "Do_Disp.h"
  34. #include "Msp430_Flash.h"
  35. */
  36. unsigned char Check_Disp_Command(void);
  37. void Disp_Ask_Watch_Status_Echo(void);
  38. void Disp_Ask_Info(unsigned char nCommand,unsigned char nKey_ID,unsigned char nACK);
  39. void Disp_Receive_Info_Echo(unsigned char nCommand,unsigned char nInfo_ID1,unsigned char nInfo_ID2,unsigned char nInfo_ID3,unsigned char nInfo_ID4,unsigned char nACK);
  40. void Disp_Ask_Par(void);
  41. /********************************************************
  42. * 函数名:Do_Disp_Module()
  43. 作用域:外部文件调用
  44. * 功能:
  45. * 参数:
  46. * 返回值:
  47. * 创建人:
  48. *
  49. * 修改历史:(每条详述)
  50. 补充说明:显示终端数据采用半双工的通讯方式,模拟串口4,不采用握手线,和手柄的通讯方式一样
  51. ********************************************************/
  52. void Do_Disp_Module(void)
  53. {
  54.     unsigned int i=0,k=0;
  55.   //接收处理来自显示终端的消息包
  56. if( (gDisp_Receive_Over>50)&&(gDisp_Buffer_R_Point>0) )
  57. {
  58. #ifdef Debug_GSM_COM1
  59. Send_COM1_Byte(ASCII(gDisp_Buffer_R_Point/10));
  60. Send_COM1_Byte(ASCII(gDisp_Buffer_R_Point%10));
  61. Send_COM1_Byte('[');
  62. Send_COM1_String(gDisp_Buffer_R,gDisp_Buffer_R_Point);
  63. Send_COM1_Byte(']');
  64. Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
  65. #endif
  66. k=Check_Disp_Command();
  67. gDisp_Buffer_R_Point=0;
  68. switch(k)
  69. {
  70. /********************************************************
  71. 1,显示终端向主控请求主控状态的命令
  72. ********************************************************/
  73. case DISP_ASK_WATCH_STATUS_UP:
  74. {
  75. gDisp_OnLine_Timer=0;
  76. gInternal_Flag|=DISP_ON_F_1;
  77. gStatus1_Flag|=DISPLAY_ON_F_1;
  78. Disp_Ask_Watch_Status_Echo();
  79. break;
  80. }
  81. /********************************************************
  82. 2,接收来自显示终端的信息请求(需要上行到中心请求信息)
  83. ********************************************************/
  84. case DISP_INFO_STATUS_UP:
  85. {
  86. gDisp_OnLine_Timer=0;
  87. gInternal_Flag|=DISP_ON_F_1;
  88. gStatus1_Flag|=DISPLAY_ON_F_1;
  89. SRAM_Init();
  90. //1,先判断是否有未处理完的信息,如果有,则返回,接收命令不成功
  91. i=SRAM_Read(OTHER_SMS_2);
  92. if(i==VAILD_2)
  93. {
  94. gPublic_Flag &=~ DISP_SEND_INFO_F_1;
  95. if(gDisp_Buffer_Point+7+2<=sizeof(gDisp_Buffer))
  96. {
  97. gDisp_Buffer[gDisp_Buffer_Point]=7+2;
  98. gDisp_Buffer_Point++;
  99. gDisp_Buffer[gDisp_Buffer_Point]=0;
  100. gDisp_Buffer_Point++;
  101. gDisp_Buffer[gDisp_Buffer_Point]='@';
  102. gDisp_Buffer_Point++;
  103. gDisp_Buffer[gDisp_Buffer_Point]='%';
  104. gDisp_Buffer_Point++;
  105. gDisp_Buffer[gDisp_Buffer_Point]=7;
  106. gDisp_Buffer_Point++;
  107. gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_INFO_ECHO_DOWN;
  108. gDisp_Buffer_Point++;
  109. gDisp_Buffer[gDisp_Buffer_Point]=COMMAND_ERROR;
  110. gDisp_Buffer_Point++;
  111. gDisp_Buffer[gDisp_Buffer_Point]='$';
  112. gDisp_Buffer_Point++;
  113. gDisp_Buffer[gDisp_Buffer_Point]='&';
  114. gDisp_Buffer_Point++;
  115. }
  116. }
  117. else
  118. {
  119. Disp_Ask_Info(DISP_ASK_INFO_UP,gDisp_Buffer_R[4],0);
  120. gPublic_Flag |= DISP_SEND_INFO_F_1;
  121. }
  122. break;
  123. }
  124. /********************************************************
  125. 3,短消息预置的上报
  126. ********************************************************/
  127. case DISP_SMS_SNED_UP:
  128. {
  129. //1,先判断是否有未处理完的信息,如果有,则返回,接收命令不成功
  130. gDisp_OnLine_Timer=0;
  131. gInternal_Flag|=DISP_ON_F_1;
  132. gStatus1_Flag|=DISPLAY_ON_F_1;
  133. SRAM_Init();
  134. i=SRAM_Read(OTHER_SMS_2);
  135. if(i==VAILD_2)
  136. {
  137. gPublic_Flag &=~ DISP_SEND_INFO_F_1;
  138. if(gDisp_Buffer_Point+7+2<=sizeof(gDisp_Buffer))
  139. {
  140. gDisp_Buffer[gDisp_Buffer_Point]=7+2;
  141. gDisp_Buffer_Point++;
  142. gDisp_Buffer[gDisp_Buffer_Point]=0;
  143. gDisp_Buffer_Point++;
  144. gDisp_Buffer[gDisp_Buffer_Point]='@';
  145. gDisp_Buffer_Point++;
  146. gDisp_Buffer[gDisp_Buffer_Point]='%';
  147. gDisp_Buffer_Point++;
  148. gDisp_Buffer[gDisp_Buffer_Point]=7;
  149. gDisp_Buffer_Point++;
  150. gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_INFO_ECHO_DOWN;
  151. gDisp_Buffer_Point++;
  152. gDisp_Buffer[gDisp_Buffer_Point]=COMMAND_ERROR;
  153. gDisp_Buffer_Point++;
  154. gDisp_Buffer[gDisp_Buffer_Point]='$';
  155. gDisp_Buffer_Point++;
  156. gDisp_Buffer[gDisp_Buffer_Point]='&';
  157. gDisp_Buffer_Point++;
  158. }
  159. }
  160. else
  161. {
  162. Disp_Ask_Info(DISP_SMS_INFO_UP,gDisp_Buffer_R[4],0);
  163. gPublic_Flag |= DISP_SEND_INFO_F_1;
  164. }
  165. break;
  166. }
  167. /********************************************************
  168. 4,接收来自显示终端接收到主控发送的驾驶员信息的反馈
  169. ********************************************************/
  170. case DISP_RECEIVE_IC_INFO_UP:
  171. {
  172. gDisp_OnLine_Timer=0;
  173. gInternal_Flag|=DISP_ON_F_1;
  174. gStatus1_Flag|=DISPLAY_ON_F_1;
  175. gGet_Driver_Info_Count=0;
  176. gDriver_Info=SEND_DRIVER_INFO_OK;
  177. break;
  178. }
  179. /********************************************************
  180. 4,接收来自显示终端接收到一个下行的信息包的ECHO,需要上行到中心请求
  181. ********************************************************/
  182. /*
  183. case DISP_RECEIVE_INFO_ECHO_UP:
  184. {
  185. Disp_Receive_Info_Echo(DISP_INFO_ECHO_UP,gDisp_Buffer_R[4],gDisp_Buffer_R[5],gDisp_Buffer_R[6],gDisp_Buffer_R[7],0);
  186. break;
  187. }
  188. */
  189. /********************************************************
  190. 5,接收来自显示终端接收到一个下行的响应(显示终端接收到一个每一分钟的
  191. 的时间矫正后,则需要返回的一个响应数据包)
  192. ********************************************************/
  193. case DISP_CLRCLESEND_ECHO_UP:
  194. {
  195. gDisp_OnLine_Timer=0;
  196. gInternal_Flag|=DISP_ON_F_1;
  197. gStatus1_Flag|=DISPLAY_ON_F_1;
  198. break;
  199. }
  200. /********************************************************
  201. 6, 接收来自显示终端和记录仪之间通讯的协议字(主控系统只负责转发)
  202. 需要增加重复发送功能
  203. ********************************************************/
  204. case DISP_ASK_RECORDINFO_UP:
  205. {
  206. gDisp_OnLine_Timer=0;
  207. gInternal_Flag|=DISP_ON_F_1;
  208. gStatus1_Flag|=DISPLAY_ON_F_1;
  209. for(k=0;k<gDisp_Buffer_R[2]-5;k++)
  210. {
  211. Send_COM1_Byte(gDisp_Buffer_R[k+4]);
  212. }
  213. break;
  214. }
  215. /********************************************************
  216. 7, 接收来自显示终端的响应(0xAE)
  217. ********************************************************/
  218. case DISP_SET_ECHO_UP:
  219. {
  220. gDisp_OnLine_Timer=0;
  221. gInternal_Flag|=DISP_ON_F_1;
  222. gStatus1_Flag|=DISPLAY_ON_F_1;
  223. //下行文字信息的显示终端收到一屏的响应
  224. if(gDisp_Buffer_R[4]==DISP2_SEND_WORD_ECHO_UP)
  225. {
  226. if(gCommon_Flag&ALLOW_OUT_DISP_F_1)
  227. {
  228. gCommon_Flag|=DISP_SEND_OK_F_1;
  229. }
  230. }
  231. //下行文字信息全部收完后的响应0x4B
  232. else if(gDisp_Buffer_R[4]==DISP2_SEND_WORD_UP)
  233. {
  234. //传递参数:第二级命令字;ID(4个字节);ACK,
  235. Disp_Receive_Info_Echo(gDisp_Buffer_R[4],gDisp_Buffer_R[6],gDisp_Buffer_R[7],gDisp_Buffer_R[8],gDisp_Buffer_R[9],gDisp_Buffer_R[5]);
  236. }
  237. //来自中心的预先设置短消息的响应0xAE
  238. else if(gDisp_Buffer_R[4]==DISP2_SET_SMS_ECHO_UP)
  239. {
  240. //传递参数:第二级命令字;ID(1个字节);ACK
  241. Disp_Ask_Info(gDisp_Buffer_R[4],gDisp_Buffer_R[6],gDisp_Buffer_R[5]);
  242. gCommon_Flag|=DISP_SEND_OK_F_1;
  243. }
  244. //来自手柄端口的预先设置短消息的响应字0x04
  245. else if(gDisp_Buffer_R[4]==DISP2_HSET_SMS_ECHO_UP)
  246. {
  247. Send_COM3_Load(5,HANDLE_SET_SMS_ECHO,COMMAND_OK);
  248. gCommon_Flag|=DISP_SEND_OK_F_1;
  249. }
  250. //来自手柄端口的初始化显示终端的命令响应0x03
  251. else if(gDisp_Buffer_R[4]==DISP2_CLEAR_ECHO_UP)
  252. {
  253. //返回手柄一个成功信号
  254. Waiting_Allow_Send();
  255. Send_COM3_SubProgram(5,HANDLE_CLEAR_DISP_ECHO,COMMAND_OK);
  256. }
  257. break;
  258. }
  259. /********************************************************
  260. 8, 接收来自显示终端查询主控终端的请求(需要增加显示终端的重复发送)
  261. ********************************************************/
  262. case DISP_ASK_PAR_UP:
  263. {
  264. gDisp_OnLine_Timer=0;
  265. gInternal_Flag|=DISP_ON_F_1;
  266. gStatus1_Flag|=DISPLAY_ON_F_1;
  267. Disp_Ask_Par();
  268. break;
  269. }
  270. /********************************************************
  271. 9,其他
  272. ********************************************************/
  273. default:
  274. break;
  275. }
  276. }
  277. else if(  (P6IN&DISP_TEST)
  278. &&((gCommon_Flag&ALLOW_SEND_DISP_F_1)==0)  )
  279. {
  280. gCommon_Flag|=ALLOW_SEND_DISP_F_1;
  281. }
  282. //处理向显示终端发送消息包的处理
  283. else if (  (gDisp_Buffer_Point>0) //发送缓冲区中有数据要发送
  284.   &&(gDisp_Buffer_R_Point==0) //接收缓冲区的数据指针为0,表示没有接收数据
  285.   &&(gHandle_Receive_Over>20)    //因为在同一个中断中,必须保证车栽电话没有向主控发送数据
  286.   &&(P6IN&DISP_TEST)
  287.   &&( (gCommon_Flag&ALLOW_R232_F_1)==0)
  288.   &&(gReceive1_Over_Count>20)
  289.   &&(gGPS_Receive_Over>20)
  290.   &&(gDisp_Timer>30)
  291.   &&(gCommon_Flag&ALLOW_SEND_DISP_F_1) )
  292. {
  293. //1,正常的非需要响应的数据
  294. if(   ((gCommon_Flag&ALLOW_OUT_DISP_F_1)==0)
  295.     &&( (gCommon_Flag&DISP_SEND_OK_F_1)==0) )
  296. {
  297. Send_COM4_String( gDisp_Buffer+2,gDisp_Buffer[0]-2 );
  298. RX4_Ready();
  299. gCommon_Flag&=~ALLOW_SEND_DISP_F_1;
  300. gDisp_Timer=0;
  301. if( gDisp_Buffer[5]==DISP_MAIN_WORD_DOWN )
  302. {
  303. gCommon_Flag|=ALLOW_OUT_DISP_F_1;
  304. gDo_Speed_Count=0;
  305. }
  306. else
  307. {
  308. k=gDisp_Buffer[0];
  309.         Copy_String( gDisp_Buffer+k,gDisp_Buffer,gDisp_Buffer_Point-k );
  310.         gDisp_Buffer_Point=gDisp_Buffer_Point-k;
  311. }
  312. }
  313. //2,收到响应后的处理
  314. else if(   (gCommon_Flag&DISP_SEND_OK_F_1)
  315.          &&(gCommon_Flag&ALLOW_OUT_DISP_F_1)  )
  316. {
  317. gCommon_Flag&=~DISP_SEND_OK_F_1;
  318. gCommon_Flag&=~ALLOW_OUT_DISP_F_1;
  319. k=gDisp_Buffer[0];
  320.         Copy_String( gDisp_Buffer+k,gDisp_Buffer,gDisp_Buffer_Point-k );
  321.         gDisp_Buffer_Point=gDisp_Buffer_Point-k;
  322. }
  323. //3,重发部分的处理
  324. else if(   (gCommon_Flag&ALLOW_OUT_DISP_F_1)
  325.          &&((gCommon_Flag&DISP_SEND_OK_F_1)==0)   )
  326. {
  327. if(gSend_Disp_Timer>3)
  328. {
  329. gSend_Disp_Timer=0;
  330. Send_COM4_String( gDisp_Buffer+2,gDisp_Buffer[0]-2 );
  331. RX4_Ready();
  332. gCommon_Flag&=~ALLOW_SEND_DISP_F_1;
  333. gDisp_Timer=0;
  334. gDisp_ReSend_Count++;
  335. if(gDisp_ReSend_Count>3)
  336. {
  337. gCommon_Flag&=~ALLOW_OUT_DISP_F_1;
  338. k=gDisp_Buffer[0];
  339.          Copy_String( gDisp_Buffer+k,gDisp_Buffer,gDisp_Buffer_Point-k );
  340.           gDisp_Buffer_Point=gDisp_Buffer_Point-k;
  341. }
  342. }
  343.     }
  344. }
  345. }
  346. /********************************************************
  347. * 函数名:Check_Disp_Command()
  348. 作用域:本地文件调用
  349. * 功能: 用来接收处理来自显示终端的接收数据,判断出命令字
  350. * 参数:
  351. * 返回值:
  352. * 创建人:
  353. *
  354. * 修改历史:(每条详述)
  355. ********************************************************/
  356. unsigned char Check_Disp_Command(void)
  357. {
  358.     if( gDisp_Buffer_R_Point < 6) return(0);
  359. //    if( gDisp_Buffer_R_Point != gDisp_Buffer_R[2]) return(0);
  360.     if( gDisp_Buffer_R[0]!='@' ) return(0);
  361.     if( gDisp_Buffer_R[1]!='%' ) return(0);
  362.     if( gDisp_Buffer_R[gDisp_Buffer_R[2]-2]!='$' ) return(0);
  363.     if( gDisp_Buffer_R[gDisp_Buffer_R[2]-1]!='&' ) return(0);
  364.     return( gDisp_Buffer_R[3] );
  365. }
  366. /********************************************************
  367. * 函数名:Save_TypeC_Buffer()
  368. 作用域:本地文件调用
  369. * 功能: 用来处理C类需要上传的数据(这里指的是来自显示终端的C类数据())
  370. * 参数:
  371. * 返回值:
  372. * 创建人:
  373. *
  374. * 修改历史:(每条详述)
  375. 补充说明:
  376. 0xB1 存储表示这个区域的SMS是否处理,为1则表示后面还有未处理的SMS,为0则表示已经处理完了SMS
  377. 0xB2 存储数据包的命令字在这里则为nCommand
  378. 0xB3 存储数据包的ACK的值ACK
  379. 0xB4 存储后面数据包的长度(但注意没有包括存储CHK(MSB),CHK(LSB),EOT,这三个字节)
  380. 0xB5   从这开始存储数据包
  381. ********************************************************/
  382. /********************************************************
  383. * 函数名:Disp_Hand_Free_Defence()
  384. 作用域:本地文件调用
  385. * 功能: 接收到来自显示终端的主动解除防信息的处理
  386. 1,先判断解除设防的密码是否正确,
  387. * 参数:
  388. * 返回值:
  389. * 创建人:
  390. *
  391. * 修改历史:(每条详述)
  392. 补充说明:
  393. 1,先判断车载终端的密码是否有效,如果还未存储过密码,则不判断解除密码的正确性,直接解除设防
  394. 2,如果车载终端的密码有效,则判断解除密码是否正确,这里需要重点说明的是,因为显示终端的密码如果
  395. 不满足6位,则不足处不会填为0x20,但以后的如果通过手柄来处理密码则始终按6位来处理,不足6位的
  396. 则会填0X20。
  397. 3,如果密码正确,则向显示终端发送密码正确,并且解除设防(包括FLASH区设防标志的清除)
  398. 4,如果密码不正确,则向显示中断发送密码不正确,并且连续3次密码输入不正确,则立刻产生被盗报警信息
  399. 但设防标志仍然存在
  400. ********************************************************/
  401. /********************************************************
  402. * 函数名:Disp_Ask_Watch_Status_Echo()
  403. 作用域:本地文件调用
  404. * 功能: 接收到来自显示终端主动改变密码的信令
  405. * 参数:
  406. * 返回值:
  407. * 创建人:
  408. *
  409. * 修改历史:(每条详述)
  410. ********************************************************/
  411. void Disp_Ask_Watch_Status_Echo(void)
  412. {
  413. if(gDisp_Buffer_Point+14<=sizeof(gDisp_Buffer))
  414. {
  415. gDisp_Buffer[gDisp_Buffer_Point]=14;
  416. gDisp_Buffer_Point++;
  417. gDisp_Buffer[gDisp_Buffer_Point]=0;
  418. gDisp_Buffer_Point++;
  419. gDisp_Buffer[gDisp_Buffer_Point]='@';
  420. gDisp_Buffer_Point++;
  421. gDisp_Buffer[gDisp_Buffer_Point]='%';
  422. gDisp_Buffer_Point++;
  423. gDisp_Buffer[gDisp_Buffer_Point]=12;
  424. gDisp_Buffer_Point++;
  425. gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_STATUS_DOWN;
  426. gDisp_Buffer_Point++;
  427. if(gGeneral_Flag&GPS_VALID_F_1)
  428. {
  429. gDisp_Buffer[gDisp_Buffer_Point]=gYear;
  430. gDisp_Buffer_Point++;
  431. gDisp_Buffer[gDisp_Buffer_Point]=gMonth;
  432. gDisp_Buffer_Point++;
  433. gDisp_Buffer[gDisp_Buffer_Point]=gDate;
  434. }
  435. else
  436. {
  437. gDisp_Buffer[gDisp_Buffer_Point]=0x05;
  438. gDisp_Buffer_Point++;
  439. gDisp_Buffer[gDisp_Buffer_Point]=0x01;
  440. gDisp_Buffer_Point++;
  441. gDisp_Buffer[gDisp_Buffer_Point]=0x01;
  442. }
  443. gDisp_Buffer_Point++;
  444. gDisp_Buffer[gDisp_Buffer_Point]=gHour;
  445. gDisp_Buffer_Point++;
  446. gDisp_Buffer[gDisp_Buffer_Point]=gMinute;
  447. gDisp_Buffer_Point++;
  448. gDisp_Buffer[gDisp_Buffer_Point]=gSecond;
  449. gDisp_Buffer_Point++;
  450. gDisp_Buffer[gDisp_Buffer_Point]='$';
  451. gDisp_Buffer_Point++;
  452. gDisp_Buffer[gDisp_Buffer_Point]='&';
  453. gDisp_Buffer_Point++;
  454. }
  455. }
  456. /********************************************************
  457. * 函数名:Disp_Ask_Info()
  458. 作用域:本地文件调用
  459. * 功能: 接收到来自显示终端的按键请求信息,需要将这些信息上行给中心
  460. * 参数:
  461. * 返回值:
  462. * 创建人:
  463. *
  464. * 修改历史:(每条详述)
  465. ********************************************************/
  466. void Disp_Ask_Info(unsigned char nCommand,unsigned char nKey_ID,unsigned char nACK)
  467. {
  468. unsigned char Key_ID=0;
  469. Key_ID=nKey_ID;
  470. SRAM_Init();
  471. SRAM_Write(OTHER_SMS_2+0,VAILD_2);
  472. SRAM_Write(OTHER_SMS_2+1,nCommand);
  473. SRAM_Write(OTHER_SMS_2+2,nACK);
  474. SRAM_Write(OTHER_SMS_2+3,22);
  475. SRAM_Write(OTHER_SMS_2+4,Key_ID);
  476. Write_PartData_Sram(OTHER_SMS_2+4);
  477. SRAM_Write(OTHER_SMS_2+4+18,0);
  478. SRAM_Write(OTHER_SMS_2+4+19,gStatus3_Flag);
  479. SRAM_Write(OTHER_SMS_2+4+20,gStatus2_Flag);
  480. SRAM_Write(OTHER_SMS_2+4+21,gStatus1_Flag);
  481. Judge_SMS_Way();
  482. }
  483. /********************************************************
  484. * 函数名:Disp_Ask_Info()
  485. 作用域:本地文件调用
  486. * 功能: 接收到来自显示终端的按键请求信息,需要将这些信息上行给中心
  487. * 参数:
  488. * 返回值:
  489. * 创建人:
  490. *
  491. * 修改历史:(每条详述)
  492. ********************************************************/
  493. void Disp_Receive_Info_Echo(unsigned char nCommand,unsigned char nInfo_ID1,unsigned char nInfo_ID2,unsigned char nInfo_ID3,unsigned char nInfo_ID4,unsigned char nACK)
  494. {
  495. SRAM_Init();
  496. SRAM_Write(OTHER_SMS_2+0,VAILD_2);
  497. SRAM_Write(OTHER_SMS_2+1,nCommand);
  498. SRAM_Write(OTHER_SMS_2+2,nACK);
  499. SRAM_Write(OTHER_SMS_2+3,17+8);
  500. //4个字节的信息包的ID号
  501. SRAM_Write(OTHER_SMS_2+4,nInfo_ID1);
  502. SRAM_Write(OTHER_SMS_2+5,nInfo_ID2);
  503. SRAM_Write(OTHER_SMS_2+6,nInfo_ID3);
  504. SRAM_Write(OTHER_SMS_2+7,nInfo_ID4);
  505. Write_PartData_Sram(OTHER_SMS_2+7);
  506. SRAM_Write(OTHER_SMS_2+7+18,0);
  507. SRAM_Write(OTHER_SMS_2+7+19,0);
  508. SRAM_Write(OTHER_SMS_2+7+20,gStatus2_Flag);
  509. SRAM_Write(OTHER_SMS_2+7+21,gStatus1_Flag);
  510. Judge_SMS_Way();
  511. }
  512. /********************************************************
  513. * 函数名:Disp_Ask_Par(()
  514. 作用域:本地文件调用
  515. * 功能:
  516. * 参数:
  517. * 返回值:
  518. * 创建人:
  519. *
  520. * 修改历史:(每条详述)
  521. ********************************************************/
  522. void Disp_Ask_Par(void)
  523. {
  524. unsigned int i=0;
  525. unsigned char Data_Temp[12];
  526. unsigned int iData=0;
  527. Ask_Par();
  528. //向显示屏发送的数据包需要另外处理一下
  529. /*
  530. gGeneral_Buffer[0]存储的是发送数据的长度
  531. 需要将gGeneral_Buffer[1]-----gGeneral_Buffer[5]的数据转换为ASCII字符显示形式
  532. 例程:
  533. 40 25 50 13 30 30 30 31 30 31 30 30 30 30 30 35 31 33 36 39 31 38 37 38 35 33 34 00 32 31 30 2E 32 31 2E 32 34 34 2E 33 39 00 30 39 39 38 38 31 2C 22 49 50 22 2C 22 43 4D 4E 45 54 22 00 31 30 30 30 32 30 30 30 32 30 30 30 30 30 30 30 24 26
  534. */
  535. Data_Temp[0]=ASCII(gGeneral_Buffer[1]/10);
  536. Data_Temp[1]=ASCII(gGeneral_Buffer[1]%10); //车型
  537. Data_Temp[2]=ASCII(gGeneral_Buffer[2]/10);
  538. Data_Temp[3]=ASCII(gGeneral_Buffer[2]%10); //车组
  539. Data_Temp[4]=ASCII(gGeneral_Buffer[3]/10);
  540. Data_Temp[5]=ASCII(gGeneral_Buffer[3]%10); //车类
  541. iData = gGeneral_Buffer[4];
  542. iData <<=8;
  543. iData +=gGeneral_Buffer[5];
  544. Data_Temp[6]=ASCII(iData/100000);
  545. Data_Temp[7]=ASCII( (iData%100000)/10000 );
  546. Data_Temp[8]=ASCII( (iData%10000)/1000);
  547. Data_Temp[9]=ASCII( (iData%1000)/100);
  548. Data_Temp[10]=ASCII( (iData%100)/10);
  549. Data_Temp[11]=ASCII( iData%10 ); //车号
  550. //重新整理gGeneral_Buffer缓冲
  551. for(i=gGeneral_Buffer[0]+7;i>=13;i--)
  552. {
  553. gGeneral_Buffer[i]=gGeneral_Buffer[i-7];
  554. }
  555. //重新整理数据长度
  556. gGeneral_Buffer[0]=gGeneral_Buffer[0]+7;
  557. for(i=0;i<12;i++)
  558. {
  559. gGeneral_Buffer[1+i]=Data_Temp[i];
  560. }
  561. if(gDisp_Buffer_Point+gGeneral_Buffer[0]+1+5+2<=sizeof(gDisp_Buffer))
  562. {
  563. gDisp_Buffer[gDisp_Buffer_Point]=gGeneral_Buffer[0]+1+5+2;
  564. gDisp_Buffer_Point++;
  565. gDisp_Buffer[gDisp_Buffer_Point]=0;
  566. gDisp_Buffer_Point++;
  567. gDisp_Buffer[gDisp_Buffer_Point]='@';
  568. gDisp_Buffer_Point++;
  569. gDisp_Buffer[gDisp_Buffer_Point]='%';
  570. gDisp_Buffer_Point++;
  571. gDisp_Buffer[gDisp_Buffer_Point]=gGeneral_Buffer[0]+1+5;
  572. gDisp_Buffer_Point++;
  573. gDisp_Buffer[gDisp_Buffer_Point]=DISP_ASK_PAR_DOWM;
  574. gDisp_Buffer_Point++;
  575. for(i=1;i<=gGeneral_Buffer[0];i++)
  576. {
  577. gDisp_Buffer[gDisp_Buffer_Point]=gGeneral_Buffer[i];
  578. gDisp_Buffer_Point++;
  579. }
  580. gDisp_Buffer[gDisp_Buffer_Point]='$';
  581. gDisp_Buffer_Point++;
  582. gDisp_Buffer[gDisp_Buffer_Point]='&';
  583. gDisp_Buffer_Point++;
  584. }
  585. }