main.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041
  1. /*
  2. mui_ref
  3. Documentatio
  4. mui-style
  5. monochrome user interface concepts
  6. selected element: inverted vs frame
  7. selection criteria: size vs. number of element types
  8. only buttons --> inverted cursor
  9. buttons and user elements --> frame cuser
  10. what means style:
  11. selected element concept (inverted vs frame)
  12. MUI_STYLE command for fonts
  13. callback postfix
  14. Edit modes
  15. unselected, selected, selected & update
  16. */
  17. #include "u8g2.h"
  18. #include <stdlib.h>
  19. #include <stdio.h>
  20. #include <string.h>
  21. #include "mui.h"
  22. #include "mui_u8g2.h"
  23. /*=================================================*/
  24. /* global variables */
  25. u8g2_t u8g2;
  26. mui_t ui;
  27. /*
  28. global variables which form the communication gateway between the user interface and the rest of the code
  29. */
  30. uint8_t number_input9 = 2; // variable where the user can input a number between 0 and 9
  31. uint8_t number_input99 = 95; // variable where the user can input a number between 0 and 99
  32. uint8_t chkbox1_input = 0;
  33. uint8_t chkbox2_input = 0;
  34. uint8_t radio_input = 0;
  35. uint8_t fruit_input = 2;
  36. uint8_t color_input = 0;
  37. uint8_t food_input = 0;
  38. uint8_t text_input[4] = { ' ',' ',' ',' '} ;
  39. uint16_t list_selection_1 = 0;
  40. uint16_t list_selection_2 = 0;
  41. uint16_t list_selection_3 = 0;
  42. /*=================================================*/
  43. /* user element access functions */
  44. static const char *animals[] = { "Bird", "Bison", "Cat", "Crow", "Dog", "Elephant", "Fish", "Gnu", "Horse", "Koala", "Lion", "Mouse", "Owl", "Rabbit", "Spider", "Turtle", "Zebra" };
  45. uint16_t animals_get_cnt(void *data)
  46. {
  47. return sizeof(animals)/sizeof(*animals); /* number of animals */
  48. }
  49. const char *animals_get_str(void *data, uint16_t index)
  50. {
  51. return animals[index];
  52. }
  53. /*=================================================*/
  54. /* style */
  55. uint8_t mui_style_helv_r_08(mui_t *ui, uint8_t msg)
  56. {
  57. u8g2_t *u8g2 = mui_get_U8g2(ui);
  58. switch(msg)
  59. {
  60. case MUIF_MSG_DRAW:
  61. u8g2_SetFont(u8g2, u8g2_font_helvR08_tr);
  62. //u8g2_SetFont(u8g2, u8g2_font_squeezed_r7_tr);
  63. break;
  64. }
  65. return 0;
  66. }
  67. uint8_t mui_style_helv_b_08(mui_t *ui, uint8_t msg)
  68. {
  69. u8g2_t *u8g2 = mui_get_U8g2(ui);
  70. switch(msg)
  71. {
  72. case MUIF_MSG_DRAW:
  73. //u8g2_SetFont(u8g2, u8g2_font_helvB08_tr);
  74. u8g2_SetFont(u8g2, u8g2_font_squeezed_b7_tr);
  75. //su8g2_SetFont(u8g2, u8g2_font_lubBI14_te);
  76. break;
  77. }
  78. return 0;
  79. }
  80. uint8_t mui_style_menu_items(mui_t *ui, uint8_t msg)
  81. {
  82. u8g2_t *u8g2 = mui_get_U8g2(ui);
  83. switch(msg)
  84. {
  85. case MUIF_MSG_DRAW:
  86. //u8g2_SetFont(u8g2, u8g2_font_helvR08_tr);
  87. u8g2_SetFont(u8g2, u8g2_font_squeezed_r7_tr);
  88. break;
  89. }
  90. return 0;
  91. }
  92. uint8_t mui_style_monospaced(mui_t *ui, uint8_t msg)
  93. {
  94. u8g2_t *u8g2 = mui_get_U8g2(ui);
  95. switch(msg)
  96. {
  97. case MUIF_MSG_DRAW:
  98. u8g2_SetFont(u8g2, u8g2_font_profont12_tr);
  99. //u8g2_SetFont(u8g2, u8g2_font_6x10_tr);
  100. break;
  101. }
  102. return 0;
  103. }
  104. uint8_t mui_style_streamline_food_drink(mui_t *ui, uint8_t msg)
  105. {
  106. u8g2_t *u8g2 = mui_get_U8g2(ui);
  107. switch(msg)
  108. {
  109. case MUIF_MSG_DRAW:
  110. u8g2_SetFont(u8g2, u8g2_font_streamline_food_drink_t);
  111. break;
  112. }
  113. return 0;
  114. }
  115. uint8_t mui_style_small(mui_t *ui, uint8_t msg)
  116. {
  117. u8g2_t *u8g2 = mui_get_U8g2(ui);
  118. switch(msg)
  119. {
  120. case MUIF_MSG_DRAW:
  121. u8g2_SetFont(u8g2, u8g2_font_blipfest_07_tr );
  122. //u8g2_SetFont(u8g2, u8g2_font_squeezed_r7_tr);
  123. break;
  124. }
  125. return 0;
  126. }
  127. uint8_t mui_style_streamline_interface_essential_login(mui_t *ui, uint8_t msg)
  128. {
  129. u8g2_t *u8g2 = mui_get_U8g2(ui);
  130. switch(msg)
  131. {
  132. case MUIF_MSG_DRAW:
  133. u8g2_SetFont(u8g2, u8g2_font_streamline_interface_essential_login_t);
  134. //u8g2_SetFont(u8g2, u8g2_font_6x10_tr);
  135. break;
  136. }
  137. return 0;
  138. }
  139. /*=================================================*/
  140. /* local mui functions */
  141. uint8_t mui_hrule(mui_t *ui, uint8_t msg)
  142. {
  143. u8g2_t *u8g2 = mui_get_U8g2(ui);
  144. switch(msg)
  145. {
  146. case MUIF_MSG_DRAW:
  147. u8g2_DrawHLine(u8g2, 0, mui_get_y(ui), u8g2_GetDisplayWidth(u8g2));
  148. break;
  149. }
  150. return 0;
  151. }
  152. /*=================================================*/
  153. /* list functions (get cnt/get element pairs) */
  154. uint16_t list_get_cnt(void *data)
  155. {
  156. return 17; /* number of animals */
  157. }
  158. const char *list_get_str(void *data, uint16_t index)
  159. {
  160. static const char *animals[] = { "Bird", "Bison", "Cat", "Crow", "Dog", "Elephant", "Fish", "Gnu", "Horse", "Koala", "Lion", "Mouse", "Owl", "Rabbit", "Spider", "Turtle", "Zebra" };
  161. return animals[index];
  162. }
  163. uint16_t menu_get_cnt(void *data)
  164. {
  165. return 10; /* number of menu entries */
  166. }
  167. const char *menu_get_str(void *data, uint16_t index)
  168. {
  169. static const char *menu[] =
  170. {
  171. MUI_1 "Goto Main Menu",
  172. MUI_10 "Enter a number",
  173. MUI_11 "Parent/Child Selection",
  174. MUI_13 "Checkbox",
  175. MUI_14 "Radio Selection",
  176. MUI_15 "Text Input",
  177. MUI_16 "Single Line Selection",
  178. MUI_17 "List Line Selection",
  179. MUI_18 "Parent/Child List",
  180. MUI_20 "Array Edit",
  181. };
  182. return menu[index];
  183. }
  184. /*=================================================*/
  185. /* list functions (get cnt/get element pairs) */
  186. muif_t muif_list[] MUI_PROGMEM = {
  187. /* normal text style for the examples */
  188. MUIF_STYLE(0, mui_style_helv_r_08),
  189. /* bold text style for menu heading */
  190. MUIF_STYLE(1, mui_style_helv_b_08),
  191. /* very small font with programming info */
  192. MUIF_STYLE(2, mui_style_small),
  193. MUIF_STYLE(3, mui_style_streamline_interface_essential_login),
  194. /* food and drink */
  195. MUIF_STYLE(4, mui_style_streamline_food_drink),
  196. /* monospaced font, good for mui_u8g2_u8_char_wm_mud_pi */
  197. MUIF_STYLE(5, mui_style_monospaced),
  198. /* smaller replacement for style 0 */
  199. /*MUIF_STYLE(6, mui_style_glasstown),*/
  200. /* style for menu entries */
  201. MUIF_STYLE(7, mui_style_menu_items),
  202. /* horizontal line (hrule) */
  203. MUIF_RO("HR", mui_hrule),
  204. /* read only fixed text */
  205. MUIF_U8G2_LABEL(),
  206. MUIF_RO("GP",mui_u8g2_goto_data),
  207. MUIF_BUTTON("GC", mui_u8g2_goto_form_w1_pi),
  208. /* Form 10 */
  209. MUIF_GOTO(mui_u8g2_btn_goto_wm_fi),
  210. MUIF_BUTTON("G0", mui_u8g2_btn_goto_wm_fi),
  211. MUIF_BUTTON("G1", mui_u8g2_btn_goto_w1_fi),
  212. MUIF_BUTTON("G2", mui_u8g2_btn_goto_w1_pi),
  213. MUIF_BUTTON("G3", mui_u8g2_btn_goto_w2_fi),
  214. MUIF_BUTTON("G6", mui_u8g2_btn_goto_wm_if),
  215. /* Form 20 */
  216. MUIF_U8G2_U8_MIN_MAX("N0", &number_input9, 0, 9, mui_u8g2_u8_min_max_wm_mse_pi),
  217. MUIF_U8G2_U8_MIN_MAX("N1", &number_input99, 0, 99, mui_u8g2_u8_min_max_wm_mud_pi),
  218. MUIF_U8G2_U8_MIN_MAX("N2", &number_input9, 0, 9, mui_u8g2_u8_min_max_wm_mse_pf),
  219. MUIF_U8G2_U8_MIN_MAX("N3", &number_input99, 0, 99, mui_u8g2_u8_min_max_wm_mud_pf),
  220. /* Form 30 */
  221. MUIF_VARIABLE("C1",&chkbox1_input,mui_u8g2_u8_chkbox_wm_pi),
  222. MUIF_VARIABLE("C2",&chkbox2_input,mui_u8g2_u8_chkbox_wm_pi),
  223. MUIF_VARIABLE("RB",&radio_input,mui_u8g2_u8_radio_wm_pi),
  224. /* Form 40: Cycle Option */
  225. MUIF_VARIABLE("O1",&fruit_input,mui_u8g2_u8_opt_line_wa_mse_pi),
  226. MUIF_VARIABLE("O2",&fruit_input,mui_u8g2_u8_opt_line_wa_mud_pi),
  227. MUIF_VARIABLE("O3",&fruit_input,mui_u8g2_u8_opt_line_wa_mse_pf),
  228. MUIF_VARIABLE("O4",&fruit_input,mui_u8g2_u8_opt_line_wa_mud_pf),
  229. /* Form 50: Parent/Child Option */
  230. MUIF_VARIABLE("P1",&color_input,mui_u8g2_u8_opt_parent_wm_pi),
  231. MUIF_VARIABLE("ca",&color_input,mui_u8g2_u8_opt_radio_child_w1_pi),
  232. MUIF_VARIABLE("P2",&food_input,mui_u8g2_u8_opt_parent_wm_pi),
  233. MUIF_VARIABLE("cf",&food_input,mui_u8g2_u8_opt_child_wm_pi),
  234. /* Form 60: Char Input */
  235. MUIF_VARIABLE("T0", text_input+0, mui_u8g2_u8_char_wm_mud_pi),
  236. MUIF_VARIABLE("T1", text_input+1, mui_u8g2_u8_char_wm_mud_pi),
  237. MUIF_VARIABLE("T2", text_input+2, mui_u8g2_u8_char_wm_mud_pi),
  238. MUIF_VARIABLE("T3", text_input+3, mui_u8g2_u8_char_wm_mud_pi),
  239. /* Form 70: One of many selection within the same field */
  240. MUIF_U8G2_U16_LIST("A1", &list_selection_1, NULL, animals_get_str, animals_get_cnt, mui_u8g2_u16_list_line_wa_mse_pi),
  241. MUIF_U8G2_U16_LIST("A2", &list_selection_2, NULL, animals_get_str, animals_get_cnt, mui_u8g2_u16_list_line_wa_mud_pi),
  242. MUIF_U8G2_U16_LIST("AP", &list_selection_3, NULL, animals_get_str, animals_get_cnt, mui_u8g2_u16_list_parent_wm_pi),
  243. MUIF_U8G2_U16_LIST("AC", &list_selection_3, NULL, animals_get_str, animals_get_cnt, mui_u8g2_u16_list_child_w1_pi),
  244. /* Form 90: bar */
  245. MUIF_U8G2_U8_MIN_MAX_STEP("B0", &number_input9, 0, 20, 2, MUI_MMS_2X_BAR|MUI_MMS_SHOW_VALUE, mui_u8g2_u8_bar_wm_mse_pi),
  246. MUIF_U8G2_U8_MIN_MAX_STEP("B1", &number_input9, 0, 20, 2, MUI_MMS_2X_BAR|MUI_MMS_SHOW_VALUE, mui_u8g2_u8_bar_wm_mud_pi),
  247. MUIF_U8G2_U8_MIN_MAX_STEP("B2", &number_input9, 0, 20, 2, MUI_MMS_2X_BAR|MUI_MMS_SHOW_VALUE, mui_u8g2_u8_bar_wm_mse_pf),
  248. MUIF_U8G2_U8_MIN_MAX_STEP("B3", &number_input9, 0, 20, 2, MUI_MMS_2X_BAR|MUI_MMS_SHOW_VALUE, mui_u8g2_u8_bar_wm_mud_pf),
  249. };
  250. fds_t fds[] =
  251. MUI_FORM(1)
  252. MUI_STYLE(1)
  253. MUI_LABEL(5,10, "MUI Elements")
  254. MUI_XY("HR", 0,13)
  255. MUI_STYLE(7)
  256. MUI_DATA("GP",
  257. MUI_10 "Goto Buttons|"
  258. MUI_20 "uint8 Number|"
  259. MUI_30 "uint8 Checkbox|"
  260. MUI_40 "uint8 Cycle Options|"
  261. MUI_50 "uint8 ParentChild Select|"
  262. MUI_60 "uint8 Char/Text Input|"
  263. MUI_70 "uint16 Cycle Options|"
  264. MUI_80 "uint16 ParentChild Select|"
  265. MUI_90 "uint8 Bar Graph|"
  266. MUI_18 "Parent/Child List|"
  267. MUI_20 "Array Edit|"
  268. MUI_16 "Goto Test")
  269. MUI_XYA("GC", 5, 25, 0)
  270. MUI_XYA("GC", 5, 37, 1)
  271. MUI_XYA("GC", 5, 49, 2)
  272. MUI_XYA("GC", 5, 61, 3)
  273. MUI_FORM(10)
  274. MUI_STYLE(1)
  275. MUI_LABEL(5,10, "Goto Buttons")
  276. MUI_XY("HR", 0,13)
  277. MUI_STYLE(7)
  278. MUI_DATA("GP",
  279. MUI_11 "btn_goto_wm_fi|"
  280. MUI_12 "btn_goto_w1_fi|"
  281. MUI_13 "btn_goto_w1_pi|"
  282. MUI_14 "btn_goto_w2_fi|"
  283. MUI_1 "Back to Main Menu" )
  284. MUI_XYA("GC", 5, 25, 0)
  285. MUI_XYA("GC", 5, 37, 1)
  286. MUI_XYA("GC", 5, 49, 2)
  287. MUI_XYA("GC", 5, 61, 3)
  288. MUI_FORM(11)
  289. MUI_STYLE(2)
  290. MUI_LABEL(1,5, "mui_u8g2_btn_goto_wm_fi")
  291. MUI_LABEL(1,12, "MUIF_GOTO, MUIF_BUTTON")
  292. MUI_LABEL(1,19, "MUI_GOTO, MUI_XYAT")
  293. MUI_LABEL(1,25, "Centered button, jumps to form")
  294. MUI_XY("HR", 0,26)
  295. MUI_STYLE(0)
  296. MUI_GOTO(64, 42, 10, "Button")
  297. MUI_GOTO(64, 59, 10, " Ok ")
  298. MUI_FORM(12)
  299. MUI_STYLE(2)
  300. MUI_LABEL(1,5, "mui_u8g2_btn_goto_w1_fi")
  301. MUI_LABEL(1,12, "MUIF_GOTO, MUIF_BUTTON")
  302. MUI_LABEL(1,19, "MUI_GOTO, MUI_XYAT")
  303. MUI_LABEL(1,25, "Full width button with frame")
  304. MUI_XY("HR", 0,26)
  305. MUI_STYLE(0)
  306. MUI_XYAT("G1", 1, 42, 10, "Button")
  307. MUI_GOTO(64, 59, 10, " Ok ")
  308. MUI_FORM(13)
  309. MUI_STYLE(2)
  310. MUI_LABEL(1,5, "mui_u8g2_btn_goto_w1_pi")
  311. MUI_LABEL(1,12, "MUIF_GOTO, MUIF_BUTTON")
  312. MUI_LABEL(1,19, "MUI_GOTO, MUI_XYAT")
  313. MUI_LABEL(1,25, "Full width button without frame")
  314. MUI_XY("HR", 0,26)
  315. MUI_STYLE(0)
  316. MUI_XYAT("G2", 1, 42, 10, "Button")
  317. MUI_GOTO(64, 59, 10, " Ok ")
  318. MUI_FORM(14)
  319. MUI_STYLE(2)
  320. MUI_LABEL(1,5, "mui_u8g2_btn_goto_w2_fi")
  321. MUI_LABEL(1,12, "MUIF_GOTO, MUIF_BUTTON")
  322. MUI_LABEL(1,19, "MUI_GOTO, MUI_XYAT")
  323. MUI_LABEL(1,25, "Centered half display width button")
  324. MUI_XY("HR", 0,26)
  325. MUI_STYLE(0)
  326. MUI_XYAT("G3", 32, 42, 10, "Btn 1")
  327. MUI_XYAT("G3", 96, 42, 10, "Btn 2")
  328. MUI_GOTO(64, 59, 10, " Ok ")
  329. MUI_FORM(16)
  330. MUI_STYLE(0)
  331. MUI_GOTO(64, 59, 1, " Back ")
  332. MUI_FORM(20)
  333. MUI_STYLE(1)
  334. MUI_LABEL(5,10, "uint8 Number")
  335. MUI_XY("HR", 0,13)
  336. MUI_STYLE(7)
  337. MUI_DATA("GP",
  338. MUI_21 "u8_min_max_wm_mse_pi|"
  339. MUI_22 "u8_min_max_wm_mud_pi|"
  340. MUI_23 "u8_min_max_wm_mse_pf|"
  341. MUI_24 "u8_min_max_wm_mud_pf|"
  342. MUI_1 "Back to Main Menu" )
  343. MUI_XYA("GC", 5, 25, 0)
  344. MUI_XYA("GC", 5, 37, 1)
  345. MUI_XYA("GC", 5, 49, 2)
  346. MUI_XYA("GC", 5, 61, 3)
  347. MUI_FORM(21)
  348. MUI_STYLE(2)
  349. MUI_LABEL(1,5, "mui_u8g2_u8_min_max_wm_mse_pi")
  350. MUI_LABEL(1,12, "MUIF_U8G2_U8_MIN_MAX")
  351. MUI_LABEL(1,19, "MUI_XY")
  352. MUI_LABEL(1,25, "Input for uint8_t number")
  353. MUI_XY("HR", 0,26)
  354. MUI_STYLE(0)
  355. MUI_LABEL(1,40, "Number: ")
  356. MUI_XY("N0",70, 40)
  357. MUI_GOTO(64, 59, 20, " Ok ")
  358. MUI_FORM(22)
  359. MUI_STYLE(2)
  360. MUI_LABEL(1,5, "mui_u8g2_u8_min_max_wm_mud_pi")
  361. MUI_LABEL(1,12, "MUIF_U8G2_U8_MIN_MAX")
  362. MUI_LABEL(1,19, "MUI_XY")
  363. MUI_LABEL(1,25, "Input for uint8_t number")
  364. MUI_XY("HR", 0,26)
  365. MUI_STYLE(0)
  366. MUI_LABEL(1,40, "Number: ")
  367. MUI_XY("N1",70, 40)
  368. MUI_GOTO(64, 59, 20, " Ok ")
  369. MUI_FORM(23)
  370. MUI_STYLE(2)
  371. MUI_LABEL(1,5, "mui_u8g2_u8_min_max_wm_mse_pf")
  372. MUI_LABEL(1,12, "MUIF_U8G2_U8_MIN_MAX")
  373. MUI_LABEL(1,19, "MUI_XY")
  374. MUI_LABEL(1,25, "Input for uint8_t number")
  375. MUI_XY("HR", 0,26)
  376. MUI_STYLE(0)
  377. MUI_LABEL(1,40, "Number: ")
  378. MUI_XY("N2",70, 40)
  379. MUI_GOTO(64, 59, 20, " Ok ")
  380. MUI_FORM(24)
  381. MUI_STYLE(2)
  382. MUI_LABEL(1,5, "mui_u8g2_u8_min_max_wm_mud_pf")
  383. MUI_LABEL(1,12, "MUIF_U8G2_U8_MIN_MAX")
  384. MUI_LABEL(1,19, "MUI_XY")
  385. MUI_LABEL(1,25, "Input for uint8_t number")
  386. MUI_XY("HR", 0,26)
  387. MUI_STYLE(0)
  388. MUI_LABEL(1,40, "Number: ")
  389. MUI_XY("N3",70, 40)
  390. MUI_GOTO(64, 59, 20, " Ok ")
  391. MUI_FORM(30)
  392. MUI_STYLE(1)
  393. MUI_LABEL(5,10, "uint8 Checkbox")
  394. MUI_XY("HR", 0,13)
  395. MUI_STYLE(7)
  396. MUI_DATA("GP",
  397. MUI_31 "u8_chkbox_wm_pi|"
  398. MUI_32 "u8_radio_wm_pi|"
  399. MUI_1 "Back to Main Menu" )
  400. MUI_XYA("GC", 5, 25, 0)
  401. MUI_XYA("GC", 5, 37, 1)
  402. MUI_XYA("GC", 5, 49, 2)
  403. MUI_XYA("GC", 5, 61, 3)
  404. MUI_FORM(31)
  405. MUI_STYLE(2)
  406. MUI_LABEL(1,5, "mui_u8g2_u8_chkbox_wm_pi")
  407. MUI_LABEL(1,12, "MUIF_VARIABLE")
  408. MUI_LABEL(1,19, "MUI_XY")
  409. MUI_LABEL(1,25, "Checkbox, values 0 and 1, uint8_t)")
  410. MUI_XY("HR", 0,26)
  411. MUI_STYLE(0)
  412. MUI_LABEL(1,40, "Checkbox 1: ")
  413. MUI_XY("C1",66, 40)
  414. MUI_LABEL(1,55, "Checkbox 2: ")
  415. MUI_XY("C2",66, 55)
  416. MUI_STYLE(3)
  417. MUI_GOTO(110, 54, 30, "\x31")
  418. MUI_FORM(32)
  419. MUI_STYLE(2)
  420. MUI_LABEL(1,5, "mui_u8g2_u8_radio_wm_pi")
  421. MUI_LABEL(1,12, "MUIF_VARIABLE")
  422. MUI_LABEL(1,19, "MUI_XYA, MUI_XYAT")
  423. MUI_LABEL(1,25, "Radio buttons, assign arg to variable")
  424. MUI_XY("HR", 0,26)
  425. MUI_STYLE(0)
  426. MUI_XYAT("RB", 1, 40, 1, "Radio 1")
  427. MUI_XYAT("RB", 1, 55, 2, "Radio 2")
  428. MUI_STYLE(3)
  429. MUI_GOTO(110, 54, 30, "\x31")
  430. MUI_FORM(40)
  431. MUI_STYLE(1)
  432. MUI_LABEL(5,10, "uint8 Cycle Options")
  433. MUI_XY("HR", 0,13)
  434. MUI_STYLE(7)
  435. MUI_DATA("GP",
  436. MUI_41 "u8_opt_line_wa_mse_pi|"
  437. MUI_42 "u8_opt_line_wa_mud_pi|"
  438. MUI_43 "u8_opt_line_wa_mse_pf|"
  439. MUI_44 "u8_opt_line_wa_mud_pf|"
  440. MUI_1 "Back to Main Menu" )
  441. MUI_XYA("GC", 5, 25, 0)
  442. MUI_XYA("GC", 5, 37, 1)
  443. MUI_XYA("GC", 5, 49, 2)
  444. MUI_XYA("GC", 5, 61, 3)
  445. MUI_FORM(41)
  446. MUI_STYLE(2)
  447. MUI_LABEL(1,5, "mui_u8g2_u8_opt_line_wa_mse_pi")
  448. MUI_LABEL(1,12, "MUIF_VARIABLE")
  449. MUI_LABEL(1,19, "MUI_XYAT")
  450. MUI_LABEL(1,25, "Options forward cycle")
  451. MUI_XY("HR", 0,26)
  452. MUI_STYLE(0)
  453. MUI_LABEL(5,40, "Fruit:")
  454. MUI_XYAT("O1",60, 40, 60, "Banana|Apple|Melon|Cranberry")
  455. MUI_STYLE(0)
  456. //MUI_XYAT("G6", 64, 59, 40, " Ok ")
  457. MUI_GOTO(64, 59, 40, " Ok ")
  458. MUI_FORM(42)
  459. MUI_STYLE(2)
  460. MUI_LABEL(1,5, "mui_u8g2_u8_opt_line_wa_mud_pi")
  461. MUI_LABEL(1,12, "MUIF_VARIABLE")
  462. MUI_LABEL(1,19, "MUI_XYAT")
  463. MUI_LABEL(1,25, "Options forward+backward cycle")
  464. MUI_XY("HR", 0,26)
  465. MUI_STYLE(0)
  466. MUI_LABEL(5,40, "Fruit:")
  467. MUI_XYAT("O2",60, 40, 60, "Banana|Apple|Melon|Cranberry")
  468. MUI_STYLE(0)
  469. //MUI_XYAT("G6", 64, 59, 40, " Ok ")
  470. MUI_GOTO(64, 59, 40, " Ok ")
  471. MUI_FORM(43)
  472. MUI_STYLE(2)
  473. MUI_LABEL(1,5, "mui_u8g2_u8_opt_line_wa_mse_pf")
  474. MUI_LABEL(1,12, "MUIF_VARIABLE")
  475. MUI_LABEL(1,19, "MUI_XYAT")
  476. MUI_LABEL(1,25, "Options forward cycle")
  477. MUI_XY("HR", 0,26)
  478. MUI_STYLE(0)
  479. MUI_LABEL(5,40, "Fruit:")
  480. MUI_XYAT("O3",60, 40, 60, "Banana|Apple|Melon|Cranberry")
  481. MUI_STYLE(0)
  482. MUI_XYAT("G6", 64, 59, 40, " Ok ")
  483. //MUI_GOTO(64, 59, 40, " Ok ")
  484. MUI_FORM(44)
  485. MUI_STYLE(2)
  486. MUI_LABEL(1,5, "mui_u8g2_u8_opt_line_wa_mud_pf")
  487. MUI_LABEL(1,12, "MUIF_VARIABLE")
  488. MUI_LABEL(1,19, "MUI_XYAT")
  489. MUI_LABEL(1,25, "Options forward+backward cycle")
  490. MUI_XY("HR", 0,26)
  491. MUI_STYLE(0)
  492. MUI_LABEL(5,40, "Fruit:")
  493. MUI_XYAT("O4",60, 40, 60, "Banana|Apple|Melon|Cranberry")
  494. MUI_STYLE(0)
  495. MUI_XYAT("G6", 64, 59, 40, " Ok ")
  496. //MUI_GOTO(64, 59, 40, " Ok ")
  497. MUI_FORM(50)
  498. MUI_STYLE(1)
  499. MUI_LABEL(5,10, "uint8 ParentChild Select")
  500. MUI_XY("HR", 0,13)
  501. MUI_STYLE(7)
  502. MUI_DATA("GP",
  503. MUI_51 "u8_opt_radio_child_w1_pi|"
  504. MUI_53 "u8_opt_child_wm_pi|"
  505. MUI_1 "Back to Main Menu" )
  506. MUI_XYA("GC", 5, 25, 0)
  507. MUI_XYA("GC", 5, 37, 1)
  508. MUI_XYA("GC", 5, 49, 2)
  509. //MUI_XYA("GC", 5, 61, 3)
  510. MUI_FORM(51)
  511. MUI_STYLE(2)
  512. MUI_LABEL(1,5, "..._u8_opt_parent_wm_pi")
  513. MUI_LABEL(1,12, "MUIF_VARIABLE")
  514. MUI_LABEL(1,19, "MUI_XYAT")
  515. MUI_LABEL(1,25, "Parent: Show selected option")
  516. MUI_XY("HR", 0,26)
  517. MUI_STYLE(0)
  518. MUI_LABEL(5,40, "Color:")
  519. MUI_XYAT("P1",60, 40, 52, "red|orange|yellow|green|cyan|azure|blue|violet|magenta|rose")
  520. MUI_STYLE(0)
  521. MUI_GOTO(64, 59, 50, " Ok ")
  522. MUI_FORM(52)
  523. MUI_STYLE(2)
  524. MUI_LABEL(1,5, "..._u8_opt_radio_child_w1_pi")
  525. MUI_LABEL(1,12, "MUIF_VARIABLE")
  526. MUI_LABEL(1,19, "MUI_XYA")
  527. MUI_LABEL(1,25, "Child: Show selectable options")
  528. MUI_XY("HR", 0,26)
  529. MUI_STYLE(0)
  530. MUI_XYA("ca", 5, 38, 0)
  531. MUI_XYA("ca", 5, 49, 1)
  532. MUI_XYA("ca", 5, 60, 2)
  533. MUI_FORM(53)
  534. MUI_STYLE(2)
  535. MUI_LABEL(1,5, "..._u8_opt_parent_wm_pi")
  536. MUI_LABEL(1,12, "MUIF_VARIABLE")
  537. MUI_LABEL(1,19, "MUI_XYAT")
  538. MUI_LABEL(1,25, "Parent: Show selected option")
  539. MUI_XY("HR", 0,26)
  540. MUI_STYLE(0)
  541. MUI_LABEL(15,42, "We need:")
  542. MUI_STYLE(4)
  543. MUI_XYAT("P2",80, 49, 54, "\x30|\x31|\x32|\x33|\x34|\x35|\x36|\x37|\x38|\x39|\x40|\x41|\x42|\x43")
  544. MUI_STYLE(0)
  545. MUI_GOTO(64, 59, 50, " Ok ")
  546. MUI_FORM(54)
  547. MUI_STYLE(2)
  548. MUI_LABEL(1,5, "..._u8_opt_child_wm_pi")
  549. MUI_LABEL(1,12, "MUIF_VARIABLE")
  550. MUI_LABEL(1,19, "MUI_XYA")
  551. MUI_LABEL(1,25, "Child: Show selectable options")
  552. MUI_XY("HR", 0,26)
  553. MUI_STYLE(4)
  554. MUI_XYA("cf", 3, 53, 0)
  555. MUI_XYA("cf", 28, 53, 1)
  556. MUI_XYA("cf", 53, 53, 2)
  557. MUI_XYA("cf", 78, 53, 3)
  558. MUI_XYA("cf", 103, 53, 4)
  559. MUI_FORM(60)
  560. MUI_STYLE(1)
  561. MUI_LABEL(5,10, "uint8 Char/Text Input")
  562. MUI_XY("HR", 0,13)
  563. MUI_STYLE(7)
  564. MUI_DATA("GP",
  565. MUI_61 "u8_char_wm_mud_pi|"
  566. MUI_1 "Back to Main Menu" )
  567. MUI_XYA("GC", 5, 25, 0)
  568. MUI_XYA("GC", 5, 37, 1)
  569. MUI_XYA("GC", 5, 49, 2)
  570. MUI_XYA("GC", 5, 61, 3)
  571. MUI_FORM(61)
  572. MUI_STYLE(2)
  573. MUI_LABEL(1,5, "mui_u8g2_u8_char_wm_mud_pi")
  574. MUI_LABEL(1,12, "MUIF_VARIABLE")
  575. MUI_LABEL(1,19, "MUI_XYAT")
  576. MUI_LABEL(1,25, "4x Char Input")
  577. MUI_XY("HR", 0,26)
  578. MUI_STYLE(0)
  579. MUI_LABEL(5,40, "Text:")
  580. MUI_STYLE(5)
  581. MUI_XY("T0",40, 40)
  582. MUI_XY("T1",48, 40)
  583. MUI_XY("T2",56, 40)
  584. MUI_XY("T3",64, 40)
  585. MUI_STYLE(0)
  586. MUI_GOTO(64, 59, 60, " Ok ")
  587. MUI_FORM(70)
  588. MUI_STYLE(1)
  589. MUI_LABEL(5,10, "uint16 Cycle Options")
  590. MUI_XY("HR", 0,13)
  591. MUI_STYLE(7)
  592. MUI_DATA("GP",
  593. MUI_71 "u16_list_line_wa_mse_pi|"
  594. MUI_72 "u16_list_line_wa_mud_pi|"
  595. MUI_1 "Back to Main Menu" )
  596. MUI_XYA("GC", 5, 25, 0)
  597. MUI_XYA("GC", 5, 37, 1)
  598. MUI_XYA("GC", 5, 49, 2)
  599. MUI_XYA("GC", 5, 61, 3)
  600. MUI_FORM(71)
  601. MUI_STYLE(2)
  602. MUI_LABEL(1,5, "mui_u8g2_u16_list_line_wa_mse_pi")
  603. MUI_LABEL(1,12, "MUIF_U8G2_U16_LIST")
  604. MUI_LABEL(1,19, "MUI_XYA")
  605. MUI_LABEL(1,25, "Cycle through options")
  606. MUI_XY("HR", 0,26)
  607. MUI_STYLE(0)
  608. MUI_LABEL(5,40, "Animal:")
  609. MUI_XYA("A1",45, 40, 50)
  610. MUI_GOTO(64, 59, 70, " Ok ")
  611. MUI_FORM(72)
  612. MUI_STYLE(2)
  613. MUI_LABEL(1,5, "mui_u8g2_u16_list_line_wa_mud_pi")
  614. MUI_LABEL(1,12, "MUIF_U8G2_U16_LIST")
  615. MUI_LABEL(1,19, "MUI_XYA")
  616. MUI_LABEL(1,25, "Cycle through options")
  617. MUI_XY("HR", 0,26)
  618. MUI_STYLE(0)
  619. MUI_LABEL(5,40, "Animal:")
  620. MUI_XYA("A2",45, 40, 50)
  621. MUI_GOTO(64, 59, 70, " Ok ")
  622. //uint8_t mui_u8g2_u16_list_parent_wm_pi(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U16_LIST, MUI_XYA, arg=subform */
  623. //uint8_t mui_u8g2_u16_list_child_w1_pi(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U16_LIST, MUI_XYA, arg=sub element number */
  624. MUI_FORM(80)
  625. MUI_STYLE(1)
  626. MUI_LABEL(5,10, "uint16 ParentChild Select")
  627. MUI_XY("HR", 0,13)
  628. MUI_STYLE(7)
  629. MUI_DATA("GP",
  630. MUI_81 "u16_list_parent_wm_pi|"
  631. MUI_1 "Back to Main Menu" )
  632. MUI_XYA("GC", 5, 25, 0)
  633. MUI_XYA("GC", 5, 37, 1)
  634. MUI_XYA("GC", 5, 49, 2)
  635. //MUI_XYA("GC", 5, 61, 3)
  636. MUI_FORM(81)
  637. MUI_STYLE(2)
  638. MUI_LABEL(1,5, "..._u16_list_parent_wm_pi")
  639. MUI_LABEL(1,12, "MUIF_U8G2_U16_LIST")
  640. MUI_LABEL(1,19, "MUI_XYA")
  641. MUI_LABEL(1,25, "Parent: Show selected option")
  642. MUI_XY("HR", 0,26)
  643. MUI_STYLE(0)
  644. MUI_LABEL(5,40, "Animal:")
  645. MUI_XYA("AP",50, 40, 82) /* jump to sub form 82 */
  646. MUI_GOTO(64, 59, 80, " Ok ")
  647. MUI_FORM(82)
  648. MUI_STYLE(2)
  649. MUI_LABEL(1,5, "...u16_list_child_w1_pi")
  650. MUI_LABEL(1,12, "MUIF_U8G2_U16_LIST")
  651. MUI_LABEL(1,19, "MUI_XYA")
  652. MUI_LABEL(1,25, "Child: Show selectable options")
  653. MUI_XY("HR", 0,26)
  654. MUI_STYLE(0)
  655. MUI_XYA("AC", 5, 38, 0)
  656. MUI_XYA("AC", 5, 49, 1)
  657. MUI_XYA("AC", 5, 60, 2)
  658. MUI_FORM(90)
  659. MUI_STYLE(1)
  660. MUI_LABEL(5,10, "uint8 Bar Graph")
  661. MUI_XY("HR", 0,13)
  662. MUI_STYLE(7)
  663. MUI_DATA("GP",
  664. MUI_91 "u8_bar_wm_mse_pi|"
  665. MUI_92 "u8_bar_wm_mud_pi|"
  666. MUI_93 "u8_bar_wm_mse_pf|"
  667. MUI_94 "u8_bar_wm_mud_pf|"
  668. MUI_1 "Back to Main Menu" )
  669. MUI_XYA("GC", 5, 25, 0)
  670. MUI_XYA("GC", 5, 37, 1)
  671. MUI_XYA("GC", 5, 49, 2)
  672. MUI_XYA("GC", 5, 61, 3)
  673. MUI_FORM(91)
  674. MUI_STYLE(2)
  675. MUI_LABEL(1,5, "mui_u8g2_u8_bar_wm_mse_pi")
  676. MUI_LABEL(1,12, "MUIF_U8G2_U8_MIN_MAX_STEP")
  677. MUI_LABEL(1,19, "MUI_XY")
  678. MUI_LABEL(1,25, "uint8_t bar graph input")
  679. MUI_XY("HR", 0,26)
  680. MUI_STYLE(0)
  681. MUI_LABEL(1,40, "Bar: ")
  682. MUI_XY("B0",40, 40)
  683. MUI_GOTO(64, 59, 90, " Ok ")
  684. MUI_FORM(92)
  685. MUI_STYLE(2)
  686. MUI_LABEL(1,5, "mui_u8g2_u8_bar_wm_mud_pi")
  687. MUI_LABEL(1,12, "MUIF_U8G2_U8_MIN_MAX_STEP")
  688. MUI_LABEL(1,19, "MUI_XY")
  689. MUI_LABEL(1,25, "uint8_t bar graph input")
  690. MUI_XY("HR", 0,26)
  691. MUI_STYLE(0)
  692. MUI_LABEL(1,40, "Bar: ")
  693. MUI_XY("B1",40, 40)
  694. MUI_GOTO(64, 59, 90, " Ok ")
  695. MUI_FORM(93)
  696. MUI_STYLE(2)
  697. MUI_LABEL(1,5, "mui_u8g2_u8_bar_wm_mse_pf")
  698. MUI_LABEL(1,12, "MUIF_U8G2_U8_MIN_MAX_STEP")
  699. MUI_LABEL(1,19, "MUI_XY")
  700. MUI_LABEL(1,25, "uint8_t bar graph input")
  701. MUI_XY("HR", 0,26)
  702. MUI_STYLE(0)
  703. MUI_LABEL(1,40, "Bar: ")
  704. MUI_XY("B2",40, 40)
  705. MUI_GOTO(64, 59, 90, " Ok ")
  706. MUI_FORM(94)
  707. MUI_STYLE(2)
  708. MUI_LABEL(1,5, "mui_u8g2_u8_bar_wm_mud_pf")
  709. MUI_LABEL(1,12, "MUIF_U8G2_U8_MIN_MAX_STEP")
  710. MUI_LABEL(1,19, "MUI_XY")
  711. MUI_LABEL(1,25, "uint8_t bar graph input")
  712. MUI_XY("HR", 0,26)
  713. MUI_STYLE(0)
  714. MUI_LABEL(1,40, "Bar: ")
  715. MUI_XY("B3",40, 40)
  716. MUI_GOTO(64, 59, 90, " Ok ")
  717. ;
  718. int screenshot_n = 0;
  719. void do_screenshot(void)
  720. {
  721. char s[4096];
  722. u8x8_SaveBitmapTGA(u8g2_GetU8x8(&u8g2), "screenshot.tga");
  723. sprintf( s,
  724. "convert -border 4 -bordercolor 'rgb(255,190,40)'"
  725. " -fill 'rgb(255,170,0)' -opaque white"
  726. " -filter point -resize 200%%"
  727. " screenshot.tga pic%04d.png", screenshot_n);
  728. system(s);
  729. screenshot_n++;
  730. /*
  731. gif animation:
  732. convert -delay 40 -loop 0 pic*.png animation.gif
  733. */
  734. }
  735. char key_queue[1024] = "";
  736. int key_pos = 0;
  737. int get_key(void)
  738. {
  739. int k;
  740. if ( key_queue[key_pos] != '\0' )
  741. {
  742. k = key_queue[key_pos++];
  743. }
  744. else
  745. {
  746. k = u8g_sdl_get_key();
  747. }
  748. return k;
  749. }
  750. void set_key_queue(const char *s)
  751. {
  752. strcpy(key_queue, s);
  753. key_pos = 0;
  754. }
  755. int draw(int form, const char *keys, const char *gif)
  756. {
  757. int k;
  758. int is_screenshot_enabled = 0;
  759. mui_GotoForm(&ui, form, 0);
  760. set_key_queue(keys);
  761. for(;;)
  762. {
  763. u8g2_SetFontRefHeightExtendedText(&u8g2);
  764. u8g2_FirstPage(&u8g2);
  765. do
  766. {
  767. mui_Draw(&ui);
  768. } while( u8g2_NextPage(&u8g2) );
  769. if ( is_screenshot_enabled )
  770. {
  771. do_screenshot();
  772. }
  773. // printf("mui_GetCurrentCursorFocusPosition=%d\n", mui_GetCurrentCursorFocusPosition(&ui));
  774. do
  775. {
  776. k = get_key();
  777. } while( k < 0 );
  778. printf("%c", k);
  779. /*
  780. if ( k == 'e' ) y -= 1;
  781. if ( k == 'x' ) y += 1;
  782. if ( k == 's' ) x -= 1;
  783. if ( k == 'd' ) x += 1;
  784. */
  785. if ( k == 'q' ) break;
  786. if ( k == 'n' )
  787. {
  788. mui_NextField(&ui);
  789. }
  790. if ( k == 'p' )
  791. {
  792. mui_PrevField(&ui);
  793. }
  794. if ( k == 's' )
  795. {
  796. mui_SendSelect(&ui);
  797. }
  798. if ( k == 't' )
  799. {
  800. puts("screenshot");
  801. do_screenshot();
  802. }
  803. if ( k == 'a' ) // start animation
  804. {
  805. screenshot_n = 0;
  806. system("rm pic*.png");
  807. is_screenshot_enabled = 1;
  808. }
  809. if ( k == '.' )
  810. {
  811. char sys[1024];
  812. is_screenshot_enabled = 0;
  813. sprintf(sys, "convert -delay 100 -loop 0 pic*.png %s", gif);
  814. system(sys);
  815. }
  816. if ( k == 'x' )
  817. {
  818. mui_GotoForm(&ui, 10, 0);
  819. set_key_queue("asnnsnsnnsnnsnnns.");
  820. }
  821. }
  822. return 0;
  823. }
  824. int main(void)
  825. {
  826. u8g2_SetupBuffer_SDL_128x64_4(&u8g2, &u8g2_cb_r0);
  827. u8x8_InitDisplay(u8g2_GetU8x8(&u8g2));
  828. u8x8_SetPowerSave(u8g2_GetU8x8(&u8g2), 0);
  829. u8x8_ConnectBitmapToU8x8(u8g2_GetU8x8(&u8g2)); /* connect to bitmap */
  830. u8g2_SetFontMode(&u8g2, 1);
  831. mui_Init(&ui, &u8g2, fds, muif_list, sizeof(muif_list)/sizeof(muif_t));
  832. mui_GotoForm(&ui, 1, 0);
  833. draw(1, "", ""); return 0;
  834. /*
  835. a: start animation
  836. .: end and write animation
  837. goto form (first argument) then press a to see where the animation has to start
  838. */
  839. /*
  840. draw(10, "asnnnsnsnnnsnnsnnnsnnnsnnnnns.q", "mui_btn_goto.gif");
  841. draw(20, "assssnsnssnnnnnnsnsnnssppssssssnsnnnssnpppppppsns.q", "mui_uint8_number.gif");
  842. draw(30, "assnsnsnssnsnsssnsns.q", "mui_uint8_checkbox_radio.gif");
  843. draw(40, "asnnssnsnssppsnsnnsnnsssnsnnnssnnsns.q", "mui_u8g2_u8_opt_line_wa.gif");
  844. draw(50, "assnnnnsnnspppsnsnssnnnsnnsnnnnnnnsns.q", "mui_u8g2_u8_opt_parent.gif");
  845. draw(60, "assppppppsnsnnnnnnnnnsnsppppppppppppppppppppsnsnnnsns.q", "mui_u8g2_u8_char_wm_mud_pi.gif");
  846. draw(70, "assssssnsnssnnnnnnsnnspsns.q", "mui_u8g2_u16_list_line.gif");
  847. draw(80, "assnnssnnnssoppppppnsns.q", "mui_u8g2_u16_list_child.gif");
  848. draw(90, "assssnsnssnnpsnsnnsssnnsnsnnnsspppnsns.q", "mui_u8g2_u8_bar.gif");
  849. */
  850. draw(10, "asnnnsnsnnnsnsnnnsnsnnnnns.q", "mui_btn_goto.gif");
  851. draw(20, "assssnsnssnnnnnnsnsnssppssssssnsnssnpppppppsns.q", "mui_uint8_number.gif");
  852. draw(30, "assnsnsnssnsnsssnsns.q", "mui_uint8_checkbox_radio.gif");
  853. draw(40, "assssspsnssnnnnnppsnsnssssnsnssppsns.q", "mui_u8g2_u8_opt_line_wa.gif");
  854. draw(50, "assnnnnsnnspppsnsnssnnnsnnsnnnnnnnsns.q", "mui_u8g2_u8_opt_parent.gif");
  855. draw(60, "assppppppsnsnnnnnnnnnsnsppppppppppppppppppppsnsnnnsns.q", "mui_u8g2_u8_char_wm_mud_pi.gif");
  856. draw(70, "assssssnsnssnnnnnnsnnspsns.q", "mui_u8g2_u16_list_line.gif");
  857. draw(80, "assnnssnnnssoppppppnsns.q", "mui_u8g2_u16_list_child.gif");
  858. draw(90, "assssnsnssnnpsnsnsssnnsnsnsspppnsns.q", "mui_u8g2_u8_bar.gif");
  859. return 0;
  860. }