Add basic config ui mock up for rpi, UI now flip/flops between config screen and output screen whenever a key is pressed

This commit is contained in:
KemoNine 2020-09-08 22:49:16 -04:00
parent cb41667710
commit 324e4d969e
4 changed files with 365 additions and 4 deletions

View file

@ -84,6 +84,10 @@ void processRingBuffer();
// Save some element references for direct access // Save some element references for direct access
//<Save_References !Start!> //<Save_References !Start!>
gslc_tsElemRef* m_pElemBatteryLevel= NULL; gslc_tsElemRef* m_pElemBatteryLevel= NULL;
gslc_tsElemRef* m_pElemRd1152 = NULL;
gslc_tsElemRef* m_pElemRd96 = NULL;
gslc_tsElemRef* m_pElemRdUART0 = NULL;
gslc_tsElemRef* m_pElemRdUART5 = NULL;
gslc_tsElemRef* m_pElemStatusText = NULL; gslc_tsElemRef* m_pElemStatusText = NULL;
gslc_tsElemRef* m_pElemText = NULL; gslc_tsElemRef* m_pElemText = NULL;
//<Save_References !End!> //<Save_References !End!>
@ -193,6 +197,15 @@ void handlerKeyboard() {
// Add key code to display ring buffer *if* it's pressed ; no need for other events presently // Add key code to display ring buffer *if* it's pressed ; no need for other events presently
if (key.state == BBQ10Keyboard::StatePress) { if (key.state == BBQ10Keyboard::StatePress) {
if (gslc_GetPageCur(&m_gui) == E_PG_MAIN) {
gslc_SetPageCur(&m_gui,E_CONF_RPI);
}
else {
gslc_SetPageCur(&m_gui,E_PG_MAIN);
}
char output[28]; char output[28];
snprintf(output, 28, "key: '%c' (dec %d, hex %02x)", key.key, key.key, key.key); snprintf(output, 28, "key: '%c' (dec %d, hex %02x)", key.key, key.key, key.key);
textChanged = true; textChanged = true;

Binary file not shown.

View file

@ -21,6 +21,7 @@
// Include any extended elements // Include any extended elements
//<Includes !Start!> //<Includes !Start!>
// Include extended elements // Include extended elements
#include "src/guislice/XCheckbox.h"
#include "src/guislice/XProgress.h" #include "src/guislice/XProgress.h"
#include "src/guislice/XTextbox.h" #include "src/guislice/XTextbox.h"
//<Includes !End!> //<Includes !End!>
@ -34,6 +35,7 @@
#error Project tab->Target Platform should be tft_espi #error Project tab->Target Platform should be tft_espi
#endif #endif
#include <Adafruit_GFX.h> #include <Adafruit_GFX.h>
#include "src/guislice/NotoMono12pt7b.h"
#include "src/guislice/NotoMono8pt7b.h" #include "src/guislice/NotoMono8pt7b.h"
//<Fonts !End!> //<Fonts !End!>
@ -47,10 +49,14 @@
// Enumerations for pages, elements, fonts, images // Enumerations for pages, elements, fonts, images
// ------------------------------------------------ // ------------------------------------------------
//<Enum !Start!> //<Enum !Start!>
enum {E_PG_MAIN}; enum {E_PG_MAIN,E_CONF_RPI};
enum {E_ELEM_BATT_LEVEL,E_ELEM_STATUS,E_ELEM_TEXT}; enum {E_ELEM_BATT_LEVEL,E_ELEM_CONFIG_RPI_TITLE,E_ELEM_RD96
,E_ELEM_RD_1152,E_ELEM_RD_UART0,E_ELEM_RD_UART5,E_ELEM_STATUS
,E_ELEM_TEXT,E_ELEM_TEXT3,E_ELEM_TEXT4,E_ELEM_TX96,E_ELEM_TX_1152
,E_ELEM_TX_UART1,E_ELEM_TX_UART5};
enum {E_GRP_SPD,E_GRP_UART};
// Must use separate enum for fonts with MAX_FONT at end to use gslc_FontSet. // Must use separate enum for fonts with MAX_FONT at end to use gslc_FontSet.
enum {E_AO_NOTOMONO8PT7B,MAX_FONT}; enum {E_AO_NOTOMONO12PT7B,E_AO_NOTOMONO8PT7B,MAX_FONT};
//<Enum !End!> //<Enum !End!>
// ------------------------------------------------ // ------------------------------------------------
@ -61,10 +67,13 @@ enum {E_AO_NOTOMONO8PT7B,MAX_FONT};
// Define the maximum number of elements and pages // Define the maximum number of elements and pages
// ------------------------------------------------ // ------------------------------------------------
//<ElementDefines !Start!> //<ElementDefines !Start!>
#define MAX_PAGE 1 #define MAX_PAGE 2
#define MAX_ELEM_PG_MAIN 3 // # Elems total on page #define MAX_ELEM_PG_MAIN 3 // # Elems total on page
#define MAX_ELEM_PG_MAIN_RAM MAX_ELEM_PG_MAIN // # Elems in RAM #define MAX_ELEM_PG_MAIN_RAM MAX_ELEM_PG_MAIN // # Elems in RAM
#define MAX_ELEM_CONF_RPI 11 // # Elems total on page
#define MAX_ELEM_CONF_RPI_RAM MAX_ELEM_CONF_RPI // # Elems in RAM
//<ElementDefines !End!> //<ElementDefines !End!>
// ------------------------------------------------ // ------------------------------------------------
@ -78,9 +87,15 @@ gslc_tsPage m_asPage[MAX_PAGE];
//<GUI_Extra_Elements !Start!> //<GUI_Extra_Elements !Start!>
gslc_tsElem m_asPage1Elem[MAX_ELEM_PG_MAIN_RAM]; gslc_tsElem m_asPage1Elem[MAX_ELEM_PG_MAIN_RAM];
gslc_tsElemRef m_asPage1ElemRef[MAX_ELEM_PG_MAIN]; gslc_tsElemRef m_asPage1ElemRef[MAX_ELEM_PG_MAIN];
gslc_tsElem m_asPage2Elem[MAX_ELEM_CONF_RPI_RAM];
gslc_tsElemRef m_asPage2ElemRef[MAX_ELEM_CONF_RPI];
gslc_tsXProgress m_sXBarGauge1; gslc_tsXProgress m_sXBarGauge1;
gslc_tsXTextbox m_sTextbox1; gslc_tsXTextbox m_sTextbox1;
char m_acTextboxBuf1[952]; // NRows=17 NCols=56 char m_acTextboxBuf1[952]; // NRows=17 NCols=56
gslc_tsXCheckbox m_asXRadio1;
gslc_tsXCheckbox m_asXRadio2;
gslc_tsXCheckbox m_asXRadio3;
gslc_tsXCheckbox m_asXRadio4;
#define MAX_STR 100 #define MAX_STR 100
@ -93,6 +108,10 @@ char m_acTextboxBuf1[952]; // NRows=17 NCols=56
// Element References for direct access // Element References for direct access
//<Extern_References !Start!> //<Extern_References !Start!>
extern gslc_tsElemRef* m_pElemBatteryLevel; extern gslc_tsElemRef* m_pElemBatteryLevel;
extern gslc_tsElemRef* m_pElemRd1152;
extern gslc_tsElemRef* m_pElemRd96;
extern gslc_tsElemRef* m_pElemRdUART0;
extern gslc_tsElemRef* m_pElemRdUART5;
extern gslc_tsElemRef* m_pElemStatusText; extern gslc_tsElemRef* m_pElemStatusText;
extern gslc_tsElemRef* m_pElemText; extern gslc_tsElemRef* m_pElemText;
extern gslc_tsElemRef* m_pTextSlider; extern gslc_tsElemRef* m_pTextSlider;
@ -126,11 +145,13 @@ void InitGUIslice_gen()
// Load Fonts // Load Fonts
// ------------------------------------------------ // ------------------------------------------------
//<Load_Fonts !Start!> //<Load_Fonts !Start!>
if (!gslc_FontSet(&m_gui,E_AO_NOTOMONO12PT7B,GSLC_FONTREF_PTR,&NotoMono12pt7b,1)) { return; }
if (!gslc_FontSet(&m_gui,E_AO_NOTOMONO8PT7B,GSLC_FONTREF_PTR,&NotoMono8pt7b,1)) { return; } if (!gslc_FontSet(&m_gui,E_AO_NOTOMONO8PT7B,GSLC_FONTREF_PTR,&NotoMono8pt7b,1)) { return; }
//<Load_Fonts !End!> //<Load_Fonts !End!>
//<InitGUI !Start!> //<InitGUI !Start!>
gslc_PageAdd(&m_gui,E_PG_MAIN,m_asPage1Elem,MAX_ELEM_PG_MAIN_RAM,m_asPage1ElemRef,MAX_ELEM_PG_MAIN); gslc_PageAdd(&m_gui,E_PG_MAIN,m_asPage1Elem,MAX_ELEM_PG_MAIN_RAM,m_asPage1ElemRef,MAX_ELEM_PG_MAIN);
gslc_PageAdd(&m_gui,E_CONF_RPI,m_asPage2Elem,MAX_ELEM_CONF_RPI_RAM,m_asPage2ElemRef,MAX_ELEM_CONF_RPI);
// NOTE: The current page defaults to the first page added. Here we explicitly // NOTE: The current page defaults to the first page added. Here we explicitly
// ensure that the main page is the correct page no matter the add order. // ensure that the main page is the correct page no matter the add order.
@ -162,6 +183,68 @@ void InitGUIslice_gen()
gslc_ElemSetTxtCol(&m_gui,pElemRef,GSLC_COL_GRAY_LT3); gslc_ElemSetTxtCol(&m_gui,pElemRef,GSLC_COL_GRAY_LT3);
gslc_ElemSetCol(&m_gui,pElemRef,GSLC_COL_GRAY,GSLC_COL_BLACK,GSLC_COL_BLACK); gslc_ElemSetCol(&m_gui,pElemRef,GSLC_COL_GRAY,GSLC_COL_BLACK,GSLC_COL_BLACK);
m_pElemText = pElemRef; m_pElemText = pElemRef;
// -----------------------------------
// PAGE: E_CONF_RPI
// Create E_ELEM_CONFIG_RPI_TITLE text label
pElemRef = gslc_ElemCreateTxt(&m_gui,E_ELEM_CONFIG_RPI_TITLE,E_CONF_RPI,(gslc_tsRect){2,2,316,32},
(char*)"Raspberry Pi Config",0,E_AO_NOTOMONO12PT7B);
gslc_ElemSetTxtAlign(&m_gui,pElemRef,GSLC_ALIGN_MID_MID);
gslc_ElemSetTxtCol(&m_gui,pElemRef,GSLC_COL_GREEN);
// Create E_ELEM_TEXT3 text label
pElemRef = gslc_ElemCreateTxt(&m_gui,E_ELEM_TEXT3,E_CONF_RPI,(gslc_tsRect){2,40,40,21},
(char*)"UART",0,E_AO_NOTOMONO8PT7B);
// Create E_ELEM_TEXT4 text label
pElemRef = gslc_ElemCreateTxt(&m_gui,E_ELEM_TEXT4,E_CONF_RPI,(gslc_tsRect){2,120,120,21},
(char*)"Speed / Baud",0,E_AO_NOTOMONO8PT7B);
// Create radio button E_ELEM_RD_UART5
pElemRef = gslc_ElemXCheckboxCreate(&m_gui,E_ELEM_RD_UART5,E_CONF_RPI,&m_asXRadio1,
(gslc_tsRect){160,80,20,20},true,GSLCX_CHECKBOX_STYLE_ROUND,GSLC_COL_YELLOW,false);
gslc_ElemSetGroup(&m_gui,pElemRef,E_GRP_UART);
m_pElemRdUART5 = pElemRef;
// Create radio button E_ELEM_RD_UART0
pElemRef = gslc_ElemXCheckboxCreate(&m_gui,E_ELEM_RD_UART0,E_CONF_RPI,&m_asXRadio2,
(gslc_tsRect){10,80,20,20},true,GSLCX_CHECKBOX_STYLE_ROUND,GSLC_COL_YELLOW,true);
gslc_ElemSetGroup(&m_gui,pElemRef,E_GRP_UART);
m_pElemRdUART0 = pElemRef;
// Create E_ELEM_TX_UART1 text label
pElemRef = gslc_ElemCreateTxt(&m_gui,E_ELEM_TX_UART1,E_CONF_RPI,(gslc_tsRect){40,80,50,21},
(char*)"UART0",0,E_AO_NOTOMONO8PT7B);
gslc_ElemSetTxtCol(&m_gui,pElemRef,GSLC_COL_GRAY_LT3);
// Create E_ELEM_TX_UART5 text label
pElemRef = gslc_ElemCreateTxt(&m_gui,E_ELEM_TX_UART5,E_CONF_RPI,(gslc_tsRect){190,80,50,21},
(char*)"UART5",0,E_AO_NOTOMONO8PT7B);
gslc_ElemSetTxtCol(&m_gui,pElemRef,GSLC_COL_GRAY_LT3);
// Create radio button E_ELEM_RD96
pElemRef = gslc_ElemXCheckboxCreate(&m_gui,E_ELEM_RD96,E_CONF_RPI,&m_asXRadio3,
(gslc_tsRect){160,160,20,20},true,GSLCX_CHECKBOX_STYLE_ROUND,GSLC_COL_YELLOW,false);
gslc_ElemSetGroup(&m_gui,pElemRef,E_GRP_SPD);
m_pElemRd96 = pElemRef;
// Create radio button E_ELEM_RD_1152
pElemRef = gslc_ElemXCheckboxCreate(&m_gui,E_ELEM_RD_1152,E_CONF_RPI,&m_asXRadio4,
(gslc_tsRect){10,160,20,20},true,GSLCX_CHECKBOX_STYLE_ROUND,GSLC_COL_YELLOW,true);
gslc_ElemSetGroup(&m_gui,pElemRef,E_GRP_SPD);
m_pElemRd1152 = pElemRef;
// Create E_ELEM_TX_1152 text label
pElemRef = gslc_ElemCreateTxt(&m_gui,E_ELEM_TX_1152,E_CONF_RPI,(gslc_tsRect){40,160,60,21},
(char*)"115200",0,E_AO_NOTOMONO8PT7B);
gslc_ElemSetTxtCol(&m_gui,pElemRef,GSLC_COL_GRAY_LT3);
// Create E_ELEM_TX96 text label
pElemRef = gslc_ElemCreateTxt(&m_gui,E_ELEM_TX96,E_CONF_RPI,(gslc_tsRect){190,160,40,21},
(char*)"9600",0,E_AO_NOTOMONO8PT7B);
gslc_ElemSetTxtCol(&m_gui,pElemRef,GSLC_COL_GRAY_LT3);
//<InitGUI !End!> //<InitGUI !End!>
//<Startup !Start!> //<Startup !Start!>

View file

@ -0,0 +1,265 @@
const uint8_t NotoMono12pt7bBitmaps[] PROGMEM = {
0x00, 0xFF, 0xFF, 0xD2, 0x49, 0x20, 0x3F, 0xE0, 0xE7, 0xE7, 0xE7, 0xE7,
0xC6, 0xC6, 0x0C, 0x60, 0x63, 0x03, 0x18, 0x10, 0xC0, 0x84, 0x3F, 0xFD,
0xFF, 0xE3, 0x18, 0x18, 0xC0, 0xC6, 0x3F, 0xFD, 0xFF, 0xE1, 0x08, 0x18,
0xC0, 0xC6, 0x06, 0x30, 0x31, 0x80, 0x0C, 0x03, 0x03, 0xF9, 0xFE, 0xEC,
0x33, 0x0C, 0xC3, 0xB0, 0x7C, 0x0F, 0xC0, 0xF8, 0x37, 0x0C, 0xC3, 0x38,
0xDF, 0xFE, 0x7E, 0x03, 0x00, 0xC0, 0x30, 0x38, 0x33, 0x63, 0x31, 0x99,
0x8D, 0x8C, 0x6C, 0x63, 0xC1, 0xB6, 0x07, 0x60, 0x02, 0x00, 0x37, 0x03,
0x6C, 0x1E, 0x31, 0xB1, 0x8D, 0x8C, 0xCC, 0x66, 0x36, 0x60, 0xE0, 0x1E,
0x01, 0xF8, 0x18, 0x60, 0xC3, 0x06, 0x18, 0x39, 0x80, 0xDC, 0x03, 0xC0,
0x3C, 0x03, 0xF1, 0xB9, 0xCD, 0x87, 0xCC, 0x1E, 0x60, 0x63, 0x87, 0x8F,
0xEE, 0x3E, 0x38, 0xFF, 0xFD, 0x80, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x60,
0x60, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0x60, 0x60, 0x30, 0x30,
0x18, 0x0C, 0x06, 0x60, 0x30, 0x18, 0x1C, 0x0C, 0x06, 0x06, 0x07, 0x03,
0x03, 0x03, 0x03, 0x03, 0x07, 0x06, 0x06, 0x0C, 0x0C, 0x18, 0x30, 0x60,
0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x7F, 0xFF, 0xFF, 0x0F, 0x00, 0xF0,
0x19, 0x83, 0x9C, 0x10, 0x80, 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x61,
0xFF, 0xFF, 0xF8, 0x30, 0x06, 0x00, 0xC0, 0x18, 0x00, 0x77, 0x66, 0xCC,
0xFF, 0xFF, 0xFF, 0x80, 0x00, 0xC0, 0x60, 0x18, 0x0C, 0x03, 0x01, 0x80,
0x60, 0x38, 0x0C, 0x07, 0x01, 0x80, 0x60, 0x30, 0x0C, 0x06, 0x01, 0x80,
0xC0, 0x00, 0x1F, 0x07, 0xF1, 0xC7, 0x30, 0x6E, 0x0F, 0x80, 0xF0, 0x1E,
0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3E, 0x0E, 0xC1, 0x9C, 0x71, 0xFC,
0x1F, 0x00, 0x0C, 0xF7, 0xFB, 0x4C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C,
0x30, 0xC3, 0x0C, 0x1F, 0x0F, 0xF1, 0x87, 0x00, 0x60, 0x0C, 0x01, 0x80,
0x70, 0x0C, 0x03, 0x80, 0xE0, 0x38, 0x06, 0x01, 0x80, 0x60, 0x18, 0x07,
0xFF, 0xFF, 0xE0, 0x3E, 0x3F, 0xC4, 0x38, 0x06, 0x01, 0x80, 0xE0, 0x70,
0xF0, 0x3F, 0x00, 0x60, 0x0C, 0x03, 0x00, 0xC0, 0x78, 0x1B, 0xFE, 0x7E,
0x00, 0x03, 0x80, 0x38, 0x07, 0x80, 0x58, 0x0D, 0x81, 0x98, 0x19, 0x83,
0x18, 0x31, 0x86, 0x18, 0xC1, 0x8F, 0xFF, 0xFF, 0xF0, 0x18, 0x01, 0x80,
0x18, 0x01, 0x80, 0x7F, 0x9F, 0xEC, 0x03, 0x00, 0xC0, 0x30, 0x0F, 0xE3,
0xFE, 0x01, 0x80, 0x70, 0x0C, 0x03, 0x00, 0xC0, 0x78, 0x1B, 0xFC, 0x7E,
0x00, 0x07, 0xC3, 0xF8, 0xE0, 0x38, 0x06, 0x01, 0xC0, 0x33, 0xC6, 0xFE,
0xE0, 0xDC, 0x0F, 0x01, 0xE0, 0x3C, 0x06, 0xC1, 0xDC, 0x31, 0xFE, 0x1F,
0x00, 0xFF, 0xFF, 0xFC, 0x03, 0x80, 0x60, 0x0C, 0x03, 0x00, 0x60, 0x18,
0x03, 0x00, 0xE0, 0x18, 0x07, 0x00, 0xC0, 0x18, 0x06, 0x00, 0xC0, 0x38,
0x00, 0x1F, 0x07, 0xF1, 0xC7, 0x30, 0x66, 0x0C, 0xE1, 0x8E, 0x60, 0xF8,
0x1F, 0x0E, 0x39, 0x83, 0x60, 0x3C, 0x07, 0x80, 0xF8, 0x3B, 0xFE, 0x1F,
0x00, 0x1F, 0x0F, 0xF1, 0x87, 0x70, 0x6C, 0x07, 0x80, 0xF0, 0x1E, 0x07,
0x60, 0xEF, 0xEC, 0x79, 0x80, 0x70, 0x0C, 0x03, 0x80, 0xE3, 0xF8, 0x7C,
0x00, 0xFF, 0x80, 0x00, 0x03, 0xFE, 0x77, 0x70, 0x00, 0x00, 0x00, 0x77,
0x66, 0xCC, 0x00, 0x40, 0x70, 0x78, 0x78, 0x38, 0x38, 0x0E, 0x00, 0xE0,
0x0E, 0x01, 0xE0, 0x1C, 0x01, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x3F,
0xFF, 0xFC, 0x80, 0x38, 0x07, 0x80, 0x70, 0x07, 0x00, 0x70, 0x1C, 0x1C,
0x1C, 0x1E, 0x0E, 0x02, 0x00, 0x3F, 0x3F, 0xE4, 0x1C, 0x03, 0x00, 0xC0,
0x30, 0x18, 0x0E, 0x06, 0x03, 0x00, 0xC0, 0x60, 0x00, 0x00, 0x01, 0xC0,
0x70, 0x1C, 0x00, 0x07, 0xC0, 0x7F, 0xC3, 0x03, 0x18, 0x06, 0x60, 0x09,
0x1F, 0x3C, 0xFC, 0xF6, 0x33, 0xD8, 0xCF, 0x63, 0x3D, 0x8C, 0xF6, 0x33,
0xCF, 0xFB, 0x3C, 0xC6, 0x00, 0x18, 0x00, 0x30, 0x00, 0x7F, 0xC0, 0x7E,
0x00, 0x03, 0x00, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x0C, 0xC0, 0x33, 0x00,
0xCC, 0x06, 0x18, 0x18, 0x60, 0x61, 0x83, 0xFF, 0x0F, 0xFC, 0x30, 0x31,
0x80, 0x66, 0x01, 0x98, 0x06, 0xC0, 0x0C, 0xFF, 0x8F, 0xFE, 0xC0, 0x7C,
0x03, 0xC0, 0x3C, 0x07, 0xC0, 0xEF, 0xF8, 0xFF, 0xCC, 0x0E, 0xC0, 0x7C,
0x03, 0xC0, 0x3C, 0x07, 0xC0, 0xEF, 0xFE, 0xFF, 0x80, 0x07, 0xE1, 0xFF,
0x38, 0x27, 0x00, 0x60, 0x0E, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00,
0xC0, 0x0E, 0x00, 0x60, 0x07, 0x00, 0x38, 0x01, 0xFF, 0x07, 0xE0, 0xFE,
0x0F, 0xF8, 0xC1, 0xCC, 0x0E, 0xC0, 0x6C, 0x07, 0xC0, 0x3C, 0x03, 0xC0,
0x3C, 0x03, 0xC0, 0x7C, 0x07, 0xC0, 0x6C, 0x0E, 0xC1, 0xCF, 0xF8, 0xFE,
0x00, 0xFF, 0xFF, 0xFC, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0xFF, 0xFF,
0xF0, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0xFF, 0xFF, 0xC0, 0xFF,
0xFF, 0xFC, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0xFF, 0xFF, 0xF0, 0x0C,
0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x00, 0x0F, 0xC3, 0xFC,
0xE1, 0x38, 0x06, 0x01, 0xC0, 0x30, 0x06, 0x1F, 0xC3, 0xF8, 0x0F, 0x01,
0xF0, 0x36, 0x06, 0xC0, 0xDC, 0x19, 0xFF, 0x0F, 0xC0, 0xC0, 0x78, 0x0F,
0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, 0x0F, 0x01,
0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x60, 0xFF, 0xFF, 0xC6,
0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x61, 0xFF, 0xFF, 0x80, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0,
0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x70, 0x3B,
0xFC, 0xFE, 0x00, 0xC0, 0x78, 0x1B, 0x06, 0x61, 0x8C, 0x61, 0x9C, 0x33,
0x06, 0xC0, 0xFC, 0x1D, 0x83, 0x18, 0x63, 0x8C, 0x31, 0x83, 0x30, 0x76,
0x06, 0xC0, 0x60, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03,
0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0xFF, 0xFF,
0xC0, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x17, 0xA2, 0xF4, 0x5E, 0x8B,
0xD1, 0x7A, 0x6F, 0x29, 0xE5, 0x3C, 0xA7, 0x94, 0xF3, 0x9E, 0x23, 0xC4,
0x60, 0xE0, 0x7C, 0x0F, 0xC1, 0xF8, 0x3D, 0x07, 0xB0, 0xF2, 0x1E, 0x63,
0xC4, 0x78, 0xCF, 0x09, 0xE1, 0xBC, 0x17, 0x83, 0xF0, 0x7E, 0x07, 0xC0,
0xE0, 0x1F, 0x03, 0xFC, 0x70, 0xE6, 0x06, 0xE0, 0x6E, 0x07, 0xC0, 0x3C,
0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3E, 0x07, 0xE0, 0x66, 0x06, 0x70, 0xE3,
0xFC, 0x1F, 0x00, 0xFF, 0x1F, 0xFB, 0x07, 0x60, 0x7C, 0x07, 0x80, 0xF0,
0x1E, 0x07, 0xC1, 0xDF, 0xF3, 0xF8, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06,
0x00, 0xC0, 0x00, 0x1F, 0x03, 0xFC, 0x70, 0xE6, 0x06, 0xE0, 0x6E, 0x07,
0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3E, 0x07, 0xE0, 0x76, 0x06,
0x70, 0xE3, 0xFC, 0x1F, 0x80, 0x18, 0x00, 0xC0, 0x0E, 0x00, 0x70, 0x02,
0xFE, 0x1F, 0xF3, 0x07, 0x60, 0xEC, 0x0D, 0x81, 0xB0, 0x76, 0x1C, 0xFF,
0x1F, 0xC3, 0x18, 0x61, 0x8C, 0x39, 0x83, 0x30, 0x76, 0x06, 0xC0, 0x60,
0x1F, 0x9F, 0xFE, 0x0B, 0x00, 0xC0, 0x30, 0x0E, 0x01, 0xF0, 0x1F, 0x01,
0xE0, 0x1C, 0x03, 0x00, 0xC0, 0x38, 0x1F, 0xFE, 0x7E, 0x00, 0xFF, 0xFF,
0xFF, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00,
0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00,
0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0,
0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0xC1, 0xDC, 0x73, 0xFE, 0x1F, 0x00,
0xC0, 0x1D, 0x80, 0x66, 0x01, 0x98, 0x06, 0x30, 0x30, 0xC0, 0xC3, 0x03,
0x06, 0x18, 0x18, 0x60, 0x61, 0x80, 0xCC, 0x03, 0x30, 0x0C, 0xC0, 0x1E,
0x00, 0x78, 0x01, 0xE0, 0x03, 0x00, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0,
0x03, 0x60, 0x09, 0x8C, 0x66, 0x31, 0x99, 0xE6, 0x67, 0x99, 0x92, 0x66,
0xC9, 0x9B, 0x36, 0x2C, 0xD0, 0xA1, 0x42, 0x87, 0x0E, 0x1C, 0x30, 0x30,
0xE0, 0x76, 0x06, 0x70, 0xE3, 0x0C, 0x19, 0x81, 0x98, 0x0F, 0x00, 0xF0,
0x06, 0x00, 0xF0, 0x0F, 0x01, 0x98, 0x39, 0xC3, 0x0C, 0x70, 0xE6, 0x06,
0xE0, 0x70, 0xC0, 0x36, 0x06, 0x60, 0x63, 0x0C, 0x30, 0xC1, 0x98, 0x19,
0x80, 0xF0, 0x0F, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06,
0x00, 0x60, 0x06, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x60, 0x0E, 0x00, 0xC0,
0x18, 0x03, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x1C, 0x01, 0x80, 0x30, 0x07,
0x00, 0x60, 0x0F, 0xFF, 0xFF, 0xF0, 0xFF, 0xFC, 0x30, 0xC3, 0x0C, 0x30,
0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x3F, 0xFC, 0xC0, 0x18,
0x06, 0x00, 0xC0, 0x30, 0x06, 0x01, 0x80, 0x70, 0x0C, 0x03, 0x80, 0x60,
0x18, 0x03, 0x00, 0xC0, 0x18, 0x06, 0x00, 0xC0, 0xFF, 0xF0, 0xC3, 0x0C,
0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xFF, 0xFC,
0x06, 0x00, 0x60, 0x0F, 0x00, 0x90, 0x19, 0x81, 0x08, 0x30, 0xC3, 0x0C,
0x60, 0x66, 0x06, 0xC0, 0x30, 0xFF, 0xFC, 0xE3, 0x0C, 0x30, 0x3F, 0x1F,
0xE0, 0x1C, 0x03, 0x00, 0xC7, 0xF7, 0xEF, 0x83, 0xC0, 0xF0, 0x7E, 0x1D,
0xFF, 0x3C, 0xC0, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x9E, 0x3F,
0xE7, 0x06, 0xE0, 0xF8, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF8, 0x3F,
0x06, 0xFF, 0x99, 0xE0, 0x1F, 0x8F, 0xF7, 0x03, 0x80, 0xC0, 0x30, 0x0C,
0x03, 0x00, 0xC0, 0x38, 0x07, 0x00, 0xFF, 0x1F, 0x80, 0x00, 0x60, 0x0C,
0x01, 0x80, 0x30, 0x06, 0x3C, 0xCF, 0xFB, 0x07, 0xE0, 0xF8, 0x0F, 0x01,
0xE0, 0x3C, 0x07, 0x80, 0xF8, 0x3B, 0x07, 0x3F, 0xE3, 0xCC, 0x0F, 0x83,
0xFC, 0x70, 0x66, 0x03, 0xC0, 0x3F, 0xFF, 0xFF, 0xFC, 0x00, 0xC0, 0x06,
0x00, 0x70, 0x03, 0xFE, 0x0F, 0xC0, 0x03, 0xF0, 0x7F, 0x0E, 0x00, 0xC0,
0x0C, 0x0F, 0xFE, 0xFF, 0xE0, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0,
0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x1F, 0xF9, 0xFF,
0x1C, 0x38, 0xC0, 0xC6, 0x06, 0x30, 0x30, 0xFF, 0x03, 0xF0, 0x30, 0x01,
0x80, 0x0C, 0x00, 0x3F, 0x83, 0xFE, 0x30, 0x1B, 0x00, 0xD8, 0x06, 0xE0,
0x73, 0xFF, 0x0F, 0xE0, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x33, 0xCF,
0xFB, 0x87, 0xE0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03,
0xC0, 0xF0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x00, 0x00, 0x1F, 0x03, 0xC0,
0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x7F,
0xBF, 0xF0, 0x03, 0x07, 0x03, 0x00, 0x00, 0x7F, 0x1F, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07,
0xFE, 0xFC, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x7C, 0x3B, 0x1C,
0xCE, 0x33, 0x0D, 0x83, 0xE0, 0xEC, 0x31, 0x8C, 0x63, 0x0C, 0xC1, 0xB0,
0x70, 0x7C, 0x0F, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C,
0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x7F, 0xBF, 0xF0,
0xDC, 0xEF, 0xFF, 0xE7, 0x3C, 0x63, 0xC6, 0x3C, 0x63, 0xC6, 0x3C, 0x63,
0xC6, 0x3C, 0x63, 0xC6, 0x3C, 0x63, 0xC6, 0x30, 0xCF, 0x3F, 0xEE, 0x1F,
0x83, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0,
0xC0, 0x1F, 0x83, 0xFC, 0x70, 0xEE, 0x06, 0xC0, 0x3C, 0x03, 0xC0, 0x3C,
0x03, 0xC0, 0x36, 0x06, 0x70, 0xE3, 0xFC, 0x1F, 0x80, 0xCF, 0x1F, 0xF3,
0x83, 0x70, 0x7C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x7C, 0x1F, 0x83,
0x7F, 0xCC, 0xF1, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x00,
0x1E, 0x67, 0xED, 0x83, 0xF0, 0x7C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0,
0x7C, 0x1D, 0x83, 0x9F, 0xF1, 0xE6, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x60,
0x0C, 0x01, 0x80, 0xCF, 0xEF, 0xFC, 0x1C, 0x0C, 0x06, 0x03, 0x01, 0x80,
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x00, 0x3F, 0x9F, 0xFC, 0x03, 0x00, 0xE0,
0x1F, 0x01, 0xF0, 0x0E, 0x01, 0xC0, 0x38, 0x1F, 0xFE, 0x7F, 0x00, 0x08,
0x06, 0x01, 0x83, 0xFF, 0xFF, 0xC6, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01,
0x80, 0x60, 0x18, 0x07, 0x00, 0xFC, 0x1F, 0xC0, 0xF0, 0x3C, 0x0F, 0x03,
0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x7E, 0x1D, 0xFF, 0x3C, 0xC0,
0xC0, 0x36, 0x06, 0x60, 0x66, 0x06, 0x30, 0xC3, 0x0C, 0x30, 0xC1, 0x98,
0x19, 0x80, 0x98, 0x0F, 0x00, 0xF0, 0x06, 0x00, 0xC3, 0x0F, 0x0C, 0x3C,
0x78, 0x91, 0xE2, 0x65, 0x99, 0x92, 0x66, 0xCD, 0x8B, 0x34, 0x2C, 0xD0,
0xA1, 0x42, 0x85, 0x0E, 0x1C, 0x10, 0x60, 0x60, 0x67, 0x0E, 0x30, 0xC1,
0x98, 0x1F, 0x80, 0xF0, 0x06, 0x00, 0xF0, 0x1F, 0x81, 0x98, 0x30, 0xC6,
0x06, 0xE0, 0x70, 0xC0, 0x36, 0x06, 0x60, 0x66, 0x06, 0x30, 0xC3, 0x0C,
0x19, 0xC1, 0x98, 0x19, 0x80, 0xF8, 0x0F, 0x00, 0xF0, 0x06, 0x00, 0x60,
0x0E, 0x00, 0xC0, 0x1C, 0x0F, 0x80, 0xF0, 0x00, 0xFF, 0xFF, 0xF0, 0x18,
0x0E, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x38, 0x0C, 0x06, 0x03, 0xFF, 0xFF,
0xC0, 0x03, 0x83, 0xC3, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x1C, 0x7C,
0x3E, 0x03, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x80, 0xF0,
0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x78, 0x0E, 0x03, 0x01,
0x80, 0xC0, 0x60, 0x30, 0x1C, 0x07, 0xC3, 0xE3, 0x81, 0x80, 0xC0, 0x60,
0x30, 0x18, 0x0C, 0x0E, 0x1E, 0x0E, 0x00, 0x78, 0x7F, 0xF8, 0x78 };
const GFXglyph NotoMono12pt7bGlyphs[] PROGMEM = {
{ 0, 1, 1, 14, 0, 0 }, // 0x20 ' '
{ 1, 3, 17, 14, 6, -16 }, // 0x21 '!'
{ 8, 8, 6, 14, 3, -16 }, // 0x22 '"'
{ 14, 13, 17, 14, 0, -16 }, // 0x23 '#'
{ 42, 10, 20, 14, 2, -17 }, // 0x24 '$'
{ 67, 13, 17, 14, 0, -16 }, // 0x25 '%'
{ 95, 13, 17, 14, 1, -16 }, // 0x26 '&'
{ 123, 3, 6, 14, 5, -16 }, // 0x27 '''
{ 126, 8, 21, 14, 3, -16 }, // 0x28 '('
{ 147, 8, 21, 14, 3, -16 }, // 0x29 ')'
{ 168, 12, 11, 14, 1, -17 }, // 0x2A '*'
{ 185, 11, 11, 14, 1, -13 }, // 0x2B '+'
{ 201, 4, 6, 14, 4, -2 }, // 0x2C ','
{ 204, 8, 2, 14, 3, -6 }, // 0x2D '-'
{ 206, 3, 3, 14, 5, -2 }, // 0x2E '.'
{ 208, 10, 17, 14, 2, -16 }, // 0x2F '/'
{ 230, 11, 17, 14, 1, -16 }, // 0x30 '0'
{ 254, 6, 17, 14, 3, -16 }, // 0x31 '1'
{ 267, 11, 17, 14, 2, -16 }, // 0x32 '2'
{ 291, 10, 17, 14, 2, -16 }, // 0x33 '3'
{ 313, 12, 17, 14, 1, -16 }, // 0x34 '4'
{ 339, 10, 17, 14, 2, -16 }, // 0x35 '5'
{ 361, 11, 17, 14, 1, -16 }, // 0x36 '6'
{ 385, 11, 17, 14, 1, -16 }, // 0x37 '7'
{ 409, 11, 17, 14, 1, -16 }, // 0x38 '8'
{ 433, 11, 17, 14, 1, -16 }, // 0x39 '9'
{ 457, 3, 13, 14, 5, -12 }, // 0x3A ':'
{ 462, 4, 16, 14, 4, -12 }, // 0x3B ';'
{ 470, 10, 12, 14, 2, -13 }, // 0x3C '<'
{ 485, 10, 7, 14, 2, -11 }, // 0x3D '='
{ 494, 10, 12, 14, 2, -13 }, // 0x3E '>'
{ 509, 10, 17, 14, 2, -16 }, // 0x3F '?'
{ 531, 14, 19, 14, 0, -16 }, // 0x40 '@'
{ 565, 14, 17, 14, 0, -16 }, // 0x41 'A'
{ 595, 12, 17, 14, 1, -16 }, // 0x42 'B'
{ 621, 12, 17, 14, 1, -16 }, // 0x43 'C'
{ 647, 12, 17, 14, 1, -16 }, // 0x44 'D'
{ 673, 10, 17, 14, 2, -16 }, // 0x45 'E'
{ 695, 10, 17, 14, 2, -16 }, // 0x46 'F'
{ 717, 11, 17, 14, 1, -16 }, // 0x47 'G'
{ 741, 11, 17, 14, 1, -16 }, // 0x48 'H'
{ 765, 9, 17, 14, 3, -16 }, // 0x49 'I'
{ 785, 10, 17, 14, 1, -16 }, // 0x4A 'J'
{ 807, 11, 17, 14, 2, -16 }, // 0x4B 'K'
{ 831, 10, 17, 14, 2, -16 }, // 0x4C 'L'
{ 853, 11, 17, 14, 1, -16 }, // 0x4D 'M'
{ 877, 11, 17, 14, 1, -16 }, // 0x4E 'N'
{ 901, 12, 17, 14, 1, -16 }, // 0x4F 'O'
{ 927, 11, 17, 14, 2, -16 }, // 0x50 'P'
{ 951, 12, 22, 14, 1, -16 }, // 0x51 'Q'
{ 984, 11, 17, 14, 2, -16 }, // 0x52 'R'
{ 1008, 10, 17, 14, 2, -16 }, // 0x53 'S'
{ 1030, 12, 17, 14, 1, -16 }, // 0x54 'T'
{ 1056, 11, 17, 14, 1, -16 }, // 0x55 'U'
{ 1080, 14, 17, 14, 0, -16 }, // 0x56 'V'
{ 1110, 14, 17, 14, 0, -16 }, // 0x57 'W'
{ 1140, 12, 17, 14, 1, -16 }, // 0x58 'X'
{ 1166, 12, 17, 14, 1, -16 }, // 0x59 'Y'
{ 1192, 12, 17, 14, 1, -16 }, // 0x5A 'Z'
{ 1218, 6, 21, 14, 5, -16 }, // 0x5B '['
{ 1234, 10, 17, 14, 2, -16 }, // 0x5C '\'
{ 1256, 6, 21, 14, 2, -16 }, // 0x5D ']'
{ 1272, 12, 11, 14, 1, -16 }, // 0x5E '^'
{ 1289, 14, 1, 14, 0, 3 }, // 0x5F '_'
{ 1291, 5, 4, 14, 4, -18 }, // 0x60 '`'
{ 1294, 10, 13, 14, 2, -12 }, // 0x61 'a'
{ 1311, 11, 18, 14, 2, -17 }, // 0x62 'b'
{ 1336, 10, 13, 14, 2, -12 }, // 0x63 'c'
{ 1353, 11, 18, 14, 1, -17 }, // 0x64 'd'
{ 1378, 12, 13, 14, 1, -12 }, // 0x65 'e'
{ 1398, 12, 18, 14, 1, -17 }, // 0x66 'f'
{ 1425, 13, 19, 14, 1, -12 }, // 0x67 'g'
{ 1456, 10, 18, 14, 2, -17 }, // 0x68 'h'
{ 1479, 10, 18, 14, 2, -17 }, // 0x69 'i'
{ 1502, 8, 24, 14, 2, -17 }, // 0x6A 'j'
{ 1526, 10, 18, 14, 3, -17 }, // 0x6B 'k'
{ 1549, 10, 18, 14, 2, -17 }, // 0x6C 'l'
{ 1572, 12, 13, 14, 1, -12 }, // 0x6D 'm'
{ 1592, 10, 13, 14, 2, -12 }, // 0x6E 'n'
{ 1609, 12, 13, 14, 1, -12 }, // 0x6F 'o'
{ 1629, 11, 19, 14, 2, -12 }, // 0x70 'p'
{ 1656, 11, 19, 14, 1, -12 }, // 0x71 'q'
{ 1683, 9, 13, 14, 3, -12 }, // 0x72 'r'
{ 1698, 10, 13, 14, 2, -12 }, // 0x73 's'
{ 1715, 10, 16, 14, 2, -15 }, // 0x74 't'
{ 1735, 10, 13, 14, 2, -12 }, // 0x75 'u'
{ 1752, 12, 13, 14, 1, -12 }, // 0x76 'v'
{ 1772, 14, 13, 14, 0, -12 }, // 0x77 'w'
{ 1795, 12, 13, 14, 1, -12 }, // 0x78 'x'
{ 1815, 12, 19, 14, 1, -12 }, // 0x79 'y'
{ 1844, 10, 13, 14, 2, -12 }, // 0x7A 'z'
{ 1861, 9, 21, 14, 2, -16 }, // 0x7B '{'
{ 1885, 2, 24, 14, 6, -17 }, // 0x7C '|'
{ 1891, 9, 21, 14, 3, -16 }, // 0x7D '}'
{ 1915, 10, 3, 14, 2, -9 } }; // 0x7E '~'
const GFXfont NotoMono12pt7b PROGMEM = {
(uint8_t *)NotoMono12pt7bBitmaps,
(GFXglyph *)NotoMono12pt7bGlyphs,
0x20, 0x7E, 28 };
// Approx. 2591 bytes