diff --git a/.vscode/settings.json b/.vscode/settings.json index c6fedc1..59f3443 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,9 @@ { "files.associations": { "ostream": "cpp", - "font_5x7,cpp": "cpp" + "font_5x7,cpp": "cpp", + "map": "cpp", + "format": "cpp", + "system_error": "cpp" } } \ No newline at end of file diff --git a/lib/Fonts/src/font_16x16.cpp b/lib/Fonts/src/font_16x16.cpp index 485e4b9..ed638e2 100644 --- a/lib/Fonts/src/font_16x16.cpp +++ b/lib/Fonts/src/font_16x16.cpp @@ -1,16 +1,14 @@ #include "font_16x16.h" // Function to get font data for a character -const uint16_t *getFontChar_16x16(char c) +const std::vector &getFontChar_16x16(char c) { - for (int i = 0; i < sizeof(font_chars_16x16) - 1; i++) + auto it = font_16x16.find(c); + if (it != font_16x16.end()) { - if (font_chars_16x16[i] == c) - { - return font_16x16[i]; - } + return it->second; } - return font_16x16[0]; // Return space if not found (index of ' ') + return font_16x16.at(' '); // Fallback to space } const uint8_t fontHeight_16x16() diff --git a/lib/Fonts/src/font_16x16.h b/lib/Fonts/src/font_16x16.h index e7155e7..d7376b5 100644 --- a/lib/Fonts/src/font_16x16.h +++ b/lib/Fonts/src/font_16x16.h @@ -1,203 +1,120 @@ #ifndef FONT_16X16_H #define FONT_16X16_H -#include - -const uint16_t font_16x16[][16] = { - // Space (index 0) - {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // ' ' - - // Exclamation mark (index 1) - {0x0006, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x0006, 0x0000, 0x000F, 0x000F, 0x0000, 0x0000}, // '!' - - // Double quote (index 2) - {0x0363, 0x0363, 0x0363, 0x0363, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '"' - - // Hash (index 3) - {0x0318, 0x0318, 0x0318, 0x0FFF, 0x0FFF, 0x0318, 0x0318, 0x0318, 0x0318, 0x0FFF, 0x0FFF, 0x0318, 0x0318, 0x0318, 0x0000, 0x0000}, // '#' - - // Dollar (index 4) - {0x0078, 0x00FE, 0x01CF, 0x01C7, 0x01C0, 0x00F8, 0x007C, 0x000F, 0x0007, 0x01C7, 0x01CF, 0x00FE, 0x0078, 0x0010, 0x0000, 0x0000}, // '$' - - // Percent (index 5) - {0x0E0E, 0x1B0E, 0x1B1C, 0x0E38, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x070E, 0x0E1B, 0x1C1B, 0x380E, 0x0000, 0x0000, 0x0000, 0x0000}, // '%' - - // Ampersand (index 6) - {0x07C0, 0x0EE0, 0x1C70, 0x1C70, 0x0EE0, 0x07C0, 0x0FC7, 0x1CE7, 0x387E, 0x383C, 0x387E, 0x1CFF, 0x0FE7, 0x07C0, 0x0000, 0x0000}, // '&' - - // Single quote (index 7) - {0x0003, 0x0003, 0x0003, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // ''' - - // Left parenthesis (index 8) - {0x0007, 0x000E, 0x001C, 0x001C, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x001C, 0x001C, 0x000E, 0x0007, 0x0000, 0x0000}, // '(' - - // Right parenthesis (index 9) - {0x0038, 0x001C, 0x000E, 0x000E, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x000E, 0x000E, 0x001C, 0x0038, 0x0000, 0x0000}, // ')' - - // Asterisk (index 10) - {0x0030, 0x01B3, 0x00FC, 0x0078, 0x00FC, 0x01B3, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '*' - - // Plus (index 11) - {0x0000, 0x0000, 0x0060, 0x0060, 0x0060, 0x0060, 0x03FF, 0x03FF, 0x0060, 0x0060, 0x0060, 0x0060, 0x0000, 0x0000, 0x0000, 0x0000}, // '+' - - // Comma (index 12) - {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0003, 0x0006, 0x0000, 0x0000}, // ',' - - // Minus (index 13) - {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03FF, 0x03FF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '-' - - // Period (index 14) - {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000}, // '.' - - // Slash (index 15) - {0x0003, 0x0007, 0x000E, 0x001C, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x0700, 0x0E00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000}, // '/' - - // Numbers 0-9 (index 16-25) - {0x01F8, 0x03FC, 0x070E, 0x0606, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0606, 0x070E, 0x03FC, 0x01F8, 0x0000, 0x0000}, // '0' - {0x000C, 0x001C, 0x003C, 0x007C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x007F, 0x007F, 0x0000, 0x0000}, // '1' - {0x00FC, 0x01FE, 0x0387, 0x0303, 0x0003, 0x0007, 0x000E, 0x001C, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x03FF, 0x03FF, 0x0000, 0x0000}, // '2' - {0x00FC, 0x01FE, 0x0387, 0x0303, 0x0003, 0x0007, 0x007E, 0x007E, 0x0007, 0x0003, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x0000, 0x0000}, // '3' - {0x000E, 0x001E, 0x003E, 0x006E, 0x00CE, 0x018E, 0x030E, 0x060E, 0x07FF, 0x07FF, 0x000E, 0x000E, 0x000E, 0x000E, 0x0000, 0x0000}, // '4' - {0x03FF, 0x03FF, 0x0300, 0x0300, 0x0300, 0x03FC, 0x03FE, 0x0007, 0x0003, 0x0003, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x0000, 0x0000}, // '5' - {0x00FC, 0x01FE, 0x0387, 0x0303, 0x0300, 0x037C, 0x03FE, 0x0387, 0x0303, 0x0303, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x0000, 0x0000}, // '6' - {0x03FF, 0x03FF, 0x0003, 0x0007, 0x000E, 0x001C, 0x0038, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0000, 0x0000}, // '7' - {0x00FC, 0x01FE, 0x0387, 0x0303, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x01FE, 0x0387, 0x0303, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x0000}, // '8' - {0x00FC, 0x01FE, 0x0387, 0x0303, 0x0303, 0x0387, 0x01FF, 0x00FF, 0x0003, 0x0003, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x0000, 0x0000}, // '9' - - // Colon (index 26) - {0x0000, 0x0000, 0x0000, 0x0003, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000}, // ':' - - // Semicolon (index 27) - {0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0003, 0x0006, 0x0000, 0x0000}, // ';' - - // Less than (index 28) - {0x0003, 0x000F, 0x003C, 0x00F0, 0x03C0, 0x0700, 0x03C0, 0x00F0, 0x003C, 0x000F, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '<' - - // Equal (index 29) - {0x0000, 0x0000, 0x0000, 0x0000, 0x03FF, 0x03FF, 0x0000, 0x0000, 0x03FF, 0x03FF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '=' - - // Greater than (index 30) - {0x0600, 0x0780, 0x01E0, 0x0078, 0x001E, 0x0007, 0x001E, 0x0078, 0x01E0, 0x0780, 0x0600, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '>' - - // Question mark (index 31) - {0x007C, 0x00FE, 0x01C7, 0x0183, 0x0003, 0x0007, 0x000E, 0x001C, 0x0018, 0x0000, 0x0018, 0x0018, 0x0000, 0x0000, 0x0000, 0x0000}, // '?' - - // At symbol (index 32) - {0x01F8, 0x03FC, 0x070E, 0x0606, 0x0E3F, 0x0E7F, 0x0E67, 0x0E67, 0x0E67, 0x0E7F, 0x0E3E, 0x0600, 0x070E, 0x03FC, 0x01F8, 0x0000}, // '@' - - // Uppercase A-Z (index 33-58) - {0x0070, 0x00F8, 0x00F8, 0x01DC, 0x01DC, 0x038E, 0x038E, 0x038E, 0x03FE, 0x07FF, 0x0707, 0x0707, 0x0707, 0x0707, 0x0000, 0x0000}, // 'A' - {0x07F8, 0x07FC, 0x070E, 0x070E, 0x070E, 0x071C, 0x07F8, 0x07FC, 0x070E, 0x0707, 0x0707, 0x0707, 0x070E, 0x07FE, 0x07FC, 0x0000}, // 'B' - {0x01FC, 0x03FE, 0x0787, 0x0703, 0x0E00, 0x0E00, 0x0E00, 0x0E00, 0x0E00, 0x0E00, 0x0703, 0x0787, 0x03FE, 0x01FC, 0x0000, 0x0000}, // 'C' - {0x0FF0, 0x0FFC, 0x0E1E, 0x0E0E, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E0E, 0x0E1E, 0x0FFC, 0x0FF0, 0x0000, 0x0000}, // 'D' - {0x07FF, 0x07FF, 0x0700, 0x0700, 0x0700, 0x0700, 0x07FC, 0x07FC, 0x0700, 0x0700, 0x0700, 0x0700, 0x07FF, 0x07FF, 0x0000, 0x0000}, // 'E' - {0x07FF, 0x07FF, 0x0700, 0x0700, 0x0700, 0x0700, 0x07FC, 0x07FC, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0000, 0x0000}, // 'F' - {0x01FC, 0x03FE, 0x0787, 0x0703, 0x0E00, 0x0E00, 0x0E3F, 0x0E3F, 0x0E07, 0x0E07, 0x0707, 0x0787, 0x03FF, 0x01FF, 0x0000, 0x0000}, // 'G' - {0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0FFF, 0x0FFF, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0000, 0x0000}, // 'H' - {0x007F, 0x007F, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x007F, 0x007F, 0x0000, 0x0000}, // 'I' - {0x007F, 0x007F, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x071C, 0x071C, 0x0738, 0x03F8, 0x01F0, 0x0000, 0x0000}, // 'J' - {0x0E0E, 0x0E1C, 0x0E38, 0x0E70, 0x0EE0, 0x0FC0, 0x0FC0, 0x0FE0, 0x0EF0, 0x0E78, 0x0E3C, 0x0E1C, 0x0E0E, 0x0E07, 0x0000, 0x0000}, // 'K' - {0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x07FF, 0x07FF, 0x0000, 0x0000}, // 'L' - {0x1C07, 0x1E0F, 0x1E0F, 0x1F1F, 0x1F1F, 0x1DB7, 0x1DB7, 0x1DB7, 0x1CE7, 0x1CE7, 0x1CE7, 0x1C07, 0x1C07, 0x1C07, 0x0000, 0x0000}, // 'M' - {0x0E07, 0x0F07, 0x0F07, 0x0F87, 0x0FC7, 0x0EE7, 0x0E77, 0x0E77, 0x0E3F, 0x0E1F, 0x0E1F, 0x0E0F, 0x0E07, 0x0E07, 0x0000, 0x0000}, // 'N' - {0x01F8, 0x03FC, 0x078E, 0x0706, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0706, 0x078E, 0x03FC, 0x01F8, 0x0000, 0x0000}, // 'O' - {0x07F8, 0x07FC, 0x070E, 0x0707, 0x0707, 0x0707, 0x070E, 0x07FC, 0x07F8, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0000, 0x0000}, // 'P' - {0x01F8, 0x03FC, 0x078E, 0x0706, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E67, 0x077E, 0x07BE, 0x03FC, 0x01F7, 0x0000, 0x0000}, // 'Q' - {0x0FF0, 0x0FF8, 0x0E1C, 0x0E0E, 0x0E0E, 0x0E0E, 0x0E1C, 0x0FF8, 0x0FF0, 0x0E78, 0x0E3C, 0x0E1E, 0x0E0E, 0x0E07, 0x0000, 0x0000}, // 'R' - {0x01FC, 0x03FE, 0x0787, 0x0703, 0x0700, 0x0780, 0x03FC, 0x00FE, 0x0007, 0x0003, 0x0703, 0x0787, 0x03FE, 0x01FC, 0x0000, 0x0000}, // 'S' - {0x07FF, 0x07FF, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0000, 0x0000}, // 'T' - {0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x070E, 0x07FE, 0x01F8, 0x0000, 0x0000}, // 'U' - {0x0E07, 0x0E07, 0x070E, 0x070E, 0x070E, 0x039C, 0x039C, 0x039C, 0x01F8, 0x01F8, 0x01F8, 0x00F0, 0x00F0, 0x00F0, 0x0000, 0x0000}, // 'V' - {0x0E0E, 0x0E0E, 0x0E0E, 0x0E0E, 0x0E0E, 0x0E0E, 0x06B6, 0x06B6, 0x06B6, 0x07F7, 0x07F7, 0x07F7, 0x03E3, 0x03E3, 0x0000, 0x0000}, // 'W' - {0x0E07, 0x070E, 0x070E, 0x039C, 0x01F8, 0x01F8, 0x00F0, 0x00F0, 0x01F8, 0x01F8, 0x039C, 0x070E, 0x070E, 0x0E07, 0x0000, 0x0000}, // 'X' - {0x0E07, 0x070E, 0x070E, 0x039C, 0x039C, 0x01F8, 0x01F8, 0x00F0, 0x00F0, 0x00F0, 0x00F0, 0x00F0, 0x00F0, 0x00F0, 0x0000, 0x0000}, // 'Y' - {0x07FF, 0x07FF, 0x000E, 0x001C, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x0700, 0x0E00, 0x0E00, 0x07FF, 0x07FF, 0x0000, 0x0000}, // 'Z' - - // Left bracket (index 59) - {0x003F, 0x003F, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x003F, 0x003F, 0x0000}, // '[' - - // Backslash (index 60) - {0x3000, 0x3800, 0x1C00, 0x0E00, 0x0700, 0x0380, 0x01C0, 0x00E0, 0x0070, 0x0038, 0x001C, 0x000E, 0x0007, 0x0003, 0x0000, 0x0000}, // '\\' - - // Right bracket (index 61) - {0x003F, 0x003F, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x003F, 0x003F, 0x0000}, // ']' - - // Caret (index 62) - {0x0030, 0x0078, 0x00FC, 0x01CE, 0x0387, 0x0303, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '^' - - // Underscore (index 63) - {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF}, // '_' - - // Backtick (index 64) - {0x000C, 0x0006, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '`' - - // Lowercase a-z (index 65-90) - {0x0000, 0x0000, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0007, 0x007F, 0x00FF, 0x01C7, 0x0387, 0x0387, 0x01FF, 0x00F7, 0x0000, 0x0000}, // 'a' - {0x0380, 0x0380, 0x0380, 0x03BC, 0x03FE, 0x03CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x03CF, 0x03FE, 0x03BC, 0x0000, 0x0000}, // 'b' - {0x0000, 0x0000, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0383, 0x0380, 0x0380, 0x0380, 0x0383, 0x01C7, 0x00FE, 0x007C, 0x0000, 0x0000}, // 'c' - {0x0007, 0x0007, 0x0007, 0x0077, 0x00FF, 0x01CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x01CF, 0x00FF, 0x0077, 0x0000, 0x0000}, // 'd' - {0x0000, 0x0000, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0383, 0x03FF, 0x03FF, 0x0380, 0x0381, 0x01C3, 0x00FF, 0x007C, 0x0000, 0x0000}, // 'e' - {0x001F, 0x003F, 0x0078, 0x0070, 0x01FE, 0x01FE, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0000, 0x0000}, // 'f' - {0x0000, 0x0000, 0x0000, 0x0077, 0x00FF, 0x01CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x01CF, 0x00FF, 0x0077, 0x0007, 0x01FE, 0x01FC}, // 'g' - {0x0380, 0x0380, 0x0380, 0x03BC, 0x03FE, 0x03CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0000, 0x0000}, // 'h' - {0x000C, 0x000C, 0x0000, 0x003C, 0x003C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x003F, 0x003F, 0x0000, 0x0000}, // 'i' - {0x0003, 0x0003, 0x0000, 0x000F, 0x000F, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0E3, 0x0E3, 0x007E, 0x003C}, // 'j' - {0x0700, 0x0700, 0x0700, 0x070E, 0x071C, 0x0738, 0x0770, 0x07E0, 0x07E0, 0x0770, 0x0738, 0x071C, 0x070E, 0x0707, 0x0000, 0x0000}, // 'k' - {0x003C, 0x003C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x003F, 0x003F, 0x0000, 0x0000}, // 'l' - {0x0000, 0x0000, 0x0000, 0x0EE7, 0x0FFF, 0x0F3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0000, 0x0000}, // 'm' - {0x0000, 0x0000, 0x0000, 0x03BC, 0x03FE, 0x03CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0000, 0x0000}, // 'n' - {0x0000, 0x0000, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0383, 0x0383, 0x0383, 0x0383, 0x0383, 0x01C7, 0x00FE, 0x007C, 0x0000, 0x0000}, // 'o' - {0x0000, 0x0000, 0x0000, 0x03BC, 0x03FE, 0x03CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x03CF, 0x03FE, 0x03BC, 0x0380, 0x0380, 0x0380}, // 'p' - {0x0000, 0x0000, 0x0000, 0x0077, 0x00FF, 0x01CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x01CF, 0x00FF, 0x0077, 0x0007, 0x0007, 0x0007}, // 'q' - {0x0000, 0x0000, 0x0000, 0x03BC, 0x03FE, 0x03CF, 0x0387, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0000, 0x0000}, // 'r' - {0x0000, 0x0000, 0x0000, 0x00FC, 0x01FE, 0x0387, 0x0380, 0x01F8, 0x00FE, 0x0007, 0x0007, 0x0387, 0x03FE, 0x01FC, 0x0000, 0x0000}, // 's' - {0x0038, 0x0038, 0x0038, 0x00FF, 0x00FF, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x001F, 0x000F, 0x0000, 0x0000}, // 't' - {0x0000, 0x0000, 0x0000, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x01CF, 0x01FF, 0x0077, 0x0000, 0x0000}, // 'u' - {0x0000, 0x0000, 0x0000, 0x0707, 0x0707, 0x038E, 0x038E, 0x038E, 0x01DC, 0x01DC, 0x00F8, 0x00F8, 0x0070, 0x0070, 0x0000, 0x0000}, // 'v' - {0x0000, 0x0000, 0x0000, 0x0E0E, 0x0E0E, 0x0E0E, 0x06B6, 0x06B6, 0x06B6, 0x07F7, 0x07F7, 0x07F7, 0x03E3, 0x03E3, 0x0000, 0x0000}, // 'w' - {0x0000, 0x0000, 0x0000, 0x0707, 0x038E, 0x01DC, 0x00F8, 0x0070, 0x0070, 0x00F8, 0x01DC, 0x038E, 0x0707, 0x0707, 0x0000, 0x0000}, // 'x' - {0x0000, 0x0000, 0x0000, 0x0707, 0x0707, 0x038E, 0x038E, 0x01DC, 0x01DC, 0x00F8, 0x00F8, 0x0070, 0x0070, 0x00E0, 0x01C0, 0x0000}, // 'y' - {0x0000, 0x0000, 0x0000, 0x03FF, 0x03FF, 0x000E, 0x001C, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x03FF, 0x03FF, 0x0000, 0x0000}, // 'z' - - // Left brace (index 91) - {0x000F, 0x001E, 0x001C, 0x001C, 0x001C, 0x001C, 0x0038, 0x0070, 0x0038, 0x001C, 0x001C, 0x001C, 0x001C, 0x001E, 0x000F, 0x0000}, // '{' - - // Vertical bar (index 92) - {0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0000}, // '|' - - // Right brace (index 93) - {0x0078, 0x003C, 0x001C, 0x001C, 0x001C, 0x001C, 0x000E, 0x0007, 0x000E, 0x001C, 0x001C, 0x001C, 0x001C, 0x003C, 0x0078, 0x0000}, // '}' - - // Tilde (index 94) - {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01C7, 0x03EF, 0x077E, 0x0738, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '~' - - // Degree symbol (index 95) - {0x000E, 0x001F, 0x001F, 0x001F, 0x000E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, // '°' - - // Umlaut characters (index 96-101) - {0x018C, 0x018C, 0x0000, 0x00F8, 0x01FC, 0x038E, 0x038E, 0x038E, 0x03FE, 0x07FF, 0x0707, 0x0707, 0x0707, 0x0707, 0x0000, 0x0000}, // 'Ä' - {0x0318, 0x0318, 0x0000, 0x01F8, 0x03FC, 0x078E, 0x0706, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0706, 0x078E, 0x03FC, 0x01F8, 0x0000}, // 'Ö' - {0x0318, 0x0318, 0x0000, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x070E, 0x07FE, 0x01F8, 0x0000}, // 'Ü' - {0x00C6, 0x00C6, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0007, 0x007F, 0x00FF, 0x01C7, 0x0387, 0x0387, 0x01FF, 0x00F7, 0x0000, 0x0000}, // 'ä' - {0x00C6, 0x00C6, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0383, 0x0383, 0x0383, 0x0383, 0x0383, 0x01C7, 0x00FE, 0x007C, 0x0000, 0x0000}, // 'ö' - {0x00C6, 0x00C6, 0x0000, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x01CF, 0x01FF, 0x0077, 0x0000, 0x0000}, // 'ü' - - // Eszett (index 102) - {0x007C, 0x00FE, 0x01C7, 0x01C7, 0x01C7, 0x01CE, 0x01FC, 0x01FE, 0x01CF, 0x01C7, 0x01C7, 0x01CF, 0x01FE, 0x01BC, 0x0180, 0x0180}, // 'ß' - - // Bullet (index 103) - {0x0000, 0x0000, 0x0000, 0x0000, 0x003C, 0x007E, 0x00FF, 0x00FF, 0x00FF, 0x00FF, 0x007E, 0x003C, 0x0000, 0x0000, 0x0000, 0x0000}, // '•' - - // Euro symbol (index 104) - {0x01F8, 0x07FC, 0x0F0E, 0x1C07, 0x1FC0, 0x1FC0, 0x3800, 0x1FC0, 0x1FC0, 0x3800, 0x1FC0, 0x1FC0, 0x1C07, 0x0F0E, 0x07FC, 0x01F8}, // '€' +#include +#include +#include +const std::map> font_16x16 = { + {' ', {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}}, + {'!', {0x0006, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x000F, 0x0006, 0x0000, 0x000F, 0x000F, 0x0000, 0x0000}}, + {'"', {0x0363, 0x0363, 0x0363, 0x0363, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}}, + {'#', {0x0318, 0x0318, 0x0318, 0x0FFF, 0x0FFF, 0x0318, 0x0318, 0x0318, 0x0318, 0x0FFF, 0x0FFF, 0x0318, 0x0318, 0x0318, 0x0000, 0x0000}}, + {'$', {0x0078, 0x00FE, 0x01CF, 0x01C7, 0x01C0, 0x00F8, 0x007C, 0x000F, 0x0007, 0x01C7, 0x01CF, 0x00FE, 0x0078, 0x0010, 0x0000, 0x0000}}, + {'%', {0x0E0E, 0x1B0E, 0x1B1C, 0x0E38, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x070E, 0x0E1B, 0x1C1B, 0x380E, 0x0000, 0x0000, 0x0000, 0x0000}}, + {'&', {0x07C0, 0x0EE0, 0x1C70, 0x1C70, 0x0EE0, 0x07C0, 0x0FC7, 0x1CE7, 0x387E, 0x383C, 0x387E, 0x1CFF, 0x0FE7, 0x07C0, 0x0000, 0x0000}}, + {'\'', {0x0003, 0x0003, 0x0003, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}}, + {'(', {0x0007, 0x000E, 0x001C, 0x001C, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x001C, 0x001C, 0x000E, 0x0007, 0x0000, 0x0000}}, + {')', {0x0038, 0x001C, 0x000E, 0x000E, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x000E, 0x000E, 0x001C, 0x0038, 0x0000, 0x0000}}, + {'*', {0x0030, 0x01B3, 0x00FC, 0x0078, 0x00FC, 0x01B3, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}}, + {'+', {0x0000, 0x0000, 0x0060, 0x0060, 0x0060, 0x0060, 0x03FF, 0x03FF, 0x0060, 0x0060, 0x0060, 0x0060, 0x0000, 0x0000, 0x0000, 0x0000}}, + {',', {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0003, 0x0006, 0x0000, 0x0000}}, + {'-', {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03FF, 0x03FF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}}, + {'.', {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000}}, + {'/', {0x0003, 0x0007, 0x000E, 0x001C, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x0700, 0x0E00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000}}, + {'0', {0x01F8, 0x03FC, 0x070E, 0x0606, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0606, 0x070E, 0x03FC, 0x01F8, 0x0000, 0x0000}}, + {'1', {0x000C, 0x001C, 0x003C, 0x007C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x007F, 0x007F, 0x0000, 0x0000}}, + {'2', {0x00FC, 0x01FE, 0x0387, 0x0303, 0x0003, 0x0007, 0x000E, 0x001C, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x03FF, 0x03FF, 0x0000, 0x0000}}, + {'3', {0x00FC, 0x01FE, 0x0387, 0x0303, 0x0003, 0x0007, 0x007E, 0x007E, 0x0007, 0x0003, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x0000, 0x0000}}, + {'4', {0x000E, 0x001E, 0x003E, 0x006E, 0x00CE, 0x018E, 0x030E, 0x060E, 0x07FF, 0x07FF, 0x000E, 0x000E, 0x000E, 0x000E, 0x0000, 0x0000}}, + {'5', {0x03FF, 0x03FF, 0x0300, 0x0300, 0x0300, 0x03FC, 0x03FE, 0x0007, 0x0003, 0x0003, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x0000, 0x0000}}, + {'6', {0x00FC, 0x01FE, 0x0387, 0x0303, 0x0300, 0x037C, 0x03FE, 0x0387, 0x0303, 0x0303, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x0000, 0x0000}}, + {'7', {0x03FF, 0x03FF, 0x0003, 0x0007, 0x000E, 0x001C, 0x0038, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0000, 0x0000}}, + {'8', {0x00FC, 0x01FE, 0x0387, 0x0303, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x01FE, 0x0387, 0x0303, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x0000}}, + {'9', {0x00FC, 0x01FE, 0x0387, 0x0303, 0x0303, 0x0387, 0x01FF, 0x00FF, 0x0003, 0x0003, 0x0303, 0x0387, 0x01FE, 0x00FC, 0x0000, 0x0000}}, + {':', {0x0000, 0x0000, 0x0000, 0x0003, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000}}, + {';', {0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0003, 0x0006, 0x0000, 0x0000}}, + {'<', {0x0003, 0x000F, 0x003C, 0x00F0, 0x03C0, 0x0700, 0x03C0, 0x00F0, 0x003C, 0x000F, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}}, + {'=', {0x0000, 0x0000, 0x0000, 0x0000, 0x03FF, 0x03FF, 0x0000, 0x0000, 0x03FF, 0x03FF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}}, + {'>', {0x0600, 0x0780, 0x01E0, 0x0078, 0x001E, 0x0007, 0x001E, 0x0078, 0x01E0, 0x0780, 0x0600, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}}, + {'?', {0x007C, 0x00FE, 0x01C7, 0x0183, 0x0003, 0x0007, 0x000E, 0x001C, 0x0018, 0x0000, 0x0018, 0x0018, 0x0000, 0x0000, 0x0000, 0x0000}}, + {'@', {0x01F8, 0x03FC, 0x070E, 0x0606, 0x0E3F, 0x0E7F, 0x0E67, 0x0E67, 0x0E67, 0x0E7F, 0x0E3E, 0x0600, 0x070E, 0x03FC, 0x01F8, 0x0000}}, + {'A', {0x0070, 0x00F8, 0x00F8, 0x01DC, 0x01DC, 0x038E, 0x038E, 0x038E, 0x03FE, 0x07FF, 0x0707, 0x0707, 0x0707, 0x0707, 0x0000, 0x0000}}, + {'B', {0x07F8, 0x07FC, 0x070E, 0x070E, 0x070E, 0x071C, 0x07F8, 0x07FC, 0x070E, 0x0707, 0x0707, 0x0707, 0x070E, 0x07FE, 0x07FC, 0x0000}}, + {'C', {0x01FC, 0x03FE, 0x0787, 0x0703, 0x0E00, 0x0E00, 0x0E00, 0x0E00, 0x0E00, 0x0E00, 0x0703, 0x0787, 0x03FE, 0x01FC, 0x0000, 0x0000}}, + {'D', {0x0FF0, 0x0FFC, 0x0E1E, 0x0E0E, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E0E, 0x0E1E, 0x0FFC, 0x0FF0, 0x0000, 0x0000}}, + {'E', {0x07FF, 0x07FF, 0x0700, 0x0700, 0x0700, 0x0700, 0x07FC, 0x07FC, 0x0700, 0x0700, 0x0700, 0x0700, 0x07FF, 0x07FF, 0x0000, 0x0000}}, + {'F', {0x07FF, 0x07FF, 0x0700, 0x0700, 0x0700, 0x0700, 0x07FC, 0x07FC, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0000, 0x0000}}, + {'G', {0x01FC, 0x03FE, 0x0787, 0x0703, 0x0E00, 0x0E00, 0x0E3F, 0x0E3F, 0x0E07, 0x0E07, 0x0707, 0x0787, 0x03FF, 0x01FF, 0x0000, 0x0000}}, + {'H', {0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0FFF, 0x0FFF, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0000, 0x0000}}, + {'I', {0x007F, 0x007F, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x007F, 0x007F, 0x0000, 0x0000}}, + {'J', {0x007F, 0x007F, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x001C, 0x071C, 0x071C, 0x0738, 0x03F8, 0x01F0, 0x0000, 0x0000}}, + {'K', {0x0E0E, 0x0E1C, 0x0E38, 0x0E70, 0x0EE0, 0x0FC0, 0x0FC0, 0x0FE0, 0x0EF0, 0x0E78, 0x0E3C, 0x0E1C, 0x0E0E, 0x0E07, 0x0000, 0x0000}}, + {'L', {0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x07FF, 0x07FF, 0x0000, 0x0000}}, + {'M', {0x1C07, 0x1E0F, 0x1E0F, 0x1F1F, 0x1F1F, 0x1DB7, 0x1DB7, 0x1CE7, 0x1CE7, 0x1CE7, 0x1C07, 0x1C07, 0x1C07, 0x1C07, 0x0000, 0x0000}}, + {'N', {0x0E07, 0x0F07, 0x0F07, 0x0F87, 0x0FC7, 0x0EE7, 0x0E77, 0x0E77, 0x0E3F, 0x0E1F, 0x0E1F, 0x0E0F, 0x0E07, 0x0E07, 0x0000, 0x0000}}, + {'O', {0x01F8, 0x03FC, 0x078E, 0x0706, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0706, 0x078E, 0x03FC, 0x01F8, 0x0000, 0x0000}}, + {'P', {0x07F8, 0x07FC, 0x070E, 0x0707, 0x0707, 0x0707, 0x070E, 0x07FC, 0x07F8, 0x0700, 0x0700, 0x0700, 0x0700, 0x0700, 0x0000, 0x0000}}, + {'Q', {0x01F8, 0x03FC, 0x078E, 0x0706, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E67, 0x077E, 0x07BE, 0x03FC, 0x01F7, 0x0000, 0x0000}}, + {'R', {0x0FF0, 0x0FF8, 0x0E1C, 0x0E0E, 0x0E0E, 0x0E0E, 0x0E1C, 0x0FF8, 0x0FF0, 0x0E78, 0x0E3C, 0x0E1E, 0x0E0E, 0x0E07, 0x0000, 0x0000}}, + {'S', {0x01FC, 0x03FE, 0x0787, 0x0703, 0x0700, 0x0780, 0x03FC, 0x00FE, 0x0007, 0x0003, 0x0703, 0x0787, 0x03FE, 0x01FC, 0x0000, 0x0000}}, + {'T', {0x07FF, 0x07FF, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0000, 0x0000}}, + {'U', {0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x070E, 0x07FE, 0x01F8, 0x0000, 0x0000}}, + {'V', {0x0E07, 0x0E07, 0x070E, 0x070E, 0x070E, 0x039C, 0x039C, 0x039C, 0x01F8, 0x01F8, 0x01F8, 0x00F0, 0x00F0, 0x00F0, 0x0000, 0x0000}}, + {'W', {0x0E0E, 0x0E0E, 0x0E0E, 0x0E0E, 0x0E0E, 0x0E0E, 0x06B6, 0x06B6, 0x06B6, 0x07F7, 0x07F7, 0x07F7, 0x03E3, 0x03E3, 0x0000, 0x0000}}, + {'X', {0x0E07, 0x070E, 0x070E, 0x039C, 0x01F8, 0x01F8, 0x00F0, 0x00F0, 0x01F8, 0x01F8, 0x039C, 0x070E, 0x070E, 0x0E07, 0x0000, 0x0000}}, + {'Y', {0x0E07, 0x070E, 0x070E, 0x039C, 0x039C, 0x01F8, 0x01F8, 0x00F0, 0x00F0, 0x00F0, 0x00F0, 0x00F0, 0x00F0, 0x00F0, 0x0000, 0x0000}}, + {'Z', {0x07FF, 0x07FF, 0x000E, 0x001C, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x0700, 0x0E00, 0x0E00, 0x07FF, 0x07FF, 0x0000, 0x0000}}, + {'[', {0x003F, 0x003F, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x003F, 0x003F, 0x0000}}, + {'\\', {0x3000, 0x3800, 0x1C00, 0x0E00, 0x0700, 0x0380, 0x01C0, 0x00E0, 0x0070, 0x0038, 0x001C, 0x000E, 0x0007, 0x0003, 0x0000, 0x0000}}, + {']', {0x003F, 0x003F, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x003F, 0x003F, 0x0000}}, + {'^', {0x0030, 0x0078, 0x00FC, 0x01CE, 0x0387, 0x0303, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}}, + {'_', {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF}}, + {'`', {0x000C, 0x0006, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}}, + {'a', {0x0000, 0x0000, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0007, 0x007F, 0x00FF, 0x01C7, 0x0387, 0x0387, 0x01FF, 0x00F7, 0x0000, 0x0000}}, + {'b', {0x0380, 0x0380, 0x0380, 0x03BC, 0x03FE, 0x03CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x03CF, 0x03FE, 0x03BC, 0x0000, 0x0000}}, + {'c', {0x0000, 0x0000, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0383, 0x0380, 0x0380, 0x0380, 0x0383, 0x01C7, 0x00FE, 0x007C, 0x0000, 0x0000}}, + {'d', {0x0007, 0x0007, 0x0007, 0x0077, 0x00FF, 0x01CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x01CF, 0x00FF, 0x0077, 0x0000, 0x0000}}, + {'e', {0x0000, 0x0000, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0383, 0x03FF, 0x03FF, 0x0380, 0x0381, 0x01C3, 0x00FF, 0x007C, 0x0000, 0x0000}}, + {'f', {0x001F, 0x003F, 0x0078, 0x0070, 0x01FE, 0x01FE, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0000, 0x0000}}, + {'g', {0x0000, 0x0000, 0x0000, 0x0077, 0x00FF, 0x01CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x01CF, 0x00FF, 0x0077, 0x0007, 0x01FE, 0x01FC}}, + {'h', {0x0380, 0x0380, 0x0380, 0x03BC, 0x03FE, 0x03CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0000, 0x0000}}, + {'i', {0x000C, 0x000C, 0x0000, 0x003C, 0x003C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x003F, 0x003F, 0x0000, 0x0000}}, + {'j', {0x0003, 0x0003, 0x0000, 0x000F, 0x000F, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0E03, 0x0E03, 0x007E, 0x003C}}, + {'k', {0x0700, 0x0700, 0x0700, 0x070E, 0x071C, 0x0738, 0x0770, 0x07E0, 0x07E0, 0x0770, 0x0738, 0x071C, 0x070E, 0x0707, 0x0000, 0x0000}}, + {'l', {0x003C, 0x003C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x003F, 0x003F, 0x0000, 0x0000}}, + {'m', {0x0000, 0x0000, 0x0000, 0x0EE7, 0x0FFF, 0x0F3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0E3B, 0x0000, 0x0000}}, + {'n', {0x0000, 0x0000, 0x0000, 0x03BC, 0x03FE, 0x03CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0000, 0x0000}}, + {'o', {0x0000, 0x0000, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0383, 0x0383, 0x0383, 0x0383, 0x0383, 0x01C7, 0x00FE, 0x007C, 0x0000, 0x0000}}, + {'p', {0x0000, 0x0000, 0x0000, 0x03BC, 0x03FE, 0x03CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x03CF, 0x03FE, 0x03BC, 0x0380, 0x0380, 0x0380}}, + {'q', {0x0000, 0x0000, 0x0000, 0x0077, 0x00FF, 0x01CF, 0x0387, 0x0387, 0x0387, 0x0387, 0x01CF, 0x00FF, 0x0077, 0x0007, 0x0007, 0x0007}}, + {'r', {0x0000, 0x0000, 0x0000, 0x03BC, 0x03FE, 0x03CF, 0x0387, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0380, 0x0000, 0x0000}}, + {'s', {0x0000, 0x0000, 0x0000, 0x00FC, 0x01FE, 0x0387, 0x0380, 0x01F8, 0x00FE, 0x0007, 0x0007, 0x0387, 0x03FE, 0x01FC, 0x0000, 0x0000}}, + {'t', {0x0038, 0x0038, 0x0038, 0x00FF, 0x00FF, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x001F, 0x000F, 0x0000, 0x0000}}, + {'u', {0x0000, 0x0000, 0x0000, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x01CF, 0x01FF, 0x0077, 0x0000, 0x0000}}, + {'v', {0x0000, 0x0000, 0x0000, 0x0707, 0x0707, 0x038E, 0x038E, 0x038E, 0x01DC, 0x01DC, 0x00F8, 0x00F8, 0x0070, 0x0070, 0x0000, 0x0000}}, + {'w', {0x0000, 0x0000, 0x0000, 0x0E0E, 0x0E0E, 0x0E0E, 0x06B6, 0x06B6, 0x06B6, 0x07F7, 0x07F7, 0x07F7, 0x03E3, 0x03E3, 0x0000, 0x0000}}, + {'x', {0x0000, 0x0000, 0x0000, 0x0707, 0x038E, 0x01DC, 0x00F8, 0x0070, 0x0070, 0x00F8, 0x01DC, 0x038E, 0x0707, 0x0707, 0x0000, 0x0000}}, + {'y', {0x0000, 0x0000, 0x0000, 0x0707, 0x0707, 0x038E, 0x038E, 0x01DC, 0x01DC, 0x00F8, 0x00F8, 0x0070, 0x0070, 0x00E0, 0x01C0, 0x0000}}, + {'z', {0x0000, 0x0000, 0x0000, 0x03FF, 0x03FF, 0x000E, 0x001C, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x03FF, 0x03FF, 0x0000, 0x0000}}, + {'{', {0x000F, 0x001E, 0x001C, 0x001C, 0x001C, 0x001C, 0x0038, 0x0070, 0x0038, 0x001C, 0x001C, 0x001C, 0x001C, 0x001E, 0x000F, 0x0000}}, + {'|', {0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0000}}, + {'}', {0x0078, 0x003C, 0x001C, 0x001C, 0x001C, 0x001C, 0x000E, 0x0007, 0x000E, 0x001C, 0x001C, 0x001C, 0x001C, 0x003C, 0x0078, 0x0000}}, + {'~', {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01C7, 0x03EF, 0x077E, 0x0738, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}}, + // {'°', {0x000E, 0x001F, 0x001F, 0x001F, 0x000E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}}, + // {'Ä', {0x018C, 0x018C, 0x0000, 0x00F8, 0x01FC, 0x038E, 0x038E, 0x038E, 0x03FE, 0x07FF, 0x0707, 0x0707, 0x0707, 0x0707, 0x0000, 0x0000}}, + // {'Ö', {0x0318, 0x0318, 0x0000, 0x01F8, 0x03FC, 0x078E, 0x0706, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0706, 0x078E, 0x03FC, 0x01F8, 0x0000}}, + // {'Ü', {0x0318, 0x0318, 0x0000, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x0E07, 0x070E, 0x07FE, 0x01F8, 0x0000}}, + // {'ä', {0x00C6, 0x00C6, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0007, 0x007F, 0x00FF, 0x01C7, 0x0387, 0x0387, 0x01FF, 0x00F7, 0x0000, 0x0000}}, + // {'ö', {0x00C6, 0x00C6, 0x0000, 0x007C, 0x00FE, 0x01C7, 0x0383, 0x0383, 0x0383, 0x0383, 0x0383, 0x01C7, 0x00FE, 0x007C, 0x0000, 0x0000}}, + // {'ü', {0x00C6, 0x00C6, 0x0000, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x0387, 0x01CF, 0x01FF, 0x0077, 0x0000, 0x0000}}, + // {'ß', {0x007C, 0x00FE, 0x01C7, 0x01C7, 0x01C7, 0x01CE, 0x01FC, 0x01FE, 0x01CF, 0x01C7, 0x01C7, 0x01CF, 0x01FE, 0x01BC, 0x0180, 0x0180}}, + // {'•', {0x0000, 0x0000, 0x0000, 0x0000, 0x003C, 0x007E, 0x00FF, 0x00FF, 0x00FF, 0x00FF, 0x007E, 0x003C, 0x0000, 0x0000, 0x0000, 0x0000}}, + // {'€', {0x01F8, 0x07FC, 0x0F0E, 0x1C07, 0x1FC0, 0x1FC0, 0x3800, 0x1FC0, 0x1FC0, 0x3800, 0x1FC0, 0x1FC0, 0x1C07, 0x0F0E, 0x07FC, 0x01F8}} }; -// Character mapping -const char font_chars_16x16[] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°ÄÖÜäßäöü•€"; - // Declarations only -const uint16_t *getFontChar_16x16(char c); +const std::vector &getFontChar_16x16(char c); const uint8_t fontHeight_16x16(); #endif \ No newline at end of file diff --git a/lib/Fonts/src/font_5x7.cpp b/lib/Fonts/src/font_5x7.cpp index e32d962..85120a7 100644 --- a/lib/Fonts/src/font_5x7.cpp +++ b/lib/Fonts/src/font_5x7.cpp @@ -1,16 +1,14 @@ #include "font_5x7.h" // Function to get font data for a character -const uint8_t *getFontChar_5x7(char c) +const std::vector &getFontChar_5x7(char c) { - for (int i = 0; i < sizeof(font_chars_5x7) - 1; i++) + auto it = font_5x7.find(c); + if (it != font_5x7.end()) { - if (font_chars_5x7[i] == c) - { - return font_5x7[i]; - } + return it->second; } - return font_5x7[52]; // Return space if not found (index of ' ') + return font_5x7.at(' '); // Fallback to space } const uint8_t fontHeight_5x7() diff --git a/lib/Fonts/src/font_5x7.h b/lib/Fonts/src/font_5x7.h index 51eb651..9ce1c41 100644 --- a/lib/Fonts/src/font_5x7.h +++ b/lib/Fonts/src/font_5x7.h @@ -1,124 +1,122 @@ #ifndef FONT_5X7_H #define FONT_5X7_H -#include +#include +#include +#include -// 5x7 Font mit optimierten Zeichenbreiten -const uint8_t font_5x7[][7] = { +using namespace std; + +const std::map> font_5x7 = { // Uppercase letters (A-Z) - {0x0E, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x11}, // 'A' Width: 5 - {0x1E, 0x11, 0x11, 0x1E, 0x11, 0x11, 0x1E}, // 'B' Width: 5 - {0x0E, 0x11, 0x10, 0x10, 0x10, 0x11, 0x0E}, // 'C' Width: 5 - {0x1E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1E}, // 'D' Width: 5 - {0x1F, 0x10, 0x10, 0x1E, 0x10, 0x10, 0x1F}, // 'E' Width: 5 - {0x1F, 0x10, 0x10, 0x1E, 0x10, 0x10, 0x10}, // 'F' Width: 5 - {0x0E, 0x11, 0x10, 0x13, 0x11, 0x11, 0x0F}, // 'G' Width: 5 - {0x11, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x11}, // 'H' Width: 5 - {0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07}, // 'I' Width: 3 - {0x07, 0x02, 0x02, 0x02, 0x02, 0x12, 0x0C}, // 'J' Width: 4 - {0x11, 0x12, 0x14, 0x18, 0x14, 0x12, 0x11}, // 'K' Width: 5 - {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F}, // 'L' Width: 5 - {0x11, 0x1B, 0x15, 0x15, 0x11, 0x11, 0x11}, // 'M' Width: 5 - {0x11, 0x19, 0x19, 0x15, 0x13, 0x13, 0x11}, // 'N' Width: 5 - {0x0E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E}, // 'O' Width: 5 - {0x1E, 0x11, 0x11, 0x1E, 0x10, 0x10, 0x10}, // 'P' Width: 5 - {0x0E, 0x11, 0x11, 0x11, 0x15, 0x12, 0x0D}, // 'Q' Width: 5 - {0x1E, 0x11, 0x11, 0x1E, 0x14, 0x12, 0x11}, // 'R' Width: 5 - {0x0F, 0x10, 0x10, 0x0E, 0x01, 0x01, 0x1E}, // 'S' Width: 5 - {0x1F, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04}, // 'T' Width: 5 - {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E}, // 'U' Width: 5 - {0x11, 0x11, 0x11, 0x11, 0x11, 0x0A, 0x04}, // 'V' Width: 5 - {0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x0A}, // 'W' Width: 5 - {0x11, 0x11, 0x0A, 0x04, 0x0A, 0x11, 0x11}, // 'X' Width: 5 - {0x11, 0x11, 0x0A, 0x04, 0x04, 0x04, 0x04}, // 'Y' Width: 5 - {0x1F, 0x01, 0x02, 0x04, 0x08, 0x10, 0x1F}, // 'Z' Width: 5 + {'A', {0x0E, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x11}}, + {'B', {0x1E, 0x11, 0x11, 0x1E, 0x11, 0x11, 0x1E}}, + {'C', {0x0E, 0x11, 0x10, 0x10, 0x10, 0x11, 0x0E}}, + {'D', {0x1E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1E}}, + {'E', {0x1F, 0x10, 0x10, 0x1E, 0x10, 0x10, 0x1F}}, + {'F', {0x1F, 0x10, 0x10, 0x1E, 0x10, 0x10, 0x10}}, + {'G', {0x0E, 0x11, 0x10, 0x13, 0x11, 0x11, 0x0F}}, + {'H', {0x11, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x11}}, + {'I', {0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07}}, + {'J', {0x07, 0x02, 0x02, 0x02, 0x02, 0x12, 0x0C}}, + {'K', {0x11, 0x12, 0x14, 0x18, 0x14, 0x12, 0x11}}, + {'L', {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F}}, + {'M', {0x11, 0x1B, 0x15, 0x15, 0x11, 0x11, 0x11}}, + {'N', {0x11, 0x19, 0x19, 0x15, 0x13, 0x13, 0x11}}, + {'O', {0x0E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E}}, + {'P', {0x1E, 0x11, 0x11, 0x1E, 0x10, 0x10, 0x10}}, + {'Q', {0x0E, 0x11, 0x11, 0x11, 0x15, 0x12, 0x0D}}, + {'R', {0x1E, 0x11, 0x11, 0x1E, 0x14, 0x12, 0x11}}, + {'S', {0x0F, 0x10, 0x10, 0x0E, 0x01, 0x01, 0x1E}}, + {'T', {0x1F, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04}}, + {'U', {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E}}, + {'V', {0x11, 0x11, 0x11, 0x11, 0x11, 0x0A, 0x04}}, + {'W', {0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x0A}}, + {'X', {0x11, 0x11, 0x0A, 0x04, 0x0A, 0x11, 0x11}}, + {'Y', {0x11, 0x11, 0x0A, 0x04, 0x04, 0x04, 0x04}}, + {'Z', {0x1F, 0x01, 0x02, 0x04, 0x08, 0x10, 0x1F}}, // Lowercase letters (a-z) - {0x00, 0x00, 0x0E, 0x01, 0x0F, 0x11, 0x0F}, // 'a' Width: 4 - {0x10, 0x10, 0x16, 0x19, 0x11, 0x11, 0x1E}, // 'b' Width: 5 - {0x00, 0x00, 0x0E, 0x11, 0x10, 0x11, 0x0E}, // 'c' Width: 4 - {0x01, 0x01, 0x0D, 0x13, 0x11, 0x11, 0x0F}, // 'd' Width: 5 - {0x00, 0x00, 0x0E, 0x11, 0x1F, 0x10, 0x0E}, // 'e' Width: 4 - {0x06, 0x09, 0x08, 0x1C, 0x08, 0x08, 0x08}, // 'f' Width: 4 - {0x00, 0x0F, 0x11, 0x11, 0x0F, 0x01, 0x0E}, // 'g' Width: 5 - {0x10, 0x10, 0x16, 0x19, 0x11, 0x11, 0x11}, // 'h' Width: 5 - {0x00, 0x02, 0x00, 0x06, 0x02, 0x02, 0x07}, // 'i' Width: 2 - {0x00, 0x02, 0x00, 0x06, 0x02, 0x12, 0x0C}, // 'j' Width: 3 - {0x10, 0x10, 0x12, 0x14, 0x18, 0x14, 0x12}, // 'k' Width: 4 - {0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07}, // 'l' Width: 3 - {0x00, 0x00, 0x1A, 0x15, 0x15, 0x15, 0x15}, // 'm' Width: 5 - {0x00, 0x00, 0x16, 0x19, 0x11, 0x11, 0x11}, // 'n' Width: 5 - {0x00, 0x00, 0x0E, 0x11, 0x11, 0x11, 0x0E}, // 'o' Width: 4 - {0x00, 0x00, 0x1E, 0x11, 0x1E, 0x10, 0x10}, // 'p' Width: 5 - {0x00, 0x00, 0x0D, 0x13, 0x0F, 0x01, 0x01}, // 'q' Width: 5 - {0x00, 0x00, 0x16, 0x19, 0x10, 0x10, 0x10}, // 'r' Width: 5 - {0x00, 0x00, 0x0E, 0x10, 0x0E, 0x01, 0x1E}, // 's' Width: 4 - {0x08, 0x08, 0x1C, 0x08, 0x08, 0x09, 0x06}, // 't' Width: 4 - {0x00, 0x00, 0x11, 0x11, 0x11, 0x13, 0x0D}, // 'u' Width: 5 - {0x00, 0x00, 0x11, 0x11, 0x11, 0x0A, 0x04}, // 'v' Width: 5 - {0x00, 0x00, 0x11, 0x11, 0x15, 0x15, 0x0A}, // 'w' Width: 5 - {0x00, 0x00, 0x11, 0x0A, 0x04, 0x0A, 0x11}, // 'x' Width: 5 - {0x00, 0x00, 0x11, 0x11, 0x0F, 0x01, 0x0E}, // 'y' Width: 5 - {0x00, 0x00, 0x1F, 0x02, 0x04, 0x08, 0x1F}, // 'z' Width: 5 + {'a', {0x00, 0x00, 0x0E, 0x01, 0x0F, 0x11, 0x0F}}, + {'b', {0x10, 0x10, 0x16, 0x19, 0x11, 0x11, 0x1E}}, + {'c', {0x00, 0x00, 0x0E, 0x11, 0x10, 0x11, 0x0E}}, + {'d', {0x01, 0x01, 0x0D, 0x13, 0x11, 0x11, 0x0F}}, + {'e', {0x00, 0x00, 0x0E, 0x11, 0x1F, 0x10, 0x0E}}, + {'f', {0x06, 0x09, 0x08, 0x1C, 0x08, 0x08, 0x08}}, + {'g', {0x00, 0x0F, 0x11, 0x11, 0x0F, 0x01, 0x0E}}, + {'h', {0x10, 0x10, 0x16, 0x19, 0x11, 0x11, 0x11}}, + {'i', {0x00, 0x02, 0x00, 0x06, 0x02, 0x02, 0x07}}, + {'j', {0x00, 0x02, 0x00, 0x06, 0x02, 0x12, 0x0C}}, + {'k', {0x10, 0x10, 0x12, 0x14, 0x18, 0x14, 0x12}}, + {'l', {0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07}}, + {'m', {0x00, 0x00, 0x1A, 0x15, 0x15, 0x15, 0x15}}, + {'n', {0x00, 0x00, 0x16, 0x19, 0x11, 0x11, 0x11}}, + {'o', {0x00, 0x00, 0x0E, 0x11, 0x11, 0x11, 0x0E}}, + {'p', {0x00, 0x00, 0x1E, 0x11, 0x1E, 0x10, 0x10}}, + {'q', {0x00, 0x00, 0x0D, 0x13, 0x0F, 0x01, 0x01}}, + {'r', {0x00, 0x00, 0x16, 0x19, 0x10, 0x10, 0x10}}, + {'s', {0x00, 0x00, 0x0E, 0x10, 0x0E, 0x01, 0x1E}}, + {'t', {0x08, 0x08, 0x1C, 0x08, 0x08, 0x09, 0x06}}, + {'u', {0x00, 0x00, 0x11, 0x11, 0x11, 0x13, 0x0D}}, + {'v', {0x00, 0x00, 0x11, 0x11, 0x11, 0x0A, 0x04}}, + {'w', {0x00, 0x00, 0x11, 0x11, 0x15, 0x15, 0x0A}}, + {'x', {0x00, 0x00, 0x11, 0x0A, 0x04, 0x0A, 0x11}}, + {'y', {0x00, 0x00, 0x11, 0x11, 0x0F, 0x01, 0x0E}}, + {'z', {0x00, 0x00, 0x1F, 0x02, 0x04, 0x08, 0x1F}}, // Numbers (0-9) - {0x0E, 0x11, 0x13, 0x15, 0x19, 0x11, 0x0E}, // '0' Width: 5 - {0x02, 0x06, 0x02, 0x02, 0x02, 0x02, 0x07}, // '1' Width: 3 - {0x0E, 0x11, 0x01, 0x02, 0x04, 0x08, 0x1F}, // '2' Width: 5 - {0x1F, 0x02, 0x04, 0x02, 0x01, 0x11, 0x0E}, // '3' Width: 5 - {0x02, 0x06, 0x0A, 0x12, 0x1F, 0x02, 0x02}, // '4' Width: 5 - {0x1F, 0x10, 0x1E, 0x01, 0x01, 0x11, 0x0E}, // '5' Width: 5 - {0x06, 0x08, 0x10, 0x1E, 0x11, 0x11, 0x0E}, // '6' Width: 5 - {0x1F, 0x01, 0x02, 0x04, 0x08, 0x08, 0x08}, // '7' Width: 5 - {0x0E, 0x11, 0x11, 0x0E, 0x11, 0x11, 0x0E}, // '8' Width: 5 - {0x0E, 0x11, 0x11, 0x0F, 0x01, 0x02, 0x0C}, // '9' Width: 5 + {'0', {0x0E, 0x11, 0x13, 0x15, 0x19, 0x11, 0x0E}}, + {'1', {0x02, 0x06, 0x02, 0x02, 0x02, 0x02, 0x07}}, + {'2', {0x0E, 0x11, 0x01, 0x02, 0x04, 0x08, 0x1F}}, + {'3', {0x1F, 0x02, 0x04, 0x02, 0x01, 0x11, 0x0E}}, + {'4', {0x02, 0x06, 0x0A, 0x12, 0x1F, 0x02, 0x02}}, + {'5', {0x1F, 0x10, 0x1E, 0x01, 0x01, 0x11, 0x0E}}, + {'6', {0x06, 0x08, 0x10, 0x1E, 0x11, 0x11, 0x0E}}, + {'7', {0x1F, 0x01, 0x02, 0x04, 0x08, 0x08, 0x08}}, + {'8', {0x0E, 0x11, 0x11, 0x0E, 0x11, 0x11, 0x0E}}, + {'9', {0x0E, 0x11, 0x11, 0x0F, 0x01, 0x02, 0x0C}}, // Punctuation and symbols - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // ' ' Width: 2 - {0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01}, // '!' Width: 1 - {0x0E, 0x11, 0x02, 0x04, 0x04, 0x00, 0x04}, // '?' Width: 5 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, // '.' Width: 1 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02}, // ',' Width: 1 - {0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00}, // ':' Width: 1 - {0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02}, // ';' Width: 1 - {0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}, // "'" Width: 1 - {0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00}, // '"' Width: 3 - {0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00}, // '-' Width: 5 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F}, // '_' Width: 5 - {0x00, 0x04, 0x04, 0x1F, 0x04, 0x04, 0x00}, // '+' Width: 5 - {0x00, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x00}, // '=' Width: 5 - {0x00, 0x0A, 0x04, 0x1F, 0x04, 0x0A, 0x00}, // '*' Width: 5 - {0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x00}, // '/' Width: 5 - {0x00, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00}, // '\\' Width: 5 - {0x01, 0x02, 0x04, 0x04, 0x04, 0x02, 0x01}, // '(' Width: 3 - {0x04, 0x02, 0x01, 0x01, 0x01, 0x02, 0x04}, // ')' Width: 3 - {0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07}, // '[' Width: 3 - {0x07, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07}, // ']' Width: 3 - {0x03, 0x02, 0x02, 0x04, 0x02, 0x02, 0x03}, // '{' Width: 3 - {0x06, 0x02, 0x02, 0x01, 0x02, 0x02, 0x06}, // '}' Width: 3 - {0x00, 0x01, 0x02, 0x04, 0x02, 0x01, 0x00}, // '<' Width: 4 - {0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x00}, // '>' Width: 4 - {0x0E, 0x11, 0x17, 0x15, 0x17, 0x10, 0x0E}, // '@' Width: 5 - {0x0A, 0x0A, 0x1F, 0x0A, 0x1F, 0x0A, 0x0A}, // '#' Width: 5 - {0x04, 0x0F, 0x14, 0x0E, 0x05, 0x1E, 0x04}, // '$' Width: 5 - {0x18, 0x19, 0x02, 0x04, 0x08, 0x13, 0x03}, // '%' Width: 5 - {0x0C, 0x12, 0x14, 0x08, 0x15, 0x12, 0x0D}, // '&' Width: 5 - {0x04, 0x0A, 0x11, 0x00, 0x00, 0x00, 0x00}, // '^' Width: 5 - {0x00, 0x00, 0x00, 0x0D, 0x12, 0x00, 0x00}, // '~' Width: 5 + {' ', {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, + {'!', {0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01}}, + {'?', {0x0E, 0x11, 0x02, 0x04, 0x04, 0x00, 0x04}}, + {'.', {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}}, + {',', {0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02}}, + {':', {0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00}}, + {';', {0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02}}, + {'\'', {0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}}, + {'"', {0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00}}, + {'-', {0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00}}, + {'_', {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F}}, + {'+', {0x00, 0x04, 0x04, 0x1F, 0x04, 0x04, 0x00}}, + {'=', {0x00, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x00}}, + {'*', {0x00, 0x0A, 0x04, 0x1F, 0x04, 0x0A, 0x00}}, + {'/', {0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x00}}, + {'\\', {0x00, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00}}, + {'(', {0x01, 0x02, 0x04, 0x04, 0x04, 0x02, 0x01}}, + {')', {0x04, 0x02, 0x01, 0x01, 0x01, 0x02, 0x04}}, + {'[', {0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07}}, + {']', {0x07, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07}}, + {'{', {0x03, 0x02, 0x02, 0x04, 0x02, 0x02, 0x03}}, + {'}', {0x06, 0x02, 0x02, 0x01, 0x02, 0x02, 0x06}}, + {'<', {0x00, 0x01, 0x02, 0x04, 0x02, 0x01, 0x00}}, + {'>', {0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x00}}, + {'@', {0x0E, 0x11, 0x17, 0x15, 0x17, 0x10, 0x0E}}, + {'#', {0x0A, 0x0A, 0x1F, 0x0A, 0x1F, 0x0A, 0x0A}}, + {'$', {0x04, 0x0F, 0x14, 0x0E, 0x05, 0x1E, 0x04}}, + {'%', {0x18, 0x19, 0x02, 0x04, 0x08, 0x13, 0x03}}, + {'&', {0x0C, 0x12, 0x14, 0x08, 0x15, 0x12, 0x0D}}, // Special characters - {0x07, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00}, // '°' Width: 3 - {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, // '|' Width: 1 - {0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}, // '`' Width: 2 - {0x0F, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D}, // '¶' Width: 5 - {0x00, 0x00, 0x02, 0x07, 0x02, 0x00, 0x00} // '•' Width: 3 + // {'°', {0x07, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00}}, + {'|', {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}}, + {'`', {0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}}, + // {'¶', {0x0F, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D}}, + // {'•', {0x00, 0x00, 0x02, 0x07, 0x02, 0x00, 0x00}} }; -// Character mapping -const char font_chars_5x7[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 !?.,:;'\"-_+=*/\\()[]{}<>@#$%&^~°|`¶•"; - // Declarations only -const uint8_t *getFontChar_5x7(char c); +const vector &getFontChar_5x7(char c); const uint8_t fontHeight_5x7(); #endif \ No newline at end of file diff --git a/lib/Fonts/src/font_8x8.cpp b/lib/Fonts/src/font_8x8.cpp index 44d679e..96ce6d5 100644 --- a/lib/Fonts/src/font_8x8.cpp +++ b/lib/Fonts/src/font_8x8.cpp @@ -1,16 +1,14 @@ #include "font_8x8.h" // Function to get font data for a character -const uint8_t *getFontChar_8x8(char c) +const std::vector &getFontChar_8x8(char c) { - for (int i = 0; i < sizeof(font_chars_8x8) - 1; i++) + auto it = font_8x8.find(c); + if (it != font_8x8.end()) { - if (font_chars_8x8[i] == c) - { - return font_8x8[i]; - } + return it->second; } - return font_8x8[0]; // Return space if not found (index of ' ') + return font_8x8.at(' '); // Fallback to space } const uint8_t fontHeight_8x8() diff --git a/lib/Fonts/src/font_8x8.h b/lib/Fonts/src/font_8x8.h index 03c9044..df0cb07 100644 --- a/lib/Fonts/src/font_8x8.h +++ b/lib/Fonts/src/font_8x8.h @@ -1,117 +1,117 @@ #ifndef FONT_8X8_H #define FONT_8X8_H -#include +#include +#include +#include -const uint8_t font_8x8[][8] = { - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // ' ' (Space) - {0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x03, 0x00}, // '!' - {0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '"' - {0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // '#' - {0x0C, 0x1F, 0x30, 0x1E, 0x03, 0x3E, 0x0C, 0x00}, // '$' - {0x31, 0x33, 0x06, 0x0C, 0x18, 0x33, 0x23, 0x00}, // '%' - {0x3C, 0x66, 0x3C, 0x38, 0x67, 0x66, 0x3F, 0x00}, // '&' - {0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // "'" - {0x03, 0x06, 0x0C, 0x0C, 0x0C, 0x06, 0x03, 0x00}, // '(' - {0x0C, 0x06, 0x03, 0x03, 0x03, 0x06, 0x0C, 0x00}, // ')' - {0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // '*' - {0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // '+' - {0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x06}, // ',' - {0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // '-' - {0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00}, // '.' - {0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x00, 0x00}, // '/' - {0x1E, 0x33, 0x37, 0x3B, 0x33, 0x33, 0x1E, 0x00}, // '0' - {0x0C, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // '1' - {0x1E, 0x33, 0x03, 0x06, 0x0C, 0x18, 0x3F, 0x00}, // '2' - {0x1E, 0x33, 0x03, 0x0E, 0x03, 0x33, 0x1E, 0x00}, // '3' - {0x06, 0x0E, 0x1E, 0x36, 0x3F, 0x06, 0x06, 0x00}, // '4' - {0x3F, 0x30, 0x3E, 0x03, 0x03, 0x33, 0x1E, 0x00}, // '5' - {0x1E, 0x33, 0x30, 0x3E, 0x33, 0x33, 0x1E, 0x00}, // '6' - {0x3F, 0x03, 0x06, 0x0C, 0x0C, 0x0C, 0x0C, 0x00}, // '7' - {0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // '8' - {0x1E, 0x33, 0x33, 0x1F, 0x03, 0x33, 0x1E, 0x00}, // '9' - {0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00}, // ':' - {0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x06}, // ';' - {0x00, 0x03, 0x06, 0x0C, 0x06, 0x03, 0x00, 0x00}, // '<' - {0x00, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x00, 0x00}, // '=' - {0x00, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x00, 0x00}, // '>' - {0x1E, 0x33, 0x06, 0x0C, 0x0C, 0x00, 0x0C, 0x00}, // '?' - {0x3C, 0x42, 0x99, 0xA5, 0xA5, 0x9E, 0x40, 0x3C}, // '@' - {0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // 'A' - {0x3E, 0x33, 0x33, 0x3E, 0x33, 0x33, 0x3E, 0x00}, // 'B' - {0x1E, 0x33, 0x30, 0x30, 0x30, 0x33, 0x1E, 0x00}, // 'C' - {0x3C, 0x36, 0x33, 0x33, 0x33, 0x36, 0x3C, 0x00}, // 'D' - {0x3F, 0x30, 0x30, 0x3C, 0x30, 0x30, 0x3F, 0x00}, // 'E' - {0x3F, 0x30, 0x30, 0x3C, 0x30, 0x30, 0x30, 0x00}, // 'F' - {0x1E, 0x33, 0x30, 0x37, 0x33, 0x33, 0x1E, 0x00}, // 'G' - {0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // 'H' - {0x0F, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0F, 0x00}, // 'I' - {0x0F, 0x06, 0x06, 0x06, 0x06, 0x36, 0x1C, 0x00}, // 'J' - {0x33, 0x36, 0x3C, 0x38, 0x3C, 0x36, 0x33, 0x00}, // 'K' - {0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3F, 0x00}, // 'L' - {0x63, 0x77, 0x7F, 0x6B, 0x63, 0x63, 0x63, 0x00}, // 'M' - {0x33, 0x3B, 0x3F, 0x3F, 0x37, 0x33, 0x33, 0x00}, // 'N' - {0x1E, 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x00}, // 'O' - {0x3E, 0x33, 0x33, 0x3E, 0x30, 0x30, 0x30, 0x00}, // 'P' - {0x1E, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x07, 0x00}, // 'Q' - {0x3E, 0x33, 0x33, 0x3E, 0x3C, 0x36, 0x33, 0x00}, // 'R' - {0x1E, 0x33, 0x30, 0x1E, 0x03, 0x33, 0x1E, 0x00}, // 'S' - {0x3F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x00}, // 'T' - {0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x00}, // 'U' - {0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // 'V' - {0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // 'W' - {0x33, 0x33, 0x1E, 0x0C, 0x1E, 0x33, 0x33, 0x00}, // 'X' - {0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x0C, 0x00}, // 'Y' - {0x3F, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x3F, 0x00}, // 'Z' - {0x0F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0F, 0x00}, // '[' - {0x00, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0x00}, // '\' - {0x0F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0F, 0x00}, // ']' - {0x0C, 0x1E, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00}, // '^' - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F}, // '_' - {0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '`' - {0x00, 0x00, 0x1E, 0x03, 0x1F, 0x33, 0x1F, 0x00}, // 'a' - {0x30, 0x30, 0x3E, 0x33, 0x33, 0x33, 0x3E, 0x00}, // 'b' - {0x00, 0x00, 0x1E, 0x33, 0x30, 0x33, 0x1E, 0x00}, // 'c' - {0x03, 0x03, 0x1F, 0x33, 0x33, 0x33, 0x1F, 0x00}, // 'd' - {0x00, 0x00, 0x1E, 0x33, 0x3F, 0x30, 0x1E, 0x00}, // 'e' - {0x0E, 0x1B, 0x18, 0x3C, 0x18, 0x18, 0x18, 0x00}, // 'f' - {0x00, 0x00, 0x1F, 0x33, 0x33, 0x1F, 0x03, 0x3E}, // 'g' - {0x30, 0x30, 0x3E, 0x33, 0x33, 0x33, 0x33, 0x00}, // 'h' - {0x06, 0x00, 0x0E, 0x06, 0x06, 0x06, 0x0F, 0x00}, // 'i' - {0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x33, 0x1E}, // 'j' - {0x30, 0x30, 0x33, 0x36, 0x3C, 0x36, 0x33, 0x00}, // 'k' - {0x0E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0F, 0x00}, // 'l' - {0x00, 0x00, 0x66, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // 'm' - {0x00, 0x00, 0x3E, 0x33, 0x33, 0x33, 0x33, 0x00}, // 'n' - {0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // 'o' - {0x00, 0x00, 0x3E, 0x33, 0x33, 0x3E, 0x30, 0x30}, // 'p' - {0x00, 0x00, 0x1F, 0x33, 0x33, 0x1F, 0x03, 0x03}, // 'q' - {0x00, 0x00, 0x3E, 0x33, 0x30, 0x30, 0x30, 0x00}, // 'r' - {0x00, 0x00, 0x1F, 0x30, 0x1E, 0x03, 0x3E, 0x00}, // 's' - {0x0C, 0x0C, 0x1F, 0x0C, 0x0C, 0x0C, 0x07, 0x00}, // 't' - {0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x1F, 0x00}, // 'u' - {0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // 'v' - {0x00, 0x00, 0x63, 0x6B, 0x7F, 0x3E, 0x36, 0x00}, // 'w' - {0x00, 0x00, 0x33, 0x1E, 0x0C, 0x1E, 0x33, 0x00}, // 'x' - {0x00, 0x00, 0x33, 0x33, 0x33, 0x1F, 0x06, 0x3C}, // 'y' - {0x00, 0x00, 0x3F, 0x06, 0x0C, 0x18, 0x3F, 0x00}, // 'z' - {0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // '{' - {0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00}, // '|' - {0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // '}' - {0x00, 0x00, 0x00, 0x1B, 0x36, 0x00, 0x00, 0x00}, // '~' - {0x0E, 0x11, 0x11, 0x0E, 0x00, 0x00, 0x00, 0x00}, // '°' - {0x1F, 0x3D, 0x3D, 0x3D, 0x1D, 0x05, 0x05, 0x00}, // '¶' - {0x00, 0x00, 0x06, 0x0F, 0x0F, 0x06, 0x00, 0x00}, // '•' - {0x1C, 0x3E, 0x7F, 0x7F, 0x1C, 0x1C, 0x3E, 0x00}, // '♠' - {0x1C, 0x1C, 0x3E, 0x7F, 0x36, 0x1C, 0x3E, 0x00}, // '♣' - {0x36, 0x7F, 0x7F, 0x7F, 0x3E, 0x1C, 0x08, 0x00}, // '♥' - {0x08, 0x1C, 0x3E, 0x7F, 0x3E, 0x1C, 0x08, 0x00}, // '♦' +const std::map> font_8x8 = { + {' ', {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, + {'!', {0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x03, 0x00}}, + {'"', {0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, + {'#', {0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}}, + {'$', {0x0C, 0x1F, 0x30, 0x1E, 0x03, 0x3E, 0x0C, 0x00}}, + {'%', {0x31, 0x33, 0x06, 0x0C, 0x18, 0x33, 0x23, 0x00}}, + {'&', {0x3C, 0x66, 0x3C, 0x38, 0x67, 0x66, 0x3F, 0x00}}, + {'\'', {0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, + {'(', {0x03, 0x06, 0x0C, 0x0C, 0x0C, 0x06, 0x03, 0x00}}, + {')', {0x0C, 0x06, 0x03, 0x03, 0x03, 0x06, 0x0C, 0x00}}, + {'*', {0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}}, + {'+', {0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}}, + {',', {0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x06}}, + {'-', {0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}}, + {'.', {0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00}}, + {'/', {0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x00, 0x00}}, + {'0', {0x1E, 0x33, 0x37, 0x3B, 0x33, 0x33, 0x1E, 0x00}}, + {'1', {0x0C, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}}, + {'2', {0x1E, 0x33, 0x03, 0x06, 0x0C, 0x18, 0x3F, 0x00}}, + {'3', {0x1E, 0x33, 0x03, 0x0E, 0x03, 0x33, 0x1E, 0x00}}, + {'4', {0x06, 0x0E, 0x1E, 0x36, 0x3F, 0x06, 0x06, 0x00}}, + {'5', {0x3F, 0x30, 0x3E, 0x03, 0x03, 0x33, 0x1E, 0x00}}, + {'6', {0x1E, 0x33, 0x30, 0x3E, 0x33, 0x33, 0x1E, 0x00}}, + {'7', {0x3F, 0x03, 0x06, 0x0C, 0x0C, 0x0C, 0x0C, 0x00}}, + {'8', {0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}}, + {'9', {0x1E, 0x33, 0x33, 0x1F, 0x03, 0x33, 0x1E, 0x00}}, + {':', {0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00}}, + {';', {0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x06}}, + {'<', {0x00, 0x03, 0x06, 0x0C, 0x06, 0x03, 0x00, 0x00}}, + {'=', {0x00, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x00, 0x00}}, + {'>', {0x00, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x00, 0x00}}, + {'?', {0x1E, 0x33, 0x06, 0x0C, 0x0C, 0x00, 0x0C, 0x00}}, + {'@', {0x3C, 0x42, 0x99, 0xA5, 0xA5, 0x9E, 0x40, 0x3C}}, + {'A', {0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}}, + {'B', {0x3E, 0x33, 0x33, 0x3E, 0x33, 0x33, 0x3E, 0x00}}, + {'C', {0x1E, 0x33, 0x30, 0x30, 0x30, 0x33, 0x1E, 0x00}}, + {'D', {0x3C, 0x36, 0x33, 0x33, 0x33, 0x36, 0x3C, 0x00}}, + {'E', {0x3F, 0x30, 0x30, 0x3C, 0x30, 0x30, 0x3F, 0x00}}, + {'F', {0x3F, 0x30, 0x30, 0x3C, 0x30, 0x30, 0x30, 0x00}}, + {'G', {0x1E, 0x33, 0x30, 0x37, 0x33, 0x33, 0x1E, 0x00}}, + {'H', {0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}}, + {'I', {0x0F, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0F, 0x00}}, + {'J', {0x0F, 0x06, 0x06, 0x06, 0x06, 0x36, 0x1C, 0x00}}, + {'K', {0x33, 0x36, 0x3C, 0x38, 0x3C, 0x36, 0x33, 0x00}}, + {'L', {0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3F, 0x00}}, + {'M', {0x63, 0x77, 0x7F, 0x6B, 0x63, 0x63, 0x63, 0x00}}, + {'N', {0x33, 0x3B, 0x3F, 0x3F, 0x37, 0x33, 0x33, 0x00}}, + {'O', {0x1E, 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x00}}, + {'P', {0x3E, 0x33, 0x33, 0x3E, 0x30, 0x30, 0x30, 0x00}}, + {'Q', {0x1E, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x07, 0x00}}, + {'R', {0x3E, 0x33, 0x33, 0x3E, 0x3C, 0x36, 0x33, 0x00}}, + {'S', {0x1E, 0x33, 0x30, 0x1E, 0x03, 0x33, 0x1E, 0x00}}, + {'T', {0x3F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x00}}, + {'U', {0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x00}}, + {'V', {0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}}, + {'W', {0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}}, + {'X', {0x33, 0x33, 0x1E, 0x0C, 0x1E, 0x33, 0x33, 0x00}}, + {'Y', {0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x0C, 0x00}}, + {'Z', {0x3F, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x3F, 0x00}}, + {'[', {0x0F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0F, 0x00}}, + {'\\', {0x00, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0x00}}, + {']', {0x0F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0F, 0x00}}, + {'^', {0x0C, 0x1E, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00}}, + {'_', {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F}}, + {'`', {0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, + {'a', {0x00, 0x00, 0x1E, 0x03, 0x1F, 0x33, 0x1F, 0x00}}, + {'b', {0x30, 0x30, 0x3E, 0x33, 0x33, 0x33, 0x3E, 0x00}}, + {'c', {0x00, 0x00, 0x1E, 0x33, 0x30, 0x33, 0x1E, 0x00}}, + {'d', {0x03, 0x03, 0x1F, 0x33, 0x33, 0x33, 0x1F, 0x00}}, + {'e', {0x00, 0x00, 0x1E, 0x33, 0x3F, 0x30, 0x1E, 0x00}}, + {'f', {0x0E, 0x1B, 0x18, 0x3C, 0x18, 0x18, 0x18, 0x00}}, + {'g', {0x00, 0x00, 0x1F, 0x33, 0x33, 0x1F, 0x03, 0x3E}}, + {'h', {0x30, 0x30, 0x3E, 0x33, 0x33, 0x33, 0x33, 0x00}}, + {'i', {0x06, 0x00, 0x0E, 0x06, 0x06, 0x06, 0x0F, 0x00}}, + {'j', {0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x33, 0x1E}}, + {'k', {0x30, 0x30, 0x33, 0x36, 0x3C, 0x36, 0x33, 0x00}}, + {'l', {0x0E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0F, 0x00}}, + {'m', {0x00, 0x00, 0x66, 0x7F, 0x7F, 0x6B, 0x63, 0x00}}, + {'n', {0x00, 0x00, 0x3E, 0x33, 0x33, 0x33, 0x33, 0x00}}, + {'o', {0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}}, + {'p', {0x00, 0x00, 0x3E, 0x33, 0x33, 0x3E, 0x30, 0x30}}, + {'q', {0x00, 0x00, 0x1F, 0x33, 0x33, 0x1F, 0x03, 0x03}}, + {'r', {0x00, 0x00, 0x3E, 0x33, 0x30, 0x30, 0x30, 0x00}}, + {'s', {0x00, 0x00, 0x1F, 0x30, 0x1E, 0x03, 0x3E, 0x00}}, + {'t', {0x0C, 0x0C, 0x1F, 0x0C, 0x0C, 0x0C, 0x07, 0x00}}, + {'u', {0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x1F, 0x00}}, + {'v', {0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}}, + {'w', {0x00, 0x00, 0x63, 0x6B, 0x7F, 0x3E, 0x36, 0x00}}, + {'x', {0x00, 0x00, 0x33, 0x1E, 0x0C, 0x1E, 0x33, 0x00}}, + {'y', {0x00, 0x00, 0x33, 0x33, 0x33, 0x1F, 0x06, 0x3C}}, + {'z', {0x00, 0x00, 0x3F, 0x06, 0x0C, 0x18, 0x3F, 0x00}}, + {'{', {0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}}, + {'|', {0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00}}, + {'}', {0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}}, + {'~', {0x00, 0x00, 0x00, 0x1B, 0x36, 0x00, 0x00, 0x00}}, + // {'°', {0x0E, 0x11, 0x11, 0x0E, 0x00, 0x00, 0x00, 0x00}}, + // {'¶', {0x1F, 0x3D, 0x3D, 0x3D, 0x1D, 0x05, 0x05, 0x00}}, + // {'•', {0x00, 0x00, 0x06, 0x0F, 0x0F, 0x06, 0x00, 0x00}}, + // {'♠', {0x1C, 0x3E, 0x7F, 0x7F, 0x1C, 0x1C, 0x3E, 0x00}}, + // {'♣', {0x1C, 0x1C, 0x3E, 0x7F, 0x36, 0x1C, 0x3E, 0x00}}, + // {'♥', {0x36, 0x7F, 0x7F, 0x7F, 0x3E, 0x1C, 0x08, 0x00}}, + // {'♦', {0x08, 0x1C, 0x3E, 0x7F, 0x3E, 0x1C, 0x08, 0x00}} }; -// Character mapping -const char font_chars_8x8[] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°¶•♠♣♥♦"; // Declarations only -const uint8_t *getFontChar_8x8(char c); +const std::vector &getFontChar_8x8(char c); const uint8_t fontHeight_8x8(); #endif \ No newline at end of file diff --git a/lib/LedMatrix/src/LedMatrix.cpp b/lib/LedMatrix/src/LedMatrix.cpp index e6328f0..b065a88 100644 --- a/lib/LedMatrix/src/LedMatrix.cpp +++ b/lib/LedMatrix/src/LedMatrix.cpp @@ -1,4 +1,5 @@ #include "LedMatrix.h" +#include LedMatrix::LedMatrix(uint8_t h, uint8_t w) : height(h), width(w), num_leds(h * w), leds(num_leds) @@ -10,12 +11,22 @@ LedMatrix::~LedMatrix() { } -// N entspricht Font-Height -template +const uint8_t LedMatrix::getFontHeight() +{ +#ifdef USE_FONT_5x7 + return 7; +#elifdef USE_FONT_8x8 + return 8; +#elifdef USE_FONT_16x16 + return 16; +#endif +} + uint8_t LedMatrix::charWidth(const uint8_t *charMatrix) { + const uint16_t fHeight = getFontHeight(); uint16_t max_val = 0; - for (size_t i = 0; i < N; i++) + for (size_t i = 0; i < fHeight; i++) { if (charMatrix[i] > max_val) max_val = charMatrix[i]; @@ -47,9 +58,17 @@ void LedMatrix::drawPixel(int x, int y, CRGB color) uint8_t LedMatrix::drawChar(int x, int y, char c, CRGB color) { - const uint8_t *fontData = getFontChar_5x7(c); - const u_int8_t char_width_pixel = charWidth<7>(fontData); - const u_int8_t font_height = fontHeight_5x7(); +#ifdef USE_FONT_5x7 + const std::map> &font = font_5x7; +#elifdef USE_FONT_8x8 + const std::map> &font = font_8x8; +#elifdef USE_FONT_16x16 + const std::map> &font = font_16x16; +#endif + const vector &fontData_ = getFontChar(c, font); + const uint8_t *fontData = fontData_.data(); + const u_int8_t char_width_pixel = charWidth(fontData); + const u_int8_t font_height = getFontHeight(); const u_int8_t font_width = 5; for (u_int8_t row = 0; row < font_height; row++) @@ -89,22 +108,29 @@ void LedMatrix::drawText(int x, int y, const char *text, CRGB color) } } -uint8_t LedMatrix::getTextWidth(const char *text) +const uint8_t LedMatrix::getTextWidth(const char *text) { uint8_t totalWidth = 0; for (uint8_t i = 0; text[i] != '\0'; i++) { - const uint8_t *fontData = getFontChar_5x7(text[i]); - totalWidth += charWidth<7>(fontData) + 1; // char width + spacing +#ifdef USE_FONT_5x7 + const std::map> &font = font_5x7; +#elifdef USE_FONT_8x8 + const std::map> &font = font_8x8; +#elifdef USE_FONT_16x16 + const std::map> &font = font_16x16; +#endif + const vector &fontData_ = getFontChar(text[i], font); + + const uint8_t *fontData = fontData_.data(); + totalWidth += charWidth(fontData) + 1; // char width + spacing } return totalWidth; } void LedMatrix::clearRow(uint8_t y) { - const u_int8_t font_height = fontHeight_5x7(); - - Serial.printf("clearRow: %dx%d@%d\n\r", font_height, width, y); + const u_int8_t font_height = getFontHeight(); for (uint8_t line = y; line < (y + font_height); line++) { diff --git a/lib/LedMatrix/src/LedMatrix.h b/lib/LedMatrix/src/LedMatrix.h index ecacd4c..00dfb62 100644 --- a/lib/LedMatrix/src/LedMatrix.h +++ b/lib/LedMatrix/src/LedMatrix.h @@ -3,13 +3,21 @@ using namespace std; +#define USE_FONT_5x7 +// #define USE_FONT_8x8 +// #define USE_FONT_16x16 + #include #include #include +#ifdef USE_FONT_5x7 #include -// #include -// #include +#elifdef USE_FONT_8x8 +#include +#elifdef USE_FONT_16x16 +#include +#endif class LedMatrix : public CFastLED { @@ -21,14 +29,14 @@ private: uint16_t num_leds; // default 64x64 = 4096 LEDs vector leds; // Automatic memory management - template uint8_t charWidth(const uint8_t *charMatrix); // Text Scrolling int8_t scrollPosition = 0; unsigned long lastScrollTime = 0; - uint8_t getTextWidth(const char *text); + const uint8_t getTextWidth(const char *text); + const uint8_t getFontHeight(); public: LedMatrix(uint8_t h = 64, uint8_t w = 64); diff --git a/lib/Utils/src/fonts.cpp b/lib/Utils/src/fonts.cpp new file mode 100644 index 0000000..7387803 --- /dev/null +++ b/lib/Utils/src/fonts.cpp @@ -0,0 +1,11 @@ +#include "fonts.hpp" + +const std::vector &getFontChar(char c, const std::map> &font) +{ + auto it = font.find(c); + if (it != font.end()) + { + return it->second; + } + return font.at(' '); // Fallback to space +} diff --git a/lib/Utils/src/fonts.hpp b/lib/Utils/src/fonts.hpp new file mode 100644 index 0000000..1373787 --- /dev/null +++ b/lib/Utils/src/fonts.hpp @@ -0,0 +1,10 @@ +#ifndef FONTS_HPP +#define FONTS_HPP + +#include +#include +#include + +const std::vector &getFontChar(char c, const std::map> &font); + +#endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index dd789e5..da4c84d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,9 +8,21 @@ LedMatrix matrix; void printCharMatrixSimple(char c) { - const auto *fontData = getFontChar_5x7(c); - const u_int8_t char_width_pixel = 5; + matrix.drawText(58, 56, &c, CRGB::YellowGreen); + matrix.show(); + +#ifdef USE_FONT_5x7 + const vector &fontData_ = getFontChar_5x7(c); const u_int8_t font_height = fontHeight_5x7(); +#elifdef USE_FONT_8x8 + const vector &fontData_ = getFontChar_8x8(c); + const u_int8_t font_height = fontHeight_8x8(); +#elifdef USE_FONT_16x16 + const vector &fontData_ = getFontChar_16x16(c); + const u_int8_t font_height = fontHeight_16x16(); +#endif + const auto *fontData = fontData_.data(); + const u_int8_t char_width_pixel = 5; Serial.print("<"); Serial.print(c); @@ -82,7 +94,7 @@ void setup() } setupMatrix(); - // printCharMatrixSimple('A'); + printCharMatrixSimple('@'); // number_to_bitarray_msb(0x11FF, 16, true); // playWithBlinkLed(); @@ -90,6 +102,6 @@ void setup() void loop() { - matrix.drawHorizontalScrollText(41, "scrolling...", CRGB::Wheat); + // matrix.drawHorizontalScrollText(41, "scrolling...", CRGB::Wheat); delay(10); } \ No newline at end of file