hardware_test.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687
  1. #include"common.h"
  2. #include "drv_io.h"
  3. #include "drv_usart.h"
  4. #include "drv_usart_2.h"
  5. #include "app.h"
  6. #include "app_rs485_1.h"
  7. #include "app_rs485_2.h"
  8. #include "drv_can.h"
  9. #include "app_adas.h"
  10. #include "measure_vol.h"
  11. #include "app_can.h"
  12. #include "hardware_test.h"
  13. #include "measure_temprature.h"
  14. #include "app_end_ctr.h"
  15. static uint8_t app_rs485_buf[TX_BUFFER_SIZE];
  16. uint8_t ht_mode = 0;
  17. uint8_t where_from = FROM_USART_1;
  18. uint8_t over_12V = 0;
  19. const uint16_t ht_flash = 0x2323;
  20. //#define ht_flash (0x2323)
  21. DELAY_COMMON HT_Reboot;
  22. extern uint8_t work_normal;
  23. #ifdef CONFIG_CAN_IAP
  24. extern void qws_iap_write_magic(uint32_t magic);
  25. #endif
  26. void HT_Reboot_Timeout(void)
  27. {
  28. if(HT_Reboot.set)
  29. {
  30. if(++HT_Reboot.count > 3000)
  31. {
  32. memset(&HT_Reboot,0x00,sizeof(HT_Reboot));
  33. g_event |= DEVICE_REBOOT_EVENT;
  34. }
  35. }
  36. }
  37. void HT_Flash_flag_clear(void)
  38. {
  39. fmc_flag_clear(FMC_FLAG_BANK0_PGERR | FMC_FLAG_BANK0_WPERR | FMC_FLAG_BANK0_END);
  40. }
  41. uint8_t Check_HT_Flash(void)
  42. {
  43. uint32_t capacity = (REG32(0x1FFFF7E0) & 0xFFFF) << 10;
  44. uint32_t address = 0x08000000 + (capacity - HARD_TEST_FLASH_ADDRESS);
  45. uint16_t flag = REG16(address);
  46. if (REG16(address) == ht_flash)
  47. return 1;
  48. else
  49. return 0;
  50. }
  51. void Writer_HT_Flash(uint8_t flag)
  52. {
  53. uint32_t capacity = (REG32(0x1FFFF7E0) & 0xFFFF) << 10;
  54. uint32_t address = 0x08000000 + (capacity - HARD_TEST_FLASH_ADDRESS);
  55. uint16_t df_value ;
  56. if(flag)
  57. {
  58. df_value = ht_flash;
  59. HT_Reboot.set = 1;
  60. HT_Reboot.count = 0;
  61. }
  62. else
  63. df_value = 0xFFFF;
  64. fmc_unlock();
  65. HT_Flash_flag_clear();
  66. fmc_page_erase(address);
  67. HT_Flash_flag_clear();
  68. fmc_halfword_program(address,df_value);
  69. HT_Flash_flag_clear();
  70. fmc_lock();
  71. }
  72. uint8_t HT_Frame_CRC(uint8_t*data,uint8_t len)
  73. {
  74. uint8_t i,crc = 0;
  75. for(i = 0;i<len;i++)
  76. crc += data[i];
  77. return crc;
  78. }
  79. int8_t HT_Handle_CMD( uint8_t *data)
  80. {
  81. HT_FRAME * ht_frame = (HT_FRAME *)data;
  82. uint8_t temp;
  83. do
  84. {
  85. if(NULL == data)
  86. {
  87. return 0;
  88. }
  89. if(ht_frame->ht_dir != 1)
  90. break;
  91. //CRC
  92. temp = ht_frame->ht_crc;
  93. ht_frame->ht_crc = 0;
  94. if(temp != HT_Frame_CRC(data,ht_frame->ht_len))
  95. {
  96. break;
  97. }
  98. temp = sizeof(HT_FRAME);
  99. //handle frame
  100. switch(ht_frame->ht_cmd)
  101. {
  102. case HT_IDRA:
  103. S21_ENABLE(1);
  104. break;
  105. case HT_12V:
  106. if(data[temp] == 1)
  107. Enable_12V(1);
  108. else if(data[temp] == 2)
  109. Enable_12V(0);
  110. else
  111. return 0;
  112. break;
  113. case HT_CAN:
  114. if(data[temp] == 1)
  115. {
  116. Can_Power_Enable(1);
  117. work_normal = 1;
  118. }
  119. else if(data[temp] == 2)
  120. {
  121. Can_Power_Enable(0);
  122. work_normal = 0;
  123. }
  124. else
  125. return 0;
  126. break;
  127. case HT_QD:
  128. if(data[temp] == 1)
  129. QD_Enable(1);
  130. //QD_Enable_From(1,6);
  131. else if(data[temp] == 2)
  132. QD_Enable(0);
  133. //QD_Enable_From(0,7);
  134. else
  135. return 0;
  136. break;
  137. case HT_ACC:
  138. break;
  139. case HT_S_P:
  140. break;
  141. case HT_LIGHT:
  142. break;
  143. case HT_INPUT:
  144. break;
  145. case HT_LOCK:
  146. break;
  147. case HT_XL:
  148. break;
  149. case HT_CHARGER:
  150. break;
  151. case HT_TEMP:
  152. break;
  153. case HT_ADAS:
  154. break;
  155. default:return 0;
  156. }
  157. return 1;
  158. }while(0);
  159. return 0;
  160. }
  161. int8_t HT_Rsp_CMD(uint8_t *buf)
  162. {
  163. HT_FRAME * ht_frame = (HT_FRAME *)buf;
  164. uint8_t len;
  165. if(NULL == buf)
  166. {
  167. return 0;
  168. }
  169. switch(ht_frame->ht_cmd)
  170. {
  171. case HT_IDRA:
  172. len = sizeof(HT_FRAME);
  173. buf[len++] = 0;
  174. break;
  175. case HT_12V:
  176. len = sizeof(HT_FRAME);
  177. buf[len++] = 0;
  178. break;
  179. case HT_CAN:
  180. len = sizeof(HT_FRAME);
  181. buf[len++] = 0;
  182. break;
  183. case HT_QD:
  184. len = sizeof(HT_FRAME);
  185. buf[len++] = !QD_Dect();
  186. break;
  187. case HT_ACC:
  188. len = sizeof(HT_FRAME);
  189. if(buf[len] == 1)
  190. {
  191. FL_Enable(1);
  192. buf[len++] = 0;
  193. }
  194. else if(buf[len] == 2)
  195. {
  196. over_12V = 0;
  197. gpio_bit_write(GPIOC,GPIO_PIN_15,SET);
  198. buf[len++] = gpio_input_bit_get(GPIOD,GPIO_PIN_0);
  199. }
  200. else if(buf[len] == 3)
  201. {
  202. buf[len++] = over_12V;
  203. over_12V = 0;
  204. }
  205. else if(buf[len] == 4)
  206. {
  207. gpio_bit_write(GPIOC,GPIO_PIN_15,RESET);
  208. buf[len++] = gpio_input_bit_get(GPIOD,GPIO_PIN_0);
  209. }
  210. else if(buf[len] == 5)
  211. {
  212. FL_Enable(0);
  213. buf[len++] = 0;
  214. }
  215. else
  216. return 0;
  217. break;
  218. case HT_S_P:
  219. len = sizeof(HT_FRAME);
  220. if(buf[len] == 1)
  221. {
  222. S11_ENABLE(0);
  223. S21_ENABLE(0);
  224. SS__ENABLE(0);
  225. delay_1ms(100);
  226. buf[len++] = gpio_input_bit_get(GPIOC,GPIO_PIN_1);
  227. buf[len++] = gpio_input_bit_get(GPIOC,GPIO_PIN_2);
  228. uint32_t vol = Measure_Vol();
  229. buf[len++] = (uint8_t)(vol >> 0);
  230. buf[len++] = (uint8_t)(vol >> 8);
  231. buf[len++] = (uint8_t)(vol >> 16);
  232. buf[len++] = (uint8_t)(vol >> 24);
  233. }
  234. else if(buf[len] == 2)
  235. {
  236. if(buf[len + 1] == 1)
  237. {
  238. S21_ENABLE(1);
  239. buf[len++] = 0;
  240. }
  241. else if(buf[len + 1] == 2)
  242. {
  243. delay_1ms(100);
  244. uint32_t vol = Measure_Vol();
  245. buf[len++] = (uint8_t)(vol >> 0);
  246. buf[len++] = (uint8_t)(vol >> 8);
  247. buf[len++] = (uint8_t)(vol >> 16);
  248. buf[len++] = (uint8_t)(vol >> 24);
  249. }
  250. else if(buf[len + 1] == 3)
  251. {
  252. S21_ENABLE(0);
  253. buf[len++] = 0;
  254. }
  255. }
  256. else if(buf[len] == 3)
  257. {
  258. delay_1ms(100);
  259. buf[len++] = gpio_input_bit_get(GPIOC,GPIO_PIN_1);
  260. buf[len++] = gpio_input_bit_get(GPIOC,GPIO_PIN_2);
  261. uint32_t vol = Measure_Vol();
  262. buf[len++] = (uint8_t)(vol >> 0);
  263. buf[len++] = (uint8_t)(vol >> 8);
  264. buf[len++] = (uint8_t)(vol >> 16);
  265. buf[len++] = (uint8_t)(vol >> 24);
  266. }
  267. else if(buf[len] == 4)
  268. {
  269. if(buf[len + 1] == 1)
  270. {
  271. FL_Enable(1);
  272. delay_1ms(10);
  273. S11_ENABLE(1);
  274. buf[len++] = 0;
  275. }
  276. else if(buf[len + 1] == 2)
  277. {
  278. delay_1ms(100);
  279. uint32_t vol = Measure_Vol();
  280. buf[len++] = (uint8_t)(vol >> 0);
  281. buf[len++] = (uint8_t)(vol >> 8);
  282. buf[len++] = (uint8_t)(vol >> 16);
  283. buf[len++] = (uint8_t)(vol >> 24);
  284. }
  285. else if(buf[len + 1] == 3)
  286. {
  287. FL_Enable(0);
  288. S11_ENABLE(0);
  289. buf[len++] = 0;
  290. }
  291. }
  292. else if(buf[len] == 5)
  293. {
  294. delay_1ms(100);
  295. buf[len++] = gpio_input_bit_get(GPIOC,GPIO_PIN_1);
  296. buf[len++] = gpio_input_bit_get(GPIOC,GPIO_PIN_2);
  297. uint32_t vol = Measure_Vol();
  298. buf[len++] = (uint8_t)(vol >> 0);
  299. buf[len++] = (uint8_t)(vol >> 8);
  300. buf[len++] = (uint8_t)(vol >> 16);
  301. buf[len++] = (uint8_t)(vol >> 24);
  302. }
  303. else if(buf[len] == 6)
  304. {
  305. if(buf[len + 1] == 1)
  306. {
  307. SS__ENABLE(1);
  308. buf[len++] = 0;
  309. }
  310. else if(buf[len + 1] == 2)
  311. {
  312. delay_1ms(100);
  313. uint32_t vol = Measure_Vol();
  314. buf[len++] = (uint8_t)(vol >> 0);
  315. buf[len++] = (uint8_t)(vol >> 8);
  316. buf[len++] = (uint8_t)(vol >> 16);
  317. buf[len++] = (uint8_t)(vol >> 24);
  318. }
  319. else if(buf[len + 1] == 3)
  320. {
  321. SS__ENABLE(0);
  322. buf[len++] = 0;
  323. }
  324. }
  325. else if(buf[len] == 7)
  326. {
  327. FL_Enable(1);
  328. delay_1ms(10);
  329. S11_ENABLE(1);
  330. S21_ENABLE(1);
  331. SS__ENABLE(1);
  332. buf[len++] = 0;
  333. }
  334. else if(buf[len] == 8)
  335. {
  336. SS__ENABLE(0);
  337. buf[len++] = 0;
  338. }
  339. else if(buf[len] == 9)
  340. {
  341. S21_ENABLE(0);
  342. buf[len++] = 0;
  343. }
  344. else
  345. return 0;
  346. break;
  347. case HT_LIGHT:
  348. len = sizeof(HT_FRAME);
  349. if(buf[len] == 1)
  350. {
  351. Right_Light_Enable(0);
  352. Tail_Light_Enable(0);
  353. Left_Light_Enable(1);
  354. Carpet_Light_Enable(1);
  355. buf[len++] = 0;
  356. }
  357. else if(buf[len] == 2)
  358. {
  359. Left_Light_Enable(0);
  360. Carpet_Light_Enable(0);
  361. Right_Light_Enable(1);
  362. Tail_Light_Enable(1);
  363. buf[len++] = 0;
  364. }
  365. else if(buf[len] == 3)
  366. {
  367. Right_Light_Enable(0);
  368. Tail_Light_Enable(0);
  369. Left_Light_Enable(0);
  370. Carpet_Light_Enable(0);
  371. buf[len++] = 0;
  372. }
  373. else
  374. return 0;
  375. break;
  376. case HT_INPUT:
  377. len = sizeof(HT_FRAME);
  378. if(buf[len] == 1)
  379. {
  380. buf[len++] = Side_Stay_Dect();
  381. buf[len++] = !Soak_Dect();
  382. buf[len++] = Sitting_Dect();
  383. }
  384. else if(buf[len] == 2)
  385. {
  386. buf[len++] = Side_Stay_Dect();
  387. buf[len++] = !Soak_Dect();
  388. buf[len++] = Sitting_Dect();
  389. }
  390. else
  391. return 0;
  392. break;
  393. case HT_LOCK:
  394. len = sizeof(HT_FRAME);
  395. if(buf[len] == 1)
  396. {
  397. Lock_Enable(1);
  398. buf[len++] = 0;
  399. }
  400. else if(buf[len] == 2)
  401. {
  402. Lock_Enable(0);
  403. buf[len++] = 0;
  404. }
  405. else
  406. return 0;
  407. break;
  408. case HT_XL:
  409. len = sizeof(HT_FRAME);
  410. if(buf[len] == 1)
  411. {
  412. xl_count = 0;
  413. delay_1ms(100);
  414. if(xl_count)
  415. buf[len++] = 1;
  416. else
  417. buf[len++] = 0;
  418. }
  419. else if(buf[len] == 2)
  420. {
  421. xl_count = 0;
  422. delay_1ms(100);
  423. if(xl_count)
  424. buf[len++] = 1;
  425. else
  426. buf[len++] = 0;
  427. }
  428. else
  429. return 0;
  430. break;
  431. case HT_CHARGER:
  432. len = sizeof(HT_FRAME);
  433. if(buf[len] == 1)
  434. {
  435. CHARG_PROTECT_OPEN(1);
  436. buf[len++] = gpio_input_bit_get(GPIOC,GPIO_PIN_4);
  437. }
  438. else if(buf[len] == 2)
  439. {
  440. CHARG_PROTECT_OPEN(0);
  441. buf[len++] = gpio_input_bit_get(GPIOC,GPIO_PIN_4);
  442. }
  443. else
  444. return 0;
  445. break;
  446. case HT_TEMP:
  447. len = sizeof(HT_FRAME);
  448. if(buf[len] == 1)
  449. {
  450. getTemperature();
  451. buf[len++] = (uint8_t)(ctr_temperature[0]);
  452. buf[len++] = (uint8_t)(ctr_temperature[1]);
  453. }
  454. else
  455. return 0;
  456. break;
  457. case HT_ADAS:
  458. len = sizeof(HT_FRAME);
  459. if(buf[len] == 1)
  460. {
  461. ADAS_Enable(1);
  462. buf[len++] = 0;
  463. }
  464. else if(buf[len] == 2)
  465. {
  466. buf[len++] = (uint8_t)(ju_li_1 >> 0);
  467. buf[len++] = (uint8_t)(ju_li_1 >> 8);
  468. buf[len++] = (uint8_t)(ju_li_2 >> 0);
  469. buf[len++] = (uint8_t)(ju_li_2 >> 8);
  470. }
  471. else
  472. return 0;
  473. break;
  474. default:break;
  475. }
  476. // ÌîÖ¡Í·
  477. ht_frame->ht_len = len;
  478. ht_frame->ht_dir = 0;
  479. ht_frame->ht_crc = 0;
  480. ht_frame->ht_crc = HT_Frame_CRC(buf,ht_frame->ht_len);
  481. return 1;
  482. }
  483. int8_t HT_Handle_RS485_Data(uint8_t from)
  484. {
  485. uint8_t len ;
  486. if(from == FROM_USART_1)
  487. {
  488. len = Get_RS485_Data(app_rs485_buf,sizeof(app_rs485_buf));
  489. }
  490. else if(from == FROM_USART_2)
  491. {
  492. len = Get_RS485_2_Data(app_rs485_buf,sizeof(app_rs485_buf));
  493. }
  494. else
  495. return 0;
  496. where_from = from;
  497. if(len != app_rs485_buf[0])
  498. {
  499. return 0;
  500. }
  501. if(!HT_Handle_CMD(app_rs485_buf))
  502. return 0;
  503. if(!HT_Rsp_CMD(app_rs485_buf))
  504. return 0;
  505. if(from == FROM_USART_1)
  506. {
  507. if(!Send_Data_RS485(app_rs485_buf,app_rs485_buf[0]))
  508. return 0;
  509. }
  510. else if(from == FROM_USART_2)
  511. {
  512. if(!Send_Data_2_RS485(app_rs485_buf,app_rs485_buf[0]))
  513. return 0;
  514. }
  515. return 1;
  516. }
  517. void HT_Main(void)
  518. {
  519. if(Repair_Key_Dect() && !Check_HT_Flash())
  520. return;
  521. #ifdef CONFIG_CAN_IAP
  522. qws_iap_write_magic(0x11223344);
  523. #endif
  524. Writer_HT_Flash(0);
  525. ht_mode = 1;
  526. memset(&send_delay,0x00,sizeof(send_delay));
  527. for(;;)
  528. {
  529. Check_Can_Poll();
  530. Handle_Can_Data();
  531. if(g_event & RS485_RECEIVE_END_EVENT)
  532. {
  533. if(HT_Handle_RS485_Data(FROM_USART_1) == 0)
  534. {
  535. // output fail
  536. ;
  537. }
  538. g_event &= ~RS485_RECEIVE_END_EVENT;
  539. }
  540. if(g_event & RS485_2_RECEIVE_END_EVENT)
  541. {
  542. if(HT_Handle_RS485_Data(FROM_USART_2) == 0)
  543. {
  544. // output fail
  545. ;
  546. }
  547. g_event &= ~RS485_2_RECEIVE_END_EVENT;
  548. }
  549. if(g_event & ADAS_PWM_1_TIMEOUT_EVENT)
  550. {
  551. ADAS_PWM_1_Enable();
  552. g_event &= ~ADAS_PWM_1_TIMEOUT_EVENT;
  553. }
  554. if(g_event & ADAS_PWM_2_TIMEOUT_EVENT)
  555. {
  556. ADAS_PWM_2_Enable();
  557. g_event &= ~ADAS_PWM_2_TIMEOUT_EVENT;
  558. }
  559. if(g_event & ADAS_MEAS_1_FINISH_EVENT)
  560. {
  561. ADAS_Measure_Finish_Ju_Li_1();
  562. ADAS_Self_Send_Up();
  563. g_event &= ~ADAS_MEAS_1_FINISH_EVENT;
  564. }
  565. if(g_event & ADAS_MEAS_2_FINISH_EVENT)
  566. {
  567. ADAS_Measure_Finish_Ju_Li_2();
  568. g_event &= ~ADAS_MEAS_2_FINISH_EVENT;
  569. }
  570. }
  571. }