key.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789
  1. #include "key.h"
  2. #include "usart.h"
  3. #include "interface.h"
  4. extern Menu_table menu;
  5. extern TipsFlag tipsflag;
  6. bool sent1_key = false;
  7. bool sent2_key = false;
  8. bool sent3_key = false;
  9. bool sent4_key = false;
  10. struct keys key[1]={0};
  11. char timeout[] = "+CONNECT TIMEOUT";
  12. uint16_t S1 = 0;
  13. uint16_t S2 = 0;
  14. uint16_t S3 = 0;
  15. uint16_t S4 = 0;
  16. uint32_t enterInterface_time = 0;
  17. void ClearBtSnItem(void);
  18. uint8_t KEY_1_Scan(void)
  19. {
  20. static uint8_t key_state = 0;
  21. static uint8_t last_key_state = 0;
  22. static uint32_t debounce_time = 0;
  23. key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_3);
  24. if (key_state != last_key_state) // 检测按键状态变化
  25. {
  26. last_key_state = key_state;
  27. debounce_time = HAL_GetTick(); // 记录当前时间
  28. }
  29. else
  30. {
  31. if (HAL_GetTick() - debounce_time > 30) // 去抖时间
  32. {
  33. if (key_state == GPIO_PIN_RESET) // 按键按下
  34. {
  35. if(!sent1_key)
  36. {
  37. enterInterface_time = HAL_GetTick();
  38. switch(menu.current)
  39. {
  40. case 0:
  41. {
  42. SET_MENU_STATUS(0,0,0,0);
  43. break;
  44. }
  45. case 1:
  46. {
  47. SET_MENU_STATUS(1,1,0,1);
  48. break;
  49. }
  50. case 2:
  51. {
  52. if(menu.up!=4)
  53. {
  54. menu.up+=1;
  55. menu.next-=1;
  56. }
  57. else if(menu.up==4)
  58. {
  59. menu.up=0;
  60. menu.next=4;
  61. }
  62. refresh=true;
  63. break;
  64. }
  65. case 3:
  66. {
  67. if(menu.up!=3)
  68. {
  69. menu.up+=1;
  70. menu.next-=1;
  71. }
  72. else if(menu.up==3)
  73. {
  74. menu.up=0;
  75. menu.next=3;
  76. }
  77. refresh=true;
  78. break;
  79. }
  80. case 4:
  81. case 5:
  82. case 6:
  83. case 7:
  84. case 0xA0:
  85. {
  86. if(menu.up!=1)
  87. {
  88. menu.up+=1;
  89. menu.next-=1;
  90. }
  91. else if(menu.up==1)
  92. {
  93. menu.up=0;
  94. menu.next=1;
  95. }
  96. refresh=true;
  97. break;
  98. }
  99. case 0xA1:
  100. {
  101. if(menu.up!=0xE)
  102. {
  103. menu.up+=1;
  104. menu.next-=1;
  105. }
  106. else if(menu.up==0xE)
  107. {
  108. menu.up=0;
  109. menu.next=0xE;
  110. }
  111. refresh=true;
  112. break;
  113. }
  114. case 0xA2:
  115. {
  116. if(menu.up!=0xF)
  117. {
  118. menu.up+=1;
  119. menu.next-=1;
  120. }
  121. else if(menu.up==0xF)
  122. {
  123. menu.up=0;
  124. menu.next=0xF;
  125. }
  126. refresh=true;
  127. break;
  128. }
  129. }
  130. #if debugkeyinfo == 1
  131. PRINT_MENU_STATUS("K1");
  132. #endif
  133. sent1_key = true;
  134. }
  135. return 1;
  136. }
  137. else // 按键释放
  138. {
  139. sent1_key = false;
  140. return 0;
  141. }
  142. }
  143. }
  144. return 0;
  145. }
  146. uint8_t KEY_2_Scan(void)
  147. {
  148. static uint8_t key_state = 0;
  149. static uint8_t last_key_state = 0;
  150. static uint32_t debounce_time = 0;
  151. key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4);
  152. if (key_state != last_key_state) // 检测按键状态变化
  153. {
  154. last_key_state = key_state;
  155. debounce_time = HAL_GetTick(); // 记录当前时间
  156. }
  157. else
  158. {
  159. if (HAL_GetTick() - debounce_time > 30) // 去抖时间
  160. {
  161. if (key_state == GPIO_PIN_RESET) // 按键按下
  162. {
  163. if (!sent2_key)
  164. {
  165. enterInterface_time = HAL_GetTick();
  166. switch (menu.current)
  167. {
  168. case 0:
  169. {
  170. SET_MENU_STATUS(0,0,0,0);
  171. break;
  172. }
  173. case 1:
  174. {
  175. SET_MENU_STATUS(1,0,1,1);
  176. break;
  177. }
  178. case 2:
  179. {
  180. if(menu.next!=4)
  181. {
  182. menu.up-=1;
  183. menu.next+=1;
  184. }
  185. else if(menu.next==4)
  186. {
  187. menu.up=4;
  188. menu.next=0;
  189. }
  190. refresh=true;
  191. break;
  192. }
  193. case 3:
  194. {
  195. if(menu.next!=3)
  196. {
  197. menu.up-=1;
  198. menu.next+=1;
  199. }
  200. else if(menu.next==3)
  201. {
  202. menu.up=3;
  203. menu.next=0;
  204. }
  205. refresh=true;
  206. break;
  207. }
  208. case 4:
  209. case 5:
  210. case 6:
  211. case 7:
  212. case 0xA0:
  213. {
  214. if(menu.next!=1)
  215. {
  216. menu.up-=1;
  217. menu.next+=1;
  218. }
  219. else if(menu.next==1)
  220. {
  221. menu.up=1;
  222. menu.next=0;
  223. }
  224. refresh=true;
  225. break;
  226. }
  227. case 0xA1:
  228. {
  229. if(menu.next!=0xE)
  230. {
  231. menu.up-=1;
  232. menu.next+=1;
  233. }
  234. else if(menu.next==0xE)
  235. {
  236. menu.up=0xE;
  237. menu.next=0;
  238. }
  239. refresh=true;
  240. break;
  241. }
  242. case 0xA2:
  243. {
  244. if(menu.next!=0xF)
  245. {
  246. menu.up-=1;
  247. menu.next+=1;
  248. }
  249. else if(menu.next==0xF)
  250. {
  251. menu.up=0xF;
  252. menu.next=0;
  253. }
  254. refresh=true;
  255. break;
  256. }
  257. }
  258. #if debugkeyinfo == 1
  259. PRINT_MENU_STATUS("K2");
  260. #endif
  261. sent2_key = true;
  262. }
  263. return 1;
  264. }
  265. else // 按键释放
  266. {
  267. sent2_key = false;
  268. return 0;
  269. }
  270. }
  271. }
  272. return 0;
  273. }
  274. // 定义menu_dict存储menu.next对应的信息
  275. MenuInfo menu_dict[] = {
  276. {"AT+CONN=101000000001\r\n", "+CONNECTED:0,101000000001", "+DISCONN:0,101000000001", 0x0001},
  277. {"AT+CONN=101000000002\r\n", "+CONNECTED:0,101000000002", "+DISCONN:0,101000000002", 0x0002},
  278. {"AT+CONN=101000000003\r\n", "+CONNECTED:0,101000000003", "+DISCONN:0,101000000003", 0x0003},
  279. {"AT+CONN=101000000004\r\n", "+CONNECTED:0,101000000004", "+DISCONN:0,101000000004", 0x0004},
  280. {"AT+CONN=101000000005\r\n", "+CONNECTED:0,101000000005", "+DISCONN:0,101000000005", 0x0005},
  281. {"AT+CONN=101000000006\r\n", "+CONNECTED:0,101000000006", "+DISCONN:0,101000000006", 0x0006},
  282. {"AT+CONN=101000000007\r\n", "+CONNECTED:0,101000000007", "+DISCONN:0,101000000007", 0x0007},
  283. {"AT+CONN=101000000008\r\n", "+CONNECTED:0,101000000008", "+DISCONN:0,101000000008", 0x0008},
  284. {"AT+CONN=101000000009\r\n", "+CONNECTED:0,101000000009", "+DISCONN:0,101000000009", 0x0009},
  285. {"AT+CONN=10100000000A\r\n", "+CONNECTED:0,10100000000A", "+DISCONN:0,10100000000A", 0x000A},
  286. {"AT+CONN=10100000000B\r\n", "+CONNECTED:0,10100000000B", "+DISCONN:0,10100000000B", 0x000B},
  287. {"AT+CONN=10100000000C\r\n", "+CONNECTED:0,10100000000C", "+DISCONN:0,10100000000C", 0x000C},
  288. {"AT+CONN=10100000000D\r\n", "+CONNECTED:0,10100000000D", "+DISCONN:0,10100000000D", 0x000D},
  289. {"AT+CONN=10100000000E\r\n", "+CONNECTED:0,10100000000E", "+DISCONN:0,10100000000E", 0x000E},
  290. {"AT+CONN=10100000000F\r\n", "+CONNECTED:0,10100000000F", "+DISCONN:0,10100000000F", 0x000F},
  291. {"AT+CONN=101000000010\r\n", "+CONNECTED:0,101000000010", "+DISCONN:0,101000000010", 0x0010},
  292. {"AT+CONN=101000000011\r\n", "+CONNECTED:0,101000000011", "+DISCONN:0,101000000011", 0x0011},
  293. {"AT+CONN=101000000012\r\n", "+CONNECTED:0,101000000012", "+DISCONN:0,101000000012", 0x0012},
  294. {"AT+CONN=101000000013\r\n", "+CONNECTED:0,101000000013", "+DISCONN:0,101000000013", 0x0013},
  295. {"AT+CONN=101000000014\r\n", "+CONNECTED:0,101000000014", "+DISCONN:0,101000000014", 0x0014},
  296. {"AT+CONN=101000000015\r\n", "+CONNECTED:0,101000000015", "+DISCONN:0,101000000015", 0x0015},
  297. {"AT+CONN=101000000016\r\n", "+CONNECTED:0,101000000016", "+DISCONN:0,101000000016", 0x0016},
  298. {"AT+CONN=101000000017\r\n", "+CONNECTED:0,101000000017", "+DISCONN:0,101000000017", 0x0017},
  299. {"AT+CONN=101000000018\r\n", "+CONNECTED:0,101000000018", "+DISCONN:0,101000000018", 0x0018},
  300. {"AT+CONN=101000000019\r\n", "+CONNECTED:0,101000000019", "+DISCONN:0,101000000019", 0x0019},
  301. {"AT+CONN=10100000001A\r\n", "+CONNECTED:0,10100000001A", "+DISCONN:0,10100000001A", 0x001A},
  302. {"AT+CONN=10100000001B\r\n", "+CONNECTED:0,10100000001B", "+DISCONN:0,10100000001B", 0x001B},
  303. {"AT+CONN=10100000001C\r\n", "+CONNECTED:0,10100000001C", "+DISCONN:0,10100000001C", 0x001C},
  304. {"AT+CONN=10100000001D\r\n", "+CONNECTED:0,10100000001D", "+DISCONN:0,10100000001D", 0x001D},
  305. {"AT+CONN=10100000001E\r\n", "+CONNECTED:0,10100000001E", "+DISCONN:0,10100000001E", 0x001E},
  306. {"AT+CONN=10100000001F\r\n", "+CONNECTED:0,10100000001F", "+DISCONN:0,10100000001F", 0x001F},
  307. // 其他项依次类推
  308. };
  309. uint8_t KEY_3_Scan(void)
  310. {
  311. static uint8_t key_state = 0;
  312. static uint8_t last_key_state = 0;
  313. static uint32_t debounce_time = 0;
  314. key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5);
  315. if (key_state != last_key_state) // 检测按键状态变化
  316. {
  317. last_key_state = key_state;
  318. debounce_time = HAL_GetTick(); // 记录当前时间
  319. }
  320. else
  321. {
  322. if (HAL_GetTick() - debounce_time > 30) // 去抖时间
  323. {
  324. if (key_state == GPIO_PIN_RESET) // 按键按下
  325. {
  326. if (!sent3_key) {
  327. enterInterface_time = HAL_GetTick();
  328. switch (menu.current) {
  329. case 0://跳转到菜单界面
  330. {
  331. SET_MENU_STATUS(1,1,0,1);
  332. break;
  333. }
  334. case 1://跳转到L绑定界面
  335. {
  336. if(menu.up==1)
  337. {
  338. scanMac();
  339. SET_MENU_STATUS(2,4,0,2);
  340. }
  341. else
  342. {
  343. scanMac();
  344. SET_MENU_STATUS(3,3,0,2);
  345. }
  346. break;
  347. }
  348. case 2:
  349. {
  350. if(menu.up==0)
  351. {
  352. //清空SN
  353. ClearBtSnItem();
  354. SET_MENU_STATUS(1,1,0,1);
  355. break;
  356. }
  357. else
  358. {
  359. menu.PreNext=menu.next;//L1 - L4
  360. SET_MENU_STATUS(0xA0,1,0,3);
  361. break;
  362. }
  363. }
  364. case 3://施解封操作
  365. {
  366. if(menu.up==3)//L1操作
  367. {
  368. sendCmd_BT(menu.SN1,menu.SN1F,3,3);
  369. HAL_Delay(100);
  370. SET_MENU_STATUS(4,1,0,3);
  371. break;
  372. }
  373. if(menu.up==2)//2操作
  374. {
  375. sendCmd_BT(menu.SN2,menu.SN2F,3,3);
  376. HAL_Delay(100);
  377. SET_MENU_STATUS(5,1,0,3);
  378. break;
  379. }
  380. if(menu.up==1)//3操作
  381. {
  382. sendCmd_BT(menu.SN3,menu.SN3F,3,3);
  383. HAL_Delay(100);
  384. SET_MENU_STATUS(6,1,0,3);
  385. break;
  386. }
  387. if(menu.up==0)//4操作
  388. {
  389. sendCmd_BT(menu.SN4,menu.SN4F,3,3);
  390. HAL_Delay(100);
  391. SET_MENU_STATUS(7,1,0,3);
  392. break;
  393. }
  394. }
  395. case 4:
  396. case 5:
  397. case 6:
  398. case 7:
  399. {
  400. menu.enter=4;
  401. break;
  402. }
  403. case 0xA0:
  404. {
  405. if(menu.up==1)
  406. {
  407. SET_MENU_STATUS(0xA1,0xE,0,3);
  408. }
  409. else if(menu.up==0)
  410. {
  411. SET_MENU_STATUS(0xA2,0xF,0,3);
  412. }
  413. break;
  414. }
  415. case 0xA1:
  416. case 0xA2:
  417. {
  418. if(menu.PreNext==0)//L1 写
  419. {
  420. if(menu.current!=0xA2)
  421. {
  422. for (int i = 0; i < sizeof(menu_dict) / sizeof(menu_dict[0]); i++) {
  423. if (menu.next == i) {
  424. menu.SN1 = menu_dict[i].command;
  425. menu.SN1F = menu_dict[i].connected_msg;
  426. menu.SN1D = menu_dict[i].disconnected_msg;
  427. Write_Information(Sn1Addr, menu_dict[i].value);
  428. L1bd=true;
  429. }
  430. }
  431. }
  432. else
  433. {
  434. for (int i = 0; i < sizeof(menu_dict) / sizeof(menu_dict[0]); i++) {
  435. if ((menu.next+0xf) == i) {
  436. menu.SN1 = menu_dict[i].command;
  437. menu.SN1F = menu_dict[i].connected_msg;
  438. menu.SN1D = menu_dict[i].disconnected_msg;
  439. Write_Information(Sn1Addr, menu_dict[i].value);
  440. L1bd=true;
  441. }
  442. }
  443. }
  444. }
  445. if(menu.PreNext==1)//L2 写
  446. {
  447. if(menu.current!=0xA2)
  448. {
  449. for (int i = 0; i < sizeof(menu_dict) / sizeof(menu_dict[0]); i++) {
  450. if (menu.next == i) {
  451. menu.SN2 = menu_dict[i].command;
  452. menu.SN2F = menu_dict[i].connected_msg;
  453. menu.SN2D = menu_dict[i].disconnected_msg;
  454. Write_Information(Sn2Addr, menu_dict[i].value);
  455. L2bd=true;
  456. }
  457. }
  458. }
  459. else
  460. {
  461. for (int i = 0; i < sizeof(menu_dict) / sizeof(menu_dict[0]); i++) {
  462. if ((menu.next+0xf) == i) {
  463. menu.SN2 = menu_dict[i].command;
  464. menu.SN2F = menu_dict[i].connected_msg;
  465. menu.SN2D = menu_dict[i].disconnected_msg;
  466. Write_Information(Sn2Addr, menu_dict[i].value);
  467. L2bd=true;
  468. }
  469. }
  470. }
  471. }
  472. if(menu.PreNext==2)//L3 写
  473. {
  474. if(menu.current!=0xA2)
  475. {
  476. for (int i = 0; i < sizeof(menu_dict) / sizeof(menu_dict[0]); i++) {
  477. if (menu.next == i) {
  478. menu.SN3 = menu_dict[i].command;
  479. menu.SN3F = menu_dict[i].connected_msg;
  480. menu.SN3D = menu_dict[i].disconnected_msg;
  481. Write_Information(Sn3Addr, menu_dict[i].value);
  482. L3bd=true;
  483. }
  484. }
  485. }
  486. else
  487. {
  488. for (int i = 0; i < sizeof(menu_dict) / sizeof(menu_dict[0]); i++) {
  489. if ((menu.next+0xf) == i) {
  490. menu.SN3 = menu_dict[i].command;
  491. menu.SN3F = menu_dict[i].connected_msg;
  492. menu.SN3D = menu_dict[i].disconnected_msg;
  493. Write_Information(Sn3Addr, menu_dict[i].value);
  494. L3bd=true;
  495. }
  496. }
  497. }
  498. }
  499. if(menu.PreNext==3)//L4 写
  500. {
  501. if(menu.current!=0xA2)
  502. {
  503. for (int i = 0; i < sizeof(menu_dict) / sizeof(menu_dict[0]); i++) {
  504. if (menu.next == i) {
  505. menu.SN4 = menu_dict[i].command;
  506. menu.SN4F = menu_dict[i].connected_msg;
  507. menu.SN4D = menu_dict[i].disconnected_msg;
  508. Write_Information(Sn4Addr, menu_dict[i].value);
  509. L4bd=true;
  510. }
  511. }
  512. }
  513. else
  514. {
  515. for (int i = 0; i < sizeof(menu_dict) / sizeof(menu_dict[0]); i++) {
  516. if ((menu.next+0xf) == i) {
  517. menu.SN4 = menu_dict[i].command;
  518. menu.SN4F = menu_dict[i].connected_msg;
  519. menu.SN4D = menu_dict[i].disconnected_msg;
  520. Write_Information(Sn4Addr, menu_dict[i].value);
  521. L4bd=true;
  522. }
  523. }
  524. }
  525. }
  526. SET_MENU_STATUS(2,4,0,2);
  527. break;
  528. }
  529. }
  530. #if debugkeyinfo == 1
  531. PRINT_MENU_STATUS("K3");
  532. #endif
  533. sent3_key = true;
  534. }
  535. return 1;
  536. }
  537. else // 按键释放
  538. {
  539. sent3_key = false;
  540. return 0;
  541. }
  542. }
  543. }
  544. return 0;
  545. }
  546. uint8_t KEY_4_Scan(void)
  547. {
  548. static uint8_t key_state = 0;
  549. static uint8_t last_key_state = 0;
  550. static uint32_t debounce_time = 0;
  551. key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_6);
  552. if (key_state != last_key_state) // 检测按键状态变化
  553. {
  554. last_key_state = key_state;
  555. debounce_time = HAL_GetTick(); // 记录当前时间
  556. }
  557. else
  558. {
  559. if (HAL_GetTick() - debounce_time > 30) // 去抖时间
  560. {
  561. if (key_state == GPIO_PIN_RESET) // 按键按下
  562. {
  563. enterInterface_time = HAL_GetTick();
  564. if (!sent4_key) {//返回
  565. switch (menu.current) {
  566. case 0:
  567. case 1:
  568. {
  569. scanMac();
  570. SET_MENU_STATUS(0,0,0,0);
  571. break;
  572. }
  573. case 2:
  574. case 3:
  575. {
  576. scanMac();
  577. SET_MENU_STATUS(1,1,0,1);
  578. break;
  579. }
  580. case 4:
  581. case 5:
  582. case 6:
  583. case 7:
  584. {
  585. sendCmd_BT("AT+DISCONN=0\r\n","ERROR",1,1);//断开连接
  586. HAL_Delay(30);
  587. S1 = read_flash_16(Sn1StatusAddr);
  588. S2 = read_flash_16(Sn2StatusAddr);
  589. S3 = read_flash_16(Sn3StatusAddr);
  590. S4 = read_flash_16(Sn4StatusAddr);
  591. scanMac();
  592. SET_MENU_STATUS(3,3,0,2);
  593. break;
  594. }
  595. case 0xA0:
  596. {
  597. SET_MENU_STATUS(2,4,0,2);
  598. break;
  599. }
  600. case 0xA1:
  601. case 0xA2:
  602. {
  603. S1 = read_flash_16(Sn1StatusAddr);
  604. S2 = read_flash_16(Sn2StatusAddr);
  605. S3 = read_flash_16(Sn3StatusAddr);
  606. S4 = read_flash_16(Sn4StatusAddr);
  607. HAL_Delay(30);
  608. scanMac();
  609. SET_MENU_STATUS(0xA0,1,0,3);
  610. break;
  611. }
  612. }
  613. #if debugkeyinfo == 1
  614. PRINT_MENU_STATUS("K4");
  615. #endif
  616. sent4_key = true;
  617. }
  618. return 1;
  619. }
  620. else // 按键释放
  621. {
  622. sent4_key = false;
  623. return 0;
  624. }
  625. }
  626. }
  627. return 0;
  628. }
  629. void updatekeystate(void)
  630. {
  631. KEY_1_Scan();
  632. KEY_2_Scan();
  633. KEY_3_Scan();
  634. KEY_4_Scan();
  635. }
  636. // 定义存储信息的结构体数组
  637. struct BtMenuItem btMenuItems[] = {
  638. {0x0001, "0001", "AT+CONN=101000000001\r\n", "+CONNECTED:0,101000000001"},
  639. {0x0002, "0002", "AT+CONN=101000000002\r\n", "+CONNECTED:0,101000000002"},
  640. {0x0003, "0003", "AT+CONN=101000000003\r\n", "+CONNECTED:0,101000000003"},
  641. {0x0004, "0004", "AT+CONN=101000000004\r\n", "+CONNECTED:0,101000000004"},
  642. {0x0005, "0005", "AT+CONN=101000000005\r\n", "+CONNECTED:0,101000000005"},
  643. {0x0006, "0006", "AT+CONN=101000000006\r\n", "+CONNECTED:0,101000000006"},
  644. {0x0007, "0007", "AT+CONN=101000000007\r\n", "+CONNECTED:0,101000000007"},
  645. {0x0008, "0008", "AT+CONN=101000000008\r\n", "+CONNECTED:0,101000000008"},
  646. {0x0009, "0009", "AT+CONN=101000000009\r\n", "+CONNECTED:0,101000000009"},
  647. {0x000A, "000A", "AT+CONN=10100000000A\r\n", "+CONNECTED:0,10100000000A"},
  648. {0x000B, "000B", "AT+CONN=10100000000B\r\n", "+CONNECTED:0,10100000000B"},
  649. {0x000C, "000C", "AT+CONN=10100000000C\r\n", "+CONNECTED:0,10100000000C"},
  650. {0x000D, "000D", "AT+CONN=10100000000D\r\n", "+CONNECTED:0,10100000000D"},
  651. {0x000E, "000E", "AT+CONN=10100000000E\r\n", "+CONNECTED:0,10100000000E"},
  652. {0x000F, "000F", "AT+CONN=10100000000F\r\n", "+CONNECTED:0,10100000000F"},
  653. {0x0010, "0010", "AT+CONN=101000000010\r\n", "+CONNECTED:0,101000000010"},
  654. {0x0011, "0011", "AT+CONN=101000000011\r\n", "+CONNECTED:0,101000000011"},
  655. {0x0012, "0012", "AT+CONN=101000000012\r\n", "+CONNECTED:0,101000000012"},
  656. {0x0013, "0013", "AT+CONN=101000000013\r\n", "+CONNECTED:0,101000000013"},
  657. {0x0014, "0014", "AT+CONN=101000000014\r\n", "+CONNECTED:0,101000000014"},
  658. {0x0015, "0015", "AT+CONN=101000000015\r\n", "+CONNECTED:0,101000000015"},
  659. {0x0016, "0016", "AT+CONN=101000000016\r\n", "+CONNECTED:0,101000000016"},
  660. {0x0017, "0017", "AT+CONN=101000000017\r\n", "+CONNECTED:0,101000000017"},
  661. {0x0018, "0018", "AT+CONN=101000000018\r\n", "+CONNECTED:0,101000000018"},
  662. {0x0019, "0019", "AT+CONN=101000000019\r\n", "+CONNECTED:0,101000000019"},
  663. {0x001A, "001A", "AT+CONN=10100000001A\r\n", "+CONNECTED:0,10100000001A"},
  664. {0x001B, "001B", "AT+CONN=10100000001B\r\n", "+CONNECTED:0,10100000001B"},
  665. {0x001C, "001C", "AT+CONN=10100000001C\r\n", "+CONNECTED:0,10100000001C"},
  666. {0x001D, "001D", "AT+CONN=10100000001D\r\n", "+CONNECTED:0,10100000001D"},
  667. {0x001E, "001E", "AT+CONN=10100000001E\r\n", "+CONNECTED:0,10100000001E"},
  668. {0x001F, "001F", "AT+CONN=10100000001F\r\n", "+CONNECTED:0,10100000001F"},
  669. };
  670. void scanMac(void)
  671. {
  672. uint16_t SN1 = read_flash_16(Sn1Addr);
  673. uint16_t SN2 = read_flash_16(Sn2Addr);
  674. uint16_t SN3 = read_flash_16(Sn3Addr);
  675. uint16_t SN4 = read_flash_16(Sn4Addr);
  676. // 匹配并设置属性
  677. for (int i = 0; i < sizeof(btMenuItems)/sizeof(btMenuItems[0]); i++) {
  678. if (SN1 == (uint16_t)i + 1) {
  679. menu.SN1name = btMenuItems[i].name;
  680. menu.SN1 = btMenuItems[i].command;
  681. menu.SN1F = btMenuItems[i].feedback;
  682. L1bd = true;
  683. break;
  684. }
  685. }
  686. for (int i = 0; i < sizeof(btMenuItems)/sizeof(btMenuItems[0]); i++) {
  687. if (SN2 == (uint16_t)i + 1) {
  688. menu.SN2name = btMenuItems[i].name;
  689. menu.SN2 = btMenuItems[i].command;
  690. menu.SN2F = btMenuItems[i].feedback;
  691. L2bd = true;
  692. break;
  693. }
  694. }
  695. for (int i = 0; i < sizeof(btMenuItems)/sizeof(btMenuItems[0]); i++) {
  696. if (SN3 == (uint16_t)i + 1) {
  697. menu.SN3name = btMenuItems[i].name;
  698. menu.SN3 = btMenuItems[i].command;
  699. menu.SN3F = btMenuItems[i].feedback;
  700. L3bd = true;
  701. break;
  702. }
  703. }
  704. for (int i = 0; i < sizeof(btMenuItems)/sizeof(btMenuItems[0]); i++) {
  705. if (SN4 == (uint16_t)i + 1) {
  706. menu.SN4name = btMenuItems[i].name;
  707. menu.SN4 = btMenuItems[i].command;
  708. menu.SN4F = btMenuItems[i].feedback;
  709. L4bd = true;
  710. break;
  711. }
  712. }
  713. }
  714. void ClearBtSnItem(void)
  715. {
  716. menu.SN1name=NULL;
  717. menu.SN1=NULL;
  718. menu.SN1F=NULL;
  719. menu.SN2name=NULL;
  720. menu.SN2=NULL;
  721. menu.SN2F=NULL;
  722. menu.SN3name=NULL;
  723. menu.SN3=NULL;
  724. menu.SN3F=NULL;
  725. menu.SN4name=NULL;
  726. menu.SN4=NULL;
  727. menu.SN4F=NULL;
  728. menu.SN1D=NULL;
  729. menu.SN2D=NULL;
  730. menu.SN3D=NULL;
  731. menu.SN4D=NULL;
  732. erase_flash(Sn1StatusAddr);
  733. erase_flash(Sn2StatusAddr);
  734. erase_flash(Sn3StatusAddr);
  735. erase_flash(Sn4StatusAddr);
  736. erase_flash(Sn1Addr);
  737. erase_flash(Sn2Addr);
  738. erase_flash(Sn3Addr);
  739. erase_flash(Sn4Addr);
  740. erase_flash(serialNum1Addr);
  741. erase_flash(serialNum2Addr);
  742. erase_flash(serialNum3Addr);
  743. erase_flash(serialNum4Addr);
  744. L1bd=false;
  745. L2bd=false;
  746. L3bd=false;
  747. L4bd=false;
  748. menu.home=0x10000;//其他地址
  749. }