myDisplayUnit.c 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850
  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(bool flashFlag, 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&& flashFlag ? IM_INVERSE : IM_NOMALE,
  46. HORIZONTAL_RIGHT, 5, "ENTER");
  47. }
  48. uiPageIdAddress = UI_PAGE_ID_FIRST_UI;
  49. }
  50. void myDisplay_ui_selectMode(bool flashFlag, 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&& flashFlag ? IM_INVERSE : IM_NOMALE,
  60. 10, 1, "Enter RF Transmiter");
  61. myLCD_str8x16(agr0 == 1&& flashFlag ? IM_INVERSE : IM_NOMALE,
  62. 10, 2, "Enter RF Receiver");
  63. myLCD_str8x16(agr0 == 2&& flashFlag ? IM_INVERSE : IM_NOMALE,
  64. 10, 3, "Enter RF Continuous");
  65. myLCD_str8x16(agr0 == 3&& flashFlag ? IM_INVERSE : IM_NOMALE,
  66. 10, 4, "Enter RF Setting");
  67. myLCD_str8x16(agr0 == 4&& flashFlag ? 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(bool flashFlag, 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&& flashFlag ? 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. char settingDisplayBuffer[SET_ITEM_INDEX_MAX_COUNT][20] =
  162. {
  163. "Type:%s",
  164. "Chl:%02d->%6.2fMHz",
  165. "Step:%4.2fMHz",
  166. "TxPower:%04ddBm",
  167. "RfBr:%7.3fkbps",
  168. "PkLen:%3d",
  169. };
  170. char settingCuDisplayBuffer[5][20] = {0};
  171. void myDisplay_ui_rf_setting(bool flashFlag, int agr0, void *agr1_ptr)
  172. {
  173. int i;
  174. int index = agr0;
  175. static int oldIndex = 255;
  176. if (uiPageIdAddress != UI_PAGE_ID_SETTING)
  177. {
  178. myLCD_clearFull();
  179. for ( i = 0; i <= MAX_PAGE_COUNT; i++)
  180. {
  181. myLCD_displayBlock(1, i);
  182. }
  183. myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Setting");
  184. myLCD_str8x16(IM_NOMALE, 10, 2, settingDisplayBuffer[0]);
  185. myLCD_str8x16(IM_NOMALE, 10, 3, settingDisplayBuffer[1]);
  186. myLCD_str8x16(IM_NOMALE, 10, 4, settingDisplayBuffer[2]);
  187. myLCD_str8x16(IM_NOMALE, 10, 5, settingDisplayBuffer[3]);
  188. myLCD_str8x16(IM_NOMALE, 10, 6, settingDisplayBuffer[4]);
  189. }
  190. uiPageIdAddress = UI_PAGE_ID_SETTING;
  191. if (uiPageIdAddress == UI_PAGE_ID_SETTING)
  192. {
  193. int indexCount = 0;
  194. if (index > 4)
  195. {
  196. indexCount = index - 4;
  197. index = 4;
  198. }
  199. for (int i = 0; i < 5; i++)
  200. {
  201. if (indexCount == SET_ITEM_INDEX_TYPE)
  202. snprintf(settingCuDisplayBuffer[i], 20, settingDisplayBuffer[indexCount], buffer_type);
  203. if (indexCount == SET_ITEM_INDEX_FREQ)
  204. snprintf(settingCuDisplayBuffer[i], 20, settingDisplayBuffer[indexCount], ((int *)agr1_ptr)[SET_ITEM_INDEX_FREQ], (float)buffer_freq / 1000000);
  205. if (indexCount == SET_ITEM_INDEX_STEP)
  206. snprintf(settingCuDisplayBuffer[i], 20, settingDisplayBuffer[indexCount], (float)buffer_channelStep / 1000000);
  207. if (indexCount == SET_ITEM_INDEX_TXPOWER)
  208. snprintf(settingCuDisplayBuffer[i], 20, settingDisplayBuffer[indexCount], buffer_rfPower);
  209. if (indexCount == SET_ITEM_INDEX_RFBAUDRATE)
  210. snprintf(settingCuDisplayBuffer[i], 20, settingDisplayBuffer[indexCount], (float)rfBr/1000);
  211. if (indexCount == SET_ITEM_INDEX_PACKET_LEN)
  212. snprintf(settingCuDisplayBuffer[i], 20, settingDisplayBuffer[indexCount], ((int *)agr1_ptr)[SET_ITEM_INDEX_PACKET_LEN]);
  213. indexCount ++;
  214. }
  215. if (oldIndex != agr0)
  216. {
  217. myLCD_str8x16(IM_NOMALE, 10, 2, " ");
  218. myLCD_str8x16(IM_NOMALE, 10, 3, " ");
  219. myLCD_str8x16(IM_NOMALE, 10, 4, " ");
  220. myLCD_str8x16(IM_NOMALE, 10, 5, " ");
  221. myLCD_str8x16(IM_NOMALE, 10, 6, " ");
  222. myLCD_str8x16(index == 0&& flashFlag ? IM_INVERSE : IM_NOMALE, 10, 2, settingCuDisplayBuffer[0]);
  223. myLCD_str8x16(index == 1&& flashFlag ? IM_INVERSE : IM_NOMALE, 10, 3, settingCuDisplayBuffer[1]);
  224. myLCD_str8x16(index == 2&& flashFlag ? IM_INVERSE : IM_NOMALE, 10, 4, settingCuDisplayBuffer[2]);
  225. myLCD_str8x16(index == 3&& flashFlag ? IM_INVERSE : IM_NOMALE, 10, 5, settingCuDisplayBuffer[3]);
  226. myLCD_str8x16(index == 4&& flashFlag ? IM_INVERSE : IM_NOMALE, 10, 6, settingCuDisplayBuffer[4]);
  227. }
  228. else
  229. {
  230. switch (index)
  231. {
  232. case 0:
  233. myLCD_str8x16(index == 0&& flashFlag ? IM_INVERSE : IM_NOMALE, 10, 2, settingCuDisplayBuffer[0]);
  234. break;
  235. case 1:
  236. myLCD_str8x16(index == 1&& flashFlag ? IM_INVERSE : IM_NOMALE, 10, 3, settingCuDisplayBuffer[1]);
  237. break;
  238. case 2:
  239. myLCD_str8x16(index == 2&& flashFlag ? IM_INVERSE : IM_NOMALE, 10, 4, settingCuDisplayBuffer[2]);
  240. break;
  241. case 3:
  242. myLCD_str8x16(index == 3&& flashFlag ? IM_INVERSE : IM_NOMALE, 10, 5, settingCuDisplayBuffer[3]);
  243. break;
  244. case 4:
  245. myLCD_str8x16(index == 4&& flashFlag ? IM_INVERSE : IM_NOMALE, 10, 6, settingCuDisplayBuffer[4]);
  246. break;
  247. default:
  248. break;
  249. }
  250. }
  251. oldIndex = agr0;
  252. }
  253. }
  254. uint8_t ver_buffer;
  255. char *mod_buffer;
  256. void myDisplay_ui_device_infor(bool flashFlag, int agr0, void *agr1_ptr)
  257. {
  258. int i;
  259. if (uiPageIdAddress != UI_PAGE_ID_DEVICE_INFOR)
  260. {
  261. myLCD_clearFull();
  262. for ( i = 0; i <= MAX_PAGE_COUNT; i++)
  263. {
  264. myLCD_displayBlock(1, i);
  265. }
  266. myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Infor");
  267. myLCD_str8x16(IM_NOMALE, 10, 2, "TP: %s", mod_buffer);
  268. myLCD_str8x16(IM_NOMALE,
  269. 10, 3, "VER: V%02x", ver_buffer);
  270. myLCD_str8x16(IM_NOMALE, 10, 4, "MD: VOLLGO");
  271. }
  272. uiPageIdAddress = UI_PAGE_ID_DEVICE_INFOR;
  273. }
  274. void myDisplay_ui_deviceInfor_setVer(uint8_t ver)
  275. {
  276. ver_buffer = ver;
  277. }
  278. void myDisplay_ui_deviceInfor_setModule(char *moduleName)
  279. {
  280. mod_buffer = moduleName;
  281. }
  282. void myDisplay_ui_rf_rx(uint8_t mode)
  283. {
  284. int i;
  285. myLCD_clearFull();
  286. for ( i = 0; i <= MAX_PAGE_COUNT; i++)
  287. {
  288. myLCD_displayBlock(1, i);
  289. }
  290. myLCD_str8x16(mode == 0 ? IM_INVERSE : IM_NOMALE,
  291. 10, 1, "Packet RX");
  292. myLCD_str8x16(mode == 1 ? IM_INVERSE : IM_NOMALE,
  293. 10, 2, "Continuous RX");
  294. }
  295. void myDisplay_ui_rf_continuos(bool flashFlag, int agr0, void *agr1_ptr)
  296. {
  297. int i;
  298. if (uiPageIdAddress != UI_PAGE_ID_RF_CONTINUOUS)
  299. {
  300. myLCD_clearFull();
  301. for ( i = 0; i <= MAX_PAGE_COUNT; i++)
  302. {
  303. myLCD_displayBlock(1, i);
  304. }
  305. myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Continuous");
  306. myDisplay_ui_rf_continuos_rfFreq();
  307. myDisplay_ui_rf_continuos_rfBr();
  308. myDisplay_ui_rf_continuos_rfPwr();
  309. }
  310. uiPageIdAddress = UI_PAGE_ID_RF_CONTINUOUS;
  311. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  312. {
  313. myLCD_str8x16(agr0 == CNT_ITEM_INDEX_TX&& flashFlag ? IM_INVERSE : IM_NOMALE,
  314. HORIZONTAL_CENTER, 2, "TX");
  315. myLCD_str8x16(agr0 == CNT_ITEM_INDEX_RX&& flashFlag ? IM_INVERSE : IM_NOMALE,
  316. HORIZONTAL_CENTER, 3, "RX");
  317. myLCD_str8x16(agr0 == CNT_ITEM_INDEX_TX_MD&& flashFlag ? IM_INVERSE : IM_NOMALE,
  318. 110+3, 2, "TX_MD");
  319. }
  320. }
  321. void myDisplay_ui_rf_continuos_txCurrent(float Current)
  322. {
  323. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  324. {
  325. myLCD_str8x16(IM_NOMALE,
  326. 10, 4, "C=%6.2fmA", Current);
  327. }
  328. }
  329. void myDisplay_ui_rf_continuos_rxLen(float rate, uint16_t len)
  330. {
  331. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  332. {
  333. myLCD_str8x16(IM_NOMALE,
  334. HORIZONTAL_RIGHT, 4, "%5.1f%% %4d", rate, len);
  335. }
  336. }
  337. void myDisplay_ui_rf_continuos_rfFreq(void)
  338. {
  339. // if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  340. {
  341. myLCD_str8x16(IM_NOMALE,
  342. 5, 2,
  343. "%6.2fMHz", (float)buffer_freq / 1000000);
  344. }
  345. }
  346. void myDisplay_ui_rf_continuos_rfBr(void)
  347. {
  348. // if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  349. {
  350. myLCD_str8x16(IM_NOMALE,
  351. HORIZONTAL_RIGHT, 3,
  352. "%7.3fkbps", (float)rfBr / 1000);
  353. }
  354. }
  355. void myDisplay_ui_rf_continuos_rfPwr(void)
  356. {
  357. // if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  358. {
  359. myLCD_str8x16(IM_NOMALE,
  360. 5, 3,
  361. "%ddBm", buffer_rfPower);
  362. }
  363. }
  364. void myDisplay_ui_rf_continuos_rxErrorRate(float rate)
  365. {
  366. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  367. {
  368. myLCD_str8x16(IM_NOMALE,
  369. 10, 5, "rate=%6.2f%%", rate);
  370. }
  371. }
  372. void myDisplay_ui_rf_continuos_rxRssi(int16_t rssi)
  373. {
  374. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  375. {
  376. myLCD_str8x16(IM_NOMALE,
  377. HORIZONTAL_RIGHT, 2, "%4d", rssi);
  378. }
  379. }
  380. void myDisplay_ui_rf_continuos_rxContinuousFreq(uint32_t freq)
  381. {
  382. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  383. {
  384. myLCD_str8x16(IM_NOMALE,
  385. 10, 6, "freq=%6d", freq);
  386. }
  387. }
  388. void myDisplay_ui_rf_continuos_rxPacketCount(uint8_t status, uint16_t count)
  389. {
  390. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  391. {
  392. myLCD_str8x16(IM_NOMALE,
  393. 10, 5, "count=%d sta=%d", count, status);
  394. }
  395. }
  396. void myDisplay_ui_rf_continuos_rxPacket(uint8_t *buf, uint16_t len)
  397. {
  398. int i = 0;
  399. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  400. {
  401. myLCD_str8x16(IM_NOMALE,
  402. 10, 6, " ");
  403. if (len)
  404. {
  405. myLCD_str8x16(IM_NOMALE,
  406. 10, 6, "packet=");
  407. for ( i = 0; i < len; i++)
  408. {
  409. myLCD_str8x16(IM_NOMALE,
  410. 10, 6 + strlen("packet=") + i,
  411. "%x", *buf);
  412. buf ++;
  413. }
  414. }
  415. else
  416. {
  417. myLCD_str8x16(IM_NOMALE,
  418. 10, 6, "packet=%s", buf);
  419. }
  420. }
  421. }
  422. void myDisplay_ui_rf_continuos_rxPacketGetCount(uint32_t count)
  423. {
  424. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  425. {
  426. myLCD_str8x16(IM_NOMALE,
  427. 10, 6, "rx count=%d", count);
  428. }
  429. }
  430. void myDisplay_ui_rf_rx_packet(bool flashFlag, int agr0, void *agr1_ptr)
  431. {
  432. int i;
  433. if (uiPageIdAddress != UI_PAGE_ID_RX_PACKET)
  434. {
  435. myLCD_clearFull();
  436. for ( i = 0; i <= MAX_PAGE_COUNT; i++)
  437. {
  438. myLCD_displayBlock(1, i);
  439. }
  440. myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Packet RX");
  441. myLCD_str8x16(IM_NOMALE,
  442. 5, 3, "Packet:");
  443. }
  444. uiPageIdAddress = UI_PAGE_ID_RX_PACKET;
  445. if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
  446. {
  447. myLCD_str8x16(agr0 == 0&& flashFlag ? IM_INVERSE : IM_NOMALE,
  448. HORIZONTAL_RIGHT, 6, "START");
  449. }
  450. }
  451. void myDisplay_ui_rf_rxPacket_rxCurrent(float current)
  452. {
  453. if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
  454. {
  455. myLCD_str8x16(IM_NOMALE,
  456. 5, 2, "%-6.2fmA", current);
  457. }
  458. }
  459. void myDisplay_ui_rf_rxPacket_rssi(int16_t rssi)
  460. {
  461. if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
  462. {
  463. if (rssi > -150 && (rssi < 10))
  464. {
  465. myLCD_str8x16(IM_NOMALE,
  466. HORIZONTAL_RIGHT, 2, "%04ddBm", rssi%10000);
  467. }
  468. }
  469. }
  470. void myDisplay_ui_rf_rxPacket_count(uint32_t count)
  471. {
  472. if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
  473. {
  474. myLCD_str8x16(IM_NOMALE,
  475. HORIZONTAL_CENTER, 3, "%06d", count);
  476. }
  477. }
  478. void myDisplay_ui_rf_rxPacket_rate(float rate, int count, int frame)
  479. {
  480. if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
  481. {
  482. myLCD_str8x16(IM_NOMALE,
  483. 10, 3, "rssi=%3.0f%%,cnt=%3d %1d", rate, count, frame & 0x0f);
  484. }
  485. }
  486. void myDisplay_ui_rf_rxPacket_buffer(uint8_t *buf, uint16_t len)
  487. {
  488. int i = 0;
  489. if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
  490. {
  491. myLCD_str8x16(IM_NOMALE,
  492. 10, 5, " ");
  493. if (len)
  494. {
  495. myLCD_str8x16(IM_NOMALE,
  496. 10, 5, "packet=");
  497. for ( i = 0; i < len; i++)
  498. {
  499. myLCD_str8x16(IM_NOMALE,
  500. 10, 5 + strlen("packet=") + i,
  501. "%x", *buf);
  502. buf ++;
  503. }
  504. }
  505. else
  506. {
  507. myLCD_str8x16(IM_NOMALE,
  508. 10, 5, "packet=%-15s", buf);
  509. }
  510. }
  511. }
  512. uint8_t displayBuffer[3][20];
  513. void loadDisplayBuffer(uint8_t *buf, uint16_t len)
  514. {
  515. memcpy((char *)displayBuffer[0], (char *)displayBuffer[1], 20);
  516. memcpy((char *)displayBuffer[1], (char *)displayBuffer[2], 20);
  517. memset(displayBuffer[2], 0, 20);
  518. memcpy((char *)displayBuffer[2], (char *)buf, 20);
  519. }
  520. void myDisplay_ui_rf_rxPacket_scroll_buffer(uint8_t *buf, uint16_t len)
  521. {
  522. int i = 0;
  523. if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
  524. {
  525. if (len)
  526. {
  527. for ( i = 0; i < len; i++)
  528. {
  529. myLCD_str8x16(IM_NOMALE,
  530. 10 + i, 5,
  531. "%x", *buf);
  532. buf ++;
  533. }
  534. loadDisplayBuffer(buf, len);
  535. }
  536. else
  537. {
  538. }
  539. loadDisplayBuffer(buf, len);
  540. myLCD_str8x16(IM_NOMALE, 18, 4,
  541. "%-15s", displayBuffer[0]);
  542. myLCD_str8x16(IM_NOMALE, 18, 5,
  543. "%-15s", displayBuffer[1]);
  544. myLCD_str8x16(IM_NOMALE, 18, 6,
  545. "%-15s", displayBuffer[2]);
  546. }
  547. }
  548. void loadDisplayBufferContinue(uint8_t *buf, uint16_t len)
  549. {
  550. memcpy((char *)displayBuffer[0], (char *)displayBuffer[1], 20);
  551. memset(displayBuffer[1], 0, 20);
  552. memcpy((char *)displayBuffer[1], (char *)buf, 20);
  553. }
  554. void myDisplay_ui_rf_rxContinue_scroll_buffer(uint8_t *buf, uint16_t len)
  555. {
  556. int i = 0;
  557. if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
  558. {
  559. loadDisplayBufferContinue(buf, len);
  560. myLCD_str8x16(IM_NOMALE, 18, 5,
  561. "%-15s", displayBuffer[0]);
  562. myLCD_str8x16(IM_NOMALE, 18, 6,
  563. "%-15s", displayBuffer[1]);
  564. }
  565. }
  566. /**
  567. * 光标控制
  568. * direct: 方向控制
  569. * =1,向上移动
  570. * =0,向下移动
  571. * **/
  572. void myDisplay_change(uint8_t direct)
  573. {
  574. uiPageUnit_ts *page = &uiPageParams[uiPageCount - 1];
  575. if (page->cursorCount)
  576. {
  577. //设置加减控制
  578. if (page->writeStaTab[page->cursorCounting])
  579. {
  580. if (direct)
  581. {
  582. page->itemValueTab[page->cursorCounting] += page->itemStepValueTab[page->cursorCounting];
  583. if (page->itemValueTab[page->cursorCounting] >=
  584. page->itemMaxValueTab[page->cursorCounting])
  585. {
  586. page->itemValueTab[page->cursorCounting] = page->itemMinValueTab[page->cursorCounting];
  587. }
  588. }
  589. else
  590. {
  591. page->itemValueTab[page->cursorCounting] -= page->itemStepValueTab[page->cursorCounting];
  592. if (page->itemValueTab[page->cursorCounting] < page->itemMinValueTab[page->cursorCounting])
  593. {
  594. page->itemValueTab[page->cursorCounting] =
  595. page->itemMaxValueTab[page->cursorCounting] - 1;
  596. }
  597. }
  598. if (enterCb)
  599. {
  600. enterCb(uiPageCount,
  601. page->cursorCounting,
  602. page->writeStaTab[page->cursorCounting],
  603. page->itemValueTab[page->cursorCounting]
  604. );
  605. }
  606. }
  607. else
  608. {
  609. //光标移动控制
  610. if (direct)
  611. {
  612. page->cursorCounting --;
  613. if (page->cursorCounting < 0)
  614. {
  615. page->cursorCounting = page->cursorCount - 1;
  616. }
  617. }
  618. else
  619. {
  620. page->cursorCounting ++;
  621. if (page->cursorCounting >= page->cursorCount)
  622. {
  623. page->cursorCounting = 0;
  624. }
  625. }
  626. }
  627. page->uiDriver(true, page->cursorCounting,
  628. page->itemValueTab);
  629. }
  630. }
  631. /***
  632. * 按下确定键
  633. * 进入下一个界面或者进入设置状态
  634. */
  635. void myDisplay_enter(uint8_t direct)
  636. {
  637. if (direct == ENTER_NEXT_PAGE)
  638. {
  639. //进入设置状态
  640. if (uiPageParams[uiPageCount - 1].itemTypeTab[uiPageParams[uiPageCount - 1].cursorCounting] == TYPE_WRITE_TEXT)
  641. {
  642. //切换设置状态
  643. uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting] =
  644. !uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting];
  645. uiPageParams[uiPageCount - 1].uiDriver(true, uiPageParams[uiPageCount - 1].cursorCounting,
  646. uiPageParams[uiPageCount - 1].itemValueTab);
  647. if (enterCb)
  648. {
  649. enterCb(uiPageParams[uiPageCount - 1].id,
  650. uiPageParams[uiPageCount - 1].cursorCounting,
  651. uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting],
  652. uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting]
  653. );
  654. }
  655. }
  656. //切换到下一个界面
  657. if (uiPageParams[uiPageCount - 1].itemTypeTab[uiPageParams[uiPageCount - 1].cursorCounting] == TYPE_NEXT_LINK)
  658. {
  659. uiPageCount = uiPageParams[uiPageCount - 1].nextPageIdTab[uiPageParams[uiPageCount - 1].cursorCounting];
  660. uiPageParams[uiPageCount - 1].uiDriver(true, uiPageParams[uiPageCount - 1].cursorCounting,
  661. uiPageParams[uiPageCount - 1].itemValueTab);
  662. }
  663. }
  664. //切换到上一个界面
  665. if (direct == ENTER_LAST_PAGE)
  666. {
  667. if (uiPageParams[uiPageCount - 1].lastPageIdTab[0])
  668. {
  669. memset(uiPageParams[uiPageCount - 1].writeStaTab, 0, sizeof(uiPageParams[uiPageCount - 1].writeStaTab));
  670. if (enterCb)
  671. {
  672. enterCb(uiPageParams[uiPageCount - 1].id,
  673. uiPageParams[uiPageCount - 1].cursorCounting,
  674. uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting],
  675. uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting]
  676. );
  677. }
  678. uiPageCount = uiPageParams[uiPageCount - 1].lastPageIdTab[0];
  679. uiPageParams[uiPageCount - 1].uiDriver(true, uiPageParams[uiPageCount - 1].cursorCounting,
  680. uiPageParams[uiPageCount - 1].itemValueTab);
  681. }
  682. }
  683. }
  684. int8_t myDisplay_getPageId(void)
  685. {
  686. return uiPageIdAddress;
  687. }
  688. void uiTimerFlash_callBack(void)
  689. {
  690. if (uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting])
  691. {
  692. uiPageParams[uiPageCount - 1].writeStatusTab[uiPageParams[uiPageCount - 1].cursorCounting] =
  693. !uiPageParams[uiPageCount - 1].writeStatusTab[uiPageParams[uiPageCount - 1].cursorCounting];
  694. if (uiPageParams[uiPageCount - 1].writeStatusTab[uiPageParams[uiPageCount - 1].cursorCounting])
  695. {
  696. uiPageParams[uiPageCount - 1].uiDriver(true, uiPageParams[uiPageCount - 1].cursorCounting,
  697. uiPageParams[uiPageCount - 1].itemValueTab);
  698. }
  699. else
  700. {
  701. uiPageParams[uiPageCount - 1].uiDriver(false, uiPageParams[uiPageCount - 1].cursorCounting, uiPageParams[uiPageCount - 1].itemValueTab);
  702. }
  703. }
  704. }
  705. void myDisplay_init(enterCallback cb)
  706. {
  707. myLCD_init();
  708. uiPageParams[UI_PAGE_ID_FIRST_UI].id = UI_PAGE_ID_FIRST_UI + 1;
  709. uiPageParams[UI_PAGE_ID_FIRST_UI].uiDriver = myDisplay_ui_firstUi;
  710. uiPageParams[UI_PAGE_ID_FIRST_UI].lastPageIdTab[0] = 0;
  711. uiPageParams[UI_PAGE_ID_FIRST_UI].nextPageIdTab[0] = 2;
  712. uiPageParams[UI_PAGE_ID_FIRST_UI].itemTypeTab[0] = TYPE_NEXT_LINK;
  713. uiPageParams[UI_PAGE_ID_FIRST_UI].writeStaTab[0] = 1;
  714. uiPageParams[UI_PAGE_ID_FIRST_UI].cursorCounting = 0;
  715. uiPageParams[UI_PAGE_ID_FIRST_UI].cursorCount = 2;
  716. uiPageParams[UI_PAGE_ID_ITEM_MODE].id = UI_PAGE_ID_ITEM_MODE + 1;
  717. uiPageParams[UI_PAGE_ID_ITEM_MODE].uiDriver = myDisplay_ui_selectMode;
  718. uiPageParams[UI_PAGE_ID_ITEM_MODE].lastPageIdTab[0] = 0;
  719. uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[0] = UI_PAGE_ID_TX_PACKET + 1;
  720. uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[0] = TYPE_NEXT_LINK;
  721. uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[1] = UI_PAGE_ID_RX_PACKET + 1;
  722. uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[1] = TYPE_NEXT_LINK;
  723. uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[2] = UI_PAGE_ID_RF_CONTINUOUS + 1;
  724. uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[2] = TYPE_NEXT_LINK;
  725. uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[3] = UI_PAGE_ID_SETTING + 1;
  726. uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[3] = TYPE_NEXT_LINK;
  727. uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[4] = UI_PAGE_ID_DEVICE_INFOR + 1;
  728. uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[4] = TYPE_NEXT_LINK;
  729. uiPageParams[UI_PAGE_ID_ITEM_MODE].cursorCounting = 0;
  730. uiPageParams[UI_PAGE_ID_ITEM_MODE].cursorCount = 5;
  731. uiPageParams[UI_PAGE_ID_TX_PACKET].id = UI_PAGE_ID_TX_PACKET + 1;
  732. uiPageParams[UI_PAGE_ID_TX_PACKET].uiDriver = myDisplay_ui_rf_tx_packet;
  733. uiPageParams[UI_PAGE_ID_TX_PACKET].lastPageIdTab[0] = UI_PAGE_ID_ITEM_MODE + 1;
  734. uiPageParams[UI_PAGE_ID_TX_PACKET].nextPageIdTab[0] = 0;
  735. uiPageParams[UI_PAGE_ID_TX_PACKET].itemTypeTab[0] = TYPE_WRITE_TEXT;
  736. uiPageParams[UI_PAGE_ID_TX_PACKET].writeStaTab[0] = 0;
  737. uiPageParams[UI_PAGE_ID_TX_PACKET].cursorCounting = 0;
  738. uiPageParams[UI_PAGE_ID_TX_PACKET].cursorCount = 0;
  739. uiPageParams[UI_PAGE_ID_DEVICE_INFOR].id = UI_PAGE_ID_DEVICE_INFOR + 1;
  740. uiPageParams[UI_PAGE_ID_DEVICE_INFOR].uiDriver = myDisplay_ui_device_infor;
  741. uiPageParams[UI_PAGE_ID_DEVICE_INFOR].lastPageIdTab[0] = UI_PAGE_ID_ITEM_MODE + 1;
  742. uiPageParams[UI_PAGE_ID_DEVICE_INFOR].nextPageIdTab[0] = 0;
  743. uiPageParams[UI_PAGE_ID_DEVICE_INFOR].cursorCount = 0;
  744. uiPageParams[UI_PAGE_ID_RX_PACKET].id = UI_PAGE_ID_RX_PACKET + 1;
  745. uiPageParams[UI_PAGE_ID_RX_PACKET].uiDriver = myDisplay_ui_rf_rx_packet;
  746. uiPageParams[UI_PAGE_ID_RX_PACKET].lastPageIdTab[0] = UI_PAGE_ID_ITEM_MODE + 1;
  747. uiPageParams[UI_PAGE_ID_RX_PACKET].nextPageIdTab[0] = 0;
  748. uiPageParams[UI_PAGE_ID_RX_PACKET].itemTypeTab[0] = TYPE_WRITE_TEXT;
  749. uiPageParams[UI_PAGE_ID_RX_PACKET].writeStaTab[0] = 0;
  750. uiPageParams[UI_PAGE_ID_RX_PACKET].cursorCounting = 0;
  751. uiPageParams[UI_PAGE_ID_RX_PACKET].cursorCount = 0;
  752. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].id = UI_PAGE_ID_RF_CONTINUOUS + 1;
  753. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].uiDriver = myDisplay_ui_rf_continuos;
  754. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].lastPageIdTab[CNT_ITEM_INDEX_TX] = UI_PAGE_ID_ITEM_MODE + 1;
  755. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].itemTypeTab[CNT_ITEM_INDEX_TX] = TYPE_WRITE_TEXT;
  756. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].writeStaTab[CNT_ITEM_INDEX_TX] = 0;
  757. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].itemTypeTab[CNT_ITEM_INDEX_RX] = TYPE_WRITE_TEXT;
  758. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].writeStaTab[CNT_ITEM_INDEX_RX] = 0;
  759. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].itemTypeTab[CNT_ITEM_INDEX_TX_MD] = TYPE_WRITE_TEXT;
  760. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].writeStaTab[CNT_ITEM_INDEX_TX_MD] = 0;
  761. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].cursorCounting = 0;
  762. uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].cursorCount = CNT_ITEM_INDEX_MAX_COUNT;
  763. uiPageParams[UI_PAGE_ID_SETTING].id = UI_PAGE_ID_SETTING + 1;
  764. uiPageParams[UI_PAGE_ID_SETTING].uiDriver = myDisplay_ui_rf_setting;
  765. uiPageParams[UI_PAGE_ID_SETTING].lastPageIdTab[SET_ITEM_INDEX_TYPE] = UI_PAGE_ID_ITEM_MODE + 1;
  766. uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_TYPE] = TYPE_WRITE_TEXT;
  767. uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_TYPE] = 4;
  768. uiPageParams[UI_PAGE_ID_SETTING].itemStepValueTab[SET_ITEM_INDEX_TYPE] = 1;
  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].itemStepValueTab[SET_ITEM_INDEX_FREQ] = 1;
  772. uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_STEP] = TYPE_WRITE_TEXT;
  773. uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_STEP] = 200;
  774. uiPageParams[UI_PAGE_ID_SETTING].itemStepValueTab[SET_ITEM_INDEX_STEP] = 1;
  775. uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_TXPOWER] = TYPE_WRITE_TEXT;
  776. uiPageParams[UI_PAGE_ID_SETTING].itemMinValueTab[SET_ITEM_INDEX_TXPOWER] = -9;
  777. uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_TXPOWER] = 20+1;
  778. uiPageParams[UI_PAGE_ID_SETTING].itemStepValueTab[SET_ITEM_INDEX_TXPOWER] = 1;
  779. uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_RFBAUDRATE] = TYPE_WRITE_TEXT;
  780. uiPageParams[UI_PAGE_ID_SETTING].itemMinValueTab[SET_ITEM_INDEX_RFBAUDRATE] = 1;
  781. uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_RFBAUDRATE] = 7;
  782. uiPageParams[UI_PAGE_ID_SETTING].itemStepValueTab[SET_ITEM_INDEX_RFBAUDRATE] = 1;
  783. uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_PACKET_LEN] = TYPE_WRITE_TEXT;
  784. uiPageParams[UI_PAGE_ID_SETTING].itemMinValueTab[SET_ITEM_INDEX_PACKET_LEN] = 1;
  785. uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_PACKET_LEN] = 256;
  786. uiPageParams[UI_PAGE_ID_SETTING].itemStepValueTab[SET_ITEM_INDEX_PACKET_LEN] = 5;
  787. uiPageParams[UI_PAGE_ID_SETTING].cursorCounting = SET_ITEM_INDEX_TYPE;//默认设置光标在第一个
  788. uiPageParams[UI_PAGE_ID_SETTING].cursorCount = SET_ITEM_INDEX_MAX_COUNT;
  789. enterCb = cb;
  790. uiPageParams[uiPageCount - 1].uiDriver(true, 0, 0);
  791. }
  792. void myDisplay_setSettingParamsProfile(uint8_t index, int value, int min, int max, int step)
  793. {
  794. uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[index] = value;
  795. uiPageParams[UI_PAGE_ID_SETTING].itemMinValueTab[index] = min;
  796. uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[index] = max;
  797. uiPageParams[UI_PAGE_ID_SETTING].itemStepValueTab[index] = step;
  798. }
  799. void myDisplay_setSettingParams(int chipType,
  800. int rfChannel,
  801. int channelStep,
  802. int txPower,
  803. int rfBaudrate)
  804. {
  805. uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_TYPE] = chipType;
  806. uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_FREQ] = rfChannel;
  807. uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_STEP] = channelStep;
  808. uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_TXPOWER] = txPower;
  809. uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_RFBAUDRATE] = rfBaudrate;
  810. uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_PACKET_LEN] = 14;
  811. }