diff --git a/serial_debugger.ino b/serial_debugger.ino index f2d6703..8eb47e4 100644 --- a/serial_debugger.ino +++ b/serial_debugger.ino @@ -84,6 +84,10 @@ void processRingBuffer(); // Save some element references for direct access // 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_pElemText = NULL; // @@ -193,6 +197,15 @@ void handlerKeyboard() { // Add key code to display ring buffer *if* it's pressed ; no need for other events presently 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]; snprintf(output, 28, "key: '%c' (dec %d, hex %02x)", key.key, key.key, key.key); textChanged = true; diff --git a/serial_debugger.prj b/serial_debugger.prj index 3a4a042..1aab61f 100644 Binary files a/serial_debugger.prj and b/serial_debugger.prj differ diff --git a/serial_debugger_GSLC.h b/serial_debugger_GSLC.h index 2a290d6..0675780 100644 --- a/serial_debugger_GSLC.h +++ b/serial_debugger_GSLC.h @@ -21,6 +21,7 @@ // Include any extended elements // // Include extended elements +#include "src/guislice/XCheckbox.h" #include "src/guislice/XProgress.h" #include "src/guislice/XTextbox.h" // @@ -34,6 +35,7 @@ #error Project tab->Target Platform should be tft_espi #endif #include +#include "src/guislice/NotoMono12pt7b.h" #include "src/guislice/NotoMono8pt7b.h" // @@ -47,10 +49,14 @@ // Enumerations for pages, elements, fonts, images // ------------------------------------------------ // -enum {E_PG_MAIN}; -enum {E_ELEM_BATT_LEVEL,E_ELEM_STATUS,E_ELEM_TEXT}; +enum {E_PG_MAIN,E_CONF_RPI}; +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. -enum {E_AO_NOTOMONO8PT7B,MAX_FONT}; +enum {E_AO_NOTOMONO12PT7B,E_AO_NOTOMONO8PT7B,MAX_FONT}; // // ------------------------------------------------ @@ -61,10 +67,13 @@ enum {E_AO_NOTOMONO8PT7B,MAX_FONT}; // Define the maximum number of elements and pages // ------------------------------------------------ // -#define MAX_PAGE 1 +#define MAX_PAGE 2 #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_CONF_RPI 11 // # Elems total on page +#define MAX_ELEM_CONF_RPI_RAM MAX_ELEM_CONF_RPI // # Elems in RAM // // ------------------------------------------------ @@ -78,9 +87,15 @@ gslc_tsPage m_asPage[MAX_PAGE]; // gslc_tsElem m_asPage1Elem[MAX_ELEM_PG_MAIN_RAM]; 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_tsXTextbox m_sTextbox1; 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 @@ -93,6 +108,10 @@ char m_acTextboxBuf1[952]; // NRows=17 NCols=56 // Element References for direct access // 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_pElemText; extern gslc_tsElemRef* m_pTextSlider; @@ -126,11 +145,13 @@ void InitGUIslice_gen() // Load Fonts // ------------------------------------------------ // + 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; } // // 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 // 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_ElemSetCol(&m_gui,pElemRef,GSLC_COL_GRAY,GSLC_COL_BLACK,GSLC_COL_BLACK); 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); // // diff --git a/src/guislice/NotoMono12pt7b.h b/src/guislice/NotoMono12pt7b.h new file mode 100644 index 0000000..4374483 --- /dev/null +++ b/src/guislice/NotoMono12pt7b.h @@ -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