hardware_test.c 12 KB

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