myDisplayUnit.c 28 KB

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