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

GPS编程

开发平台:

Others

  1. /********************************************************
  2. * 文件名:  Do_Handle.h
  3. * 创建时间:2004年10月20日
  4. * 创建人:  
  5. * 版本号:  1.00
  6. * 功能:
  7. *
  8. * 修改历史:(每条详述)
  9. ********************************************************/
  10. #include <msp430x14x.h>
  11. #include "Handle_Protocol.h"
  12. #include "SPI45DB041.h"
  13. #include "TA_Uart.h"
  14. #include "General.h"
  15. #include "D_Buffer.h"
  16. #include "Other_Define.h"
  17. #include "Define_Bit.h"
  18. #include "Uart01.h"
  19. #include "Sub_C.h"
  20. #include "M22_AT.h"
  21. #include "Do_Handle.h"
  22. #include "W_Protocol.h"
  23. #include "Disp_Protocol.h"
  24. #include "Do_SRAM.h"
  25. #include "Msp430_Flash.h"
  26. /*
  27. #include "Check_GSM.h"
  28. #include "Do_Reset.h"
  29. #include "Main_Init.h"
  30. #include "Do_GSM.h"
  31. */
  32. //#define Debug_GSM_COM1
  33. unsigned char Check_Handle_Command(void);
  34. void Handle_Dailing(unsigned char nPoint_Temp);
  35. void Handle_Answer(void);
  36. void Write_Dail_Record(unsigned char nPhone_Length);
  37. void Read_Dail_Record(unsigned char nItem);
  38. void Write_Talk_Record(unsigned char nPhone_Length);
  39. void Read_Talk_Record(unsigned char nItem);
  40. void Handle_ReadOnePage_Data(unsigned char Page_H,unsigned char Page_L);
  41. //void Handle_EraseOnePage_Data(unsigned char Page_H,unsigned char Page_L);
  42. void Move_Right_Item(unsigned char Start_Item,unsigned char End_Item,unsigned char Move_Count);
  43. //void Handle_Set_NumPhone(void);
  44. //void Handle_Set_TCP_Par(void);
  45. //unsigned char  Check_All_Flash(void);
  46. unsigned int  Check_Allow_Phone(unsigned char Length_Phone);
  47. void Read_Phone_Note_Record(unsigned char nItem);
  48. void Handle_Set_Par(unsigned char nLength);
  49. void Handle_Set_TcpIp(void);
  50. void Handle_Set_Time(void);
  51. void Handle_Ask_Par(void);
  52. void Handle_Set_SMS(void);
  53. void Handle_Set_Phone(unsigned char nLength);
  54. void Handle_Set_Dis(void);
  55. void Handle_Test_Sram(void);
  56. /********************************************************
  57. * 函数名:Do_Handle_Module
  58. 作用域:外部文件调用
  59. * 功能: 与手柄通讯模块。
  60. * 参数:
  61. * 返回值:
  62. * 创建人:
  63. *
  64. * 修改历史:(每条详述)
  65. 补充说明:
  66. 收到的每一个手柄数据存储在gGeneral_Buffer[]中。
  67. 由Check_Handle_Command()子程序处理接收在gGeneral_Buffer中的数据
  68. 根据信令的不一样,需要分别处理,需要通过有G20的AT操作的指令则直接
  69. 存储在buffer1中的0x5D----0x7A 区域共30个字节。
  70. 手柄与电话有关的AT指令包括如下几类
  71. 这里只存储AT指令的类型有如下几类:
  72. 1,拨号,2,挂机,3,接听,4,DMTF,5,音量调节,6,CSCA的设置
  73. 根据上面的情形,以30个字节足够存储的
  74. 还有一类的指令则是需要直接处理的,比如说电话记录的查询,密码设置等等
  75. 0x5D----0x7A 区域的分配如下:
  76. 0x5D--  存储后面数据是否处理完的标志,为1则表示后面的数据未处理,为0则表示
  77. 已经处理完毕,可以在填写下个指令。
  78. 0x5E-- 存储相关的AT指令的类型。如手柄拨号,挂机等等
  79. 0x5F-- 存储后面数据的长度,如需要拨号的电话号码等。如果后面无任何数据,则写0。
  80. ********************************************************/
  81. void Do_Handle_Module(void)
  82. {
  83. unsigned int i=0,k=0;
  84. unsigned char nHandle_Piont_Temp=0;
  85. //指令的重发机制,目前只针对主控发送给手柄的挂机指令和接通指令
  86. if(   (gSend_Handle_Timer>2)
  87. &&((gSys_Handle==MAIN_HANG_UP)||(gSys_Handle==MAIN_TALKING))  )
  88. {
  89. gSend_Handle_Timer=0;
  90. Send_COM3_Load(4,gSys_Handle,0);
  91. gRe_Send_Count++;
  92. if(gRe_Send_Count>=5)
  93. {
  94. gRe_Send_Count=0;
  95. gSys_Handle=0;
  96. }
  97. }
  98. if(gDTMF_SAVE[0]>0)
  99. {
  100. SRAM_Init();
  101. if(SRAM_Read(PHONE_AT_2)==NULL_2)
  102. {
  103. OperateSPIEnd();
  104. k=gDTMF_SAVE[1];
  105. gDTMF_SAVE[0]--;
  106. for(i=0;i<gDTMF_SAVE[0];i++)
  107. {
  108. gDTMF_SAVE[i+1]=gDTMF_SAVE[i+2];
  109. }
  110. SRAM_Init();
  111. SRAM_Write(PHONE_AT_2+0,VAILD_2);
  112. SRAM_Write(PHONE_AT_2+1,H_DTMF);
  113. SRAM_Write(PHONE_AT_2+2,1);
  114. SRAM_Write(PHONE_AT_2+3,k);
  115. }
  116. OperateSPIEnd();
  117. }
  118. if( (gHandle_Receive_Over>40)&&(gHandle_Buffer_Point>0) )
  119. {
  120. #ifdef Debug_GSM_COM1
  121. Send_COM1_Byte(ASCII(gHandle_Buffer_Point/10));
  122. Send_COM1_Byte(ASCII(gHandle_Buffer_Point%10));
  123. Send_COM1_Byte('[');
  124. Send_COM1_String(gHandle_Buffer,gHandle_Buffer_Point);
  125. Send_COM1_Byte(']');
  126. Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
  127. #endif
  128. //作为判断手柄是否被摘除掉或者手柄出现程序异常的判
  129. //接收完数据,则开始处理数据
  130. k=Check_Handle_Command();
  131. nHandle_Piont_Temp=gHandle_Buffer_Point;
  132. gHandle_Buffer_Point=0;
  133. switch(k)
  134. {
  135. /********************************************************
  136. 0,手柄的指令ECHO(手柄命令)
  137. ********************************************************/
  138. case HANDLE_ECHO:
  139. {
  140. gHandle_OnLine_Timer=0;
  141. gStatus1_Flag &=~ HANDLE_ON_0_F_1;
  142. gStatus1_Flag |= HANDLE_ON_1_F_1;
  143. //判断返回的是那一个指令的ECHO
  144. if( (gSys_Handle==MAIN_HANG_UP)&&(gHandle_Buffer[3]==MAIN_HANG_UP) )
  145. {
  146. gRe_Send_Count=0;
  147. gSys_Handle=0;
  148. }
  149. else if( (gSys_Handle==MAIN_TALKING)&&(gHandle_Buffer[3]==MAIN_TALKING) )
  150. {
  151. gRe_Send_Count=0;
  152. gSys_Handle=0;
  153. }
  154. break;
  155. }
  156. /********************************************************
  157. 1,手柄拨号(手柄命令)
  158. ********************************************************/
  159. case HANDLE_DIAL:
  160. {
  161. gCommon_Flag&=~CHECK_RINGPHONE_F_1;
  162. gHandle_OnLine_Timer=0;
  163. gStatus1_Flag &=~ HANDLE_ON_0_F_1;
  164. gStatus1_Flag |= HANDLE_ON_1_F_1;
  165. k=SRAM_Read(PHONE_AT_2);
  166. i=SRAM_Read(PHONE_AT_2+1);
  167. if( (i==H_HUNGUP)&&(k==VAILD_2) )
  168. {
  169. Send_COM3_Load(5,MAIN_RETURN_PHONE_ECHO,COMMAND_ERROR);
  170. }
  171. else
  172. {
  173. Handle_Dailing(nHandle_Piont_Temp);
  174. }
  175. break;
  176. }
  177. /********************************************************
  178. 2,手柄接听(手柄命令)
  179. ********************************************************/
  180. case  HANDLE_ANSWER:
  181. {
  182. gCommon_Flag&=~CHECK_RINGPHONE_F_1;
  183. gHandle_OnLine_Timer=0;
  184. gStatus1_Flag &=~ HANDLE_ON_0_F_1;
  185. gStatus1_Flag |= HANDLE_ON_1_F_1;
  186. Send_COM3_Load(5,MAIN_RETURN_PHONE_ECHO,COMMAND_OK);
  187. Handle_Answer();
  188. break;
  189. }
  190. /********************************************************
  191. 3,手柄挂机(手柄命令)
  192. ********************************************************/
  193. case HANDLE_HANGUP:
  194. {
  195. gCommon_Flag&=~CHECK_RINGPHONE_F_1;
  196. gHandle_OnLine_Timer=0;
  197. gStatus1_Flag &=~ HANDLE_ON_0_F_1;
  198. gStatus1_Flag |= HANDLE_ON_1_F_1;
  199. Send_COM3_Load(5,MAIN_RETURN_PHONE_ECHO,COMMAND_OK);
  200. //如果这个时候处于监听状态,则下面不用处理
  201. if( (gGeneral_Flag&MONITOR_ON_F_1)||(gPhone_Status==ACTIVE_MONITOR))
  202. {
  203. gHandle_Buffer_Point=0;
  204. }
  205. else
  206. {
  207. SRAM_Init();
  208. SRAM_Write(PHONE_AT_2+0,VAILD_2);
  209. SRAM_Write(PHONE_AT_2+1,H_HUNGUP);
  210. SRAM_Write(PHONE_AT_2+2,0);
  211. }
  212. break;
  213. }
  214. /********************************************************
  215. 4,手柄调节音量(手柄命令)
  216. ********************************************************/
  217. case HANDLE_VOL:
  218. {
  219. gCommon_Flag&=~CHECK_RINGPHONE_F_1;
  220. gHandle_OnLine_Timer=0;
  221. gStatus1_Flag &=~ HANDLE_ON_0_F_1;
  222. gStatus1_Flag |= HANDLE_ON_1_F_1;
  223. SRAM_Init();
  224. SRAM_Write(PHONE_AT_2+0,VAILD_2);
  225. SRAM_Write(PHONE_AT_2+1,H_VOLADJ);
  226. SRAM_Write(PHONE_AT_2+2,1);
  227. SRAM_Write(PHONE_AT_2+3,gHandle_Buffer[3]);
  228. break;
  229. }
  230. /********************************************************
  231. 5,手柄的DTMF(手柄命令)
  232. ********************************************************/
  233. case HANDLE_DTMF:
  234. {
  235. gCommon_Flag&=~CHECK_RINGPHONE_F_1;
  236. gHandle_OnLine_Timer=0;
  237. gStatus1_Flag &=~ HANDLE_ON_0_F_1;
  238. gStatus1_Flag |= HANDLE_ON_1_F_1;
  239. if(gDTMF_SAVE[0]<sizeof(gDTMF_SAVE)-1)
  240. {
  241. gDTMF_SAVE[0]++;
  242. gDTMF_SAVE[gDTMF_SAVE[0]]=gHandle_Buffer[3];
  243. }
  244. break;
  245. }
  246. /********************************************************
  247. 6,手柄读最新拨出电话号码(手柄命令)
  248. ********************************************************/
  249. case HANDLE_READ_DIAL:
  250. {
  251. gCommon_Flag&=~CHECK_RINGPHONE_F_1;
  252. gHandle_OnLine_Timer=0;
  253. gStatus1_Flag &=~ HANDLE_ON_0_F_1;
  254. gStatus1_Flag |= HANDLE_ON_1_F_1;
  255. if(gPhone_Status==ACTIVE_MONITOR);
  256. else if(gGeneral_Flag&TCP_PHONE_F_1)
  257. {
  258. gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
  259. }
  260. //while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
  261. Read_Dail_Record(gHandle_Buffer[3]);
  262. gDelay_Flash_Timer=0;
  263. break;
  264. }
  265. /********************************************************
  266. 7,手柄读前一个拨出电话号码(手柄命令)
  267. ********************************************************/
  268. case HANDLE_UP_DIAL:
  269. {
  270. gCommon_Flag&=~CHECK_RINGPHONE_F_1;
  271. gHandle_OnLine_Timer=0;
  272. gStatus1_Flag &=~ HANDLE_ON_0_F_1;
  273. gStatus1_Flag |= HANDLE_ON_1_F_1;
  274. /*
  275. if(gPhone_Status==ACTIVE_MONITOR);
  276. else if(gGeneral_Flag&TCP_PHONE_F_1)
  277. {
  278. gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
  279. }
  280. &*/
  281. //while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
  282. Read_Dail_Record(gHandle_Buffer[3]);
  283. gDelay_Flash_Timer=0;
  284. break;
  285. }
  286. /********************************************************
  287. 8,手柄读后一个拨出电话号码(手柄命令)
  288. ********************************************************/
  289. case HANDLE_DOWN_DIAL:
  290. {
  291. gCommon_Flag&=~CHECK_RINGPHONE_F_1;
  292. gHandle_OnLine_Timer=0;
  293. gStatus1_Flag &=~ HANDLE_ON_0_F_1;
  294. gStatus1_Flag |= HANDLE_ON_1_F_1;
  295. /*
  296. if(gPhone_Status==ACTIVE_MONITOR);
  297. else if(gGeneral_Flag&TCP_PHONE_F_1)
  298. {
  299. gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
  300. }
  301. */
  302. //while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
  303. Read_Dail_Record(gHandle_Buffer[3]);
  304. gDelay_Flash_Timer=0;
  305. break;
  306. }
  307. /********************************************************
  308. 9,手柄读最新一次的通话记录(手柄命令)
  309. ********************************************************/
  310. /*
  311. case HANDLE_READ_TALK:
  312. {
  313. gHandle_OnLine_Timer=0;
  314. if(gPhone_Status==ACTIVE_MONITOR);
  315. else if(gGeneral_Flag&TCP_PHONE_F_1)
  316. {
  317. gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
  318. }
  319. //while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
  320. Read_Talk_Record(gHandle_Buffer[3]);
  321. gDelay_Flash_Timer=0;
  322. break;
  323. }
  324. */
  325. /********************************************************
  326. 10,手柄读前一个通话记录(手柄命令)
  327. ********************************************************/
  328. /*
  329. case HANDLE_UP_TALK:
  330. {
  331. gHandle_OnLine_Timer=0;
  332. if(gPhone_Status==ACTIVE_MONITOR);
  333. else if(gGeneral_Flag&TCP_PHONE_F_1)
  334. {
  335. gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
  336. }
  337. //while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
  338. Read_Talk_Record( gHandle_Buffer[3] );
  339. gDelay_Flash_Timer=0;
  340. break;
  341. }
  342. */
  343. /********************************************************
  344. 11,手柄读后一个通话记录(手柄命令)
  345. ********************************************************/
  346. /*
  347. case HANDLE_DOWN_TALK:
  348. {
  349. gHandle_OnLine_Timer=0;
  350. if(gPhone_Status==ACTIVE_MONITOR);
  351. else if(gGeneral_Flag&TCP_PHONE_F_1)
  352. {
  353. gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
  354. }
  355. //while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
  356. Read_Talk_Record(gHandle_Buffer[3]);
  357. gDelay_Flash_Timer=0;
  358. break;
  359. }
  360. */
  361. /********************************************************
  362. 12,手柄送给主控存储的通话记录(手柄命令)
  363. ********************************************************/
  364. /*
  365. case HANDLE_SEND_TALK:
  366. {
  367. gHandle_OnLine_Timer=0;
  368. if(gPhone_Status==ACTIVE_MONITOR);
  369. else if(gGeneral_Flag&TCP_PHONE_F_1)
  370. {
  371. gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
  372. }
  373. //while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
  374. Init_Buffer2();
  375. Write_Talk_Record(nHandle_Piont_Temp);
  376. gDelay_Flash_Timer=0;
  377. Init_Buffer2();
  378. break;
  379. }
  380. */
  381. /********************************************************
  382. 13,手柄送被盗设防命令(手柄命令),取消
  383. ********************************************************/
  384. /*
  385. case HANDLE_SET_DEFENCE:
  386. {
  387. gHandle_OnLine_Timer=0;
  388. break;
  389. }
  390. */
  391. /********************************************************
  392. 14,手柄解除设防命令(手柄命令)
  393. ********************************************************/
  394. /*
  395. case HANDLE_FREE_DEFENCE:
  396. {
  397. gHandle_OnLine_Timer=0;
  398. break;
  399. }
  400. */
  401. /********************************************************
  402. 15,手柄提取短消息中心号码(手柄命令,暂时取消)
  403. ********************************************************/
  404. /*
  405. case HANDLE_ASK_CENTER_NUM:
  406. {
  407. gHandle_OnLine_Timer=0;
  408. break;
  409. }
  410. */
  411. /********************************************************
  412. 16,手柄设置短消息中心号码(手柄命令,暂时取消)
  413. ********************************************************/
  414. /*
  415. case HANDLE_SET_CENTER_NUM:
  416. {
  417. break;
  418. }
  419. */
  420. /********************************************************
  421. 17,手柄更改设置密码(手柄命令)
  422. ********************************************************/
  423. /*
  424. case HANDLE_PASSWORD:
  425. {
  426. break;
  427. }
  428. */
  429. /********************************************************
  430. 18,手柄进行对车载终端进行出厂设置操作(初始化系统)
  431. ********************************************************/
  432. case HANDLE_DEFAULT_SET:
  433. {
  434. gHandle_OnLine_Timer=0;
  435. //1,清除信息区1
  436. OperateSPIEnd();EraseOnePage(FLASH_INFO1_ONE_2);OperateSPIEnd();
  437. OperateSPIEnd();EraseOnePage(FLASH_INFO1_TWO_2);OperateSPIEnd();
  438. Clear_Exter_WatchDog();
  439. RX2_Ready();RX3_Ready();RX4_Ready();
  440. //2,清除信息区2
  441. OperateSPIEnd();EraseOnePage(FLASH_INFO2_ONE_2);OperateSPIEnd();
  442. OperateSPIEnd();EraseOnePage(FLASH_INFO2_TWO_2);OperateSPIEnd();
  443. Clear_Exter_WatchDog();
  444. RX2_Ready();RX3_Ready();RX4_Ready();
  445. //3,清除电话号码拨出和通话记录区域
  446. OperateSPIEnd();EraseOnePage(FLASH_DIAL_PHONE);OperateSPIEnd();
  447. OperateSPIEnd();EraseOnePage(FLASH_RECORD_PHONE_2);OperateSPIEnd();
  448. Clear_Exter_WatchDog();
  449. RX2_Ready();RX3_Ready();RX4_Ready();
  450. //4,清除存储区域数据的区域
  451. OperateSPIEnd();EraseOnePage(FLASH_AREA_ONE_2);OperateSPIEnd();
  452. OperateSPIEnd();EraseOnePage(FLASH_AREA_TWO_2);OperateSPIEnd();
  453. Clear_Exter_WatchDog();
  454. RX2_Ready();RX3_Ready();RX4_Ready();
  455. //5,清除存储线路数据的区域1的数据
  456. OperateSPIEnd();EraseOnePage(FLASH_LINEDATA1_ONE_2);OperateSPIEnd();
  457. OperateSPIEnd();EraseOnePage(FLASH_LINEDATA1_TWO_2);OperateSPIEnd();
  458. Clear_Exter_WatchDog();
  459. RX2_Ready();RX3_Ready();RX4_Ready();
  460. //6,清除存储线路数据的区域2的数据
  461. OperateSPIEnd();EraseOnePage(FLASH_LINEDATA2_ONE_2);OperateSPIEnd();
  462. OperateSPIEnd();EraseOnePage(FLASH_LINEDATA2_TWO_2);OperateSPIEnd();
  463. Clear_Exter_WatchDog();
  464. RX2_Ready();RX3_Ready();RX4_Ready();
  465. //7,清除存储电话号码本的区域数据
  466. OperateSPIEnd();EraseOnePage(FLASH_PHONE_INFO_ONE_2);OperateSPIEnd();
  467. OperateSPIEnd();EraseOnePage(FLASH_PHONE_INFO_TWO_2);OperateSPIEnd();
  468. Clear_Exter_WatchDog();
  469. RX2_Ready();RX3_Ready();RX4_Ready();
  470. //
  471. for(i=0;i<128;i++)
  472. {
  473. gGeneral_Buffer[i]=0xFF;
  474. }
  475. Write_SegAB(0);
  476. gTimer=0;
  477. while(gTimer<3000){Clear_Exter_WatchDog();}
  478. RX2_Ready();RX3_Ready();RX4_Ready();
  479. Write_SegAB(1);
  480. gTimer=0;
  481. while(gTimer<1500){Clear_Exter_WatchDog();}
  482.     TACTL|=TASSEL1;         //输入时钟选择MCLK
  483.     TACTL|=TACLR;           //定时器A清除位CLR清零
  484.     TACTL|=MC1;             //定时器A选择连续增记数模式
  485.     TAR=0;                  //定时器A的值清零
  486.     TACCTL0|=OUT;           //TXD2 Idle as Mark
  487. TACCTL1|=OUT;           //TXD3 Idle as Mark
  488. TACCTL2|=OUT;           //TXD4 Idle as Mark
  489. gON_OFF_Temp0=0xFF;gON_OFF_Temp1=0xFF;gON_OFF_Temp2=0xFF;
  490. gAlarm_Type=0;gWatch_Type=0;gCycle_Send_Status=NOP_DATA;
  491. gStatus2_Flag&=~ROB_ALARM_F_1;
  492. //设防状态清除
  493. gInternal_Flag&=~VEHICLE_DEFENCE_F_1;
  494. gStatus1_Flag&=~DEFENCE_STATUS_F_1;
  495. //行车轨迹上传的间隔
  496. gCycle_GSM=0;gCycle_TCP=0;
  497. //TCP的IP地址无效
  498. gGeneral_Flag&=~NUM1_VAILD_F_1;
  499. gGeneral_Flag&=~TCP_IP_VALID_1;
  500. gStatus2_Flag&=~IP_VAILD_F_1;
  501. gStatus2_Flag&=~TCP_ON_OFF_F_1;
  502. RX2_Ready();RX3_Ready();RX4_Ready();
  503. Waiting_Allow_Send();
  504. Send_COM3_SubProgram(5,MAIN_RETURN_INIT,COMMAND_OK);
  505. gTimer=0;
  506. gDelay_Flash_Timer=0;
  507. while(gTimer<50){}
  508. break;
  509. }
  510. /********************************************************
  511. 19,手柄返回是否开机的状态(手柄命令)
  512. ********************************************************/
  513. case HANDLE_STATUS:
  514. {
  515. //如果接收到此命令,则根据命令字,来判断是否车载电话是否处于开机和关机状态,同时清除计时判断手柄未接的计数变量
  516. //判断手柄显示终端关机
  517. gHandle_OnLine_Timer=0;
  518. if( gHandle_Buffer[3]==0 )
  519. {
  520. gStatus1_Flag |= HANDLE_ON_0_F_1;
  521. gStatus1_Flag &=~ HANDLE_ON_1_F_1;
  522. }
  523. //判断手柄显示终端开机
  524. else if ( gHandle_Buffer[3]==1 )
  525. {
  526. gStatus1_Flag &=~ HANDLE_ON_0_F_1;
  527. gStatus1_Flag |= HANDLE_ON_1_F_1;
  528. }
  529. break;
  530. }
  531. /********************************************************
  532. 20,手柄查询指定位置的电话号码本的内容(手柄命令)
  533. ********************************************************/
  534. case HANDLE_PHONE_NOTE:
  535. {
  536. gHandle_OnLine_Timer=0;
  537. gStatus1_Flag &=~ HANDLE_ON_0_F_1;
  538. gStatus1_Flag |= HANDLE_ON_1_F_1;
  539. Read_Phone_Note_Record(gHandle_Buffer[3]);
  540. break;
  541. }
  542. /********************************************************
  543. A1,手柄对指定页数据的擦除(测试命令)
  544. ********************************************************/
  545. /*
  546. case HANDLE_ERASE_PAGEDATA:
  547. {
  548. break;
  549. }
  550. */
  551. /********************************************************
  552. A2,手柄对指定页数据的读取(测试命令)
  553. ********************************************************/
  554. case HANDLE_READ_PAGEDATA:
  555. {
  556. gHandle_OnLine_Timer=0;
  557. Handle_ReadOnePage_Data(gHandle_Buffer[3],gHandle_Buffer[4]);
  558. break;
  559. }
  560. /********************************************************
  561. A3,通过手柄(COM3)设置目标电话号码1(测试命令)
  562. ********************************************************/
  563. /*
  564. case HANDLE_SET_PHONE_NUM:
  565. {
  566. break;
  567. }
  568. */
  569. /********************************************************
  570. A4,通过手柄(COM3)发送检查整个FLASH(测试命令)根据情况,则只检查buffer1和buffer2的情况
  571. ********************************************************/
  572. /*
  573. case HANDLE_CHECK_FLASH:
  574. {
  575. break;
  576. }
  577. */
  578. /********************************************************
  579. A5,通过手柄(COM3)发送检查GPS数据格式有效性(测试命令)
  580. ********************************************************/
  581. /*
  582. case HANDLE_CHECK_GPS:
  583. {
  584. break;
  585. }
  586. */
  587. /********************************************************
  588. A6,通过手柄(COM3)使GSM模块自发自收一个SMS的命令(测试命令)
  589. ********************************************************/
  590. /*
  591. case HANDLE_CHECK_SMS:
  592. {
  593. break;
  594. }
  595. */
  596. /********************************************************
  597. A7,手柄接口调试监听语音电路(测试命令)
  598. ********************************************************/
  599. case HANDLED_ACTIVE_MONITOR:
  600. {
  601. gHandle_OnLine_Timer=0;
  602. SRAM_Init();
  603. SRAM_Write(PHONE_AT_2+0,VAILD_2);
  604. SRAM_Write(PHONE_AT_2+1,M_DIAL);
  605. SRAM_Write(PHONE_AT_2+2,gHandle_Buffer[1]-4);
  606. for(i=0;i<gHandle_Buffer[1]-4;i++)
  607. {
  608. SRAM_Write(PHONE_AT_2+3+i,gHandle_Buffer[i+3]);
  609. }
  610. break;
  611. }
  612. /********************************************************
  613. A8,手柄插除所有的历史轨迹的数据(测试命令)
  614. ********************************************************/
  615. /*
  616. case HANDLE_ERASE_ALLPASS:
  617. {
  618. break;
  619. }
  620. */
  621. /********************************************************
  622. A8-1,测试外部SRAM的数据正确性(测试命令)
  623. ********************************************************/
  624. case HANDLE_TEST_SRAM:
  625. {
  626. gHandle_OnLine_Timer=0;
  627. Handle_Test_Sram();
  628. break;
  629. }
  630. /********************************************************
  631. A9,手柄设置相关TCP的参数(测试命令)
  632. 做测试用,设置IP和PORT后,则需要开启进行TCP登陆的操作
  633. 以测试此登陆TCP的功能正确
  634. ********************************************************/
  635. /*
  636. case HANDLE_SET_TCP:
  637. {
  638. break;
  639. }
  640. */
  641. /********************************************************
  642. A10,手柄读取版本号(测试命令)
  643. ********************************************************/
  644. case HNADLE_READ_EDITION:
  645. {
  646. gHandle_OnLine_Timer=0;
  647. if(gHandle_Buffer[3]=(char)(~gHandle_Buffer[2]))
  648. {
  649. Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
  650. Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
  651. for(i=0;i<35;i++) Send_COM1_Byte('=');
  652. Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
  653. for(i=0;i<sizeof(String_A);i++)
  654. {
  655. Send_COM1_Byte(String_A[i]-1);
  656. Send_COM1_Byte(String_EDIT[i]+1);
  657. }
  658. for(i=0;i<35;i++) Send_COM1_Byte('=');
  659. Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
  660. Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
  661. }
  662. break;
  663. }
  664. /********************************************************
  665. A12,手柄接口设置基本参数(参数设置命令)
  666. ********************************************************/
  667. case HANDLE_SET_PAR:
  668. {
  669. gHandle_OnLine_Timer=0;
  670. Handle_Set_Par(nHandle_Piont_Temp);
  671. break;
  672. }
  673. /********************************************************
  674. A13,手柄接口设置TCP的相关参数(参数设置命令)
  675. ********************************************************/
  676. case HANDLE_SET_TCPIP:
  677. {
  678. Handle_Set_TcpIp();
  679. break;
  680. }
  681. /********************************************************
  682. A14,手柄接口设置时间间隔的相关参数(参数设置命令)
  683. ********************************************************/
  684. case HANDLE_SET_TIME:
  685. {
  686. gHandle_OnLine_Timer=0;
  687. Handle_Set_Time();
  688. break;
  689. }
  690. /********************************************************
  691. A15,手柄接口设置短消息预置的相关参数(参数设置命令)
  692. ********************************************************/
  693. case HANDLE_SET_SMS:
  694. {
  695. gHandle_OnLine_Timer=0;
  696. Handle_Set_SMS();
  697. break;
  698. }
  699. /********************************************************
  700. A16,手柄接口设置电话号码本设置置的相关参数(参数设置命令)
  701. ********************************************************/
  702. case HANDLE_SET_PHONE_NOTE:
  703. {
  704. Handle_Set_Phone(nHandle_Piont_Temp);
  705. break;
  706. }
  707. /********************************************************
  708. A17,手柄接口设置按距离上传数据的相关参数(参数设置命令)
  709. ********************************************************/
  710. case HANDLE_SET_DISTANCE:
  711. {
  712. gHandle_OnLine_Timer=0;
  713. Handle_Set_Dis();
  714. break;
  715. }
  716. /********************************************************
  717. A18,(查询所有参数设置命令的返回的命令)
  718. ********************************************************/
  719. case HANDLE_ASK_PAR:
  720. {
  721. gHandle_OnLine_Timer=0;
  722. Handle_Ask_Par();
  723. break;
  724. }
  725. /********************************************************
  726. A19,手柄端口人为设置目标号码在buffer1中错误(调试命令)
  727. ********************************************************/
  728. /*
  729. case HANDLE_ERROR_NUM:
  730. {
  731. break;
  732. }
  733. */
  734. /********************************************************
  735. A20,手柄接口端口人为设置短消息中心号码在buffer1中错误(调试命令)
  736. ********************************************************/
  737. /*
  738. case HANDLE_ERROR_CENTER:
  739. {
  740. break;
  741. }
  742. */
  743. /********************************************************
  744. A21,手柄端口 人为设置430两个信息扇区的错误(调试命令)
  745. ********************************************************/
  746. /*
  747. case HANDLE_ERROR_IP:
  748. {
  749. for(i=0;i<128;i++)
  750. {
  751. gGeneral_Buffer[i]=0xFF;
  752. }
  753. Write_SegAB(gHandle_Buffer[3]);
  754. break;
  755. }
  756. */
  757. /********************************************************
  758. A22,手柄端口 人为设置在扇区中的错误(调试命令)
  759. ********************************************************/
  760. /*
  761. case HANDLE_ERROR_PORT:
  762. {
  763. OperateSPIEnd();ReadOnePageToBuffer2((int)gHandle_Buffer[3]);OperateSPIEnd();
  764. if( (gHandle_Buffer[3]==1)||(gHandle_Buffer[3]==2) )
  765. {
  766. if(gHandle_Buffer[4]==0) k=TARGET_NUMBER1_F_2;
  767. else if(gHandle_Buffer[4]==1) k=GPRS_IP_ADDRESS1_F_2;
  768. WriteOneByteToBuffer2(k+gHandle_Buffer[5],0x47);
  769. for(i=0;i<gHandle_Buffer[6];i++)
  770. {
  771. WriteNextByteToBuffer2(0x47);
  772. }
  773. OperateSPIEnd();
  774. if(gHandle_Buffer[7]==1)
  775. {
  776. RFlash_Sector((int)gHandle_Buffer[3]);
  777. }
  778. else
  779. {
  780. WriteBuffer2ToPage((int)gHandle_Buffer[3]);
  781. gTimer=0;
  782. while(gTimer<1000){Clear_Exter_WatchDog();}
  783. }
  784. }
  785. break;
  786. }
  787. */
  788. /********************************************************
  789. A23,手柄端口人为设置在扇区中的错误(调试命令)
  790. ********************************************************/
  791. /*
  792. case HANDLE_SET_ALARM:
  793. {
  794. break;
  795. }
  796. */
  797. /********************************************************
  798. A25,手柄端口 读取数据从外部的SRAM中相应的位置(调试命令)
  799. ********************************************************/
  800. /*
  801. case HANDLE_READ_SRAM:
  802. {
  803. break;
  804. }
  805. */
  806. /********************************************************
  807. A26,手柄端口 设置命令初始化显示终端
  808. ********************************************************/
  809. case HANDLE_CLEAR_DISP:
  810. {
  811. gHandle_OnLine_Timer=0;
  812. if(gDisp_Buffer_Point+6+2<=sizeof(gDisp_Buffer))
  813. {
  814. gDisp_Buffer[gDisp_Buffer_Point]=6+2;
  815. gDisp_Buffer_Point++;
  816. gDisp_Buffer[gDisp_Buffer_Point]=0;
  817. gDisp_Buffer_Point++;
  818. gDisp_Buffer[gDisp_Buffer_Point]='@';
  819. gDisp_Buffer_Point++;
  820. gDisp_Buffer[gDisp_Buffer_Point]='%';
  821. gDisp_Buffer_Point++;
  822. gDisp_Buffer[gDisp_Buffer_Point]=6;
  823. gDisp_Buffer_Point++;
  824. gDisp_Buffer[gDisp_Buffer_Point]=DISP_CLEAR_DOWN;
  825. gDisp_Buffer_Point++;
  826. gDisp_Buffer[gDisp_Buffer_Point]='$';
  827. gDisp_Buffer_Point++;
  828. gDisp_Buffer[gDisp_Buffer_Point]='&';
  829. gDisp_Buffer_Point++;
  830. }
  831. break;
  832. }
  833. /********************************************************
  834. 其他
  835. ********************************************************/
  836. default:
  837. break;
  838. }
  839. gHandle_Buffer_Point=0;
  840. for(i=0;i<sizeof(gHandle_Buffer);i++) gHandle_Buffer[i]=0;
  841. }
  842. //判断是否有需要发送的手柄数据
  843. else if(  (gHandle_Receive_Over>20)
  844.   &&(gDisp_Receive_Over>20)
  845.   &&( (gCommon_Flag&ALLOW_R232_F_1)==0)
  846.   &&(gGPS_Receive_Over>20)
  847.   &&(gReceive1_Over_Count>20)  )
  848. {
  849. SRAM_Init();
  850. i=SRAM_Read(SHANDLE_DATA_VAILD);
  851. if(i!=NULL_2)
  852. {
  853. for(k=0;k<SRAM_Read(SHANDLE_DATA_VAILD+2);k++)
  854. {
  855. Send_COM3_Byte( SRAM_Read(SHANDLE_DATA_VAILD+1+k) );
  856. }
  857. RX3_Ready();
  858. SRAM_Init();
  859. SRAM_Write(SHANDLE_DATA_VAILD+0,NULL_2);
  860. }
  861. }
  862. }
  863. /********************************************************
  864. * 函数名:Check_Handle_Command
  865. 作用域:本地文件调用
  866. * 功能: 校验在手柄通讯完后,判断收到数据包的数据是否属于正确数据包
  867. 并返回信令字
  868. * 参数:
  869. * 返回值:
  870. * 创建人:
  871. *
  872. * 修改历史:(每条详述)
  873. ********************************************************/
  874. unsigned char Check_Handle_Command(void)
  875. {
  876. if(gHandle_Buffer_Point<4) return(0); //最小的包长为4个字节,如果小于4说明数据包未收全
  877. if(gHandle_Buffer_Point!=gHandle_Buffer[1]) return(0); //接收到的数据包与数据包里的字长不符合,也说明数据未收全
  878. if(gHandle_Buffer[0]!=0x24) return(0); //收到的包头不正确
  879. if(gHandle_Buffer[gHandle_Buffer_Point-1]!=0x0d) return(0); //收到的包尾不正确
  880. return(gHandle_Buffer[2]);
  881. }
  882. /********************************************************
  883. * 函数名:Handle_Dailing
  884. 作用域:本地文件调用
  885. * 功能:
  886. * 参数:
  887. * 返回值:
  888. * 创建人:
  889. *
  890. * 修改历史:(每条详述)
  891. ********************************************************/
  892. void Handle_Dailing(unsigned char nPoint_Temp)
  893. {
  894. unsigned int i=0;
  895. unsigned char nTemp=0;
  896. unsigned char nFlag=0;
  897. nTemp=nPoint_Temp;
  898. //1,如果主控状态处于电话禁止呼出状态
  899. if(  (gON_OFF_Temp0&PHONE_OUT_ON)==0 )
  900. {
  901. //如果存在中心服务电话,则允许此号码拨出
  902. for(i=0;i<nTemp-4;i++)
  903. {
  904. gGeneral_Buffer[i]=gHandle_Buffer[3+i];
  905. }
  906. i=1;
  907. i=Check_Allow_Phone(nTemp-4);
  908. //判断书否属于112,110,119,13800138000,1860,1861,1001,等一类的服务号码
  909. if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE1,nTemp-4)) i=0;
  910. else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE2,nTemp-4)) i=0;
  911. else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE3,nTemp-4)) i=0;
  912. else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE4,nTemp-4)) i=0;
  913. else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE5,nTemp-4)) i=0;
  914. else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE6,nTemp-4)) i=0;
  915. else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE7,nTemp-4)) i=0;
  916. //拨出号码与比较号码均不匹配,则不允许拨出此号码
  917. if(i==1)
  918. {
  919. nFlag=1;
  920. }
  921. else if( (gGeneral_Flag&MONITOR_ON_F_1)||(gPhone_Status==ACTIVE_MONITOR) )
  922. {
  923. nFlag=2;
  924. }
  925. else if( (gGeneral_Flag&DAILING_UP_F_1)||(gPhone_Status==ACTIVE_HANDLE)||(gGeneral_Flag&RING_F_1) )
  926. {
  927. nFlag=3;
  928. }
  929. else
  930. {
  931. nFlag=0;
  932. }
  933. }
  934. //如果这个时候处于监听状态,或者处于正在监听的拨号状态下,则返回手柄一个busy信令
  935. else if( (gGeneral_Flag&MONITOR_ON_F_1)||(gPhone_Status==ACTIVE_MONITOR) )
  936. {
  937. nFlag=2;
  938. }
  939. //如果这个时候处于手柄拨号,或者正在通话的状态,或者正在来电的状态下,则返回一个busy信令
  940. else if( (gGeneral_Flag&DAILING_UP_F_1)||(gPhone_Status==ACTIVE_HANDLE)||(gGeneral_Flag&RING_F_1) )
  941. {
  942. nFlag=3;
  943. }
  944. //返回一个电话禁止呼出
  945. if(nFlag==1)
  946. {
  947. Send_COM3_Load(4,MAIN_RETURN_NO_CALLOUT,0);
  948. }
  949. //返回给手柄一个Busy信令
  950. else if(nFlag==2)
  951. {
  952. Send_COM3_Load(4,MAIN_BUSY,0);
  953. }
  954. //返回挂机命令
  955. else if(nFlag==3)
  956. {
  957. SRAM_Init();
  958. SRAM_Write(PHONE_AT_2+0,VAILD_2);
  959. SRAM_Write(PHONE_AT_2+1,H_HUNGUP);
  960. SRAM_Write(PHONE_AT_2+2,0);
  961. //Send_COM3_Load(5,MAIN_RETURN_PHONE_ECHO,COMMAND_ERROR);
  962. }
  963. //返回一个正常的拨出号码
  964. else
  965. {
  966. Send_COM3_Load(5,MAIN_RETURN_PHONE_ECHO,COMMAND_OK);
  967. SRAM_Init();
  968. SRAM_Write(PHONE_AT_2+0,VAILD_2);
  969. SRAM_Write(PHONE_AT_2+1,H_DIAL);
  970. SRAM_Write(PHONE_AT_2+2,nTemp-4);
  971. for(i=3;i<nTemp-1;i++)
  972. {
  973. SRAM_Write(PHONE_AT_2+i,gHandle_Buffer[i]);
  974. }
  975. //将拨出电话记录存储在相应的Flash中
  976. //while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
  977. //Init_Buffer2();
  978. Write_Dail_Record(nTemp);
  979. gDelay_Flash_Timer=0;
  980. gHandle_Buffer_Point=0;
  981. gTimer=0;Clear_Exter_WatchDog();
  982. while(gTimer<500){}
  983. Clear_Exter_WatchDog();
  984. OperateSPIEnd();
  985. //Init_Buffer2();
  986. }
  987. }
  988. /********************************************************
  989. * 函数名:Handle_Answer
  990. 作用域:本地文件调用
  991. * 功能:
  992. * 参数:
  993. * 返回值:
  994. * 创建人:
  995. *
  996. * 修改历史:(每条详述)
  997. ********************************************************/
  998. void Handle_Answer(void)
  999. {
  1000. unsigned char nFlag=0;
  1001. //1,如果设备处于呼入禁止状态下,判断是否有允许此号码呼入的标志
  1002. if(  (gON_OFF_Temp0&PHONE_IN_ON)==0 )
  1003. {
  1004. if(gPublic_Flag&ALLOW_PHONE_IN_F_1) nFlag=1;
  1005. else nFlag=0;
  1006. }
  1007. //2,设备没有处于呼入禁止的状态
  1008. else nFlag=1;
  1009. if(nFlag==1)
  1010. {
  1011. SRAM_Init();
  1012. SRAM_Write(PHONE_AT_2+0,VAILD_2);
  1013. SRAM_Write(PHONE_AT_2+1,H_ANSWER);
  1014. SRAM_Write(PHONE_AT_2+2,0);
  1015. }
  1016. else
  1017. {
  1018. Send_COM3_Load(4,MAIN_RETURN_NO_CALLIN,0);
  1019. SRAM_Init();
  1020. SRAM_Write(PHONE_AT_2+0,VAILD_2);
  1021. SRAM_Write(PHONE_AT_2+1,H_HUNGUP);
  1022. SRAM_Write(PHONE_AT_2+2,0);
  1023. }
  1024. }
  1025. /********************************************************
  1026. * 函数名:Move_Right_Item()
  1027. 作用域:本地文件调用
  1028. * 功能: 针对gGeneral_Buffer[]中存储的号码有重复的地方,则如何消除重复号码那一条
  1029. * 参数: Start_Item:
  1030. End_Item:
  1031. Move_Count:
  1032. * 返回值:
  1033. * 创建人:
  1034. *
  1035. * 修改历史:(每条详述)
  1036. ********************************************************/
  1037. void Move_Right_Item(unsigned char Start_Item,unsigned char End_Item,unsigned char Move_Count)
  1038. {
  1039. unsigned int i=0,j=0;
  1040. if(Move_Count==1)
  1041. {
  1042. for( i=End_Item;i>Start_Item;i=i-1 )
  1043. {
  1044. for(j=0;j<16;j++)
  1045. {
  1046. gGeneral_Buffer[i*16+j]=gGeneral_Buffer[(i-1)*16+j];
  1047. }
  1048. }
  1049. }
  1050. else if(Move_Count==2)
  1051. {
  1052. for( i=7;i>0;i-- )
  1053. {
  1054. for(j=0;j<32;j++)
  1055. {
  1056. gGeneral_Buffer[i*32+j]=gGeneral_Buffer[(i-1)*32+j];
  1057. }
  1058. }
  1059. }
  1060. }
  1061. /********************************************************
  1062. * 函数名:Write_Dail_Record
  1063. 作用域:本地文件调用
  1064. * 功能: 用来在每次拨出电话号码后,存储拨出电话号码的记录
  1065. * 参数:
  1066. * 返回值:
  1067. * 创建人:
  1068. *
  1069. * 修改历史:(每条详述)
  1070. 补充说明:这个子程序是将拨出的电话号码存储在缓冲区中。
  1071.   先判断已经存储的缓冲区中是否有相同的拨好记录
  1072.   如果有,则先将此记录删除,然后重新排列,将
  1073.   整个缓冲向左移动一个存储记录,则将第一个存储
  1074.   记录的空间留下来,则将最新的拨出电话记录存储在
  1075.   位置上。
  1076. ********************************************************/
  1077. void Write_Dail_Record(unsigned char nPhone_Length)
  1078. {
  1079. unsigned char nItem=0xff;
  1080. unsigned int i,j,k;
  1081. i=nPhone_Length;
  1082. Clear_Exter_WatchDog();
  1083. OperateSPIEnd();
  1084. ReadOnePageToBuffer2(FLASH_DIAL_PHONE); //读第3个扇区的数据到buffer2中
  1085. OperateSPIEnd();
  1086. //将buffer2中的数据转移到gGeneral_Buffer中
  1087. gGeneral_Buffer[0]=ReadByteFromBuffer2(0);
  1088. for(i=1;i<264;i++) gGeneral_Buffer[i]=ReadNextFromBuffer2();
  1089. OperateSPIEnd();
  1090. //判断gHandle_Buffer[]中的号码是否与gGeneral_Buffer[]中有重复的号码
  1091. i=0;
  1092. k=0;
  1093. while(i<16)
  1094. {
  1095. j=0;
  1096. while(j<nPhone_Length-4)
  1097. {
  1098. if( gGeneral_Buffer[i*16+j]!=gHandle_Buffer[3+j] )
  1099. {
  1100. i++;j=0;k=0;break;
  1101. }
  1102. j++;
  1103. if(j>=nPhone_Length-4)
  1104. {
  1105. k=1;break;
  1106. }
  1107. }
  1108. if(k==1) break;
  1109. }
  1110. //说明有重复的号码,则将这一条的重复号码给覆盖住
  1111. if(k==1)
  1112. {
  1113. nItem=i;
  1114. if(nItem>0) Move_Right_Item(0,nItem,1);
  1115. }
  1116. //没有重复号码,则将整个号码向后移动一条。
  1117. else
  1118. {
  1119. Move_Right_Item(0,15,1);
  1120. }
  1121. //将最新号码写在第一条号码的位置
  1122. for(i=0;i<16;i++)
  1123. {
  1124. gGeneral_Buffer[i]=0x20;
  1125. }
  1126. for(i=0;i<nPhone_Length-4;i++)
  1127. {
  1128. gGeneral_Buffer[i]=gHandle_Buffer[3+i];
  1129. }
  1130. //将gGeneral_Buffer[]中的数写入buffer2中
  1131. OperateSPIEnd();
  1132. WriteOneByteToBuffer2(0,gGeneral_Buffer[0]);
  1133. for(i=1;i<264;i++)
  1134. {
  1135. WriteNextByteToBuffer2( gGeneral_Buffer[i] );
  1136. }
  1137. OperateSPIEnd();
  1138. //4,将已经写入了新的拨号记录的buffer2写到flash 相应的区域中
  1139. Clear_Exter_WatchDog();
  1140. P6OUT|=SPI45DB041_WP;
  1141. WriteBuffer2ToPage(FLASH_DIAL_PHONE);
  1142. P6OUT&=~SPI45DB041_WP;
  1143. gTimer=0;Clear_Exter_WatchDog();
  1144. OperateSPIEnd();
  1145. }
  1146. /********************************************************
  1147. * 函数名:Read_Dail_Record
  1148. 作用域:本地文件调用
  1149. * 功能:  读取记录拨出电话记录的FLASH中的相应位置的数据
  1150. * 参数: nItem:表示当前所指向的记录号,其值有如下0-----15
  1151. * 返回值:
  1152. * 创建人:
  1153. *
  1154. * 修改历史:(每条详述)
  1155. ********************************************************/
  1156. void Read_Dail_Record(unsigned char nItem)
  1157. {
  1158. unsigned char nTemp,Record_Flag;
  1159. unsigned int i;
  1160. Clear_Exter_WatchDog();
  1161. OperateSPIEnd();
  1162. //读第3个扇区的数据到buffer2中
  1163. ReadOnePageToBuffer2(FLASH_DIAL_PHONE);
  1164. OperateSPIEnd();
  1165. nTemp = ReadByteFromBuffer2(nItem*0x10);
  1166. OperateSPIEnd();
  1167. Record_Flag=0;
  1168. //判断当前电话记录是否为空
  1169. if( (nTemp>'9')||(nTemp<'0') ) Record_Flag=1;
  1170. else Record_Flag=0;
  1171. //将所指向的拨出电话号码记录发送出去
  1172. SRAM_Init();
  1173. SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
  1174. SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
  1175. SRAM_Write(SHANDLE_DATA_VAILD+2,0x15);
  1176. SRAM_Write(SHANDLE_DATA_VAILD+3,MAIN_DIALRECORD);
  1177. SRAM_Write(SHANDLE_DATA_VAILD+4,nItem);
  1178. if(Record_Flag==0)
  1179. {
  1180. OperateSPIEnd();
  1181. nTemp=ReadByteFromBuffer2(nItem*0x10);
  1182. SRAM_Write(SHANDLE_DATA_VAILD+5,nTemp);
  1183. for(i=1;i<16;i++)
  1184. {
  1185. SRAM_Write(SHANDLE_DATA_VAILD+5+i,ReadNextFromBuffer2());
  1186. }
  1187. OperateSPIEnd();
  1188. }
  1189. else
  1190. {
  1191. for(i=0;i<16;i++)
  1192. {
  1193. SRAM_Write(SHANDLE_DATA_VAILD+5+i,0x20);
  1194. }
  1195. }
  1196. SRAM_Write(SHANDLE_DATA_VAILD+5+16,0x0d);
  1197. }
  1198. /********************************************************
  1199. * 函数名:Read_Phone_Note_Record
  1200. 作用域:本地文件调用
  1201. * 功能:  读取电话号码
  1202. * 参数: nItem:表示当前所指向的记录号,其值有如下1-----20
  1203. * 返回值:
  1204. * 创建人:
  1205. *
  1206. * 修改历史:(每条详述)
  1207. ********************************************************/
  1208. void Read_Phone_Note_Record(unsigned char nItem)
  1209. {
  1210. unsigned int i=0,j=0,k=0;
  1211. unsigned char Phone_Page=0;
  1212. unsigned char Phone_Item=0;
  1213. unsigned int  Phone_Address=0;
  1214. unsigned char Phone_Num=0;
  1215. unsigned char nTemp=0;
  1216. if( nItem<10 ) Phone_Page=1;
  1217. else if( (nItem>=10)&&(nItem<20) ) Phone_Page=2;
  1218. else {Phone_Page=0;return;}
  1219. OperateSPIEnd();
  1220. if(Phone_Page==1)
  1221. {
  1222. ReadOnePageToBuffer2(FLASH_PHONE_INFO_ONE_2);
  1223. Phone_Item=nItem;
  1224. }
  1225. else if(Phone_Page==2)
  1226. {
  1227. ReadOnePageToBuffer2(FLASH_PHONE_INFO_TWO_2);
  1228. Phone_Item=nItem-10;
  1229. }
  1230. OperateSPIEnd();
  1231. Phone_Num=ReadByteFromBuffer2(PHONE_NUM_2);
  1232. OperateSPIEnd();
  1233. if( (Phone_Num>0)&&(Phone_Num<=10)&&(Phone_Item<=Phone_Num) ) j=1;
  1234. else j=0;
  1235. Phone_Address=Phone_Item*21+ONE_1_FRAME_2;
  1236. OperateSPIEnd();
  1237. nTemp=ReadByteFromBuffer2(Phone_Address);
  1238. OperateSPIEnd();
  1239. if(nTemp==0x20) j=0;
  1240. SRAM_Init();
  1241. SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
  1242. SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
  1243. SRAM_Write(SHANDLE_DATA_VAILD+2,0x1A);
  1244. SRAM_Write(SHANDLE_DATA_VAILD+3,MAIN_RETURN_PHONE_NOTE);
  1245. SRAM_Write(SHANDLE_DATA_VAILD+4,nItem);
  1246. if(j==1)
  1247. {
  1248. SRAM_Write(SHANDLE_DATA_VAILD+5,ReadByteFromBuffer2(Phone_Address));
  1249. for(i=1;i<8+13;i++)
  1250. {
  1251. SRAM_Write(SHANDLE_DATA_VAILD+5+i,ReadNextFromBuffer2());
  1252. }
  1253. }
  1254. else
  1255. {
  1256. for(i=0;i<8+13;i++)
  1257. {
  1258. SRAM_Write(SHANDLE_DATA_VAILD+5+i,0x20);
  1259. }
  1260. }
  1261. SRAM_Write(SHANDLE_DATA_VAILD+5+8+13,0x0d);
  1262. }
  1263. /********************************************************
  1264. * 函数名:Write_Talk_Record
  1265. 作用域:本地文件调用
  1266. * 功能: 用来每次通话结束后,存储通话记录(此记录均是用手柄发送过来的数据包)
  1267. 参数:
  1268. * 返回值:
  1269. * 创建人:
  1270. *
  1271. * 修改历史:(每条详述)
  1272. ********************************************************/
  1273. /*
  1274. void Write_Talk_Record(unsigned char nPhone_Length)
  1275. {
  1276.     unsigned int i;
  1277.     OperateSPIEnd();
  1278.     Clear_Exter_WatchDog();
  1279.     //1,读第4个扇区的数据到buffer2中
  1280. ReadOnePageToBuffer2(FLASH_RECORD_PHONE_2);
  1281. OperateSPIEnd();
  1282. //将buffer2中的数据转移到gGeneral_Buffer中
  1283. gGeneral_Buffer[0]=ReadByteFromBuffer2(0);
  1284. for(i=1;i<264;i++) gGeneral_Buffer[i]=ReadNextFromBuffer2();
  1285. OperateSPIEnd();
  1286. //2,平移动buffer2中的通话记录
  1287. Move_Right_Item(0,14,2);
  1288. for(i=0;i<32;i++)
  1289. {
  1290. gGeneral_Buffer[i]=0x20;
  1291. }
  1292. //3,将新的通话记录的数据写入第一个记录区
  1293. for(i=0;i<nPhone_Length-4;i++)
  1294. {
  1295. gGeneral_Buffer[i]=gHandle_Buffer[3+i];
  1296. }
  1297. //将gGeneral_Buffer[]中的数写入buffer2中
  1298. OperateSPIEnd();
  1299. WriteOneByteToBuffer2(0,gGeneral_Buffer[0]);
  1300. for(i=1;i<264;i++)
  1301. {
  1302. WriteNextByteToBuffer2( gGeneral_Buffer[i] );
  1303. }
  1304. OperateSPIEnd();
  1305. //4,将更新完毕的buffer2中的数据写入第4扇区
  1306. Clear_Exter_WatchDog();
  1307. P6OUT|=SPI45DB041_WP;
  1308. WriteBuffer2ToPage(FLASH_RECORD_PHONE_2);
  1309. P6OUT&=~SPI45DB041_WP;
  1310. gTimer=0;Clear_Exter_WatchDog();
  1311. OperateSPIEnd();
  1312. }
  1313. */
  1314. /********************************************************
  1315. * 函数名:Read_Talk_Record
  1316. 作用域:本地文件调用
  1317. * 功能:
  1318. * 参数:  nItem:表示当前所指向的记录,其值有如下0-----7
  1319. * 参数:
  1320. * 返回值:
  1321. * 创建人:
  1322. *
  1323. * 修改历史:(每条详述)
  1324. ********************************************************/
  1325. void Read_Talk_Record(unsigned char nItem)
  1326. {
  1327. unsigned char nTemp,Record_Flag;
  1328. unsigned int i;
  1329. Record_Flag=0;
  1330. if( nItem>7 ) return;
  1331. //读第4个扇区的数据到buffer2中
  1332. ReadOnePageToBuffer2(FLASH_RECORD_PHONE_2);
  1333. OperateSPIEnd();
  1334. nTemp = ReadByteFromBuffer2( nItem*0x10 );
  1335. OperateSPIEnd();
  1336. ReadOnePageToBuffer2(FLASH_RECORD_PHONE_2);
  1337. nTemp = ReadByteFromBuffer2( (2*nItem)*0x10 );
  1338. OperateSPIEnd();
  1339. if( (nTemp>'9')||(nTemp<'0') ) Record_Flag=1;
  1340. else Record_Flag=0;
  1341. SRAM_Init();
  1342. SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
  1343. SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
  1344. SRAM_Write(SHANDLE_DATA_VAILD+2,0x1e);
  1345. SRAM_Write(SHANDLE_DATA_VAILD+3,MAIN_TALKRECORD);
  1346. SRAM_Write(SHANDLE_DATA_VAILD+4,nItem);
  1347. if(Record_Flag==0)
  1348. {
  1349. OperateSPIEnd();
  1350. ReadOnePageToBuffer2(FLASH_RECORD_PHONE_2);
  1351. OperateSPIEnd();
  1352. nTemp=ReadByteFromBuffer2( (2*nItem)*0x10 );
  1353. SRAM_Write(SHANDLE_DATA_VAILD+5,nTemp);
  1354. for(i=1;i<25;i++)
  1355. {
  1356. SRAM_Write(SHANDLE_DATA_VAILD+5+i,ReadNextFromBuffer2());
  1357. }
  1358. OperateSPIEnd();
  1359. }
  1360. else
  1361. {
  1362. for(i=0;i<25;i++)
  1363. {
  1364. SRAM_Write(SHANDLE_DATA_VAILD+5+i,0x20);
  1365. }
  1366. }
  1367. SRAM_Write(SHANDLE_DATA_VAILD+5+25,0x0d);
  1368. }
  1369. /********************************************************
  1370. * 函数名:Handle_ReadOnePage_Data
  1371. 作用域:本地文件调用
  1372. * 功能:
  1373. * 参数:
  1374. * 参数:
  1375. * 返回值:
  1376. * 创建人:
  1377. * 修改历史:(每条详述)
  1378. ********************************************************/
  1379. void Handle_ReadOnePage_Data(unsigned char Page_H,unsigned char Page_L)
  1380. {
  1381. unsigned int Page_Address=0,i=0;
  1382. unsigned char Length=0;
  1383. Page_Address = Page_H;
  1384. Page_Address <<=8;
  1385. Page_Address += Page_L;
  1386. if(Page_Address<2048)
  1387. {
  1388. OperateSPIEnd();
  1389. ReadOnePageToBuffer2(Page_Address);
  1390. OperateSPIEnd();
  1391. gGeneral_Buffer[0]=ReadByteFromBuffer2(0);
  1392. for(i=1;i<256;i++) gGeneral_Buffer[i]=ReadNextFromBuffer2();
  1393. OperateSPIEnd();
  1394. Length=4+256;
  1395. Waiting_Allow_Send();
  1396. Send_COM3_Byte(0x24);Send_COM3_Byte(Length);
  1397. Send_COM3_Byte(MAIN_READPAGE_ECHO);
  1398. for(i=0;i<256;i++)
  1399. {
  1400. Send_COM3_Byte(gGeneral_Buffer[i]);
  1401. Clear_Exter_WatchDog();
  1402. }
  1403. Send_COM3_Byte(0x0d);
  1404. RX3_Ready();
  1405. }
  1406. }
  1407. /********************************************************
  1408. * 函数名:Handle_EraseOnePage_Data
  1409. 作用域:本地文件调用
  1410. * 功能:
  1411. * 参数:
  1412. * 参数:
  1413. * 返回值:
  1414. * 创建人:
  1415. * 修改历史:(每条详述)
  1416. ********************************************************/
  1417. /*
  1418. void Handle_EraseOnePage_Data(unsigned char Page_H,unsigned char Page_L)
  1419. {
  1420. unsigned int Page_Address=0;
  1421. Page_Address = Page_H;
  1422. Page_Address <<=8;
  1423. Page_Address += Page_L;
  1424. if(Page_Address<2048)
  1425. {
  1426. OperateSPIEnd();EraseOnePage(Page_Address);OperateSPIEnd();
  1427. }
  1428. Send_COM3_Load(5,MAIN_ERASEPAGE_ECHO,COMMAND_OK);
  1429. }
  1430. */
  1431. /********************************************************
  1432. * 函数名:Send_COM3_SubProgram
  1433. 作用域:本地文件调用
  1434. * 功能:
  1435. * 参数:
  1436. * 参数:
  1437. * 返回值:
  1438. * 创建人:
  1439. * 修改历史:(每条详述)
  1440. ********************************************************/
  1441. void Send_COM3_SubProgram(unsigned char DataLength,unsigned char nCommand,unsigned char DataTemp)
  1442. {
  1443. unsigned char Length=0;
  1444. unsigned char Command=0;
  1445. unsigned char Data=0;
  1446. Length=DataLength;
  1447. Command=nCommand;
  1448. Data=DataTemp;
  1449. Send_COM3_Byte(0x24);Send_COM3_Byte(Length);
  1450. Send_COM3_Byte(Command);
  1451. if(Length==4)
  1452. {
  1453. }
  1454. else if(Length==5)
  1455. {
  1456. Send_COM3_Byte(Data);
  1457. }
  1458. Send_COM3_Byte(0x0d);
  1459. RX3_Ready();
  1460. }
  1461. /********************************************************
  1462. * 函数名:Send_COM3_SubProgram
  1463. 作用域:本地文件调用
  1464. * 功能:
  1465. * 参数:
  1466. * 参数:
  1467. * 返回值:
  1468. * 创建人:
  1469. * 修改历史:(每条详述)
  1470. ********************************************************/
  1471. void Send_COM3_Load(unsigned char DataLength,unsigned char nCommand,unsigned char DataTemp)
  1472. {
  1473. unsigned char Length=0;
  1474. unsigned char Command=0;
  1475. unsigned char Data=0;
  1476. Length=DataLength;
  1477. Command=nCommand;
  1478. Data=DataTemp;
  1479. SRAM_Init();
  1480. SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
  1481. SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
  1482. SRAM_Write(SHANDLE_DATA_VAILD+2,Length);
  1483. SRAM_Write(SHANDLE_DATA_VAILD+3,Command);
  1484. if(Length==4)
  1485. {
  1486. SRAM_Write(SHANDLE_DATA_VAILD+4,0x0d);
  1487. }
  1488. else if(Length==5)
  1489. {
  1490. SRAM_Write(SHANDLE_DATA_VAILD+4,Data);
  1491. SRAM_Write(SHANDLE_DATA_VAILD+5,0x0d);
  1492. }
  1493. }
  1494. /********************************************************
  1495. * 函数名:Handle_Set_Par
  1496. 作用域:本地文件调用
  1497. * 功能:测试外部设备的功能
  1498. * 参数:
  1499. * 参数:
  1500. * 返回值:
  1501. * 创建人:
  1502. * 修改历史:(每条详述)
  1503. ********************************************************/
  1504. void Handle_Set_Par(unsigned char nLength)
  1505. {
  1506. unsigned int i=0;
  1507. for(i=0;i<sizeof(gGeneral_Buffer);i++)    gGeneral_Buffer[i]=0;
  1508. for(i=0;i<nLength-3;i++)
  1509. {
  1510. gGeneral_Buffer[i+1+9]=gHandle_Buffer[i+3];
  1511. }
  1512. Do_Par();
  1513. Waiting_Allow_Send();
  1514. Send_COM3_SubProgram(5,HANDLE_SET_PAR_ECHO,COMMAND_OK);
  1515. gTimer=0;
  1516. while(gTimer<50){}
  1517. }
  1518. /********************************************************
  1519. * 函数名:Handle_Set_TcpIp
  1520. 作用域:本地文件调用
  1521. * 功能:测试外部设备的功能
  1522. * 参数:
  1523. * 参数:
  1524. * 返回值:
  1525. * 创建人:
  1526. * 修改历史:(每条详述)
  1527. ********************************************************/
  1528. void Handle_Set_TcpIp(void)
  1529. {
  1530. unsigned int i,j,k;
  1531. unsigned char APN_Length=0;
  1532. unsigned char Check_Data=0;
  1533. //在gHandle_Buffer[i]中表示IP地址的第一个数
  1534. i=3;
  1535. while(1)
  1536. {
  1537. if(gHandle_Buffer[i]==0x00) break;
  1538. i++;
  1539. if(i>16+3) return;
  1540. }
  1541. //一,+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1542. //1-1,存储IP的数据值到相应的BUFFER1中,存储IP地址的长度,不包括长度本身
  1543. Check_Data=0;
  1544. SRAM_Init();
  1545. SRAM_Write(GPRS_IP_ADDRESS1_2+0,i-3);
  1546. for(j=3;j<i;j++)
  1547. {
  1548. Check_Data += gHandle_Buffer[j];
  1549. SRAM_Write(GPRS_IP_ADDRESS1_2+j-2,gHandle_Buffer[j]);
  1550. }
  1551. SRAM_Write(GPRS_IP_ADDRESS1_CHECK_2,Check_Data);
  1552. //1-2,将IP地址的SOCKET数据存储在buffer1相应的缓冲区中,因为上面gHandle_Buffer[i]=0x00
  1553. i++;
  1554. gIP_Port_Num = gHandle_Buffer[i];
  1555. gIP_Port_Num<<=8;
  1556. gIP_Port_Num += gHandle_Buffer[i+1];
  1557. gIP_Port_Num<<=8;
  1558. gIP_Port_Num += gHandle_Buffer[i+2];
  1559. gIP_Port_Num<<=8;
  1560. gIP_Port_Num += gHandle_Buffer[i+3];
  1561. SRAM_Init();
  1562. Check_Data=ASCII(gIP_Port_Num/10000);
  1563. SRAM_Write(GPRS_SOCKET1_2+0,ASCII(gIP_Port_Num/10000));
  1564. Check_Data += ASCII((gIP_Port_Num%10000)/1000);
  1565. SRAM_Write(GPRS_SOCKET1_2+1,ASCII((gIP_Port_Num%10000)/1000));
  1566. Check_Data += ASCII((gIP_Port_Num%1000)/100);
  1567. SRAM_Write(GPRS_SOCKET1_2+2,ASCII((gIP_Port_Num%1000)/100));
  1568. Check_Data += ASCII((gIP_Port_Num%100)/10);
  1569. SRAM_Write(GPRS_SOCKET1_2+3,ASCII((gIP_Port_Num%100)/10));
  1570. Check_Data += ASCII(gIP_Port_Num%10);
  1571. SRAM_Write(GPRS_SOCKET1_2+4,ASCII(gIP_Port_Num%10));
  1572. SRAM_Write(GPRS_SOCKET1_2+5,Check_Data);
  1573. OperateSPIEnd();
  1574. //1-3,TCP开关量的判断处理
  1575. gON_OFF_Temp0 &=~ TCP_LAND_ON_OFF_1;
  1576. gStatus2_Flag |= TCP_ON_OFF_F_1;
  1577. //1-4,APN方面的判断处理
  1578. k=i+5;
  1579. while(1)
  1580. {
  1581. if(gHandle_Buffer[k]==0x00) break;
  1582. k++;
  1583. if(k>gHandle_Buffer[1]) return;
  1584. }
  1585. APN_Length=k-i-5;
  1586. if( (APN_Length>=4)&&(APN_Length<=25) )
  1587. {
  1588. SRAM_Init();
  1589. SRAM_Write(GPRS_APN_ADDRESS2_2+0,APN_Length);
  1590. Check_Data=0;
  1591. for(j=i+5;j<k;j++)
  1592. {
  1593. SRAM_Write(GPRS_APN_ADDRESS2_2+(j-i-5)+1,APN_Length);
  1594. Check_Data += gHandle_Buffer[j];
  1595. }
  1596. SRAM_Write(GPRS_APN_END_2,Check_Data);
  1597. }
  1598. else
  1599. {
  1600. SRAM_Write(GPRS_APN_ADDRESS2_2,sizeof(APN_DEFAULT));
  1601. //5,存储APN的数据值到相应的BUFFER1中
  1602. Check_Data=0;
  1603. for(i=0;i<sizeof(APN_DEFAULT);i++)
  1604. {
  1605. SRAM_Write(GPRS_APN_ADDRESS2_2+i+1,APN_DEFAULT[i]);
  1606. Check_Data += APN_DEFAULT[i];
  1607. }
  1608. SRAM_Write(GPRS_APN_END_2,Check_Data);
  1609. }
  1610. //将TCP的开关量的信息存储在相应的FLASH中
  1611. OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
  1612. WriteOneByteToBuffer2(ON_OFF_V1_2,gON_OFF_Temp0);OperateSPIEnd();
  1613. RFlash_Sector(FLASH_INFO2_ONE_2);
  1614. Re430_Flash(1);
  1615. RX2_Ready();RX3_Ready();RX4_Ready();
  1616. //二,++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1617. //注意,这里在程序刚上电的最开始已经检查过了FLASH的第1,第2扇区的数据
  1618. //在这里则不需要在继续检查
  1619. //读第一个扇区的数据到buffer2中
  1620. gTimer=0;
  1621. while(gTimer<500){}
  1622. Clear_Exter_WatchDog();
  1623. //2-1,将IP地址数据已经写入相应的buffer2中
  1624. i=3;
  1625. while(1)
  1626. {
  1627. if(gHandle_Buffer[i]==0x00) break;
  1628. i++;
  1629. if(i>16+3) return;
  1630. }
  1631. //这个时候的i指向0x00
  1632. OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO1_ONE_2);OperateSPIEnd();
  1633. WriteOneByteToBuffer2(GPRS_IP_ADDRESS1_F_2,i-3);
  1634. for(j=3;j<i;j++)
  1635. {
  1636. WriteNextByteToBuffer2(gHandle_Buffer[j]);
  1637. }
  1638. OperateSPIEnd();
  1639. gGeneral_Flag|=TCP_IP_VALID_1;
  1640. gStatus2_Flag|=IP_VAILD_F_1;
  1641. //2-2,将SOCKET的数据写入相应的buffer2中
  1642. OperateSPIEnd();
  1643. WriteOneByteToBuffer2(GPRS_SOCKET1_F_2,ASCII(gIP_Port_Num/10000));
  1644. WriteNextByteToBuffer2(ASCII((gIP_Port_Num%10000)/1000));
  1645. WriteNextByteToBuffer2(ASCII((gIP_Port_Num%1000)/100));
  1646. WriteNextByteToBuffer2(ASCII((gIP_Port_Num%100)/10));
  1647. WriteNextByteToBuffer2(ASCII(gIP_Port_Num%10));
  1648. OperateSPIEnd();
  1649. //2-3,将APN的数据写入到相应的buffer2中
  1650. //i指向APN的第一个字节
  1651. k=i+6;
  1652. while(1)
  1653. {
  1654. if(gHandle_Buffer[k]==0x00) break;
  1655. k++;
  1656. if(k>gHandle_Buffer[1]) return;
  1657. }
  1658. APN_Length=k-i-6;
  1659. WriteOneByteToBuffer2(GPRS_APN_DATA_F_2,APN_Length);
  1660. for(j=i+6;j<k;j++)
  1661. {
  1662. WriteNextByteToBuffer2(gHandle_Buffer[j]);
  1663. }
  1664. OperateSPIEnd();
  1665. gTimer=0;
  1666. while(gTimer<50){}
  1667. Clear_Exter_WatchDog();
  1668. RFlash_Sector(FLASH_INFO1_ONE_2);
  1669. Re430_Flash(0);
  1670. Waiting_Allow_Send();
  1671. Send_COM3_SubProgram(5,HANDLE_SET_TCPIP_ECHO,COMMAND_OK);
  1672. gCheck_Par_Timer=CHECK_SYS_PAR_TIME+1;
  1673. Init_Buffer2();
  1674. RX2_Ready();
  1675. RX3_Ready();
  1676. RX4_Ready();
  1677. }
  1678. /********************************************************
  1679. * 函数名:Handle_Set_Time
  1680. 作用域:本地文件调用
  1681. * 功能:测试外部设备的功能
  1682. * 参数:
  1683. * 参数:
  1684. * 返回值:
  1685. * 创建人:
  1686. * 修改历史:(每条详述)
  1687. ********************************************************/
  1688. void Handle_Set_Time(void)
  1689. {
  1690. unsigned int i=0,j=0;
  1691. gCycle_TCP = gHandle_Buffer[3];
  1692. gCycle_TCP <<= 8;
  1693. gCycle_TCP += gHandle_Buffer[4];
  1694. gCycle_GSM = gHandle_Buffer[5];
  1695. gCycle_GSM <<= 8;
  1696. gCycle_GSM += gHandle_Buffer[6];
  1697. if( (gCycle_TCP>0)&&(gCycle_TCP<5) ) gCycle_TCP=5;
  1698. if( (gCycle_GSM>0)&&(gCycle_GSM<5) ) gCycle_GSM=5;
  1699. OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
  1700. WriteOneByteToBuffer2(TCP_TIMER_2,gHandle_Buffer[3]);
  1701. WriteNextByteToBuffer2(gHandle_Buffer[4]);
  1702. WriteNextByteToBuffer2(gHandle_Buffer[5]);
  1703. WriteNextByteToBuffer2(gHandle_Buffer[6]);
  1704. OperateSPIEnd();
  1705. RFlash_Sector(FLASH_INFO2_ONE_2);
  1706. Re430_Flash(1);
  1707. //1,IP地址有效果,并且2,TCP的开关量是否开启
  1708. if( (gGeneral_Flag&TCP_IP_VALID_1)&&((gON_OFF_Temp0&TCP_LAND_ON_OFF_1)==0) )
  1709. {
  1710. if( (gCycle_TCP>0)&&(gCycle_Send_Status!=ALARM_DATA)&&(gCycle_Send_Status!=PASS_DATA) )
  1711. {
  1712. gCycle_Send_Status=TRACK_DATA_TIME;
  1713. }
  1714. else if( (gCycle_TCP==0)&&(gCycle_Send_Status==TRACK_DATA_TIME))
  1715. {
  1716. gCycle_Send_Status=NOP_DATA;
  1717. }
  1718. }
  1719. //1,IP地址无效,或者TCP的开关量关闭
  1720. else
  1721. {
  1722. if( (gCycle_GSM>0)&&(gCycle_Send_Status!=ALARM_DATA)&&(gCycle_Send_Status!=PASS_DATA) )
  1723. {
  1724. gCycle_Send_Status=TRACK_DATA_TIME;
  1725. }
  1726. else if( (gCycle_GSM==0)&&(gCycle_Send_Status==TRACK_DATA_TIME))
  1727. {
  1728. gCycle_Send_Status=NOP_DATA;
  1729. }
  1730. }
  1731. Waiting_Allow_Send();
  1732. Send_COM3_SubProgram(5,HANDLE_SET_TIME_ECHO,COMMAND_OK);
  1733. gTimer=0;
  1734. while(gTimer<50){}
  1735. }
  1736. /********************************************************
  1737. * 函数名:Handle_Ask_Par
  1738. 作用域:本地文件调用
  1739. * 功能:测试外部设备的功能
  1740. * 参数:
  1741. * 参数:
  1742. * 返回值:
  1743. * 创建人:
  1744. * 修改历史:(每条详述)
  1745. ********************************************************/
  1746. void Handle_Ask_Par(void)
  1747. {
  1748. unsigned int i=0;
  1749. Ask_Par();
  1750. SRAM_Init();
  1751. SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
  1752. SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
  1753. SRAM_Write(SHANDLE_DATA_VAILD+2,gGeneral_Buffer[0]+1+3);
  1754. SRAM_Write(SHANDLE_DATA_VAILD+3,HANDLE_ASK_PAR_ECHO);
  1755. for(i=1;i<=gGeneral_Buffer[0];i++)
  1756. {
  1757. SRAM_Write(SHANDLE_DATA_VAILD+3+i,gGeneral_Buffer[i]);
  1758. }
  1759. SRAM_Write(SHANDLE_DATA_VAILD+4+gGeneral_Buffer[0],0x0d);
  1760. }
  1761. /********************************************************
  1762. * 函数名:Handle_Set_SMS
  1763. 作用域:本地文件调用
  1764. * 功能:
  1765. * 参数:
  1766. * 参数:
  1767. * 返回值:
  1768. * 创建人:
  1769. * 修改历史:(每条详述)
  1770. ********************************************************/
  1771. void Handle_Set_SMS(void)
  1772. {
  1773. if(gDisp_Buffer_Point+gHandle_Buffer[1]-4+2+6<=sizeof(gDisp_Buffer))
  1774. {
  1775.     gDisp_Buffer[gDisp_Buffer_Point]=gHandle_Buffer[1]-4+2+6;
  1776.     gDisp_Buffer_Point++;
  1777.     gDisp_Buffer[gDisp_Buffer_Point]=0;
  1778.     gDisp_Buffer_Point++;
  1779.     gDisp_Buffer[gDisp_Buffer_Point]='@';
  1780.     gDisp_Buffer_Point++;
  1781.     gDisp_Buffer[gDisp_Buffer_Point]='%';
  1782.     gDisp_Buffer_Point++;
  1783.     gDisp_Buffer[gDisp_Buffer_Point]=gHandle_Buffer[1]-4+2+4;
  1784.     gDisp_Buffer_Point++;
  1785.     gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_WORD_DOWN;
  1786.     gDisp_Buffer_Point++;
  1787.     //从0xFF开始存储数据(转移整个中心的数据包)
  1788.     Copy_String(gHandle_Buffer+3,gDisp_Buffer+gDisp_Buffer_Point,gHandle_Buffer[1]-4);
  1789.     gDisp_Buffer_Point=gDisp_Buffer_Point+gHandle_Buffer[1]-4;
  1790.     gDisp_Buffer[gDisp_Buffer_Point]='$';
  1791.     gDisp_Buffer_Point++;
  1792.     gDisp_Buffer[gDisp_Buffer_Point]='&';
  1793.     gDisp_Buffer_Point++;
  1794. Waiting_Allow_Send();
  1795. Send_COM3_SubProgram(5,HANDLE_SET_SMS_ECHO,COMMAND_OK);
  1796. }
  1797. }
  1798. /********************************************************
  1799. * 函数名:Handle_Set_Phone
  1800. 作用域:本地文件调用
  1801. * 功能:
  1802. * 参数:
  1803. * 参数:
  1804. * 返回值:
  1805. * 创建人:
  1806. * 修改历史:(每条详述)
  1807. ********************************************************/
  1808. void Handle_Set_Phone(unsigned char nLength)
  1809. {
  1810. unsigned int i=0;
  1811. for(i=0;i<sizeof(gGeneral_Buffer);i++)    gGeneral_Buffer[i]=0;
  1812. for(i=0;i<nLength-3;i++)
  1813. {
  1814. gGeneral_Buffer[i+1+9]=gHandle_Buffer[i+3];
  1815. }
  1816. Do_Phone_Note();
  1817. Waiting_Allow_Send();
  1818. Send_COM3_SubProgram(5,HANDLE_SET_PHONE_NOTE_ECHO,COMMAND_OK);
  1819. }
  1820. /********************************************************
  1821. * 函数名:Handle_Set_Dis
  1822. 作用域:本地文件调用
  1823. * 功能:
  1824. * 参数:
  1825. * 参数:
  1826. * 返回值:
  1827. * 创建人:
  1828. * 修改历史:(每条详述)
  1829. ********************************************************/
  1830. void Handle_Set_Dis(void)
  1831. {
  1832. gCycle_Distance = gHandle_Buffer[3];
  1833. gCycle_Distance <<= 8;
  1834. gCycle_Distance += gHandle_Buffer[4];
  1835. if(gHandle_Buffer[5]==1)
  1836. {
  1837. gON_OFF_Temp1 &=~ DISTANCE_TCP_ON_1;
  1838. gStatus3_Flag |= DISTANCE_ON_F_1;
  1839. }
  1840. else if(gGeneral_Buffer[5]==0)
  1841. {
  1842. gON_OFF_Temp1 |= DISTANCE_TCP_ON_1;
  1843. gStatus3_Flag &=~ DISTANCE_ON_F_1;
  1844. }
  1845. gCycle_TCP=0;
  1846. gCycle_GSM=0;
  1847. gCycle_Send_Status = NOP_DATA;
  1848. //根据状态的改变,则需要重新更新扇区0中的数据,并重新计算校验核,写入扇区
  1849. OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
  1850. WriteOneByteToBuffer2(ON_OFF_V2_2,gON_OFF_Temp1);
  1851. OperateSPIEnd();
  1852. WriteOneByteToBuffer2(TCP_TIMER_2,0);
  1853. WriteNextByteToBuffer2(0);
  1854. WriteNextByteToBuffer2(0);
  1855. WriteNextByteToBuffer2(0);
  1856. WriteNextByteToBuffer2(gHandle_Buffer[3]);
  1857. WriteNextByteToBuffer2(gHandle_Buffer[4]);
  1858. OperateSPIEnd();
  1859. RFlash_Sector(FLASH_INFO2_ONE_2);
  1860. Re430_Flash(1);
  1861. gPublic_Flag &=~ SET_DISTANCE_OK_F_1;
  1862. gSet_Distance_Info_Count=WAIT_DISPINFO_TIME-2;
  1863. //返回设置成功
  1864. Waiting_Allow_Send();
  1865. Send_COM3_SubProgram(5,HANDLE_SET_DISTANCE_ECHO,COMMAND_OK);
  1866. }
  1867. /********************************************************
  1868. * 函数名:Handle_Test_Sram
  1869. 作用域:本地文件调用
  1870. * 功能:
  1871. * 参数:
  1872. * 返回值:
  1873. * 创建人:
  1874. * 修改历史:(每条详述)
  1875. ********************************************************/
  1876. void Handle_Test_Sram(void)
  1877. {
  1878. unsigned int i=0,j=0,k=0;
  1879. unsigned char Data_Temp=0;
  1880. unsigned char Data_Read=0;
  1881. //关闭中断1;停止中断对外部SRAM的操作
  1882. IE2&=~URXIE1;            //USART1接收中断禁止
  1883. j=0;
  1884. for(k=0;k<=0x100;k++)
  1885. {
  1886. for(i=0;i<=0xFF;i++)
  1887. {
  1888. gGeneral_Buffer[i]=(char)(i+k);
  1889. }
  1890. Clear_Exter_WatchDog();
  1891. SRAM_Init();
  1892. for(i=0;i<=0xFF;i++)
  1893. {
  1894. SRAM_Write( (int)(k*0xFF+i),gGeneral_Buffer[i]);
  1895. }
  1896. SRAM_Init();
  1897. for(i=0;i<=0xFF;i++)
  1898. {
  1899. Data_Temp=SRAM_Read((int)(k*0xFF+i));
  1900. if(Data_Temp!=gGeneral_Buffer[i])
  1901. {
  1902. j=1;break;
  1903. }
  1904. }
  1905. if(j==1) break;
  1906. }
  1907. if(j==1)
  1908. {
  1909. Send_COM3_SubProgram(5,HANDLE_TEST_SRAM,COMMAND_ERROR);
  1910. }
  1911. else
  1912. {
  1913. Send_COM3_SubProgram(5,HANDLE_TEST_SRAM,COMMAND_OK);
  1914. }
  1915. IE2|=URXIE1;            //USART1接收中断允许
  1916. RX2_Ready();
  1917. RX3_Ready();
  1918. RX4_Ready();
  1919. gTimer=0;
  1920. while(gTimer<50){}
  1921. }