hardware_test.c 12 KB

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