diff --git a/README.md b/README.md index 13d36180..29f8f85c 100644 --- a/README.md +++ b/README.md @@ -8,5 +8,5 @@ Description: https://github.com/olikraus/u8g2/wiki Issue Tracker: https://github.com/olikraus/u8g2/issues -Download (2.34.18): https://github.com/olikraus/U8g2_Arduino/archive/master.zip +Download (2.34.19): https://github.com/olikraus/U8g2_Arduino/archive/master.zip diff --git a/examples/page_buffer/LoadFromSD/LoadFromSD.ino b/examples/page_buffer/LoadFromSD/LoadFromSD.ino index 4b8102f3..fc1fa83e 100644 --- a/examples/page_buffer/LoadFromSD/LoadFromSD.ino +++ b/examples/page_buffer/LoadFromSD/LoadFromSD.ino @@ -479,6 +479,9 @@ void drawFile(u8g2_int_t x, u8g2_int_t y, const char *filename) { len = w; // len will contain the horizontal number of pixel mask = 1; b = myFile.read(); // load the first 8 pixel into "b" + + /* The following code has an issue with some values for "w", see issue 2179 */ + /* while(len > 0) { // draw all pixel of one line if ( b & mask ) { // check one pixel u8g2.setDrawColor(1); @@ -496,6 +499,30 @@ void drawFile(u8g2_int_t x, u8g2_int_t y, const char *filename) { } len--; // decrease the horizontal width (remaining pixel) } + */ + + /* new code */ + + for(;;) { // draw all pixel of one line + if ( b & mask ) { // check one pixel + u8g2.setDrawColor(1); + u8g2.drawPixel(xpos,y); + } else { + u8g2.setDrawColor(0); + u8g2.drawPixel(xpos,y); + } + xpos++; // calculate next x pos of the pixel + mask <<= 1; // update the mask + len--; // decrease the horizontal width (remaining pixel) + if ( len == 0 ) // check if row is finished + break; + if ( mask == 0 ) + { + mask = 1; // revert mask and ... + b = myFile.read(); // ... load the next 8 pixel values from the file + } + } + y++; // goto next line h--; // decrease the number of remaining lines } diff --git a/extras/ChangeLog b/extras/ChangeLog index a2e84f98..2fa393de 100644 --- a/extras/ChangeLog +++ b/extras/ChangeLog @@ -301,15 +301,24 @@ https://github.com/olikraus/u8g2 ChangeLog 2023-xx-xx v2.34.xx olikraus@gmail.com * SSD1327 ZJY M150 128x128 (issue 1960) * SSD1316 96x32 (issue 1938) + * SSD1322 240x128 (issue 2092) * SH1108 128x160 (issue 1998) * SSD1306 96x39 (issue 1959) * S1D15300 128x64, flip mode 1 not supported, (issue 2063) * SSD1362 256x64 (issue 1322, issue 2051) - * JLX160x80 (issue 2058) + * ST75256 JLX160x80 (NOT TESTED, issue 2058) * UC1638 240x128 (issue 2075) + * SED1330 320x200 (issue 1086) * Bugfix: Clear font_height_mode during setup to ensure correct default values in cases where the u8g2 struct / class is created via dynamic memory allocation (issue 2046) * Bugfix: Fix line draw procedure in 16 bit mode (issue 2053) * Added Spleen Monospaced Font from https://github.com/fcambus/spleen (issue 2015) * Extended the "E" font range with subscript characters if available in the original font (issue 2079) * Bugfix for ESP32 HW SPI Pin Remapping (issue 377, PR 2123) + * Bugfix for LoadFromSD examle (issue 2179) + * Changed MUI_LABEL to support UTF8 (issue 2196) + * Compiler Warning Cleanup for polygon draw (issue 1999, PR 2101) + * Added MUI fixed width bar graph (issue 2200) + * Added 04b fonts from u8glib (issue 2157) + * Added "font_tiny5" (issue 2185) + diff --git a/keywords.txt b/keywords.txt index 97428c3f..85524030 100644 --- a/keywords.txt +++ b/keywords.txt @@ -45,7 +45,6 @@ drawTriangle KEYWORD2 drawUTF8 KEYWORD2 drawVLine KEYWORD2 drawXBM KEYWORD2 -drawXBMP KEYWORD2 enableUTF8Print KEYWORD2 firstPage KEYWORD2 getAscent KEYWORD2 @@ -134,6 +133,10 @@ u8g2_font_freedoomr25_mn LITERAL1 u8g2_font_7Segments_26x42_mn LITERAL1 u8g2_font_7_Seg_33x19_mn LITERAL1 u8g2_font_7_Seg_41x21_mn LITERAL1 +u8g2_font_tiny5_tf LITERAL1 +u8g2_font_tiny5_tr LITERAL1 +u8g2_font_04b_03b_tr LITERAL1 +u8g2_font_04b_03_tr LITERAL1 u8g2_font_amstrad_cpc_extended_8f LITERAL1 u8g2_font_amstrad_cpc_extended_8r LITERAL1 u8g2_font_amstrad_cpc_extended_8n LITERAL1 @@ -914,7 +917,6 @@ u8g2_font_iconquadpix_m_all LITERAL1 u8g2_font_tallpix_tr LITERAL1 u8g2_font_botmaker_te LITERAL1 u8g2_font_efraneextracondensed_te LITERAL1 -u8g2_font_minimal3x3_tu LITERAL1 u8g2_font_3x3basic_tr LITERAL1 u8g2_font_tiny_gk_tr LITERAL1 u8g2_font_threepix_tr LITERAL1 @@ -930,9 +932,6 @@ u8g2_font_smolfont_te LITERAL1 u8g2_font_tinyunicode_tf LITERAL1 u8g2_font_tinyunicode_tr LITERAL1 u8g2_font_tinyunicode_te LITERAL1 -u8g2_font_micropixel_tf LITERAL1 -u8g2_font_micropixel_tr LITERAL1 -u8g2_font_micropixel_te LITERAL1 u8g2_font_tinypixie2_tr LITERAL1 u8g2_font_standardized3x5_tr LITERAL1 u8g2_font_fivepx_tr LITERAL1 diff --git a/library.properties b/library.properties index b2a3e598..5487b282 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=U8g2 -version=2.34.18 +version=2.34.19 author=oliver maintainer=oliver sentence=Monochrome LCD, OLED and eInk Library. Display controller: SSD1305, SSD1306, SSD1309, SSD1312, SSD1316, SSD1318, SSD1320, SSD1322, SSD1325, SSD1327, SSD1329, SSD1606, SSD1607, SH1106, SH1107, SH1108, SH1122, T6963, RA8835, LC7981, PCD8544, PCF8812, HX1230, UC1601, UC1604, UC1608, UC1610, UC1611, UC1617, UC1638, UC1701, ST7511, ST7528, ST7565, ST7567, ST7571, ST7586, ST7588, ST75160, ST75256, ST75320, NT7534, ST7920, IST3020, IST3088, IST7920, LD7032, KS0108, KS0713, HD44102, T7932, SED1520, SBN1661, IL3820, MAX7219, GP1287, GP1247, GU800. Interfaces: I2C, SPI, Parallel. diff --git a/src/clib/mui_u8g2.c b/src/clib/mui_u8g2.c index 26f544d1..ead947e9 100644 --- a/src/clib/mui_u8g2.c +++ b/src/clib/mui_u8g2.c @@ -402,7 +402,7 @@ uint8_t mui_u8g2_draw_text(mui_t *ui, uint8_t msg) switch(msg) { case MUIF_MSG_DRAW: - u8g2_DrawStr(mui_get_U8g2(ui), mui_get_x(ui), mui_get_y(ui), ui->text); + u8g2_DrawUTF8(mui_get_U8g2(ui), mui_get_x(ui), mui_get_y(ui), ui->text); break; case MUIF_MSG_FORM_START: break; @@ -934,8 +934,126 @@ uint8_t mui_u8g2_u8_min_max_wm_mud_pf(mui_t *ui, uint8_t msg) /*===============================================================================*/ -static void mui_u8g2_u8_bar_draw_wm(mui_t *ui, uint8_t flags) MUI_NOINLINE; -static void mui_u8g2_u8_bar_draw_wm(mui_t *ui, uint8_t flags) +static uint8_t mui_u8g2_u8_bar_mse_msg_handler(mui_t *ui, uint8_t msg) MUI_NOINLINE; +static uint8_t mui_u8g2_u8_bar_mse_msg_handler(mui_t *ui, uint8_t msg) +{ + mui_u8g2_u8_min_max_step_t *vmms= (mui_u8g2_u8_min_max_step_t *)muif_get_data(ui->uif); + uint8_t *value = mui_u8g2_u8mms_get_valptr(vmms); + uint8_t min = mui_u8g2_u8mms_get_min(vmms); + uint8_t max = mui_u8g2_u8mms_get_max(vmms); + uint8_t step = mui_u8g2_u8mms_get_step(vmms); + uint8_t flags = mui_u8g2_u8mms_get_flags(vmms); + + switch(msg) + { + case MUIF_MSG_DRAW: + break; + case MUIF_MSG_FORM_START: + break; + case MUIF_MSG_FORM_END: + break; + case MUIF_MSG_CURSOR_ENTER: + break; + case MUIF_MSG_CURSOR_SELECT: + case MUIF_MSG_VALUE_INCREMENT: + (*value)+=step; + if ( *value > max ) + { + if ( flags & MUI_MMS_NO_WRAP ) + *value = max; + else + *value = min; + } + break; + case MUIF_MSG_VALUE_DECREMENT: + if ( *value >= min+step ) + (*value)-=step; + else + { + if ( flags & MUI_MMS_NO_WRAP ) + *value = min; + else + *value = max; + } + break; + case MUIF_MSG_CURSOR_LEAVE: + break; + case MUIF_MSG_TOUCH_DOWN: + break; + case MUIF_MSG_TOUCH_UP: + break; + } + return 0; +} + +static uint8_t mui_u8g2_u8_bar_mud_msg_handler(mui_t *ui, uint8_t msg) MUI_NOINLINE; +static uint8_t mui_u8g2_u8_bar_mud_msg_handler(mui_t *ui, uint8_t msg) +{ + mui_u8g2_u8_min_max_step_t *vmms= (mui_u8g2_u8_min_max_step_t *)muif_get_data(ui->uif); + uint8_t *value = mui_u8g2_u8mms_get_valptr(vmms); + uint8_t min = mui_u8g2_u8mms_get_min(vmms); + uint8_t max = mui_u8g2_u8mms_get_max(vmms); + uint8_t step = mui_u8g2_u8mms_get_step(vmms); + uint8_t flags = mui_u8g2_u8mms_get_flags(vmms); + switch(msg) + { + case MUIF_MSG_DRAW: + break; + case MUIF_MSG_FORM_START: + break; + case MUIF_MSG_FORM_END: + break; + case MUIF_MSG_CURSOR_ENTER: + break; + case MUIF_MSG_CURSOR_SELECT: + case MUIF_MSG_VALUE_INCREMENT: + case MUIF_MSG_VALUE_DECREMENT: + /* toggle between normal mode and capture next/prev mode */ + ui->is_mud = !ui->is_mud; + break; + case MUIF_MSG_CURSOR_LEAVE: + break; + case MUIF_MSG_TOUCH_DOWN: + break; + case MUIF_MSG_TOUCH_UP: + break; + case MUIF_MSG_EVENT_NEXT: + if ( ui->is_mud ) + { + (*value)+=step; + if ( *value > max ) + { + if ( flags & MUI_MMS_NO_WRAP ) + *value = max; + else + *value = min; + } + return 1; + } + break; + case MUIF_MSG_EVENT_PREV: + if ( ui->is_mud ) + { + if ( *value <= min || *value > max) + { + if ( flags & MUI_MMS_NO_WRAP ) + *value = min; + else + *value = max; + } + else + (*value)-=step; + return 1; + } + break; + } + return 0; +} + + + +static void mui_u8g2_u8_bar_draw_wm(mui_t *ui, uint8_t flags, uint8_t is_fixed_width) MUI_NOINLINE; +static void mui_u8g2_u8_bar_draw_wm(mui_t *ui, uint8_t flags, uint8_t is_fixed_width) { u8g2_t *u8g2 = mui_get_U8g2(ui); mui_u8g2_u8_min_max_step_t *vmms= (mui_u8g2_u8_min_max_step_t *)muif_get_data(ui->uif); @@ -952,6 +1070,7 @@ static void mui_u8g2_u8_bar_draw_wm(mui_t *ui, uint8_t flags) int8_t backup_descent; u8g2_uint_t x = mui_get_x(ui); u8g2_uint_t w = 0; + u8g2_uint_t v; // the calculated pixel value if ( mms_flags & MUI_MMS_2X_BAR ) scale |= 1; @@ -972,12 +1091,24 @@ static void mui_u8g2_u8_bar_draw_wm(mui_t *ui, uint8_t flags) s++; cnt--; } - //mui_u8g2_draw_button_utf(ui, mui_u8g2_get_pi_flags(ui), u8g2_GetStrWidth(u8g2, s)+1, 1, MUI_U8G2_V_PADDING, u8x8_u8toa(*value, cnt)); - //mui_u8g2_draw_button_pi(ui, u8g2_GetStrWidth(u8g2, s)+1, 1, u8x8_u8toa(*value, cnt)); + + if ( is_fixed_width == 0 ) + { + w += (max<font_ref_descent; u8g2->font_ref_descent = 0; /* hmm... that's a low level hack so that DrawButtonFrame ignores the descent value of the font */ u8g2_DrawButtonFrame(u8g2, x, mui_get_y(ui), flags, w, 1, 1); - u8g2->font_ref_descent = backup_descent; - + u8g2->font_ref_descent = backup_descent; } +// #define MUIF_U8G2_U8_MIN_MAX_STEP(id, valptr, min, max, step, flags, muif) uint8_t mui_u8g2_u8_bar_wm_mse_pi(mui_t *ui, uint8_t msg) { - mui_u8g2_u8_min_max_step_t *vmms= (mui_u8g2_u8_min_max_step_t *)muif_get_data(ui->uif); - uint8_t *value = mui_u8g2_u8mms_get_valptr(vmms); - uint8_t min = mui_u8g2_u8mms_get_min(vmms); - uint8_t max = mui_u8g2_u8mms_get_max(vmms); - uint8_t step = mui_u8g2_u8mms_get_step(vmms); switch(msg) { case MUIF_MSG_DRAW: - mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pi_flags(ui)); - break; - case MUIF_MSG_FORM_START: - break; - case MUIF_MSG_FORM_END: - break; - case MUIF_MSG_CURSOR_ENTER: - break; - case MUIF_MSG_CURSOR_SELECT: - case MUIF_MSG_VALUE_INCREMENT: - (*value)+=step; - if ( *value > max ) *value = min; - break; - case MUIF_MSG_VALUE_DECREMENT: - if ( *value >= min+step ) (*value)-=step; else *value = max; - break; - case MUIF_MSG_CURSOR_LEAVE: - break; - case MUIF_MSG_TOUCH_DOWN: - break; - case MUIF_MSG_TOUCH_UP: + mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pi_flags(ui), 0); break; + default: + return mui_u8g2_u8_bar_mse_msg_handler(ui, msg); } return 0; } @@ -1032,146 +1140,103 @@ uint8_t mui_u8g2_u8_bar_wm_mse_pi(mui_t *ui, uint8_t msg) uint8_t mui_u8g2_u8_bar_wm_mud_pi(mui_t *ui, uint8_t msg) { - mui_u8g2_u8_min_max_step_t *vmms= (mui_u8g2_u8_min_max_step_t *)muif_get_data(ui->uif); - uint8_t *value = mui_u8g2_u8mms_get_valptr(vmms); - uint8_t min = mui_u8g2_u8mms_get_min(vmms); - uint8_t max = mui_u8g2_u8mms_get_max(vmms); - uint8_t step = mui_u8g2_u8mms_get_step(vmms); switch(msg) { case MUIF_MSG_DRAW: - mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pi_flags(ui)); - break; - case MUIF_MSG_FORM_START: - break; - case MUIF_MSG_FORM_END: - break; - case MUIF_MSG_CURSOR_ENTER: - break; - case MUIF_MSG_CURSOR_SELECT: - case MUIF_MSG_VALUE_INCREMENT: - case MUIF_MSG_VALUE_DECREMENT: - /* toggle between normal mode and capture next/prev mode */ - ui->is_mud = !ui->is_mud; - break; - case MUIF_MSG_CURSOR_LEAVE: - break; - case MUIF_MSG_TOUCH_DOWN: - break; - case MUIF_MSG_TOUCH_UP: - break; - case MUIF_MSG_EVENT_NEXT: - if ( ui->is_mud ) - { - (*value)+=step; - if ( *value > max ) - *value = min; - return 1; - } - break; - case MUIF_MSG_EVENT_PREV: - if ( ui->is_mud ) - { - if ( *value <= min || *value > max) - *value = max; - else - (*value)-=step; - return 1; - } + mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pi_flags(ui), 0); break; + default: + return mui_u8g2_u8_bar_mud_msg_handler(ui, msg); } return 0; } uint8_t mui_u8g2_u8_bar_wm_mse_pf(mui_t *ui, uint8_t msg) { - mui_u8g2_u8_min_max_step_t *vmms= (mui_u8g2_u8_min_max_step_t *)muif_get_data(ui->uif); - uint8_t *value = mui_u8g2_u8mms_get_valptr(vmms); - uint8_t min = mui_u8g2_u8mms_get_min(vmms); - uint8_t max = mui_u8g2_u8mms_get_max(vmms); - uint8_t step = mui_u8g2_u8mms_get_step(vmms); switch(msg) { case MUIF_MSG_DRAW: - mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pf_flags(ui)); - break; - case MUIF_MSG_FORM_START: - break; - case MUIF_MSG_FORM_END: - break; - case MUIF_MSG_CURSOR_ENTER: - break; - case MUIF_MSG_CURSOR_SELECT: - case MUIF_MSG_VALUE_INCREMENT: - (*value)+=step; - if ( *value > max ) *value = min; - break; - case MUIF_MSG_VALUE_DECREMENT: - if ( *value >= min+step ) (*value)-=step; else *value = max; - break; - case MUIF_MSG_CURSOR_LEAVE: - break; - case MUIF_MSG_TOUCH_DOWN: - break; - case MUIF_MSG_TOUCH_UP: + mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pf_flags(ui), 0); break; + default: + return mui_u8g2_u8_bar_mse_msg_handler(ui, msg); } return 0; } uint8_t mui_u8g2_u8_bar_wm_mud_pf(mui_t *ui, uint8_t msg) { - mui_u8g2_u8_min_max_step_t *vmms= (mui_u8g2_u8_min_max_step_t *)muif_get_data(ui->uif); - uint8_t *value = mui_u8g2_u8mms_get_valptr(vmms); - uint8_t min = mui_u8g2_u8mms_get_min(vmms); - uint8_t max = mui_u8g2_u8mms_get_max(vmms); - uint8_t step = mui_u8g2_u8mms_get_step(vmms); switch(msg) { case MUIF_MSG_DRAW: - mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pf_flags(ui)); - break; - case MUIF_MSG_FORM_START: - break; - case MUIF_MSG_FORM_END: - break; - case MUIF_MSG_CURSOR_ENTER: - break; - case MUIF_MSG_CURSOR_SELECT: - case MUIF_MSG_VALUE_INCREMENT: - case MUIF_MSG_VALUE_DECREMENT: - /* toggle between normal mode and capture next/prev mode */ - ui->is_mud = !ui->is_mud; - break; - case MUIF_MSG_CURSOR_LEAVE: - break; - case MUIF_MSG_TOUCH_DOWN: - break; - case MUIF_MSG_TOUCH_UP: - break; - case MUIF_MSG_EVENT_NEXT: - if ( ui->is_mud ) - { - (*value)+=step; - if ( *value > max ) - *value = min; - return 1; - } - break; - case MUIF_MSG_EVENT_PREV: - if ( ui->is_mud ) - { - if ( *value <= min || *value > max) - *value = max; - else - (*value)-=step; - return 1; - } + mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pf_flags(ui), 0); break; + default: + return mui_u8g2_u8_bar_mud_msg_handler(ui, msg); } return 0; } + + +// #define MUIF_U8G2_U8_MIN_MAX_STEP_WIDTH(id, valptr, min, max, step, width, flags, muif) + + +uint8_t mui_u8g2_u8_fixed_width_bar_wm_mse_pi(mui_t *ui, uint8_t msg) +{ + switch(msg) + { + case MUIF_MSG_DRAW: + mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pi_flags(ui), 1); + break; + default: + return mui_u8g2_u8_bar_mse_msg_handler(ui, msg); + } + return 0; +} + + +uint8_t mui_u8g2_u8_fixed_width_bar_wm_mud_pi(mui_t *ui, uint8_t msg) +{ + switch(msg) + { + case MUIF_MSG_DRAW: + mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pi_flags(ui), 1); + break; + default: + return mui_u8g2_u8_bar_mud_msg_handler(ui, msg); + } + return 0; +} + +uint8_t mui_u8g2_u8_fixed_width_bar_wm_mse_pf(mui_t *ui, uint8_t msg) +{ + switch(msg) + { + case MUIF_MSG_DRAW: + mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pf_flags(ui), 1); + break; + default: + return mui_u8g2_u8_bar_mse_msg_handler(ui, msg); + } + return 0; +} + +uint8_t mui_u8g2_u8_fixed_width_bar_wm_mud_pf(mui_t *ui, uint8_t msg) +{ + switch(msg) + { + case MUIF_MSG_DRAW: + mui_u8g2_u8_bar_draw_wm(ui, mui_u8g2_get_pf_flags(ui), 1); + break; + default: + return mui_u8g2_u8_bar_mud_msg_handler(ui, msg); + } + return 0; +} + + + /*===============================================================================*/ static uint8_t mui_is_valid_char(uint8_t c) MUI_NOINLINE; diff --git a/src/clib/mui_u8g2.h b/src/clib/mui_u8g2.h index ae324273..39411f3d 100644 --- a/src/clib/mui_u8g2.h +++ b/src/clib/mui_u8g2.h @@ -33,6 +33,33 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + Reference Manual: + https://github.com/olikraus/u8g2/wiki/muiref + + MUIF_U8G2_LABEL() + replacement for MUIF_LABEL(mui_u8g2_draw_text), + used by MUI_LABEL(x,y,"text") + Supports UTF8 + + MUIF_U8G2_FONT_STYLE(n, font) + A special u8g2 style function, which replaces MUIF_STYLE, but restricts the style change to the + specific font argument (however, this should be good enough in most cases). + As usual, the style "n" can be activated with MUI_STYLE(n) in FDS. + Example: + muif_t muif_list[] MUI_PROGMEM = { + MUIF_U8G2_LABEL(), + MUIF_U8G2_FONT_STYLE(0, u8g2_font_5x8_tr) + }; + fds_t fds[] MUI_PROGMEM = + MUI_FORM(1) + MUI_STYLE(0) + MUI_LABEL(5,12, "5x8 Font") + ; + + + + + */ #ifndef MUI_U8G2_H @@ -103,17 +130,26 @@ struct mui_u8g2_u8_min_max_step_struct uint8_t max; uint8_t step; uint8_t flags; + uint8_t width; // added with issue 2200, might not be used by all bar graph functions } MUI_PROGMEM; typedef const struct mui_u8g2_u8_min_max_step_struct mui_u8g2_u8_min_max_step_t; +/* list of bit values for the "flags" variable */ +#define MUI_MMS_2X_BAR 0x01 +#define MUI_MMS_4X_BAR 0x02 +#define MUI_MMS_SHOW_VALUE 0x04 +#define MUI_MMS_NO_WRAP 0x08 + #if defined(__GNUC__) && defined(__AVR__) +# define mui_u8g2_u8mms_get_width(u8mm) mui_pgm_read(&((u8mm)->width)) # define mui_u8g2_u8mms_get_step(u8mm) mui_pgm_read(&((u8mm)->step)) # define mui_u8g2_u8mms_get_flags(u8mm) mui_pgm_read(&((u8mm)->flags)) # define mui_u8g2_u8mms_get_min(u8mm) mui_pgm_read(&((u8mm)->min)) # define mui_u8g2_u8mms_get_max(u8mm) mui_pgm_read(&((u8mm)->max)) # define mui_u8g2_u8mms_get_valptr(u8mm) ((uint8_t *)mui_pgm_wread(&((u8mm)->value))) #else +# define mui_u8g2_u8mms_get_width(u8mm) ((u8mm)->width) # define mui_u8g2_u8mms_get_step(u8mm) ((u8mm)->step) # define mui_u8g2_u8mms_get_flags(u8mm) ((u8mm)->flags) # define mui_u8g2_u8mms_get_min(u8mm) ((u8mm)->min) @@ -122,6 +158,8 @@ typedef const struct mui_u8g2_u8_min_max_step_struct mui_u8g2_u8_min_max_step_t; #endif + + /* helper functions */ u8g2_uint_t mui_get_x(mui_t *ui); @@ -218,18 +256,29 @@ uint8_t mui_u8g2_u8_min_max_wm_mud_pf(mui_t *ui, uint8_t msg); /* GIF, MUIF_U8G /* gcc note: the macro uses array compound literals to extend the lifetime in C++, see last section in https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html */ #define MUIF_U8G2_U8_MIN_MAX_STEP(id, valptr, min, max, step, flags, muif) \ MUIF(id, MUIF_CFLAG_IS_CURSOR_SELECTABLE, \ - (void *)((mui_u8g2_u8_min_max_step_t [] ) {{ (valptr) MUI_U8G2_COMMA (min) MUI_U8G2_COMMA (max) MUI_U8G2_COMMA (step) MUI_U8G2_COMMA (flags) }}), \ + (void *)((mui_u8g2_u8_min_max_step_t [] ) {{ (valptr) MUI_U8G2_COMMA (min) MUI_U8G2_COMMA (max) MUI_U8G2_COMMA (step) MUI_U8G2_COMMA (flags) MUI_U8G2_COMMA (0) }}), \ (muif)) -#define MUI_MMS_2X_BAR 0x01 -#define MUI_MMS_4X_BAR 0x02 -#define MUI_MMS_SHOW_VALUE 0x04 uint8_t mui_u8g2_u8_bar_wm_mse_pi(mui_t *ui, uint8_t msg); uint8_t mui_u8g2_u8_bar_wm_mud_pi(mui_t *ui, uint8_t msg); uint8_t mui_u8g2_u8_bar_wm_mse_pf(mui_t *ui, uint8_t msg); uint8_t mui_u8g2_u8_bar_wm_mud_pf(mui_t *ui, uint8_t msg); + +#define MUIF_U8G2_U8_MIN_MAX_STEP_WIDTH(id, valptr, min, max, step, width, flags, muif) \ + MUIF(id, MUIF_CFLAG_IS_CURSOR_SELECTABLE, \ + (void *)((mui_u8g2_u8_min_max_step_t [] ) {{ (valptr) MUI_U8G2_COMMA (min) MUI_U8G2_COMMA (max) MUI_U8G2_COMMA (step) MUI_U8G2_COMMA (flags) MUI_U8G2_COMMA (width) }}), \ + (muif)) + + +uint8_t mui_u8g2_u8_fixed_width_bar_wm_mse_pi(mui_t *ui, uint8_t msg); +uint8_t mui_u8g2_u8_fixed_width_bar_wm_mud_pi(mui_t *ui, uint8_t msg); +uint8_t mui_u8g2_u8_fixed_width_bar_wm_mse_pf(mui_t *ui, uint8_t msg); +uint8_t mui_u8g2_u8_fixed_width_bar_wm_mud_pf(mui_t *ui, uint8_t msg); + + + /*===== data = mui_u8g2_list_t* =====*/ /* similar to mui_u8g2_u8_opt_line, but u16 and dynamic list */ diff --git a/src/clib/u8g2.h b/src/clib/u8g2.h index c0de172e..bbfe290e 100644 --- a/src/clib/u8g2.h +++ b/src/clib/u8g2.h @@ -1837,6 +1837,10 @@ extern const uint8_t u8g2_font_freedoomr25_mn[] U8G2_FONT_SECTION("u8g2_font_fre extern const uint8_t u8g2_font_7Segments_26x42_mn[] U8G2_FONT_SECTION("u8g2_font_7Segments_26x42_mn"); extern const uint8_t u8g2_font_7_Seg_33x19_mn[] U8G2_FONT_SECTION("u8g2_font_7_Seg_33x19_mn"); extern const uint8_t u8g2_font_7_Seg_41x21_mn[] U8G2_FONT_SECTION("u8g2_font_7_Seg_41x21_mn"); +extern const uint8_t u8g2_font_tiny5_tf[] U8G2_FONT_SECTION("u8g2_font_tiny5_tf"); +extern const uint8_t u8g2_font_tiny5_tr[] U8G2_FONT_SECTION("u8g2_font_tiny5_tr"); +extern const uint8_t u8g2_font_04b_03b_tr[] U8G2_FONT_SECTION("u8g2_font_04b_03b_tr"); +extern const uint8_t u8g2_font_04b_03_tr[] U8G2_FONT_SECTION("u8g2_font_04b_03_tr"); extern const uint8_t u8g2_font_amstrad_cpc_extended_8f[] U8G2_FONT_SECTION("u8g2_font_amstrad_cpc_extended_8f"); extern const uint8_t u8g2_font_amstrad_cpc_extended_8r[] U8G2_FONT_SECTION("u8g2_font_amstrad_cpc_extended_8r"); extern const uint8_t u8g2_font_amstrad_cpc_extended_8n[] U8G2_FONT_SECTION("u8g2_font_amstrad_cpc_extended_8n"); @@ -2568,7 +2572,6 @@ extern const uint8_t u8g2_font_iconquadpix_m_all[] U8G2_FONT_SECTION("u8g2_font_ extern const uint8_t u8g2_font_tallpix_tr[] U8G2_FONT_SECTION("u8g2_font_tallpix_tr"); extern const uint8_t u8g2_font_botmaker_te[] U8G2_FONT_SECTION("u8g2_font_botmaker_te"); extern const uint8_t u8g2_font_efraneextracondensed_te[] U8G2_FONT_SECTION("u8g2_font_efraneextracondensed_te"); -extern const uint8_t u8g2_font_minimal3x3_tu[] U8G2_FONT_SECTION("u8g2_font_minimal3x3_tu"); extern const uint8_t u8g2_font_3x3basic_tr[] U8G2_FONT_SECTION("u8g2_font_3x3basic_tr"); extern const uint8_t u8g2_font_tiny_gk_tr[] U8G2_FONT_SECTION("u8g2_font_tiny_gk_tr"); extern const uint8_t u8g2_font_threepix_tr[] U8G2_FONT_SECTION("u8g2_font_threepix_tr"); @@ -2584,9 +2587,6 @@ extern const uint8_t u8g2_font_smolfont_te[] U8G2_FONT_SECTION("u8g2_font_smolfo extern const uint8_t u8g2_font_tinyunicode_tf[] U8G2_FONT_SECTION("u8g2_font_tinyunicode_tf"); extern const uint8_t u8g2_font_tinyunicode_tr[] U8G2_FONT_SECTION("u8g2_font_tinyunicode_tr"); extern const uint8_t u8g2_font_tinyunicode_te[] U8G2_FONT_SECTION("u8g2_font_tinyunicode_te"); -extern const uint8_t u8g2_font_micropixel_tf[] U8G2_FONT_SECTION("u8g2_font_micropixel_tf"); -extern const uint8_t u8g2_font_micropixel_tr[] U8G2_FONT_SECTION("u8g2_font_micropixel_tr"); -extern const uint8_t u8g2_font_micropixel_te[] U8G2_FONT_SECTION("u8g2_font_micropixel_te"); extern const uint8_t u8g2_font_tinypixie2_tr[] U8G2_FONT_SECTION("u8g2_font_tinypixie2_tr"); extern const uint8_t u8g2_font_standardized3x5_tr[] U8G2_FONT_SECTION("u8g2_font_standardized3x5_tr"); extern const uint8_t u8g2_font_fivepx_tr[] U8G2_FONT_SECTION("u8g2_font_fivepx_tr"); diff --git a/src/clib/u8g2_fonts.c b/src/clib/u8g2_fonts.c index ef2ab945..f4a43b63 100644 --- a/src/clib/u8g2_fonts.c +++ b/src/clib/u8g2_fonts.c @@ -747,6 +747,152 @@ const uint8_t u8g2_font_7_Seg_41x21_mn[716] U8G2_FONT_SECTION("u8g2_font_7_Seg_4 "\314H\303\214\64\314H\303\214\64\314H\303\214\64\314H\303\214\64\314H\303\214\64\314H\303\210%L\10" "+\204\323\322\12a\12\71\377\17\251 \16\13\301\70\2\0:\22\365\234\251\77\374\355!\247\17_\35r" "\372\360\363\0\0\0\0\4\377\377\0"; +/* + Fontname: font_tiny5 + Copyright: (CC) Gissio 2022-2023 Creative Commons Zero v1.0 Universal + Glyphs: 224/256 + BBX Build Mode: 0 +*/ +const uint8_t u8g2_font_tiny5_tf[1591] U8G2_FONT_SECTION("u8g2_font_tiny5_tf") = + "\340\0\2\2\3\3\1\4\4\6\7\0\377\5\377\5\0\0\335\1\322\6\32 \4@T!\6iTV" + "\0\42\6\323e\222\12#\12m\364\252\241\252\241*\0$\10\363\343\342\310\63\1%\6\344lb\17&" + "\11l\354b\212UL\1'\5\321U\4(\6j\334T\31)\7j\134bJ\12*\6\343\344\322j" + "+\7\333\344\322J\0,\6\322\333\24\0-\5Ke\6.\5IT\2/\7j\334\222\252\0\60\7" + "k\344*\253\2\61\6j\344V\3\62\7kdt*\7\63\7kdt\312\13\64\7kd\323\21\3" + "\65\7kdF\324\13\66\7k\344\246j\1\67\10kdf\212\25\0\70\6k\344\372\5\71\7k\344" + "Zr\1:\6aTb\0;\7\352\333\62T\0<\6kdS]=\6\333d\366\0>\7kd" + "rU\2\77\10kdt\312\60\1@\11l\354TT\33)\0A\10l\354T\34S\6B\11ll" + "V\34)\216\4C\11l\354T\324\61)\0D\10llV\64G\2E\10ll\206^y\4F\10" + "ll\206^\71\3G\10l\354FN\63\15H\10ll\242\34S\6I\6iT\206\0J\7kd" + "KU\1K\11ll\242J\62\225\1L\6kdbsM\11mt\362ZI\353\0N\10ll\342" + "RS\6O\10l\354T\64\223\2P\11llV\34)g\0Q\10l\354T\264b\12R\11ll" + "V\34)\312\0S\11l\354FF\32\215\4T\7kdVl\1U\10ll\242\63)\0V\10k" + "d\222U&\0W\12mtRRIu\246\4X\10kd\222j\251\0Y\10kd\222*+\0Z" + "\7kdf*\7[\6j\134V%\134\7j\134RL\5]\6j\134T\65^\5\323\345\32_\5" + "Kd\6`\6\322]b\0a\7c\344\226J\2b\10kd\242Jj\1c\6c\344f\26d\7" + "kd\323RIe\7c\344\322\310\2f\7j\334\324J\0g\10\353\343\226J#\1h\10kd\242" + "JV\0i\6qT\322\10j\6\371S\322\20k\10kdbZI\5l\6iT\206\0m\11e" + "tF\252TR\5n\7cdT\262\2o\7c\344*U\1p\10\353cTR+\2q\7\353\343" + "\226J\62r\6b\134V\5s\7c\344F^\0t\7j\134\322\212\1u\7cd\222\225\4v\7" + "cd\222U\1w\11etRRIu\1x\7cdR\231\12y\7\353c\222\325\4z\6cd" + "V\71{\7k\344T\35\5|\6iT\206\0}\10kddNI\1~\7\324\354\222J\0\177\4" + "@d\200\4@d\201\4@d\202\4@L\203\4@L\204\4@L\205\4@L\206\4@L\207\4" + "@L\210\4@L\211\4@L\212\4@L\213\4@L\214\4@L\215\4@L\216\4@L\217\4" + "@L\220\4@L\221\4@L\222\4@L\223\4@L\224\4@L\225\4@L\226\4@L\227\4" + "@L\230\4@L\231\4@L\232\4@L\233\4@L\234\4@L\235\4@L\236\4@L\237\4" + "@L\240\4@T\241\6iT\322\0\242\7k\344\342V\11\243\10ll\253\21\343\10\244\10dlb" + "\222*\6\245\10kd\222\252V\2\246\6iT\224\0\247\10k\344F\252F\2\250\6KfR\0\251" + "\6\343\344f\26\252\6[\345V\22\253\7\334\354\222\212)\254\6\323df\0\255\4@T\256\7\343d" + "TZ\5\257\5Kf\6\260\6[\345\272\0\261\7k\344\322\312h\262\7\343dtJ\3\263\7\343d" + "V^\0\264\6\322\335\24\0\265\7\343c\222\32\22\266\7l\354\206\352\7\267\5IU\2\270\6\322\333" + "\24\0\271\6\342\334V\1\272\6[\345\272\0\273\10\334lRL*\1\274\13n\374\62\322)\252\264a" + "\0\275\12n\374\62\62s\212\31\15\276\13n|\66\312\61\215\264a\0\277\7k\344\62LY\300\11t" + "\354\262\212c\312\0\301\11tl\243\212c\312\0\302\11t\354\244\212c\312\0\303\11t\354\222\212*\216" + "\31\304\11tlbRqL\31\305\11t\354TL*\216\31\306\11m\364\206\212c\305\64\307\11\364\353" + "T\324\61\311\10\310\11t\354\342\320+\217\0\311\11tl\323\320+\217\0\312\11t\354\324\320+\217\0" + "\313\11tl\342\330+\217\0\314\7rdb\352\0\315\7r\324T\27\0\316\7rTV\27\0\317\7" + "sdR\331\5\320\11llV\134r$\0\321\11t\354T\134j\312\0\322\11t\354\262\212fR\0" + "\323\11tl\243\212fR\0\324\11t\354\244\212fR\0\325\12t\354\222\212*\312\244\0\326\11tl" + "bR\321L\12\327\6\333dR\7\330\11l\354T\32I&\5\331\10tlSt&\5\332\10t\354" + "bt&\5\333\11t\354\64\214fR\0\334\11tlbF\321L\12\335\10sdS\245\312\4\336\11" + "ll\362\212#e\0\337\10\363\343\252\225V\4\340\10sdr\134*\11\341\10sdS\134*\11\342" + "\10s\344\64Z*\11\343\10s\344F\134*\11\344\11sdRFK%\1\345\10s\344ZK%\1" + "\346\11e\364V\32)\217\0\347\7\353\343fV\11\350\7kdr\32Y\351\7kdS\32Y\352\10" + "s\344\64J#\13\353\11sdRFid\1\354\7rT\242j\1\355\7r\324t\252\0\356\7r" + "Tdj\1\357\10sdRF\261\5\360\10k\344rZ\25\0\361\10sd\64R\311\12\362\10kd" + "rJ\252\2\363\10kdS\245*\0\364\10s\344\64\252T\5\365\11s\344FLIU\0\366\11s" + "dRF\225\252\0\367\10k\344\62\332(\1\370\10c\344\322H\25\0\371\10sdrJV\22\372\10" + "sdSe%\1\373\10s\344t\262\222\0\374\10sdRNV\22\375\10\373cSe\65\1\376\11" + "\363c\242JjE\0\377\10\373cRNV\23\0\0\0\4\377\377\0"; +/* + Fontname: font_tiny5 + Copyright: (CC) Gissio 2022-2023 Creative Commons Zero v1.0 Universal + Glyphs: 96/256 + BBX Build Mode: 0 +*/ +const uint8_t u8g2_font_tiny5_tr[704] U8G2_FONT_SECTION("u8g2_font_tiny5_tr") = + "`\0\2\2\3\3\1\3\4\5\7\0\377\5\377\5\0\0\330\1\313\2\243 \4@*!\5i*+" + "\42\6\323\63I\5#\12mz\325P\325P\25\0$\10\363qq\344\231\0%\6\344\66\261\7&\11" + "lv\61\305*\246\0'\5\321+\2(\6jn\252\14)\7j.\61%\5*\6\343ri\65+" + "\7\333ri%\0,\5\322m\12-\5K\63\3.\5I*\1/\7jnIU\0\60\7kr" + "\225U\1\61\6jr\253\1\62\7k\62:\225\3\63\7k\62:\345\5\64\7k\262\351\210\1\65\7" + "k\62#\352\5\66\7krS\265\0\67\7k\62\63\305\12\70\6kr\375\2\71\7kr-\271\0" + ":\5a*\61;\7\352m\31*\0<\6k\262\251.=\5\333\62{>\7k\62\271*\1\77\10" + "k\62:e\230\0@\11lv*\252\215\24\0A\10lv*\216)\3B\11l\66+\216\24G\2" + "C\11lv*\352\230\24\0D\10l\66+\232#\1E\10l\66C\257<\2F\10l\66C\257\234" + "\1G\10lv#\247\231\6H\10l\66Q\216)\3I\5i*CJ\7k\262\245\252\0K\11l" + "\66Q%\231\312\0L\6k\62\261\71M\11m:y\255\244u\0N\10l\66q\251)\3O\10l" + "v*\232I\1P\11l\66+\216\224\63\0Q\10lv*Z\61\5R\11l\66+\216\24e\0S" + "\11lv##\215F\2T\7k\62+\266\0U\10l\66\321\231\24\0V\10k\62\311*\23\0W" + "\12m:)\251\244:S\2X\10k\62I\265T\0Y\10k\62I\225\25\0Z\7k\62\63\225\3" + "[\6j.\253\22\134\7j.)\246\2]\6j.\252\32^\5\323s\15_\5K\62\3`\5\322" + "/\61a\7crK%\1b\10k\62Q%\265\0c\6cr\63\13d\7k\262i\251$e\7" + "crid\1f\7jnj%\0g\10\353qK\245\221\0h\7k\62Q%+i\6q*i" + "\4j\6\371)i\10k\10k\62\61\255\244\2l\5i*Cm\11e:#U*\251\2n\7c" + "\62*Y\1o\7cr\225\252\0p\10\353\61*\251\25\1q\7\353qK%\31r\6b.\253\2" + "s\7cr#/\0t\7j.i\305\0u\7c\62\311J\2v\7c\62\311\252\0w\11e:" + ")\251\244\272\0x\7c\62\251L\5y\7\353\61\311j\2z\6c\62\253\34{\7kr\252\216\2" + "|\5i*C}\10k\62\62\247\244\0~\7\324vI%\0\177\4@\62\0\0\0\4\377\377\0"; +/* + Fontname: -FreeType-04b03b-Medium-R-Normal--8-80-72-72-P-39-ISO10646-1 + Copyright: 19992003 / yuji oshimo˙o / 04@dsg4.com / www.04.jp.org + Glyphs: 95/97 + BBX Build Mode: 0 +*/ +const uint8_t u8g2_font_04b_03b_tr[690] U8G2_FONT_SECTION("u8g2_font_04b_03b_tr") = + "_\0\2\3\3\3\1\3\4\5\6\0\377\5\377\5\0\0\341\1\317\2\225 \4@.!\6i*S" + "\0\42\6\323\63\221\24#\11mz\251*U\245\0$\11lvTDE\24\0%\11m:\342\24\247" + "F\1&\11m:c\14\231\21\5'\5\321+\2(\7jnR\62\0)\10j.a\24I\0*" + "\6[\63Q\16+\7\333r\321\24\1,\6\322m\22\0-\5K\63\3.\5I*\1/\10m\372" + "P\234\33\2\60\7l\66\245\262\0\61\6j.R\16\62\6l\66\264M\63\6l\66t\3\64\7l" + "\66\241\262\16\65\6l\66\65]\66\7l\66S\134\26\67\10l\66t\230\16\1\70\6l\66\245Y\71" + "\7l\66e\35\15:\6\331*Q\0;\6a*\221\0<\7k\262Q:\1=\6\333\62\363\0>" + "\7k\62q*\11\77\11l\66t\64\203!\0@\11m:\266DE\25\0A\7l\66\245)\6B" + "\7l\66S\252,C\7l\66u\232\0D\10l\66S\250\244\0E\6l\66uMF\7l\66u" + "\35\3G\7l\66u\64\26H\10l\66\241h\212\1I\7k\62S\230\32J\7l\266r,\26K" + "\11l\66\241H\205b\0L\7l\66q\66\1M\12m:V$ER$%N\11l\66\341$\215" + "b\0O\7l\66\245\262\0P\7l\66\245h\3Q\7l\66\245\312\0R\7l\66\245\225\22S\6" + "l\66\65]T\7k\62S\230\5U\7l\66\241f\1V\10l\66\241*\63\4W\13m:Q$" + "ER$E\6X\11l\66\241\30I\241\30Y\7l\66\241X\27Z\10l\66t$\305\4[\7j" + ".SJ\0\134\13m:\61\30\203\61\30\203\1]\7j.Rj\0^\5\323s\31_\5L\66\4" + "`\6\322/a\0a\6\134vd\1b\6d\66qYc\6[\62\344\0d\6d\366f\1e\6" + "\134\66U\70f\10dvSH\205\0g\7\344\65e\31\1h\7d\66q)\6i\6a*\221\0" + "j\6\351)\321\0k\10d\66qH\205\1l\5a*\4m\7]:V$%n\6\134\66\245\30" + "o\6\134\66e\1p\6\344\65\245\15q\6\344\65e\35r\6[\62d\10s\6\134\66THt\7" + "cr\321\24\12u\6\134\66\241Xv\10\134\66\241\30I\0w\10]:Q$E\6x\6[\62Q" + "\16y\7\344\65\241X\7z\6\134\66dD{\7krR:\24|\5i*\5}\11k\62b\34" + "E\22\0~\7\324w\221\24\1\0\0\0\4\377\377\0"; +/* + Fontname: -FreeType-04b03-Medium-R-Normal--8-80-72-72-P-38-ISO10646-1 + Copyright: 19992003 / yuji oshimo˙o / 04@dsg4.com / www.04.jp.org + Glyphs: 95/97 + BBX Build Mode: 0 +*/ +const uint8_t u8g2_font_04b_03_tr[740] U8G2_FONT_SECTION("u8g2_font_04b_03_tr") = + "_\0\2\2\3\3\1\3\4\5\7\0\376\5\376\5\0\0\355\1\345\2\307 \4@\62!\5i*+" + "\42\6\323\63I\5#\12mz\325P\325P\25\0$\11\364\265qh\64t\2%\11m:\61\243\134" + "\243\30&\11mz\62C%\243\12'\5\321+\2(\6jn\252\14)\7j.\61%\5*\6[" + "\63\251\3+\7\333ri%\0,\5\322m\12-\5K\63\3.\5I*\1/\10m\372(w#" + "\0\60\10lv*\232I\1\61\6j.\252\3\62\11l\66\33%\225G\0\63\11l\66\33%\215F" + "\2\64\11l\266QU#&\0\65\11l\66Co\64\22\0\66\11lv*\257\230\24\0\67\10l\66" + "#\307:\2\70\11lv*&\25\223\2\71\11lv*\246\235\24\0:\5\331*);\5a*I" + "<\6k\262\251.=\5\333\62{>\7k\62\271*\1\77\11l\66\33%\215#\0@\11mz+" + "\253\221\252\5A\10lv*\312\61\3B\11l\66+\216\24G\2C\6kr\263\26D\10l\66+" + "\232#\1E\7k\62#\216\70F\10k\62#\216\30\1G\10lv#\247\231\6H\10l\66Q\216" + ")\3I\7k\62+V\3J\10l\266:\313\244\0K\11l\66Q%\231\312\0L\6k\62\261\71" + "M\11m:y\255\244u\0N\10l\66q\251)\3O\10lv*\232I\1P\11l\66+\312\221" + "\62\0Q\11\364u*\232I\243\0R\11l\66+\312\221b\0S\11lv##\215F\2T\7k" + "\62+\266\0U\10l\66\321\231\24\0V\10l\66\321jF\0W\12m:Y%\225T\27\0X\11" + "l\66Q&\25e\0Y\11l\66Q\246\235\24\0Z\7k\62\63\225\3[\6j.\253\22\134\12m" + ":\31f\230a\206\1]\6j.\252\32^\5\323s\15_\5L\66#`\5\322/\61a\7dv" + "#\312\64b\11l\66yE\71\22\0c\6cr\63\13d\10l\366iD\231\6e\10dv*\215" + "\254\0f\10k\262)\255\230\0g\11tu#\312\264\223\2h\7l\66yE\63i\5i*ij" + "\7zm\71U\12k\11l\66\71\252\264b\0l\5i*Cm\11e:#U*\251\2n\7d" + "\66+\232\1o\10dv*\312\244\0p\11t\65+\312\221r\6q\10tu#\312\264\13r\7c" + "\62i\305\10s\10dvC\243\241\0t\7kri\305\34u\7d\66\321L\3v\7d\66\321\212" + "\21w\11e:)\251\316\224\0x\7c\62\251L\5y\11t\65\321L;)\0z\7d\66#\226" + "#{\7kr\252\216\2|\5i*C}\10k\62\62\247\244\0~\7\324wI%\0\0\0\0\4" + "\377\377\0"; /* Fontname: -FreeType-Amstrad CPC extended-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1 Copyright: Copyright ruboku 2008 @@ -62267,26 +62413,6 @@ const uint8_t u8g2_font_efraneextracondensed_te[1033] U8G2_FONT_SECTION("u8g2_fo "S\216C\306!#\0\246\7\331O\62\324\20\247\16\334\257\246\242F*\232I#\231\24\0\250\6\213\230" "\222\2\251\20\327\17\273\253\14-\225U\226J\303\224\363\4\0\0\0\4\377\377 \254\17\315\320*\253<" "b\36\61\243\30\25\0\0"; -/* - Fontname: -FreeType-Minimal3x3-Medium-R-Normal--16-160-72-72-P-29-ISO10646-1 - Copyright: unnamed - Glyphs: 64/118 - BBX Build Mode: 0 -*/ -const uint8_t u8g2_font_minimal3x3_tu[416] U8G2_FONT_SECTION("u8g2_font_minimal3x3_tu") = - "@\0\2\2\2\2\2\3\4\3\3\0\0\3\0\3\0\0\301\0\0\1\203 \4 \31!\6>\271\244" - "\0\42\6k\231\244\2#\7/\231\64F\0$\7/\271\21\23\0%\7/\231\224S\0&\6/\271" - "\264\4'\5y\31\1(\5>\71\31)\6.\231\250\0*\5\265\231\0+\7/\271\264\22\0,\5" - "*\71\5-\5g\231\1.\5\65\231\0/\6/\331T\2\60\6/\271.\0\61\5.\31U\62\6" - "/\31\31\5\63\6/\231\65\4\64\7/\231\64b\0\65\7/\71\225\24\0\66\6/\231\70\6\67\7" - "/\231\231\22\0\70\7/\271\61\22\0\71\5/\231\63:\5=\231\24;\5.\271(<\5/\331\35" - "=\5/\231=>\6/\231<\1\77\7/\31\235\22\0@\6/\271j\1A\6/\271j\4B\6" - "/\31\65\6C\5/\271-D\7/\31\225\26\0E\6/\231\241\6F\7/\231\241\42\0G\7/" - "\31\225F\0H\7/\231\64T\0I\6/\231\225\6J\6/YU\1K\6/\231\264\12L\6/" - "\231\30\7M\6/\231#\5N\7/\31\225T\0O\7/\231\221F\0P\6/\231#\2Q\6/" - "\31\245\6R\6/\31\245\12S\7/\71\225\24\0T\7/\231\25\23\0U\7/\231\244F\0V\7" - "/\231\244*\0W\7/\231\64F\0X\6/\231\324\1Y\7/\231T&\0Z\6/\31\31\5[" - "\5>\231%\134\5/\231\134]\5.\31\65^\5k\271\6_\5'\231\1\0\0\0\4\377\377\0"; /* Fontname: -FreeType-3x3Basic-Medium-R-Normal--16-160-72-72-P-29-ISO10646-1 Copyright: 8bitninja @@ -62961,192 +63087,6 @@ const uint8_t u8g2_font_tinyunicode_te[2190] U8G2_FONT_SECTION("u8g2_font_tinyun "e\310\274\63\212\0\1o\12dbM\303h\246\1\1r\12d^%:\223F\1\1s\12dZ%" "\232if\24\1x\14tZ%f\24e\332I\1\1y\10S\42e\246r\1z\12db\265\34\261" "\34\1 \254\12TbU\305\231\221\0\0"; -/* - Fontname: -FreeType-MicroPixel-Medium-R-Normal--16-160-72-72-P-39-ISO10646-1 - Copyright: SpicyGame - Glyphs: 187/329 - BBX Build Mode: 0 -*/ -const uint8_t u8g2_font_micropixel_tf[1562] U8G2_FONT_SECTION("u8g2_font_micropixel_tf") = - "\273\0\2\2\3\4\2\4\5\10\14\377\375\5\376\6\377\0\365\1\365\5\375 \5\0\261\2!\6)Q" - "\262\2\42\7\23\231\222T\0#\12-\321V\15U\15U\1$\12<\257\32G\212z\350\4%\6$" - "\261\22{&\12-\321\226S\134\62\252\0'\5\21[\42(\7:o\246:\3)\10:o\22SK" - "\1*\6\33\231\222:+\7\33\223\226V\2,\5\21O\42-\5\12u\42.\5\11Q\22/\7+" - "\221Z\225\21\60\11,\261\246\342\230I\1\61\6\252\221\266\32\62\10,\261\246bs\4\63\11,\261\246" - "b\25\223\2\64\10,\261\22\345\320\5\65\11,\261\62\364F#\1\66\11,\261\246\362\212I\1\67\11" - ",\261\62r\254#\0\70\12,\261\246bR\61)\0\71\11,\261\246b\332I\1:\6)Q\222\3" - ";\6\61O\222\5<\6\32s&\3=\6\33\223\262\7>\7\32s\22\25\0\77\11,\261\246bM" - "%\0@\12-\321\266\262\32\251Z\0A\10,\261\246\342\230\62B\12,\261\262\342Hq$\0C\10" - ",\261\66r\215\6D\11,\261\262\242\71\22\0E\10,\261\62\364\312#F\10,\261\62\364\312\31G" - "\10,\261\66r\232iH\10,\261\22\345\230\62I\7+\221\262b\65J\7+\221&\313\5K\11," - "\261\22U\222\251\14L\7+\221\22\233\3M\11-\321\222\327JZ\7N\10,\261\22\227\232\62O\11" - ",\261\246\242\231\24\0P\11,\261\262\342H\71\3Q\10,\261\246\242\245\6R\11,\261\262\342HQ" - "\6S\12,\261\66\62\322h$\0T\7+\221\262b\13U\10,\261\22\235I\1V\10,\261\22]" - "\61\2W\11-\321\222\255\244\272\0X\11,\261\22eRQ\6Y\10+\221\222TY\1Z\11,\261" - "\62rRy\4[\7:o\262\272\4\134\7+\221\22s\31]\7:o\242\272\6^\6\23\231\326\0" - "_\6\14\261\62\2`\6\22y\22\3a\7\33\221\266\222\0b\10+\221\22\243J\13c\6\33\221\266" - "\5d\7+\221Z\255$e\6\32q\262\4f\10+\221\232\322\212\11g\10+\215\266\222\134\0h\10" - "+\221\22\243J*i\6)Q\222\6j\10\272L\226S\245\0k\10#\221\222VR\1l\6)Q" - "\62\4m\10\35\321\62R\245\12n\7\33\221\242\222\12o\7\33\221\62\322\10p\10+\215\242\322\212\21" - "q\7+\215\266\222,r\7\33\221\62\222\4s\7\33\221\246\222\2t\7*q\222V\14u\7\33\221" - "\222T\22v\7\33\221\222T\5w\10\35\321\222\222\352\2x\6\33\221\222:y\10+\215\222T\222\13" - "z\7\33\221\262\322\0{\11;\217\232b\312\61\7|\5\61Qr}\12;\217\222cN\61E\0~" - "\7\24\265\226T\2\240\5\0\261\2\241\6)Q\222\6\242\11,\257\32G\212\63\1\243\11,\261\252\342" - "Hq\4\244\12-\321\222\323Lq\345\0\245\11+\221\222T\265\22\0\246\6\61O\42\5\247\14<\261" - "\66\62R\61i\64\22\0\250\7\25\331\242F\22\251\12-\321\266\262\32\71-\0\252\7\33\231\266\222\0" - "\253\7\35\323\26e\3\254\6\23\223\62\3\256\11-\321\266\342U-\0\257\6\14\273\62\2\260\7\33\231" - "\62\322\10\261\10+\221\226VF\3\262\7#\233\242\327\0\263\7#\233\42\345\2\264\6\22y\246\0\265" - "\10+\215\222\324\220\21\266\13-\321\66VR\61\305\224\0\267\5\11U\22\270\7\233j\226\27\0\271\6" - "\242\233\242\32\272\7\33\235\62\322\10\273\10\35\323\22K\231\0\277\11,\255\226\251X)\0\300\13D\261" - "\226Q\306*\216)\3\301\12D\261ZS*\216)\3\302\13D\261\246b\206*\216)\3\303\13D\261" - "\226T\306*\216)\3\304\12<\261\22\63TqL\31\305\12<\261\246bRqL\31\306\14/\21\67" - "F\314c\305\34G\0\307\13D\253\66r\215fF\61\1\310\13D\261\226Q\306*\216)\3\311\12D" - "\261Z\343\241W\36\1\312\13D\261\26S\206C\257<\2\313\12<\261\222\62\34z\345\21\314\11C\221" - "\222\63Z\261\32\315\11C\221\232\62Z\261\32\316\10C\221\326^\261\32\317\11;\221\222\362\212\325\0\320" - "\12\255\260\66\343HeZ\0\321\13D\261\226T\206q\251)\3\322\13D\261\226Q\306*\232I\1\323" - "\12D\261ZS*\232I\1\324\13D\261\246b\206*\232I\1\325\13D\261\226T\306*\232I\1\326" - "\12<\261\22\63T\321L\12\327\6\33\223\222:\330\12\256\320\252c\32+f\11\331\13D\261\226Q\206" - "\321\231\24\0\332\11D\261Z\343\350L\12\333\13D\261\246bF\321\231\24\0\334\12<\261\22\63\212\316" - "\244\0\335\12C\221\232\62J\252\254\0\336\11,\261\222W\34)\3\337\11,\261\262\242*U\2\340\10" - "\63\221\222\63\134I\341\10\63\221\232\62\134I\342\10\63\221\326F+\11\343\12\64\261\226T\306\252T\0" - "\344\10+\221\222\62ZI\345\12;\221\62\322\310h%\1\346\7\34\261\66R\34\347\10\63\213\266U^" - "\0\350\7\62q\22\343\22\351\7\62q\246\227\0\352\10\63\221\326VQ\1\353\10+\221\222\262\212\12\354" - "\7\62q\22s*\355\7\62q\246S\5\356\10\63\221\326F\261\2\357\11+\221\222\62\212\25\0\360\14" - "<\261\222b\225Q\32\61)\0\361\12\64\261\226T\206\62\265\0\362\11\63\221\222\63\32i\4\363\11\63" - "\221\232\62\32i\4\364\10\63\221\326\36i\4\365\12\64\261\226T\206\253Z\0\366\10+\221\222\362H#" - "\367\10+\221\226\321F\11\370\12\255\256\216\322Lqe\4\371\11\63\221\222\63J*\11\372\11\63\221\232" - "\62J*\11\373\10\63\221\326N*\11\374\10+\221\222rRI\375\12C\215\232\62J*\311\5\376\12" - "C\217\22\243Jj\305\10\377\12;\215\222rRI.\0\0\0\0\4\377\377\0"; -/* - Fontname: -FreeType-MicroPixel-Medium-R-Normal--16-160-72-72-P-39-ISO10646-1 - Copyright: SpicyGame - Glyphs: 95/329 - BBX Build Mode: 0 -*/ -const uint8_t u8g2_font_micropixel_tr[736] U8G2_FONT_SECTION("u8g2_font_micropixel_tr") = - "_\0\2\2\3\3\2\4\4\6\11\377\376\5\376\6\377\0\357\1\352\2\303 \5\200\330\0!\6\251\250" - "\254\0\42\6\223\314$\25#\12\255\350UCUCU\0$\12\274\327\306\221\242\36:\1%\6\244\330" - "\304\36&\11\255\350\345\24\227\214*'\5\221\255\10(\7\272\267\251\316\0)\10\272\267\304\324R\0*" - "\6\233\314\244\16+\7\233\311\245\225\0,\5\221\247\10-\5\212\272\10.\5\211\250\4/\7\253\310V" - "e\4\60\11\254\330\251\70fR\0\61\6\352\310\255\6\62\10\254\330\251\330\34\1\63\11\254\330\251X\305" - "\244\0\64\10\254\330D\71t\1\65\11\254\330\14\275\321H\0\66\11\254\330\251\274bR\0\67\10\254\330" - "\214\34\353\10\70\11\254\330\251\230TL\12\71\11\254\330\251\230vR\0:\6\251\250\344\0;\6\261\247" - "d\1<\6\232\271\311\0=\6\233\311\354\1>\6\232\271D\5\77\10\254\330\251XS\11@\12\255\350" - "\255\254F\252\26\0A\10\254\330\251\70\246\14B\11\254\330\254\70R\34\11C\10\254\330\215\134\243\1D" - "\10\254\330\254h\216\4E\10\254\330\14\275\362\10F\10\254\330\14\275r\6G\10\254\330\215\234f\32H" - "\10\254\330D\71\246\14I\7\253\310\254X\15J\7\253\310\311r\1K\11\254\330D\225d*\3L\7" - "\253\310\304\346\0M\11\255\350\344\265\222\326\1N\10\254\330\304\245\246\14O\10\254\330\251h&\5P\11" - "\254\330\254\70R\316\0Q\10\254\330\251h\251\1R\11\254\330\254\70R\224\1S\11\254\330\215\214\64\32" - "\11T\7\253\310\254\330\2U\10\254\330DgR\0V\10\254\330DW\214\0W\11\255\350d+\251." - "\0X\11\254\330D\231T\224\1Y\10\253\310$UV\0Z\11\254\330\214\234T\36\1[\7\272\267\254" - ".\1\134\7\253\310\304\134\6]\7\272\267\250\256\1^\5\223\314\65_\6\214\330\214\0`\6\222\274\304" - "\0a\6\233\310\255$b\10\253\310\304\250\322\2c\6\233\310m\1d\7\253\310V+\11e\6\232\270" - ",\1f\10\253\310\246\264b\2g\10\253\306\255$\27\0h\10\253\310\304\250\222\12i\6\251\250\244\1" - "j\10z\246\345T)\0k\10\243\310\244\225T\0l\6\251\250\14\1m\10\235\350\214T\251\2n\7" - "\233\310\250\244\2o\7\233\310\214\64\2p\10\253\306\250\264b\4q\7\253\306\255$\13r\7\233\310\214" - "$\1s\7\233\310\251\244\0t\7\252\270\244\25\3u\7\233\310$\225\4v\7\233\310$U\1w\10" - "\235\350\244\244\272\0x\6\233\310\244\16y\10\253\306$\225\344\2z\6\233\310\254\64{\11\273\307\246\230" - "r\314\1|\5\261\250\34}\11\273\307\344\230SL\21~\7\224\332%\225\0\0\0\0\4\377\377\0"; -/* - Fontname: -FreeType-MicroPixel-Medium-R-Normal--16-160-72-72-P-39-ISO10646-1 - Copyright: SpicyGame - Glyphs: 320/329 - BBX Build Mode: 0 -*/ -const uint8_t u8g2_font_micropixel_te[2968] U8G2_FONT_SECTION("u8g2_font_micropixel_te") = - "@\0\2\2\4\4\2\4\5\11\14\377\375\5\376\6\377\0\367\1\376\6\26 \5\0b\5!\6Q\242" - "d\5\42\7#\62%\251\0#\12U\242\255\32\252\32\252\2$\12t^\65\216\24\365\320\11%\7D" - "b%\366\0&\12U\242-\247\270dT\1'\5!\266D(\7r\336Lu\6)\10r\336$\246" - "\226\2*\6\63\62%u+\7\63&-\255\4,\5!\236D-\5\22\352D.\5\21\242$/\10" - "S\42\265*#\0\60\11TbM\305\61\223\2\61\6R#m\65\62\10TbM\305\346\10\63\11T" - "bM\305*&\5\64\10Tb%\312\241\13\65\11Tbe\350\215F\2\66\11TbM\345\25\223\2" - "\67\11Tbe\344XG\0\70\12TbM\305\244bR\0\71\11TbM\305\264\223\2:\6Q\242" - "$\7;\6a\236$\13<\6\62\346L\6=\6\63&e\17>\7\62\346$*\0\77\11TbM" - "\305\232J\0@\12U\242me\65R\265\0A\11TbM\305\61e\0B\12Tbe\305\221\342H" - "\0C\10Tbm\344\32\15D\11TbeEs$\0E\11Tbe\350\225G\0F\11Tbe" - "\350\225\63\0G\11Tbm\344\64\323\0H\11Tb%\312\61e\0I\7S\42e\305jJ\7S" - "\42M\226\13K\11Tb%\252$S\31L\7S\42%\66\7M\11U\242%\257\225\264\16N\11T" - "b%.\65e\0O\11TbME\63)\0P\11Tbe\305\221r\6Q\10TbMEK\15" - "R\11Tbe\305\221\242\14S\12Tbmd\244\321H\0T\10S\42e\305\26\0U\10Tb%" - ":\223\2V\10Tb%\272b\4W\11U\242%[Iu\1X\11Tb%\312\244\242\14Y\10S" - "\42%\251\262\2Z\11Tbe\344\244\362\10[\7r\336du\11\134\7S\42%\346\62]\7r\336" - "Du\15^\6#\62\255\1_\6\24be\4`\6\42\362$\6a\7\63\42m%\1b\11S\42" - "%F\225\26\0c\6\63\42m\13d\7S\42\265ZIe\6\62\342d\11f\11S\42\65\245\25\23" - "\0g\10S\32m%\271\0h\11S\42%F\225T\0i\6Q\242$\15j\10r\231,\247J\1" - "k\10C\42%\255\244\2l\6Q\242d\10m\10\65\242e\244J\25n\7\63\42E%\25o\7\63" - "\42e\244\21p\11S\32E\245\25#\0q\7S\32m%Yr\7\63\42e$\11s\7\63\42M" - "%\5t\7R\342$\255\30u\7\63\42%\251$v\7\63\42%\251\12w\10\65\242%%\325\5x" - "\6\63\42%uy\11S\32%\251$\27\0z\7\63\42e\245\1{\11s\36\65\305\224c\16|\6" - "a\242\344\0}\12s\36%\307\234b\212\0~\7$j-\251\4\240\5\0b\5\241\6Q\242$\15" - "\242\11T^\65\216\24g\2\243\11TbU\305\221\342\10\244\12U\242%\247\231\342\312\1\245\11S\42" - "%\251j%\0\246\6a\236D\12\247\14tbmd\244b\322h$\0\250\7%\262E\215$\251\12" - "U\242me\65rZ\0\252\7\63\62m%\1\253\7\65\246-\312\6\254\6#&e\6\256\11U\242" - "m\305\253Z\0\257\6\24ve\4\260\7\63\62e\244\21\261\10S\42-\255\214\6\262\7C\66E\257" - "\1\263\7C\66E\312\5\264\6\42\362L\1\265\11S\32%\251!#\0\266\13U\242m\254\244b\212" - ")\1\267\5\21\252$\270\7\63\325,/\0\271\6B\67E\65\272\7\63:e\244\21\273\10\65\246%" - "\226\62\1\277\11TZ-S\261R\0\300\13\204b-\243\214U\34S\6\301\12\204b\265\246T\34S" - "\6\302\13\204bM\305\14U\34S\6\303\13\204b-\251\214U\34S\6\304\12tb%f\250\342\230" - "\62\305\12tbM\305\244\342\230\62\306\14W\42n\214\230\307\212\71\216\0\307\13\204Vm\344\32\315\214" - "b\2\310\13\204b-\243\214U\34S\6\311\12\204b\265\306C\257<\2\312\13\204b-\246\14\207^" - "y\4\313\12tb%e\70\364\312#\314\11\203\42%g\264b\65\315\11\203\42\65e\264b\65\316\10" - "\203\42\255\275b\65\317\11s\42%\345\25\253\1\320\12Uam\306\221\312\264\0\321\13\204b-\251\14" - "\343RS\6\322\13\204b-\243\214U\64\223\2\323\12\204b\265\246T\64\223\2\324\13\204bM\305\14" - "U\64\223\2\325\13\204b-\251\214U\64\223\2\326\13tb%f\250\242\231\24\0\327\6\63&%u" - "\330\12V\241U\307\64V\314\22\331\13\204b-\243\14\243\63)\0\332\12\204b\265\306\321\231\24\0\333" - "\13\204bM\305\214\242\63)\0\334\12tb%f\24\235I\1\335\12\203\42\65e\224TY\1\336\11" - "Tb%\257\70R\6\337\11TbeEU\252\4\340\11c\42%g\270\222\0\341\11c\42\65e\270" - "\222\0\342\10c\42\255\215V\22\343\12db-\251\214U\251\0\344\11S\42%e\264\222\0\345\12s" - "\42e\244\221\321J\2\346\7\64bm\244\70\347\10c\26m\253\274\0\350\7b\342$\306%\351\7b" - "\342L/\1\352\10c\42\255\255\242\2\353\11S\42%e\25\25\0\354\7b\342$\346T\355\7b\342" - "L\247\12\356\10c\42\255\215b\5\357\11S\42%e\24+\0\360\14tb%\305*\243\64bR\0" - "\361\12db-\251\14ej\1\362\11c\42%g\64\322\10\363\11c\42\65e\64\322\10\364\10c\42" - "\255=\322\10\365\12db-\251\14W\265\0\366\11S\42%\345\221F\0\367\11S\42-\243\215\22\0" - "\370\12U]\35\245\231\342\312\10\371\11c\42%g\224T\22\372\11c\42\65e\224T\22\373\10c\42" - "\255\235T\22\374\11S\42%\345\244\222\0\375\12\203\32\65e\224T\222\13\376\12\203\36%F\225\324\212" - "\21\377\12s\32%\345\244\222\134\0\0\0\0\4\377\377\1\0\13tbed\250\342\230\62\1\1\11S" - "\42e\243\225\4\1\2\14\204b%&\215U\34S\6\1\3\12c\42%\215\214V\22\1\4\13tZ" - "M\305\61e\215\2\1\5\12c\26m%\231r\0\1\6\13\204b=f\11S\42%\231%\0\1\77\10S\42%Vr" - "\1@\11S\42%V\62\2\1A\11T!-+\235\7\1B\11S\341,\216X\1\1C\13\204b" - "\265\306q\251)\3\1D\12c\42\65e\244\222\12\1E\14\204V%.\65e\206\71\2\1F\13c" - "\26E%\225QL\0\1G\14\204b\255\314\60.\65e\0\1H\12c\42%\325H%\25\1I\12" - "c\42%f\250\222\12\1J\11TbeEW\2\1K\12S\32E%\25S\2\1L\13tbM" - "c\25\315\244\0\1M\11S\42e\217\64\2\1N\14\204b%&\215U\64\223\2\1O\12c\42%" - "\215<\322\10\1P\14\204b-\251\214U\64\223\2\1Q\13db-\251\14W\265\0\1R\13V\342" - "m\314R\305<\4\1S\11\64be\250\64\2\1T\14\204b\265\306+\216\24e\0\1U\10b\342" - "L\257\4\1V\15\204Ve\305\221\242\314\60G\0\1W\11b\326d\345\224\0\1X\15\204b%&" - "\15W\34)\312\0\1Y\12c\42%\325H\305\10\1Z\14\204b\265\246FF\32\215\4\1[\12c" - "\42\65e\250\222\2\1\134\15\204b\265\312pd\244\321H\0\1]\12c\42\255\215TR\0\1^\15" - "\204Vmd\244\321\210\31\305\10\1_\12c\26M%\231S\2\1`\15\204b%&\215GF\32\215" - "\4\1a\12c\42%\325P%\5\1b\12s\32e\305vJ\0\1c\13\203\26%\252\230cN\11" - "\1d\11S\42e\305\26\0\1e\12Tb%.\235Q\4\1f\12S\42e\245\25\23\0\1g\10" - "R\342d\315\0\1h\14\204b-\251\14\243\63)\0\1i\13db-\251\14SS\1\1j\13t" - "bed\24\235I\1\1k\11S\42e'\225\4\1l\14\204b%&\15\243\63)\0\1m\12c" - "\42%\215\234T\22\1n\13\204bMj\30\235I\1\1o\13s\42e\244\221\223J\2\1p\14\204" - "b-\251\14\243\63)\0\1q\13db-\251\14SS\1\1r\14\204V%:\223\216\31%\0\1" - "s\12c\26%\251$S\16\1t\15\205\242\65\247\214\263\225T\27\0\1u\14e\242\65\247\214SR" - "]\0\1v\12\203\42\255\235TY\1\1w\12\203\32\255\235T\222\13\1x\12s\42%\345\244\312\12" - "\1y\14\204b\265\306#'\225G\0\1z\12c\42\65e\264\322\0\1{\13tb-\343\221\223\312" - "#\1|\11S\42-\243\225\6\1}\15\204b%&\15GN*\217\0\1~\12c\42%\325h\245" - "\1\2Q\7\63\42\255%\2Y\7\62\342D\15\2[\7\62\342L\6\2a\13dVm\244\250dJ" - "\13\2\230\13U\242me\225tZ\0 \254\12Uau\345\241\62\34\0"; /* Fontname: -FreeType-TinyPixie2-Medium-R-Normal--6-60-72-72-P-33-ISO10646-1 Copyright: TinyPixie diff --git a/src/clib/u8x8_d_ld7032_60x32.c b/src/clib/u8x8_d_ld7032_60x32.c index f79bd774..d71d42f8 100644 --- a/src/clib/u8x8_d_ld7032_60x32.c +++ b/src/clib/u8x8_d_ld7032_60x32.c @@ -306,6 +306,81 @@ uint8_t u8x8_d_ld7032_60x32_alt(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void see https://github.com/olikraus/u8g2/issues/2135 */ +static uint8_t u8x8_d_ld7032_128_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) +{ + uint8_t x, c; + uint8_t *ptr; + switch(msg) + { + /* handled by the calling function + case U8X8_MSG_DISPLAY_SETUP_MEMORY: + u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ld7032_60x32_display_info); + break; + */ + case U8X8_MSG_DISPLAY_INIT: + u8x8_d_helper_display_init(u8x8); + u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_init_seq); + break; + case U8X8_MSG_DISPLAY_SET_POWER_SAVE: + if ( arg_int == 0 ) + u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_powersave0_seq); + else + u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_powersave1_seq); + break; + case U8X8_MSG_DISPLAY_SET_FLIP_MODE: + if ( arg_int == 0 ) + { + u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_flip0_seq); + u8x8->x_offset = u8x8->display_info->default_x_offset; + } + else + { + u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_flip1_seq); + u8x8->x_offset = u8x8->display_info->flipmode_x_offset; + } + break; +#ifdef U8X8_WITH_SET_CONTRAST + case U8X8_MSG_DISPLAY_SET_CONTRAST: + u8x8_cad_StartTransfer(u8x8); + u8x8_cad_SendCmd(u8x8, 0x012 ); + if ( arg_int > 0x07f ) /* default is 0x040, limit to 0x07f to be on the safe side (hopefully) */ + arg_int= 0x07f; + u8x8_cad_SendArg(u8x8, arg_int ); /* values from 0x00 to 0x0ff are allowed, bit will all values be safe??? */ + u8x8_cad_EndTransfer(u8x8); + break; +#endif + case U8X8_MSG_DISPLAY_DRAW_TILE: + u8x8_cad_StartTransfer(u8x8); + x = ((u8x8_tile_t *)arg_ptr)->x_pos; + x += u8x8->x_offset/8; + u8x8_cad_SendCmd(u8x8, 0x034 ); + u8x8_cad_SendArg(u8x8, x ); + u8x8_cad_SendCmd(u8x8, 0x035 ); + u8x8_cad_SendArg(u8x8, 0x00f ); + u8x8_cad_SendCmd(u8x8, 0x036 ); + u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)*8 ); + u8x8_cad_SendCmd(u8x8, 0x037 ); + u8x8_cad_SendArg(u8x8, 0x027 ); + u8x8_cad_SendCmd(u8x8, 0x008 ); + + + do + { + c = ((u8x8_tile_t *)arg_ptr)->cnt; + ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; + u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ + arg_int--; + } while( arg_int > 0 ); + + u8x8_cad_EndTransfer(u8x8); + break; + default: + return 0; + } + return 1; +} + + static const u8x8_display_info_t u8x8_ld7032_128x36_display_info = { /* chip_enable_level = */ 0, @@ -378,5 +453,5 @@ uint8_t u8x8_d_ld7032_128x36(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *a return 1; } - return u8x8_d_ld7032_generic(u8x8, msg, arg_int, arg_ptr); + return u8x8_d_ld7032_128_generic(u8x8, msg, arg_int, arg_ptr); } diff --git a/src/clib/u8x8_d_sed1330.c b/src/clib/u8x8_d_sed1330.c index c629ada2..c66ad40b 100644 --- a/src/clib/u8x8_d_sed1330.c +++ b/src/clib/u8x8_d_sed1330.c @@ -398,7 +398,7 @@ static const uint8_t u8x8_d_sed1330_256x128_init_seq[] = { U8X8_A(0x020), /* 32 */ /* Low byte of the virtual screen size. (Value confirmed with app notes p41) */ U8X8_A(0), /* High byte of the virtual screen size, see also section 9.1.2 */ - U8X8_C(0x044), /* SCROLL */ + U8X8_C(0x044), /* SCROLL, 11 Bytes in total */ U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x080), @@ -481,26 +481,27 @@ static const uint8_t u8x8_d_sed1330_320x200_init_seq[] = { /* system init command, see also u8x8_d_sed1330_powersave0_seq */ U8X8_CA(0x040, 0x030), /* sys init (0x040) with one arg, where 0x030 is a wild guess */ /* system init has total 8 parameters, so 7 more are here */ + U8X8_A(0x087), /* no idea here... WF (topmost bit) is set to one because it is suggested in the datasheet, lowest 3 bits refer to text mode only */ U8X8_A(0x007), /* FY: height of a char+1, does not matter here (hopefully), because we use graphics mode only */ U8X8_A(0x027), /* 40-1 */ /* C/R: this could be the number of horizontal bytes - 1 (Value confirmed with app notes p41) */ - U8X8_A(0x039), /* TC/R: According to app notes fOSC=6Mhz fFF=70Hz --> TC/R = 74d*/ + U8X8_A(0x02F), /* TC/R: According to app notes fOSC=6Mhz fFF=70Hz --> TC/R = 74d*/ U8X8_A(0x0c7), /* 0xc7=199, L/F: Lines per frame - 1, probably this is the height of the display - 1 (value confirmed with app notes p41)*/ U8X8_A(0x028), /* Low byte of the virtual screen size. (Value confirmed with app notes p41) */ - U8X8_A(0), /* High byte of the virtual screen size, see also section 9.1.2 */ + U8X8_A(0x000), /* High byte of the virtual screen size, see also section 9.1.2 */ - U8X8_C(0x044), /* SCROLL */ - U8X8_A(0x000), - U8X8_A(0x000), - U8X8_A(0x0ef), - U8X8_A(0x0b0), - U8X8_A(0x004), - U8X8_A(0x0ef), + U8X8_C(0x044), /* SCROLL, 11 Bytes in total */ + U8X8_A(0x000), /* Screen 1 Start Address (Low) = 00H */ + U8X8_A(0x000), /* Screen 1 Start Address (High) = 00H */ + U8X8_A(0x0c7), /* Screen Layer 1 Number of lines = 200d */ + U8X8_A(0x0b0), /* Screen 2 Start Address (Low) = 00H */ + U8X8_A(0x005), /* Screen 2 Start Address (High) = 00H */ + U8X8_A(0x0c7), /* Screen Layer 2 Number of lines = 200d */ + U8X8_C(0x04C), /* Cursor Direction 0,0 Shift Direction = Right */ U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x000), - U8X8_A(0x000), - + U8X8_CA(0x05a, 0), /* HDOT SCR: Horizontal dotwise scroll... set to 0 */ U8X8_CA(0x05b, 0x0c), /* OVLAY: 2-layer, all graphics, OR between layer 1 and 2 */ diff --git a/src/clib/u8x8_d_ssd1322.c b/src/clib/u8x8_d_ssd1322.c index 8f31feff..3f045346 100644 --- a/src/clib/u8x8_d_ssd1322.c +++ b/src/clib/u8x8_d_ssd1322.c @@ -374,7 +374,7 @@ static const uint8_t u8x8_d_ssd1322_240x128_init_seq[] = { U8X8_CA(0xa2, 0x00), /* display offset, shift mapping ram counter */ U8X8_CA(0xa1, 0x00), /* display start line */ //U8X8_CAA(0xa0, 0x14, 0x11), /* Set Re-Map / Dual COM Line Mode */ - U8X8_CAA(0xa0, 0x06, 0x011), /* Set Re-Map / Dual COM Line Mode */ + U8X8_CAA(0xa0, 0x36, 0x011), /* Set Re-Map / Dual COM Line Mode */ U8X8_CA(0xab, 0x01), /* Enable Internal VDD Regulator */ U8X8_CAA(0xb4, 0xa0, 0x005|0x0fd), /* Display Enhancement A */ U8X8_CA(0xc1, 0x9f), /* contrast */ diff --git a/src/clib/u8x8_d_st75256.c b/src/clib/u8x8_d_st75256.c index e9fc5736..555befe8 100644 --- a/src/clib/u8x8_d_st75256.c +++ b/src/clib/u8x8_d_st75256.c @@ -1776,7 +1776,13 @@ uint8_t u8x8_d_st75256_jlx19296(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void /*=============================================*/ -/* JLX16080 LCD */ +/* + JLX16080 LCD + + https://github.com/olikraus/u8g2/issues/2058 + + WARNING: NOT FULLY TESTED in issue 2058! +*/ static const u8x8_display_info_t u8x8_st75256_jlx16080_display_info = { @@ -1889,10 +1895,14 @@ uint8_t u8x8_d_st75256_jlx16080(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ - if ( u8x8->x_offset == 0 ) /* 0 means flip mode 1, then adjust y value */ - u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); - else + + + //if ( u8x8->x_offset == 0 ) /* 0 means flip mode 1, then adjust y value */ + //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); + //else u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); + + u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */