main.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. #include "u8g2.h"
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include "mui.h"
  6. #include "mui_u8g2.h"
  7. /*=================================================*/
  8. /* global variables */
  9. u8g2_t u8g2;
  10. mui_t ui;
  11. uint8_t var1 = '0';
  12. uint8_t var2 = '0';
  13. uint8_t var3 = '0';
  14. uint8_t var4 = '0';
  15. muif_t muif_list[] MUI_PROGMEM = {
  16. MUIF_U8G2_LABEL(),
  17. MUIF_U8G2_FONT_STYLE(0, u8g2_font_5x8_tr),
  18. MUIF_VARIABLE("B1",&var1,mui_u8g2_u8_char_wm_mud_pi),
  19. MUIF_VARIABLE("B2",&var2,mui_u8g2_u8_char_wm_mud_pi),
  20. MUIF_VARIABLE("B3",&var3,mui_u8g2_u8_char_wm_mud_pi),
  21. MUIF_VARIABLE("B4",&var4,mui_u8g2_u8_char_wm_mud_pi),
  22. MUIF_BUTTON("G0", mui_u8g2_btn_goto_wm_fi)
  23. };
  24. fds_t fds[] MUI_PROGMEM =
  25. MUI_FORM(1)
  26. MUI_STYLE(0)
  27. MUI_LABEL(5,10, "Password")
  28. MUI_XY("B1", 5, 20)
  29. MUI_XY("B2", 15, 20)
  30. MUI_XY("B3", 25, 20)
  31. MUI_XY("B4", 35, 20)
  32. MUI_XYAT("G0", 64, 40, 10, "Done")
  33. MUI_FORM(10)
  34. MUI_STYLE(0)
  35. MUI_LABEL(5,10, "Info Page")
  36. MUI_XYAT("G0", 64, 40, 1, "Password")
  37. ;
  38. int screenshot_n = 0;
  39. void do_screenshot(void)
  40. {
  41. char s[4096];
  42. u8x8_SaveBitmapTGA(u8g2_GetU8x8(&u8g2), "screenshot.tga");
  43. sprintf( s,
  44. "convert -border 4 -bordercolor 'rgb(255,190,40)'"
  45. " -fill 'rgb(255,170,0)' -opaque white"
  46. " -filter point -resize 200%%"
  47. " screenshot.tga pic%04d.png", screenshot_n);
  48. system(s);
  49. screenshot_n++;
  50. /*
  51. gif animation:
  52. convert -delay 40 -loop 0 pic*.png animation.gif
  53. */
  54. }
  55. uint8_t *old_buffer = NULL;
  56. uint8_t *new_buffer = NULL;
  57. void merge_buffer(u8g2_uint_t x)
  58. {
  59. uint8_t *dest_buffer = u8g2_GetBufferPtr(&u8g2);
  60. uint8_t th = u8g2_GetBufferTileHeight(&u8g2);
  61. uint8_t tw = u8g2_GetBufferTileWidth(&u8g2);
  62. u8g2_uint_t w = tw*8;
  63. u8g2_uint_t i, j;
  64. uint8_t b;
  65. for( j = 0; j < th; j++ )
  66. {
  67. for( i = 0; i < w; i++ )
  68. {
  69. if ( i < x )
  70. b = new_buffer[w-1-x+i+j*w];
  71. else
  72. b = old_buffer[i-x+j*w];
  73. dest_buffer[i+j*w] = b;
  74. }
  75. }
  76. }
  77. void render_buffer(void)
  78. {
  79. /* assume full buffer */
  80. u8g2_SetBufferCurrTileRow(&u8g2, 0);
  81. u8g2_ClearBuffer(&u8g2);
  82. mui_Draw(&ui); /* render buffer without sending the content to the display */
  83. }
  84. int main(void)
  85. {
  86. int x, y;
  87. int k;
  88. int form_id = -1;
  89. u8g2_SetupBuffer_SDL_128x64(&u8g2, &u8g2_cb_r0);
  90. old_buffer = (uint8_t *)malloc(u8g2_GetBufferSize(&u8g2));
  91. new_buffer = (uint8_t *)malloc(u8g2_GetBufferSize(&u8g2));
  92. printf("buffer size=%d\n", u8g2_GetBufferSize(&u8g2));
  93. u8x8_InitDisplay(u8g2_GetU8x8(&u8g2));
  94. u8x8_SetPowerSave(u8g2_GetU8x8(&u8g2), 0);
  95. u8x8_ConnectBitmapToU8x8(u8g2_GetU8x8(&u8g2)); /* connect to bitmap */
  96. u8g2_SetFont(&u8g2, u8g2_font_6x10_tr);
  97. u8g2_SetFontMode(&u8g2, 1);
  98. u8g2_SetFontRefHeightExtendedText(&u8g2);
  99. mui_Init(&ui, &u8g2, fds, muif_list, sizeof(muif_list)/sizeof(muif_t));
  100. mui_GotoForm(&ui, 10, 0);
  101. form_id = mui_GetCurrentFormId(&ui);
  102. x = 4; // use as height for the box
  103. y = 0;
  104. for(;;)
  105. {
  106. render_buffer();
  107. u8g2_SendBuffer(&u8g2);
  108. do_screenshot();
  109. memcpy(old_buffer, u8g2_GetBufferPtr(&u8g2), u8g2_GetBufferSize(&u8g2));
  110. // printf("mui_GetCurrentCursorFocusPosition=%d\n", mui_GetCurrentCursorFocusPosition(&ui));
  111. do
  112. {
  113. k = u8g_sdl_get_key();
  114. } while( k < 0 );
  115. if ( k == 273 ) y -= 1;
  116. if ( k == 274 ) y += 1;
  117. if ( k == 276 ) x -= 1;
  118. if ( k == 275 ) x += 1;
  119. /*
  120. if ( k == 'e' ) y -= 1;
  121. if ( k == 'x' ) y += 1;
  122. if ( k == 's' ) x -= 1;
  123. if ( k == 'd' ) x += 1;
  124. */
  125. if ( k == 'q' ) break;
  126. if ( k == 'n' )
  127. mui_NextField(&ui);
  128. if ( k == 'p' )
  129. mui_PrevField(&ui);
  130. if ( k == 's' )
  131. mui_SendSelect(&ui);
  132. if ( form_id != mui_GetCurrentFormId(&ui) )
  133. {
  134. render_buffer();
  135. memcpy(new_buffer, u8g2_GetBufferPtr(&u8g2), u8g2_GetBufferSize(&u8g2));
  136. for( x = 0; x < u8g2_GetBufferTileWidth(&u8g2)*8; x+=2 )
  137. {
  138. merge_buffer(x);
  139. usleep(5*1000);
  140. u8g2_SendBuffer(&u8g2);
  141. do_screenshot();
  142. }
  143. form_id = mui_GetCurrentFormId(&ui);
  144. }
  145. if ( k == 't' )
  146. {
  147. puts("screenshot");
  148. do_screenshot();
  149. }
  150. if ( x < 0 )
  151. x = 0;
  152. }
  153. return 0;
  154. }