myDisplayUnit.c 26 KB

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