soft_version.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  1. #include "soft_version.h"
  2. #include "soft_obstacle.h"
  3. #include "soft_terrain.h"
  4. #include "stm32f1xx_hal.h"
  5. #include "soft_flow.h"
  6. #include "soft_can.h"
  7. #include "soft_p_2_c.h"
  8. #include "config.h"
  9. #include "soft_eft.h"
  10. #include "string.h"
  11. #include "soft_bms.h"
  12. #include "soft_seed_device.h"
  13. #include "soft_water_device.h"
  14. dev_version_content dev_pmu;
  15. dev_version_content dev_ter;
  16. dev_version_content dev_obsf;
  17. dev_version_content dev_obsb;
  18. dev_version_content dev_bms1;
  19. dev_version_content dev_bms2;
  20. dev_version_content dev_spreader;
  21. dev_version_content dev_weight;
  22. dev_version_content dev_flowmeter;
  23. dev_version_content dev_pump;
  24. dev_version_content dev_arm;
  25. dev_version_content dev_lack;
  26. dev_version_content dev_centri;
  27. dev_version_content dev_current;
  28. dev_version_content dev_pump1,dev_pump2;
  29. dev_version_content dev_nozzle1,dev_nozzle2,dev_nozzle3,dev_nozzle4;
  30. dev_version_content dev_part_tradar;
  31. dev_version_content dev_tradar_f;
  32. dev_version_content dev_tradar_b;
  33. dev_version_content dev_h_bmsA;
  34. dev_version_content dev_h_bmsB;
  35. dev_version_content dev_remoteid;
  36. dev_version_content dev_null;
  37. // void *dev_ptr[10] = {&temp,
  38. // &dev_pmu,
  39. // &dev_ter,
  40. // &dev_obsf,
  41. // &dev_obsb,
  42. // &dev_bms1,
  43. // &dev_bms2,
  44. // &dev_spreader,
  45. // &dev_weight,
  46. // &dev_flowmeter,
  47. // &dev_arm,
  48. // };
  49. void *dev_ptr[] = {&dev_null,
  50. &dev_null,
  51. &dev_null,
  52. &dev_pmu,
  53. &dev_null,
  54. &dev_null,
  55. &dev_null,
  56. &dev_null,
  57. &dev_null,
  58. &dev_null,
  59. &dev_null,
  60. &dev_ter,
  61. &dev_obsf,
  62. &dev_obsb,
  63. &dev_bms1,
  64. &dev_bms2,
  65. &dev_null,
  66. &dev_null,
  67. &dev_null,
  68. &dev_null,
  69. &dev_null,
  70. &dev_null,
  71. &dev_null,
  72. &dev_null,
  73. &dev_null,
  74. &dev_null,
  75. &dev_spreader,
  76. &dev_weight,
  77. &dev_pump,
  78. &dev_centri,
  79. &dev_flowmeter,
  80. &dev_arm,
  81. &dev_lack,
  82. &dev_null,
  83. &dev_current,
  84. &dev_null,
  85. &dev_pump1,
  86. &dev_pump2,
  87. &dev_null,
  88. &dev_null,
  89. &dev_nozzle1,
  90. &dev_nozzle2,
  91. &dev_nozzle3,
  92. &dev_nozzle4,
  93. &dev_part_tradar,
  94. &dev_tradar_f,
  95. &dev_tradar_b,
  96. &dev_h_bmsA,
  97. &dev_h_bmsB,
  98. &dev_remoteid,
  99. };
  100. short dev_num = sizeof( dev_ptr )/sizeof( void * );
  101. /**
  102. * @file get_radar_version_and_sn
  103. * @brief 获取雷达版本和SN号
  104. * @param none
  105. * @details
  106. * @author Zhang Sir
  107. **/
  108. void get_radar_version_and_sn(void)
  109. {
  110. uint8_t radar_can_buf[8] = {0};
  111. static uint8_t mimo_area_40flag = 10;
  112. //版本信息识别 mocib mimo
  113. //新加同时获取SN号
  114. if(uavr11_info.Link.connect_status == COMP_NORMAL && uavr11_info.get_radar_ver_flag == false)
  115. {
  116. radar_can_buf[0] = 0x11;
  117. can_send_msg_normal(radar_can_buf, 1, 0x00eeff11);
  118. }
  119. else if(uavr11_info.Link.connect_status == COMP_NORMAL && uavr11_info.get_radar_sn_flag == false)
  120. {
  121. radar_can_buf[0] = 0x85;
  122. can_send_msg_normal(radar_can_buf, 1, 0x210);
  123. }
  124. if(uavr12_info.Link.connect_status == COMP_NORMAL && uavr12_info.get_radar_ver_flag == false)
  125. {
  126. radar_can_buf[0] = 0x12;
  127. can_send_msg_normal(radar_can_buf, 1, 0x00eeff12);
  128. }
  129. else if(uavr12_info.Link.connect_status == COMP_NORMAL && uavr12_info.get_radar_sn_flag == false)
  130. {
  131. radar_can_buf[0] = 0x85;
  132. can_send_msg_normal(radar_can_buf, 1, 0x220);
  133. }
  134. if(uavr56_info.Link.connect_status == COMP_NORMAL && uavr56_info.get_radar_ver_flag == false)
  135. {
  136. radar_can_buf[0] = 0x0b;
  137. can_send_msg_normal(radar_can_buf, 1, 0x00eeff0b);
  138. }
  139. else if(uavr56_info.Link.connect_status == COMP_NORMAL && uavr56_info.get_radar_sn_flag == false)
  140. {
  141. radar_can_buf[0] = 0x85;
  142. can_send_msg_normal(radar_can_buf, 1, 0x230);
  143. }
  144. if(mimo_f_info.Link.connect_status == COMP_NORMAL && mimo_f_info.get_radar_ver_flag == false)
  145. {
  146. radar_can_buf[0] = 0x55;
  147. radar_can_buf[1] = 0xAA;
  148. radar_can_buf[2] = 0x03;
  149. radar_can_buf[3] = 0x70;
  150. radar_can_buf[4] = 0x03;
  151. radar_can_buf[5] = 0x01;
  152. radar_can_buf[6] = 0x74;
  153. can_send_msg_normalstd(radar_can_buf, 7, 0xFA);
  154. }
  155. else if(mimo_b_info.Link.connect_status == COMP_NORMAL && mimo_b_info.get_radar_ver_flag == false)
  156. {
  157. radar_can_buf[0] = 0x55;
  158. radar_can_buf[1] = 0xAA;
  159. radar_can_buf[2] = 0x03;
  160. radar_can_buf[3] = 0x70;
  161. radar_can_buf[4] = 0x04;
  162. radar_can_buf[5] = 0x01;
  163. radar_can_buf[6] = 0x75;
  164. can_send_msg_normalstd(radar_can_buf, 7, 0xFA);
  165. }
  166. else if(mimo_ter_info.Link.connect_status == COMP_NORMAL && mimo_ter_info.get_radar_ver_flag == false)
  167. {
  168. radar_can_buf[0] = 0x55;
  169. radar_can_buf[1] = 0xAA;
  170. radar_can_buf[2] = 0x03;
  171. radar_can_buf[3] = 0x70;
  172. radar_can_buf[4] = 0x00;
  173. radar_can_buf[5] = 0x01;
  174. radar_can_buf[6] = 0x71;
  175. can_send_msg_normalstd(radar_can_buf, 7, 0xFA);
  176. }
  177. if(DM_ter_info.Link.connect_status == COMP_NORMAL && DM_ter_info.get_radar_ver_flag == false)
  178. {
  179. radar_can_buf[0] = 1;
  180. radar_can_buf[7] = 7;
  181. can_send_msg_normal(radar_can_buf, 8, 0x981300);
  182. }
  183. else if(DM_f_info.Link.connect_status == COMP_NORMAL && DM_f_info.get_radar_ver_flag == false)
  184. {
  185. radar_can_buf[0] = 1;
  186. radar_can_buf[7] = 7;
  187. can_send_msg_normal(radar_can_buf, 8, 0XA81300);
  188. }
  189. // else if(DM_B_info.Link.connect_status == COMP_NORMAL && DM_B_info.get_radar_ver_flag == false)
  190. // {
  191. // radar_can_buf[0] = 1;
  192. // radar_can_buf[7] = 7;
  193. // can_send_msg_normal(radar_can_buf, 8, 0XB81300);
  194. // }
  195. //恩曌一批雷达盲区20cm有问题,盲区需要改成40CM
  196. if(mimo_ter_info.Link.connect_status == COMP_NORMAL
  197. && memcmp(mimo_ter_info.version,"EB00190110",10) == 0 && mimo_area_40flag > 0)
  198. {
  199. radar_can_buf[0] = 0x4D;
  200. radar_can_buf[1] = 0x69;
  201. radar_can_buf[2] = 0x6E;
  202. radar_can_buf[3] = 0x44;
  203. radar_can_buf[4] = 0x69;
  204. radar_can_buf[5] = 0x73;
  205. radar_can_buf[6] = 0x28;
  206. radar_can_buf[7] = 0x34;
  207. can_send_msg_normalstd(radar_can_buf, 8, 0x500);
  208. radar_can_buf[0] = 0x30;
  209. radar_can_buf[1] = 0x29;
  210. radar_can_buf[2] = 0x0D;
  211. radar_can_buf[3] = 0x0A;;
  212. can_send_msg_normalstd(radar_can_buf, 4, 0x500);
  213. mimo_area_40flag--;
  214. }
  215. }
  216. /**
  217. * @file get_flowmeter_version_and_sn
  218. * @brief 获取流量计版本、SN号、K值
  219. * @param none
  220. * @details
  221. * @author Zhang Sir
  222. **/
  223. void get_flowmeter_version_and_sn(void)
  224. {
  225. if((Dev.Flow_Link1.connect_status == COMP_NORMAL || Dev.Flow_Link2.connect_status == COMP_NORMAL) &&
  226. (Dev.Flow.facid == FAC_MIMO_SIG || Dev.Flow.facid == FAC_MIMO_DOU))
  227. {
  228. uint8_t can_buf[8] = {0};
  229. //读取K值 和序列号
  230. if(flow_mimo1.get_k_count < 10 && Dev.Flow_Link1.connect_status == COMP_NORMAL )
  231. {
  232. //K值
  233. can_buf[0] = 0xfa;
  234. can_buf[1] = 0x10;
  235. can_buf[2] = 0x00;
  236. can_buf[3] = 0xB1;
  237. can_buf[4] = 0xD1;
  238. can_buf[5] = 0x00;
  239. can_buf[6] = 0x00;
  240. for(uint8_t i = 1; i < 7; i++)
  241. {
  242. can_buf[7] += can_buf[i];
  243. }
  244. can_send_msg_normalstd(can_buf, 8, 0xFA);
  245. can_buf[7] = 0;
  246. HAL_Delay(50);
  247. //序列号
  248. can_buf[0] = 0xfa;
  249. can_buf[1] = 0x10;
  250. can_buf[2] = 0x00;
  251. can_buf[3] = 0xB2;
  252. can_buf[4] = 0xEB;
  253. can_buf[5] = 0x00;
  254. can_buf[6] = 0x00;
  255. for(uint8_t i = 1; i < 7; i++)
  256. {
  257. can_buf[7] += can_buf[i];
  258. }
  259. can_send_msg_normalstd(can_buf, 8, 0xFA);
  260. can_buf[7] = 0;
  261. HAL_Delay(50);
  262. //软件版本
  263. can_buf[0] = 0xfa;
  264. can_buf[1] = 0x10;
  265. can_buf[2] = 0x00;
  266. can_buf[3] = 0xB2;
  267. can_buf[4] = 0xEC;
  268. can_buf[5] = 0x00;
  269. can_buf[6] = 0x00;
  270. for(uint8_t i = 1; i < 7; i++)
  271. {
  272. can_buf[7] += can_buf[i];
  273. }
  274. can_send_msg_normalstd(can_buf, 8, 0xFA);
  275. can_buf[7] = 0;
  276. flow_mimo1.get_k_count++;
  277. }
  278. else if(flow_mimo2.get_k_count < 10 && Dev.Flow_Link2.connect_status == COMP_NORMAL)
  279. {
  280. can_buf[0] = 0xfa;
  281. can_buf[1] = 0x10;
  282. can_buf[2] = 0x01;
  283. can_buf[3] = 0xB1;
  284. can_buf[4] = 0xD1;
  285. can_buf[5] = 0x00;
  286. can_buf[6] = 0x00;
  287. for(uint8_t i = 1; i < 7; i++)
  288. {
  289. can_buf[7] += can_buf[i];
  290. }
  291. can_send_msg_normalstd(can_buf, 8, 0xFA);
  292. can_buf[7] = 0;
  293. //序列号
  294. can_buf[0] = 0xfa;
  295. can_buf[1] = 0x10;
  296. can_buf[2] = 0x00;
  297. can_buf[3] = 0xB2;
  298. can_buf[4] = 0xEB;
  299. can_buf[5] = 0x00;
  300. can_buf[6] = 0x00;
  301. for(uint8_t i = 1; i < 7; i++)
  302. {
  303. can_buf[7] += can_buf[i];
  304. }
  305. can_send_msg_normalstd(can_buf, 8, 0xFA);
  306. can_buf[7] = 0;
  307. //软件版本
  308. can_buf[0] = 0xfa;
  309. can_buf[1] = 0x10;
  310. can_buf[2] = 0x00;
  311. can_buf[3] = 0xB2;
  312. can_buf[4] = 0xEC;
  313. can_buf[5] = 0x00;
  314. can_buf[6] = 0x00;
  315. for(uint8_t i = 1; i < 7; i++)
  316. {
  317. can_buf[7] += can_buf[i];
  318. }
  319. can_send_msg_normalstd(can_buf, 8, 0xFA);
  320. can_buf[7] = 0;
  321. flow_mimo2.get_k_count++;
  322. }
  323. //设置流量计K
  324. if(flow_mimo1.send_k_count > 0 && Dev.Flow_Link1.connect_status == COMP_NORMAL )
  325. {
  326. can_buf[0] = 0xfa;
  327. can_buf[1] = 0x10;
  328. can_buf[2] = 0x00;
  329. can_buf[3] = 0xB1;
  330. can_buf[4] = 0xC1;
  331. can_buf[5] = flow_mimo1.flow_calk >> 8;
  332. can_buf[6] = flow_mimo1.flow_calk;
  333. can_buf[7] = 0;
  334. for(uint8_t i = 1; i < 7; i++)
  335. {
  336. can_buf[7] += can_buf[i];
  337. }
  338. flow_mimo1.send_k_count--;
  339. can_send_msg_normalstd(can_buf, 8, 0xFA);
  340. HAL_Delay(50);
  341. }
  342. if(flow_mimo2.send_k_count > 0 && Dev.Flow_Link2.connect_status == COMP_NORMAL)
  343. {
  344. can_buf[0] = 0xfa;
  345. can_buf[1] = 0x10;
  346. can_buf[2] = 0x01;
  347. can_buf[3] = 0xB1;
  348. can_buf[4] = 0xC1;
  349. can_buf[5] = flow_mimo2.flow_calk >> 8;
  350. can_buf[6] = flow_mimo2.flow_calk;
  351. can_buf[7] = 0;
  352. for(uint8_t i = 1; i < 7; i++)
  353. {
  354. can_buf[7] += can_buf[i];
  355. }
  356. flow_mimo2.send_k_count--;
  357. can_send_msg_normalstd(can_buf, 8, 0xFA);
  358. }
  359. if(flow_inf.ch1.clear_background == true)
  360. {
  361. can_buf[0] = 0xfa;
  362. can_buf[1] = 0x10;
  363. can_buf[2] = 0x00;
  364. can_buf[3] = 0xB2;
  365. can_buf[4] = 0xE2;
  366. can_buf[5] = 0;
  367. can_buf[6] = 0;
  368. can_buf[7] = 0;
  369. for(uint8_t i = 1; i < 7; i++)
  370. {
  371. can_buf[7] += can_buf[i];
  372. }
  373. can_send_msg_normalstd(can_buf, 8, 0xFA);
  374. }
  375. else if(flow_inf.ch2.clear_background == true)
  376. {
  377. can_buf[0] = 0xfa;
  378. can_buf[1] = 0x10;
  379. can_buf[2] = 0x01;
  380. can_buf[3] = 0xB2;
  381. can_buf[4] = 0xE2;
  382. can_buf[5] = 0;
  383. can_buf[6] = 0;
  384. can_buf[7] = 0;
  385. for(uint8_t i = 1; i < 7; i++)
  386. {
  387. can_buf[7] += can_buf[i];
  388. }
  389. can_send_msg_normalstd(can_buf, 8, 0xFA);
  390. }
  391. }
  392. }
  393. /**
  394. * @file get_seed_version_and_sn
  395. * @brief 获取播撒器版本和SN号
  396. * @param none
  397. * @details
  398. * @author Zhang Sir
  399. **/
  400. void get_seed_version_and_sn(void)
  401. {
  402. }
  403. /**
  404. * @file get_device_version_and_sn
  405. * @brief 版本号
  406. * @param none
  407. * @details
  408. * @author Zhang Sir
  409. **/
  410. void get_device_version_and_sn(void)
  411. {
  412. static uint32_t circu_time = 0;
  413. if(Check_Timer_Ready(&circu_time,_1_HZ_))
  414. {
  415. //获取雷达版本和SN号
  416. get_radar_version_and_sn();
  417. //获取流量计版本和SN号
  418. get_flowmeter_version_and_sn();
  419. //获取播撒器版本和SN号
  420. get_seed_version_and_sn();
  421. }
  422. }
  423. /**
  424. * @file regist_dev_info
  425. * @brief 注册设备信息
  426. * @param none
  427. * @details
  428. * @author Zhang Sir
  429. **/
  430. void regist_dev_info(dev_version_content *dev,uint8_t num,bool verify_flag,char *sn,uint8_t size1,
  431. char *soft_serial,uint8_t size2,char *hard_serial,uint8_t size3,char *manu,uint8_t size4)
  432. {
  433. dev->num = num;
  434. dev->verify = verify_flag;
  435. if(dev->regist.dev == false)
  436. {
  437. dev->regist.dev = true;
  438. dev->send_times++;
  439. }
  440. if(sn != NULL && size1 <= 32 && dev->regist.sn == false)
  441. {
  442. memcpy(dev->sn,sn,size1);
  443. dev->regist.sn = true;
  444. dev->send_times++;
  445. }
  446. if(soft_serial != NULL && size2 <= 16 && dev->regist.soft == false)
  447. {
  448. memcpy(dev->soft_serial,soft_serial,size2);
  449. dev->regist.soft = true;
  450. dev->send_times++;
  451. }
  452. if(hard_serial != NULL && size3 <= 16 && dev->regist.hard == false)
  453. {
  454. memcpy(dev->hard_serial,hard_serial,size3);
  455. dev->regist.hard = true;
  456. dev->send_times++;
  457. }
  458. if(manu != NULL && size4 <= 16 && dev->regist.manu == false)
  459. {
  460. memcpy(dev->manu,manu,size4);
  461. dev->regist.manu = true;
  462. dev->send_times++;
  463. }
  464. };