diff --git a/SSD1306Ascii.cpp b/SSD1306Ascii.cpp index 911074b..ea0c76b 100644 --- a/SSD1306Ascii.cpp +++ b/SSD1306Ascii.cpp @@ -236,11 +236,6 @@ void SSD1306AsciiWire::setRowNative(uint8_t line) { size_t SSD1306AsciiWire::writeNative(uint8_t ch) { const uint8_t* base = m_font; - if (ch < m_fontFirstChar || ch >= (m_fontFirstChar + m_fontCharCount)) - return 0; - // Check if character would be partly or wholly off the display - if (m_col + fontWidth > m_displayWidth) - return 0; #if defined(NOLOWERCASE) // Adjust if lowercase is missing if (ch >= 'a') { @@ -250,6 +245,12 @@ size_t SSD1306AsciiWire::writeNative(uint8_t ch) { ch -= 26; // Allow for missing lowercase letters } #endif + if (ch < m_fontFirstChar || ch >= (m_fontFirstChar + m_fontCharCount)) + return 0; + // Check if character would be partly or wholly off the display + if (m_col + fontWidth > m_displayWidth) + return 0; + ch -= m_fontFirstChar; base += fontWidth * ch; // Before using buffer, wait for last request to complete @@ -406,8 +407,8 @@ const uint8_t FLASH SSD1306AsciiWire::System6x8[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented + 0x38, 0x44, 0xc6, 0x44, 0x20, 0x00, // cent 0x9b + 0x44, 0x6e, 0x59, 0x49, 0x62, 0x00, // £ 0x9c 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented @@ -425,27 +426,27 @@ const uint8_t FLASH SSD1306AsciiWire::System6x8[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented + 0x10, 0x28, 0x54, 0x28, 0x44, 0x00, // << + 0x44, 0x28, 0x54, 0x28, 0x10, 0x00, // >> // Extended characters 176-180 0x92, 0x00, 0x49, 0x00, 0x24, 0x00, // Light grey 0xb0 - 0xcc, 0x55, 0xcc, 0x55, 0xcc, 0x55, // Mid grey 0xb1 - 0x6a, 0xff, 0xb6, 0xff, 0xdb, 0xff, // Dark grey 0xb2 + 0xaa, 0x44, 0xaa, 0x11, 0xaa, 0x55, // Mid grey 0xb1 + 0x6d, 0xff, 0xb6, 0xff, 0xdb, 0xff, // Dark grey 0xb2 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, // Vertical line 0xb3 0x08, 0x08, 0x08, 0xff, 0x00, 0x00, // Vertical line with left spur 0xb4 - 0x14, 0x14, 0xfe, 0x00, 0xff, 0x00, // Vertical line with double left spur 0xb9 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented Double vertical line with single left spur - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented + 0x14, 0x14, 0x14, 0xff, 0x00, 0x00, // Vertical line with double left spur 0xb5 + 0x08, 0x08, 0xff, 0x00, 0xff, 0x00, // Double vertical line with single left spur + 0x08, 0x08, 0xf8, 0x08, 0xf8, 0x00, // Top right corner, single horiz, double vert + 0x14, 0x14, 0x14, 0xfc, 0x00, 0x00, // Top right corner, double horiz, single vert // Extended characters 185-190 - 0x28, 0x28, 0xef, 0x00, 0xff, 0x00, // Double vertical line with double left spur 0xb9 + 0x14, 0x14, 0xf7, 0x00, 0xff, 0x00, // Double vertical line with double left spur 0xb9 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, // Double vertical line 0xba 0x14, 0x14, 0xf4, 0x04, 0xfc, 0x00, // Double top right corner 0xbb 0x14, 0x14, 0x17, 0x10, 0x1f, 0x00, // Double bottom right corner 0xbc - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented 0xbd - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented 0xbe + 0x08, 0x08, 0x0f, 0x08, 0x0f, 0x00, // Bottom right corner, single horiz, double vert 0xbd + 0x14, 0x14, 0x14, 0x1f, 0x00, 0x00, // Bottom right corner, double horiz, single vert 0xbe // Extended characters 191-199 0x08, 0x08, 0x08, 0xf8, 0x00, 0x00, // Top right corner 0xbf @@ -455,8 +456,8 @@ const uint8_t FLASH SSD1306AsciiWire::System6x8[] = { 0x00, 0x00, 0x00, 0xff, 0x08, 0x08, // Vertical line with right spur 0xc3 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, // Horizontal line 0xc4 0x08, 0x08, 0x08, 0xff, 0x08, 0x08, // Cross 0xc5 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented + 0x00, 0x00, 0x00, 0xff, 0x14, 0x14, // Vertical line double right spur 0xc6 + 0x00, 0x00, 0xff, 0x00, 0xff, 0x08, // Double vertical line single right spur 0xc7 // Extended characters 200-206 0x00, 0x00, 0x1f, 0x10, 0x17, 0x14, // Double bottom left corner 0xc8 @@ -467,16 +468,16 @@ const uint8_t FLASH SSD1306AsciiWire::System6x8[] = { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, // Double horizontal line 0xcd 0x14, 0x14, 0xf7, 0x00, 0xf7, 0x14, // Double cross 0xce - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented 0xd0 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented + 0x14, 0x14, 0x14, 0x17, 0x14, 0x14, // Double horizontal line single upward spur 0xcf + 0x08, 0x08, 0x0f, 0x08, 0x0f, 0x08, // Horiz single line with double upward spur 0xd0 + 0x14, 0x14, 0x14, 0xf4, 0x14, 0x14, // Horiz double line with single downward spur 0xd1 + 0x08, 0x08, 0xf8, 0x08, 0xf8, 0x08, // Horiz single line with double downward spur 0xd2 + 0x00, 0x00, 0x0f, 0x08, 0x0f, 0x08, // Bottom left corner, double vert single horiz 0xd3 + 0x00, 0x00, 0x00, 0x1f, 0x14, 0x14, // Bottom left corner, single vert double horiz 0xd4 + 0x00, 0x00, 0x00, 0xfc, 0x14, 0x14, // Top left corner, single vert double horiz 0xd5 + 0x00, 0x00, 0xf8, 0x08, 0xf8, 0x08, // Top left corner, double vert single horiz 0xd6 + 0x08, 0x08, 0xff, 0x00, 0xff, 0x08, // Cross, double vert single horiz 0xd7 + 0x14, 0x14, 0x14, 0xf7, 0x14, 0x14, // Cross, single vert double horiz 0xd8 // Extended characters 217-223 0x08, 0x08, 0x08, 0x0f, 0x00, 0x00, // Bottom right corner 0xd9 @@ -487,10 +488,10 @@ const uint8_t FLASH SSD1306AsciiWire::System6x8[] = { 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, // Right half block 0xde 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, // Top half block 0xdf - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented 0xe0 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented + 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, // Bottom Left block 0xe0 + 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, // Bottom Right block + 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, // Top left block + 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, // Top right block 0xe3 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented @@ -511,9 +512,8 @@ const uint8_t FLASH SSD1306AsciiWire::System6x8[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Not implemented // Extended character 248 - 0x00, 0x06, 0x09, 0x09, 0x06, 0x00, // degree symbol 0xf8 + 0x00, 0x06, 0x09, 0x09, 0x06, 0x00 // degree symbol 0xf8 #endif - 0x00 }; const uint8_t SSD1306AsciiWire::m_fontCharCount = sizeof(System6x8) / 6;