myDisplayUnit.c 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778
  1. #include "myDisplayUnit.h"
  2. #include "myLcd.h"
  3. int8_t uiPageIdAddress = ~(0);
  4. int8_t uiPageCount = 1;
  5. int8_t rx_tx_count;
  6. int8_t rx_tp_count;
  7. int8_t setting_count;
  8. int8_t tx_tp_count;
  9. uiPageUnit_ts uiPageParams[UI_PAGE_ID_MAX];
  10. enterCallback enterCb;
  11. uint32_t buffer_rfBr;
  12. uint32_t rfBr;
  13. uint32_t buffer_channelStep;
  14. uint32_t buffer_freq;
  15. int8_t buffer_rfPower;
  16. char *buffer_type;
  17. void myDisplay_ui_firstUi_setDeviceName(char *name)
  18. {
  19. myLCD_str8x16(IM_NOMALE, 80, 1, name);
  20. }
  21. void myDisplay_ui_firstUi_setFreq(uint32_t freq)
  22. {
  23. myLCD_str8x16(IM_NOMALE, 80, 2, "Freq.%6.2fMHz", (float)freq/1000000);
  24. }
  25. void myDisplay_ui_firstUi_setRfPower(int power)
  26. {
  27. myLCD_str8x16(IM_NOMALE, 95, 3, "Pwr.%ddBm", power);
  28. }
  29. void myDisplay_ui_firstUi_setRfBr(uint32_t br)
  30. {
  31. myLCD_str8x16(IM_NOMALE, 95, 4, "Br.%.3fkb", (float)br/1000);
  32. }
  33. void myDisplay_ui_firstUi(int agr0, void *agr1_ptr)
  34. {
  35. if (uiPageIdAddress != UI_PAGE_ID_FIRST_UI)
  36. {
  37. myLCD_16x16(IM_INVERSE, 10, 11, "深圳市沃进科技有限公司");
  38. myLCD_displayImage(IM_NOMALE, 1, 1, IMG_SRC_VOLLGO);
  39. myLCD_str8x16(IM_NOMALE, 80, 1, "VG------------");
  40. myLCD_str8x16(IM_NOMALE, 95, 2, "Freq.***");
  41. myLCD_str8x16(IM_NOMALE, 95, 3, "Pwr.**");
  42. }
  43. else
  44. {
  45. myLCD_str8x16(agr0 == 0 ? IM_INVERSE : IM_NOMALE,
  46. HORIZONTAL_RIGHT, 5, "ENTER");
  47. }
  48. uiPageIdAddress = UI_PAGE_ID_FIRST_UI;
  49. }
  50. void myDisplay_ui_selectMode(int agr0, void *agr1_ptr)
  51. {
  52. int i;
  53. myLCD_clearFull();
  54. for ( i = 0; i <= MAX_PAGE_COUNT; i++)
  55. {
  56. myLCD_displayBlock(1, i);
  57. }
  58. uiPageIdAddress = UI_PAGE_ID_ITEM_MODE;
  59. myLCD_str8x16(agr0 == 0 ? IM_INVERSE : IM_NOMALE,
  60. 10, 1, "Enter RF Transmiter");
  61. myLCD_str8x16(agr0 == 1 ? IM_INVERSE : IM_NOMALE,
  62. 10, 2, "Enter RF Receiver");
  63. myLCD_str8x16(agr0 == 2 ? IM_INVERSE : IM_NOMALE,
  64. 10, 3, "Enter RF Continuous");
  65. myLCD_str8x16(agr0 == 3 ? IM_INVERSE : IM_NOMALE,
  66. 10, 4, "Enter RF Setting");
  67. myLCD_str8x16(agr0 == 4 ? IM_INVERSE : IM_NOMALE,
  68. 10, 5, "Enter Device Infor");
  69. }
  70. void myDisplay_ui_rf_tx(uint8_t mode)
  71. {
  72. int i;
  73. myLCD_clearFull();
  74. for ( i = 0; i <= MAX_PAGE_COUNT; i++)
  75. {
  76. myLCD_displayBlock(1, i);
  77. }
  78. myLCD_str8x16(mode == 0 ? IM_INVERSE : IM_NOMALE,
  79. 10, 1, "Packet TX");
  80. myLCD_str8x16(mode == 1 ? IM_INVERSE : IM_NOMALE,
  81. 10, 2, "Continuous TX");
  82. }
  83. void myDisplay_ui_rf_tx_packet(int agr0, void *agr1_ptr)
  84. {
  85. int i;
  86. if (uiPageIdAddress != UI_PAGE_ID_TX_PACKET)
  87. {
  88. myLCD_clearFull();
  89. for ( i = 0; i <= MAX_PAGE_COUNT; i++)
  90. {
  91. myLCD_displayBlock(1, i);
  92. }
  93. myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Packet TX");
  94. myLCD_str8x16(IM_NOMALE, 5, 2, "Packet:");
  95. }
  96. uiPageIdAddress = UI_PAGE_ID_TX_PACKET;
  97. if (uiPageIdAddress == UI_PAGE_ID_TX_PACKET)
  98. {
  99. myLCD_str8x16(agr0 == 0 ? IM_INVERSE : IM_NOMALE,
  100. HORIZONTAL_RIGHT, 6, "START");
  101. }
  102. }
  103. void myDisplay_ui_rf_tx_packet_buffer(uint8_t *buffer)
  104. {
  105. if (uiPageIdAddress == UI_PAGE_ID_TX_PACKET)
  106. {
  107. myLCD_str8x16(IM_NOMALE, 10, 3, (char *)buffer);
  108. }
  109. }
  110. void myDisplay_ui_rf_tx_packet_counts(uint32_t rate, uint32_t count)
  111. {
  112. if (uiPageIdAddress == UI_PAGE_ID_TX_PACKET)
  113. {
  114. myLCD_str8x16(IM_NOMALE, HORIZONTAL_RIGHT, 2, "%5.1f%% %5d",(float)rate/10, count);
  115. }
  116. }
  117. void myDisplay_ui_rf_tx_packet_consumeTime(uint32_t time)
  118. {
  119. if (uiPageIdAddress == UI_PAGE_ID_TX_PACKET)
  120. {
  121. if (time == ~(uint32_t)0)
  122. {
  123. myLCD_str8x16(IM_NOMALE, HORIZONTAL_RIGHT, 1, " OUT");
  124. }
  125. else
  126. {
  127. myLCD_str8x16(IM_NOMALE, HORIZONTAL_RIGHT, 1, "%5dms", time);
  128. }
  129. }
  130. }
  131. void myDisplay_ui_rf_tx_packet_ackRssi(int16_t rssi)
  132. {
  133. if (uiPageIdAddress == UI_PAGE_ID_TX_PACKET)
  134. {
  135. if (rssi > -150 && (rssi < 10))
  136. {
  137. myLCD_str8x16(IM_NOMALE, HORIZONTAL_RIGHT, 3, "%04ddBm", rssi%10000);
  138. }
  139. }
  140. }
  141. void myDisplay_ui_rf_setting_freq(uint32_t freq)
  142. {
  143. buffer_freq = freq;
  144. }
  145. void myDisplay_ui_rf_setting_rfPower(int8_t rfPower)
  146. {
  147. buffer_rfPower = rfPower;
  148. }
  149. void myDisplay_ui_rf_setting_channelStep(uint32_t channelStep)
  150. {
  151. buffer_channelStep = channelStep;
  152. }
  153. void myDisplay_ui_rf_setting_type(char *type)
  154. {
  155. buffer_type = type;
  156. }
  157. void myDisplay_ui_rf_setting_rfBr(uint32_t br)
  158. {
  159. rfBr = br;
  160. }
  161. void myDisplay_ui_rf_setting(int agr0, void *agr1_ptr)
  162. {
  163. int i;
  164. if (uiPageIdAddress != UI_PAGE_ID_SETTING)
  165. {
  166. myLCD_clearFull();
  167. for ( i = 0; i <= MAX_PAGE_COUNT; i++)
  168. {
  169. myLCD_displayBlock(1, i);
  170. }
  171. myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Setting");
  172. myLCD_str8x16(IM_NOMALE, 10, 2, "Type:");
  173. myLCD_str8x16(IM_NOMALE, 10, 3, "Chnl:----------MHz");
  174. myLCD_str8x16(IM_NOMALE, 10, 4, "Step:----MHz");
  175. myLCD_str8x16(IM_NOMALE, 10, 5, "TxPower:---dBm");
  176. myLCD_str8x16(IM_NOMALE, 10, 6, "RfBr:---.---kbps");
  177. }
  178. uiPageIdAddress = UI_PAGE_ID_SETTING;
  179. if (uiPageIdAddress == UI_PAGE_ID_SETTING)
  180. {
  181. myLCD_str8x16(agr0 == SET_ITEM_INDEX_TYPE ? IM_INVERSE : IM_NOMALE,
  182. 10 + 8 * strlen("Type:"), 2,
  183. "%s", buffer_type);
  184. myLCD_str8x16(agr0 == SET_ITEM_INDEX_FREQ ? IM_INVERSE : IM_NOMALE,
  185. 10 + 8 * strlen("Chnl:"), 3,
  186. "%02d->%6.2f", ((int *)agr1_ptr)[SET_ITEM_INDEX_FREQ], (float)buffer_freq / 1000000);
  187. myLCD_str8x16(agr0 == SET_ITEM_INDEX_STEP ? IM_INVERSE : IM_NOMALE,
  188. 10 + 8 * strlen("Step:"), 4,
  189. "%4.2f", (float)buffer_channelStep / 1000000);
  190. myLCD_str8x16(agr0 == SET_ITEM_INDEX_TXPOWER ? IM_INVERSE : IM_NOMALE,
  191. 10 + 8 * strlen("TxPower:"), 5,
  192. "%03d", buffer_rfPower);
  193. myLCD_str8x16(agr0 == SET_ITEM_INDEX_RFBAUDRATE ? IM_INVERSE : IM_NOMALE,
  194. 10 + 8 * strlen("RfBr:"), 6,
  195. "%7.3f", (float)rfBr/1000);
  196. }
  197. }
  198. uint8_t ver_buffer;
  199. char *mod_buffer;
  200. void myDisplay_ui_device_infor(int agr0, void *agr1_ptr)
  201. {
  202. int i;
  203. if (uiPageIdAddress != UI_PAGE_ID_DEVICE_INFOR)
  204. {
  205. myLCD_clearFull();
  206. for ( i = 0; i <= MAX_PAGE_COUNT; i++)
  207. {
  208. myLCD_displayBlock(1, i);
  209. }
  210. myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Infor");
  211. myLCD_str8x16(IM_NOMALE, 10, 2, "TP: %s", mod_buffer);
  212. myLCD_str8x16(IM_NOMALE,
  213. 10, 3, "VER: V%02x", ver_buffer);
  214. myLCD_str8x16(IM_NOMALE, 10, 4, "MD: VOLLGO");
  215. }
  216. uiPageIdAddress = UI_PAGE_ID_DEVICE_INFOR;
  217. }
  218. void myDisplay_ui_deviceInfor_setVer(uint8_t ver)
  219. {
  220. ver_buffer = ver;
  221. }
  222. void myDisplay_ui_deviceInfor_setModule(char *moduleName)
  223. {
  224. mod_buffer = moduleName;
  225. }
  226. void myDisplay_ui_rf_rx(uint8_t mode)
  227. {
  228. int i;
  229. myLCD_clearFull();
  230. for ( i = 0; i <= MAX_PAGE_COUNT; i++)
  231. {
  232. myLCD_displayBlock(1, i);
  233. }
  234. myLCD_str8x16(mode == 0 ? IM_INVERSE : IM_NOMALE,
  235. 10, 1, "Packet RX");
  236. myLCD_str8x16(mode == 1 ? IM_INVERSE : IM_NOMALE,
  237. 10, 2, "Continuous RX");
  238. }
  239. void myDisplay_ui_rf_continuos(int agr0, void *agr1_ptr)
  240. {
  241. int i;
  242. if (uiPageIdAddress != UI_PAGE_ID_RF_CONTINUOUS)
  243. {
  244. myLCD_clearFull();
  245. for ( i = 0; i <= MAX_PAGE_COUNT; i++)
  246. {
  247. myLCD_displayBlock(1, i);
  248. }
  249. myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Continuous");
  250. myDisplay_ui_rf_continuos_rfFreq();
  251. myDisplay_ui_rf_continuos_rfBr();
  252. myDisplay_ui_rf_continuos_rfPwr();
  253. }
  254. uiPageIdAddress = UI_PAGE_ID_RF_CONTINUOUS;
  255. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  256. {
  257. myLCD_str8x16(agr0 == CNT_ITEM_INDEX_TX ? IM_INVERSE : IM_NOMALE,
  258. HORIZONTAL_CENTER, 2, "TX");
  259. myLCD_str8x16(agr0 == CNT_ITEM_INDEX_RX ? IM_INVERSE : IM_NOMALE,
  260. HORIZONTAL_CENTER, 3, "RX");
  261. myLCD_str8x16(agr0 == CNT_ITEM_INDEX_TX_MD ? IM_INVERSE : IM_NOMALE,
  262. 110+3, 2, "TX_MD");
  263. }
  264. }
  265. void myDisplay_ui_rf_continuos_txCurrent(float Current)
  266. {
  267. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  268. {
  269. myLCD_str8x16(IM_NOMALE,
  270. 10, 4, "C=%6.2fmA", Current);
  271. }
  272. }
  273. void myDisplay_ui_rf_continuos_rxLen(float rate, uint16_t len)
  274. {
  275. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  276. {
  277. myLCD_str8x16(IM_NOMALE,
  278. HORIZONTAL_RIGHT, 4, "%5.1f%% %4d", rate, len);
  279. }
  280. }
  281. void myDisplay_ui_rf_continuos_rfFreq(void)
  282. {
  283. // if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  284. {
  285. myLCD_str8x16(IM_NOMALE,
  286. 5, 2,
  287. "%6.2fMHz", (float)buffer_freq / 1000000);
  288. }
  289. }
  290. void myDisplay_ui_rf_continuos_rfBr(void)
  291. {
  292. // if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  293. {
  294. myLCD_str8x16(IM_NOMALE,
  295. HORIZONTAL_RIGHT, 3,
  296. "%7.3fkbps", (float)rfBr / 1000);
  297. }
  298. }
  299. void myDisplay_ui_rf_continuos_rfPwr(void)
  300. {
  301. // if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  302. {
  303. myLCD_str8x16(IM_NOMALE,
  304. 5, 3,
  305. "%ddBm", buffer_rfPower);
  306. }
  307. }
  308. void myDisplay_ui_rf_continuos_rxErrorRate(float rate)
  309. {
  310. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  311. {
  312. myLCD_str8x16(IM_NOMALE,
  313. 10, 5, "rate=%6.2f%%", rate);
  314. }
  315. }
  316. void myDisplay_ui_rf_continuos_rxRssi(int16_t rssi)
  317. {
  318. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  319. {
  320. myLCD_str8x16(IM_NOMALE,
  321. HORIZONTAL_RIGHT, 2, "%4d", rssi);
  322. }
  323. }
  324. void myDisplay_ui_rf_continuos_rxContinuousFreq(uint32_t freq)
  325. {
  326. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  327. {
  328. myLCD_str8x16(IM_NOMALE,
  329. 10, 6, "freq=%6d", freq);
  330. }
  331. }
  332. void myDisplay_ui_rf_continuos_rxPacketCount(uint8_t status, uint16_t count)
  333. {
  334. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  335. {
  336. myLCD_str8x16(IM_NOMALE,
  337. 10, 5, "count=%d sta=%d", count, status);
  338. }
  339. }
  340. void myDisplay_ui_rf_continuos_rxPacket(uint8_t *buf, uint16_t len)
  341. {
  342. int i = 0;
  343. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  344. {
  345. myLCD_str8x16(IM_NOMALE,
  346. 10, 6, " ");
  347. if (len)
  348. {
  349. myLCD_str8x16(IM_NOMALE,
  350. 10, 6, "packet=");
  351. for ( i = 0; i < len; i++)
  352. {
  353. myLCD_str8x16(IM_NOMALE,
  354. 10, 6 + strlen("packet=") + i,
  355. "%x", *buf);
  356. buf ++;
  357. }
  358. }
  359. else
  360. {
  361. myLCD_str8x16(IM_NOMALE,
  362. 10, 6, "packet=%s", buf);
  363. }
  364. }
  365. }
  366. void myDisplay_ui_rf_continuos_rxPacketGetCount(uint32_t count)
  367. {
  368. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  369. {
  370. myLCD_str8x16(IM_NOMALE,
  371. 10, 6, "rx count=%d", count);
  372. }
  373. }
  374. void myDisplay_ui_rf_rx_packet(int agr0, void *agr1_ptr)
  375. {
  376. int i;
  377. if (uiPageIdAddress != UI_PAGE_ID_RX_PACKET)
  378. {
  379. myLCD_clearFull();
  380. for ( i = 0; i <= MAX_PAGE_COUNT; i++)
  381. {
  382. myLCD_displayBlock(1, i);
  383. }
  384. myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Packet RX");
  385. myLCD_str8x16(IM_NOMALE,
  386. 5, 3, "Packet:");
  387. }
  388. uiPageIdAddress = UI_PAGE_ID_RX_PACKET;
  389. if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
  390. {
  391. myLCD_str8x16(agr0 == 0 ? IM_INVERSE : IM_NOMALE,
  392. HORIZONTAL_RIGHT, 6, "START");
  393. }
  394. }
  395. void myDisplay_ui_rf_rxPacket_rxCurrent(float current)
  396. {
  397. if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
  398. {
  399. myLCD_str8x16(IM_NOMALE,
  400. 5, 2, "%-6.2fmA", current);
  401. }
  402. }
  403. void myDisplay_ui_rf_rxPacket_rssi(int16_t rssi)
  404. {
  405. if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
  406. {
  407. if (rssi > -150 && (rssi < 10))
  408. {
  409. myLCD_str8x16(IM_NOMALE,
  410. HORIZONTAL_RIGHT, 2, "%04ddBm", rssi%10000);
  411. }
  412. }
  413. }
  414. void myDisplay_ui_rf_rxPacket_count(uint32_t count)
  415. {
  416. if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
  417. {
  418. myLCD_str8x16(IM_NOMALE,
  419. HORIZONTAL_CENTER, 3, "%06d", count);
  420. }
  421. }
  422. void myDisplay_ui_rf_rxPacket_rate(float rate, int count, int frame)
  423. {
  424. if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
  425. {
  426. myLCD_str8x16(IM_NOMALE,
  427. 10, 3, "rssi=%3.0f%%,cnt=%3d %1d", rate, count, frame & 0x0f);
  428. }
  429. }
  430. void myDisplay_ui_rf_rxPacket_buffer(uint8_t *buf, uint16_t len)
  431. {
  432. int i = 0;
  433. if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
  434. {
  435. myLCD_str8x16(IM_NOMALE,
  436. 10, 5, " ");
  437. if (len)
  438. {
  439. myLCD_str8x16(IM_NOMALE,
  440. 10, 5, "packet=");
  441. for ( i = 0; i < len; i++)
  442. {
  443. myLCD_str8x16(IM_NOMALE,
  444. 10, 5 + strlen("packet=") + i,
  445. "%x", *buf);
  446. buf ++;
  447. }
  448. }
  449. else
  450. {
  451. myLCD_str8x16(IM_NOMALE,
  452. 10, 5, "packet=%-15s", buf);
  453. }
  454. }
  455. }
  456. uint8_t displayBuffer[3][20];
  457. void loadDisplayBuffer(uint8_t *buf, uint16_t len)
  458. {
  459. memcpy((char *)displayBuffer[0], (char *)displayBuffer[1], 20);
  460. memcpy((char *)displayBuffer[1], (char *)displayBuffer[2], 20);
  461. memset(displayBuffer[2], 0, 20);
  462. memcpy((char *)displayBuffer[2], (char *)buf, 20);
  463. }
  464. void myDisplay_ui_rf_rxPacket_scroll_buffer(uint8_t *buf, uint16_t len)
  465. {
  466. int i = 0;
  467. if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
  468. {
  469. if (len)
  470. {
  471. for ( i = 0; i < len; i++)
  472. {
  473. myLCD_str8x16(IM_NOMALE,
  474. 10 + i, 5,
  475. "%x", *buf);
  476. buf ++;
  477. }
  478. loadDisplayBuffer(buf, len);
  479. }
  480. else
  481. {
  482. }
  483. loadDisplayBuffer(buf, len);
  484. myLCD_str8x16(IM_NOMALE, 18, 4,
  485. "%-15s", displayBuffer[0]);
  486. myLCD_str8x16(IM_NOMALE, 18, 5,
  487. "%-15s", displayBuffer[1]);
  488. myLCD_str8x16(IM_NOMALE, 18, 6,
  489. "%-15s", displayBuffer[2]);
  490. }
  491. }
  492. void loadDisplayBufferContinue(uint8_t *buf, uint16_t len)
  493. {
  494. memcpy((char *)displayBuffer[0], (char *)displayBuffer[1], 20);
  495. memset(displayBuffer[1], 0, 20);
  496. memcpy((char *)displayBuffer[1], (char *)buf, 20);
  497. }
  498. void myDisplay_ui_rf_rxContinue_scroll_buffer(uint8_t *buf, uint16_t len)
  499. {
  500. int i = 0;
  501. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  502. {
  503. loadDisplayBufferContinue(buf, len);
  504. myLCD_str8x16(IM_NOMALE, 18, 5,
  505. "%-15s", displayBuffer[0]);
  506. myLCD_str8x16(IM_NOMALE, 18, 6,
  507. "%-15s", displayBuffer[1]);
  508. }
  509. }
  510. /**
  511. * 光标控制
  512. * direct: 方向控制
  513. * =1,向上移动
  514. * =0,向下移动
  515. * **/
  516. void myDisplay_change(uint8_t direct)
  517. {
  518. if (uiPageParams[uiPageCount - 1].cursorCount)
  519. {
  520. //设置加减控制
  521. if (uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting])
  522. {
  523. if (direct)
  524. {
  525. uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] ++;
  526. if (uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] >=
  527. uiPageParams[uiPageCount - 1].itemMaxValueTab[uiPageParams[uiPageCount - 1].cursorCounting])
  528. {
  529. uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] = uiPageParams[uiPageCount - 1].itemMinValueTab[uiPageParams[uiPageCount - 1].cursorCounting];
  530. }
  531. }
  532. else
  533. {
  534. uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] --;
  535. if (uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] < uiPageParams[uiPageCount - 1].itemMinValueTab[uiPageParams[uiPageCount - 1].cursorCounting])
  536. {
  537. uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] =
  538. uiPageParams[uiPageCount - 1].itemMaxValueTab[uiPageParams[uiPageCount - 1].cursorCounting] - 1;
  539. }
  540. }
  541. if (enterCb)
  542. {
  543. enterCb(uiPageCount,
  544. uiPageParams[uiPageCount - 1].cursorCounting,
  545. uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting],
  546. uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting]
  547. );
  548. }
  549. }
  550. else
  551. {
  552. //光标移动控制
  553. if (direct)
  554. {
  555. uiPageParams[uiPageCount - 1].cursorCounting --;
  556. if (uiPageParams[uiPageCount - 1].cursorCounting < 0)
  557. {
  558. uiPageParams[uiPageCount - 1].cursorCounting = uiPageParams[uiPageCount - 1].cursorCount - 1;
  559. }
  560. }
  561. else
  562. {
  563. uiPageParams[uiPageCount - 1].cursorCounting ++;
  564. if (uiPageParams[uiPageCount - 1].cursorCounting >= uiPageParams[uiPageCount - 1].cursorCount)
  565. {
  566. uiPageParams[uiPageCount - 1].cursorCounting = 0;
  567. }
  568. }
  569. }
  570. uiPageParams[uiPageCount - 1].uiDriver(uiPageParams[uiPageCount - 1].cursorCounting,
  571. uiPageParams[uiPageCount - 1].itemValueTab);
  572. }
  573. }
  574. /***
  575. * 按下确定键
  576. * 进入下一个界面或者进入设置状态
  577. */
  578. void myDisplay_enter(uint8_t direct)
  579. {
  580. if (direct == ENTER_NEXT_PAGE)
  581. {
  582. //进入设置状态
  583. if (uiPageParams[uiPageCount - 1].itemTypeTab[uiPageParams[uiPageCount - 1].cursorCounting] == TYPE_WRITE_TEXT)
  584. {
  585. //切换设置状态
  586. uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting] =
  587. !uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting];
  588. uiPageParams[uiPageCount - 1].uiDriver(uiPageParams[uiPageCount - 1].cursorCounting,
  589. uiPageParams[uiPageCount - 1].itemValueTab);
  590. if (enterCb)
  591. {
  592. enterCb(uiPageParams[uiPageCount - 1].id,
  593. uiPageParams[uiPageCount - 1].cursorCounting,
  594. uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting],
  595. uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting]
  596. );
  597. }
  598. }
  599. //切换到下一个界面
  600. if (uiPageParams[uiPageCount - 1].itemTypeTab[uiPageParams[uiPageCount - 1].cursorCounting] == TYPE_NEXT_LINK)
  601. {
  602. uiPageCount = uiPageParams[uiPageCount - 1].nextPageIdTab[uiPageParams[uiPageCount - 1].cursorCounting];
  603. uiPageParams[uiPageCount - 1].uiDriver(uiPageParams[uiPageCount - 1].cursorCounting,
  604. uiPageParams[uiPageCount - 1].itemValueTab);
  605. }
  606. }
  607. //切换到上一个界面
  608. if (direct == ENTER_LAST_PAGE)
  609. {
  610. if (uiPageParams[uiPageCount - 1].lastPageIdTab[0])
  611. {
  612. memset(uiPageParams[uiPageCount - 1].writeStaTab, 0, sizeof(uiPageParams[uiPageCount - 1].writeStaTab));
  613. if (enterCb)
  614. {
  615. enterCb(uiPageParams[uiPageCount - 1].id,
  616. uiPageParams[uiPageCount - 1].cursorCounting,
  617. uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting],
  618. uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting]
  619. );
  620. }
  621. uiPageCount = uiPageParams[uiPageCount - 1].lastPageIdTab[0];
  622. uiPageParams[uiPageCount - 1].uiDriver(uiPageParams[uiPageCount - 1].cursorCounting,
  623. uiPageParams[uiPageCount - 1].itemValueTab);
  624. }
  625. }
  626. }
  627. int8_t myDisplay_getPageId(void)
  628. {
  629. return uiPageIdAddress;
  630. }
  631. void uiTimerFlash_callBack(void)
  632. {
  633. if (uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting])
  634. {
  635. uiPageParams[uiPageCount - 1].writeStatusTab[uiPageParams[uiPageCount - 1].cursorCounting] =
  636. !uiPageParams[uiPageCount - 1].writeStatusTab[uiPageParams[uiPageCount - 1].cursorCounting];
  637. if (uiPageParams[uiPageCount - 1].writeStatusTab[uiPageParams[uiPageCount - 1].cursorCounting])
  638. {
  639. uiPageParams[uiPageCount - 1].uiDriver(uiPageParams[uiPageCount - 1].cursorCounting,
  640. uiPageParams[uiPageCount - 1].itemValueTab);
  641. }
  642. else
  643. {
  644. uiPageParams[uiPageCount - 1].uiDriver((~0), uiPageParams[uiPageCount - 1].itemValueTab);
  645. }
  646. }
  647. }
  648. void myDisplay_init(enterCallback cb)
  649. {
  650. myLCD_init();
  651. uiPageParams[UI_PAGE_ID_FIRST_UI].id = UI_PAGE_ID_FIRST_UI + 1;
  652. uiPageParams[UI_PAGE_ID_FIRST_UI].uiDriver = myDisplay_ui_firstUi;
  653. uiPageParams[UI_PAGE_ID_FIRST_UI].lastPageIdTab[0] = 0;
  654. uiPageParams[UI_PAGE_ID_FIRST_UI].nextPageIdTab[0] = 2;
  655. uiPageParams[UI_PAGE_ID_FIRST_UI].itemTypeTab[0] = TYPE_NEXT_LINK;
  656. uiPageParams[UI_PAGE_ID_FIRST_UI].writeStaTab[0] = 1;
  657. uiPageParams[UI_PAGE_ID_FIRST_UI].cursorCounting = 0;
  658. uiPageParams[UI_PAGE_ID_FIRST_UI].cursorCount = 2;
  659. uiPageParams[UI_PAGE_ID_ITEM_MODE].id = UI_PAGE_ID_ITEM_MODE + 1;
  660. uiPageParams[UI_PAGE_ID_ITEM_MODE].uiDriver = myDisplay_ui_selectMode;
  661. uiPageParams[UI_PAGE_ID_ITEM_MODE].lastPageIdTab[0] = 0;
  662. uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[0] = UI_PAGE_ID_TX_PACKET + 1;
  663. uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[0] = TYPE_NEXT_LINK;
  664. uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[1] = UI_PAGE_ID_RX_PACKET + 1;
  665. uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[1] = TYPE_NEXT_LINK;
  666. uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[2] = UI_PAGE_ID_RF_CONTINUOUS + 1;
  667. uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[2] = TYPE_NEXT_LINK;
  668. uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[3] = UI_PAGE_ID_SETTING + 1;
  669. uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[3] = TYPE_NEXT_LINK;
  670. uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[4] = UI_PAGE_ID_DEVICE_INFOR + 1;
  671. uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[4] = TYPE_NEXT_LINK;
  672. uiPageParams[UI_PAGE_ID_ITEM_MODE].cursorCounting = 0;
  673. uiPageParams[UI_PAGE_ID_ITEM_MODE].cursorCount = 5;
  674. uiPageParams[UI_PAGE_ID_TX_PACKET].id = UI_PAGE_ID_TX_PACKET + 1;
  675. uiPageParams[UI_PAGE_ID_TX_PACKET].uiDriver = myDisplay_ui_rf_tx_packet;
  676. uiPageParams[UI_PAGE_ID_TX_PACKET].lastPageIdTab[0] = UI_PAGE_ID_ITEM_MODE + 1;
  677. uiPageParams[UI_PAGE_ID_TX_PACKET].nextPageIdTab[0] = 0;
  678. uiPageParams[UI_PAGE_ID_TX_PACKET].itemTypeTab[0] = TYPE_WRITE_TEXT;
  679. uiPageParams[UI_PAGE_ID_TX_PACKET].writeStaTab[0] = 0;
  680. uiPageParams[UI_PAGE_ID_TX_PACKET].cursorCounting = 0;
  681. uiPageParams[UI_PAGE_ID_TX_PACKET].cursorCount = 0;
  682. uiPageParams[UI_PAGE_ID_DEVICE_INFOR].id = UI_PAGE_ID_DEVICE_INFOR + 1;
  683. uiPageParams[UI_PAGE_ID_DEVICE_INFOR].uiDriver = myDisplay_ui_device_infor;
  684. uiPageParams[UI_PAGE_ID_DEVICE_INFOR].lastPageIdTab[0] = UI_PAGE_ID_ITEM_MODE + 1;
  685. uiPageParams[UI_PAGE_ID_DEVICE_INFOR].nextPageIdTab[0] = 0;
  686. uiPageParams[UI_PAGE_ID_DEVICE_INFOR].cursorCount = 0;
  687. uiPageParams[UI_PAGE_ID_RX_PACKET].id = UI_PAGE_ID_RX_PACKET + 1;
  688. uiPageParams[UI_PAGE_ID_RX_PACKET].uiDriver = myDisplay_ui_rf_rx_packet;
  689. uiPageParams[UI_PAGE_ID_RX_PACKET].lastPageIdTab[0] = UI_PAGE_ID_ITEM_MODE + 1;
  690. uiPageParams[UI_PAGE_ID_RX_PACKET].nextPageIdTab[0] = 0;
  691. uiPageParams[UI_PAGE_ID_RX_PACKET].itemTypeTab[0] = TYPE_WRITE_TEXT;
  692. uiPageParams[UI_PAGE_ID_RX_PACKET].writeStaTab[0] = 0;
  693. uiPageParams[UI_PAGE_ID_RX_PACKET].cursorCounting = 0;
  694. uiPageParams[UI_PAGE_ID_RX_PACKET].cursorCount = 0;
  695. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].id = UI_PAGE_ID_RF_CONTINUOUS + 1;
  696. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].uiDriver = myDisplay_ui_rf_continuos;
  697. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].lastPageIdTab[CNT_ITEM_INDEX_TX] = UI_PAGE_ID_ITEM_MODE + 1;
  698. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].itemTypeTab[CNT_ITEM_INDEX_TX] = TYPE_WRITE_TEXT;
  699. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].writeStaTab[CNT_ITEM_INDEX_TX] = 0;
  700. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].itemTypeTab[CNT_ITEM_INDEX_RX] = TYPE_WRITE_TEXT;
  701. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].writeStaTab[CNT_ITEM_INDEX_RX] = 0;
  702. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].itemTypeTab[CNT_ITEM_INDEX_TX_MD] = TYPE_WRITE_TEXT;
  703. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].writeStaTab[CNT_ITEM_INDEX_TX_MD] = 0;
  704. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].cursorCounting = 0;
  705. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].cursorCount = CNT_ITEM_INDEX_MAX_COUNT;
  706. uiPageParams[UI_PAGE_ID_SETTING].id = UI_PAGE_ID_SETTING + 1;
  707. uiPageParams[UI_PAGE_ID_SETTING].uiDriver = myDisplay_ui_rf_setting;
  708. uiPageParams[UI_PAGE_ID_SETTING].lastPageIdTab[SET_ITEM_INDEX_TYPE] = UI_PAGE_ID_ITEM_MODE + 1;
  709. uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_TYPE] = TYPE_WRITE_TEXT;
  710. uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_TYPE] = 4;
  711. uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_FREQ] = TYPE_WRITE_TEXT;
  712. uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_FREQ] = 32;
  713. uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_STEP] = TYPE_WRITE_TEXT;
  714. uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_STEP] = 200;
  715. uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_TXPOWER] = TYPE_WRITE_TEXT;
  716. uiPageParams[UI_PAGE_ID_SETTING].itemMinValueTab[SET_ITEM_INDEX_TXPOWER] = -9;
  717. uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_TXPOWER] = 20+1;
  718. uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_RFBAUDRATE] = TYPE_WRITE_TEXT;
  719. uiPageParams[UI_PAGE_ID_SETTING].itemMinValueTab[SET_ITEM_INDEX_TXPOWER] = 1;
  720. uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_RFBAUDRATE] = 7;
  721. uiPageParams[UI_PAGE_ID_SETTING].cursorCounting = SET_ITEM_INDEX_TYPE;//默认设置光标在第一个
  722. uiPageParams[UI_PAGE_ID_SETTING].cursorCount = SET_ITEM_INDEX_MAX_COUNT;
  723. enterCb = cb;
  724. uiPageParams[uiPageCount - 1].uiDriver(0, 0);
  725. }
  726. void myDisplay_setSettingParamsProfile(uint8_t index, int value, int min, int max)
  727. {
  728. uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[index] = value;
  729. uiPageParams[UI_PAGE_ID_SETTING].itemMinValueTab[index] = min;
  730. uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[index] = max;
  731. }
  732. void myDisplay_setSettingParams(int chipType,
  733. int rfChannel,
  734. int channelStep,
  735. int txPower,
  736. int rfBaudrate)
  737. {
  738. uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_TYPE] = chipType;
  739. uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_FREQ] = rfChannel;
  740. uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_STEP] = channelStep;
  741. uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_TXPOWER] = txPower;
  742. uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_RFBAUDRATE] = rfBaudrate;
  743. }