From 43e2acb650140e945bd2ab6237a1c0facd45da1b Mon Sep 17 00:00:00 2001 From: John Plocher Date: Fri, 6 Sep 2019 19:00:38 -0700 Subject: [PATCH] no more enum, add macros SSD1306_BLACK, _WHITE, _INVERSE --- Adafruit_SSD1306.cpp | 42 ++++++++--------- Adafruit_SSD1306.h | 17 +++++-- .../OLED_featherwing/OLED_featherwing.ino | 2 +- .../ssd1306_128x32_i2c/ssd1306_128x32_i2c.ino | 46 +++++++++---------- .../ssd1306_128x32_spi/ssd1306_128x32_spi.ino | 46 +++++++++---------- .../ssd1306_128x64_i2c/ssd1306_128x64_i2c.ino | 46 +++++++++---------- .../ssd1306_128x64_spi/ssd1306_128x64_spi.ino | 46 +++++++++---------- 7 files changed, 126 insertions(+), 119 deletions(-) diff --git a/Adafruit_SSD1306.cpp b/Adafruit_SSD1306.cpp index bfdb33e..6163fe7 100644 --- a/Adafruit_SSD1306.cpp +++ b/Adafruit_SSD1306.cpp @@ -592,7 +592,7 @@ boolean Adafruit_SSD1306::begin(uint8_t vcs, uint8_t addr, boolean reset, @param y Row of display -- 0 at top to (screen height -1) at bottom. @param color - Pixel color, one of: Adafruit_SSD1306::BLACK, WHITE or INVERT. + Pixel color, one of: SSD1306_BLACK, _WHITE or _INVERT. @return None (void). @note Changes buffer contents only, no immediate effect on display. Follow up with a call to display(), or with other graphics @@ -616,9 +616,9 @@ void Adafruit_SSD1306::drawPixel(int16_t x, int16_t y, uint16_t color) { break; } switch(color) { - case Adafruit_SSD1306::WHITE: buffer[x + (y/8)*WIDTH] |= (1 << (y&7)); break; - case Adafruit_SSD1306::BLACK: buffer[x + (y/8)*WIDTH] &= ~(1 << (y&7)); break; - case Adafruit_SSD1306::INVERSE: buffer[x + (y/8)*WIDTH] ^= (1 << (y&7)); break; + case SSD1306_WHITE: buffer[x + (y/8)*WIDTH] |= (1 << (y&7)); break; + case SSD1306_BLACK: buffer[x + (y/8)*WIDTH] &= ~(1 << (y&7)); break; + case SSD1306_INVERSE: buffer[x + (y/8)*WIDTH] ^= (1 << (y&7)); break; } } } @@ -644,7 +644,7 @@ void Adafruit_SSD1306::clearDisplay(void) { @param w Width of line, in pixels. @param color - Line color, one of: Adafruit_SSD1306::BLACK, WHITE or INVERT. + Line color, one of: SSD1306_BLACK, _WHITE or _INVERT. @return None (void). @note Changes buffer contents only, no immediate effect on display. Follow up with a call to display(), or with other graphics @@ -695,9 +695,9 @@ void Adafruit_SSD1306::drawFastHLineInternal( uint8_t *pBuf = &buffer[(y / 8) * WIDTH + x], mask = 1 << (y & 7); switch(color) { - case Adafruit_SSD1306::WHITE: while(w--) { *pBuf++ |= mask; }; break; - case Adafruit_SSD1306::BLACK: mask = ~mask; while(w--) { *pBuf++ &= mask; }; break; - case Adafruit_SSD1306::INVERSE: while(w--) { *pBuf++ ^= mask; }; break; + case SSD1306_WHITE: while(w--) { *pBuf++ |= mask; }; break; + case SSD1306_BLACK: mask = ~mask; while(w--) { *pBuf++ &= mask; }; break; + case SSD1306_INVERSE: while(w--) { *pBuf++ ^= mask; }; break; } } } @@ -713,7 +713,7 @@ void Adafruit_SSD1306::drawFastHLineInternal( @param h Height of line, in pixels. @param color - Line color, one of: Adafruit_SSD1306::BLACK, WHITE or INVERT. + Line color, one of: SSD1306_BLACK, _WHITE or _INVERT. @return None (void). @note Changes buffer contents only, no immediate effect on display. Follow up with a call to display(), or with other graphics @@ -781,9 +781,9 @@ void Adafruit_SSD1306::drawFastVLineInternal( if(h < mod) mask &= (0XFF >> (mod - h)); switch(color) { - case Adafruit_SSD1306::WHITE: *pBuf |= mask; break; - case Adafruit_SSD1306::BLACK: *pBuf &= ~mask; break; - case Adafruit_SSD1306::INVERSE: *pBuf ^= mask; break; + case SSD1306_WHITE: *pBuf |= mask; break; + case SSD1306_BLACK: *pBuf &= ~mask; break; + case SSD1306_INVERSE: *pBuf ^= mask; break; } pBuf += WIDTH; } @@ -792,7 +792,7 @@ void Adafruit_SSD1306::drawFastVLineInternal( h -= mod; // Write solid bytes while we can - effectively 8 rows at a time if(h >= 8) { - if(color == Adafruit_SSD1306::INVERSE) { + if(color == SSD1306_INVERSE) { // separate copy of the code so we don't impact performance of // black/white write version with an extra comparison per loop do { @@ -802,7 +802,7 @@ void Adafruit_SSD1306::drawFastVLineInternal( } while(h >= 8); } else { // store a local value to work with - uint8_t val = (color != Adafruit_SSD1306::BLACK) ? 255 : 0; + uint8_t val = (color != SSD1306_BLACK) ? 255 : 0; do { *pBuf = val; // Set byte pBuf += WIDTH; // Advance pointer 8 rows @@ -822,9 +822,9 @@ void Adafruit_SSD1306::drawFastVLineInternal( { 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F }; uint8_t mask = pgm_read_byte(&postmask[mod]); switch(color) { - case Adafruit_SSD1306::WHITE: *pBuf |= mask; break; - case Adafruit_SSD1306::BLACK: *pBuf &= ~mask; break; - case Adafruit_SSD1306::INVERSE: *pBuf ^= mask; break; + case SSD1306_WHITE: *pBuf |= mask; break; + case SSD1306_BLACK: *pBuf &= ~mask; break; + case SSD1306_INVERSE: *pBuf ^= mask; break; } } } @@ -838,8 +838,8 @@ void Adafruit_SSD1306::drawFastVLineInternal( Column of display -- 0 at left to (screen width - 1) at right. @param y Row of display -- 0 at top to (screen height -1) at bottom. - @return true if pixel is set (usually Adafruit_SSD1306::WHITE, unless display invert mode - is enabled), false if clear (Adafruit_SSD1306::BLACK). + @return true if pixel is set (usually SSD1306_WHITE, unless display invert mode + is enabled), false if clear (SSD1306_BLACK). @note Reads from buffer contents; may not reflect current contents of screen if display() has not been called. */ @@ -1066,8 +1066,8 @@ void Adafruit_SSD1306::stopscroll(void) { @note This has an immediate effect on the display, no need to call the display() function -- buffer contents are not changed, rather a different pixel mode of the display hardware is used. When - enabled, drawing Adafruit_SSD1306::BLACK (value 0) pixels will actually draw white, - WHITE (value 1) will draw black. + enabled, drawing SSD1306_BLACK (value 0) pixels will actually draw white, + SSD1306_WHITE (value 1) will draw black. */ void Adafruit_SSD1306::invertDisplay(boolean i) { TRANSACTION_START diff --git a/Adafruit_SSD1306.h b/Adafruit_SSD1306.h index 9c09ecf..939725b 100644 --- a/Adafruit_SSD1306.h +++ b/Adafruit_SSD1306.h @@ -54,9 +54,18 @@ #define HAVE_PORTREG #endif -//#define BLACK 0 ///< Draw 'off' pixels -//#define WHITE 1 ///< Draw 'on' pixels -//#define INVERSE 2 ///< Invert pixels +/// The following "raw" color names are kept for backwards client compatability +/// They can be disabled by predefining this macro before including the Adafruit header +/// client code will then need to be modified to use the scoped enum values directly +#ifndef NO_ADAFRUIT_SSD1306_COLOR_COMPATIBILITY +#define BLACK SSD1306_BLACK ///< Draw 'off' pixels +#define WHITE SSD1306_WHITE ///< Draw 'on' pixels +#define INVERSE SSD1306_INVERSE ///< Invert pixels +#endif + /// fit into the SSD1306_ naming scheme +#define SSD1306_BLACK 0 ///< Draw 'off' pixels +#define SSD1306_WHITE 1 ///< Draw 'on' pixels +#define SSD1306_INVERSE 2 ///< Invert pixels #define SSD1306_MEMORYMODE 0x20 ///< See datasheet #define SSD1306_COLUMNADDR 0x21 ///< See datasheet @@ -130,8 +139,6 @@ class Adafruit_SSD1306 : public Adafruit_GFX { ~Adafruit_SSD1306(void); - enum SSD1306_Colors { BLACK=0, WHITE=1, INVERSE=2 }; - boolean begin(uint8_t switchvcc=SSD1306_SWITCHCAPVCC, uint8_t i2caddr=0, boolean reset=true, boolean periphBegin=true); diff --git a/examples/OLED_featherwing/OLED_featherwing.ino b/examples/OLED_featherwing/OLED_featherwing.ino index 3958f9a..e6d6d50 100644 --- a/examples/OLED_featherwing/OLED_featherwing.ino +++ b/examples/OLED_featherwing/OLED_featherwing.ino @@ -59,7 +59,7 @@ void setup() { // text display tests display.setTextSize(1); - display.setTextColor(Adafruit_SSD1306::WHITE); + display.setTextColor(SSD1306_WHITE); display.setCursor(0,0); display.print("Connecting to SSID\n'adafruit':"); display.print("connected!"); diff --git a/examples/ssd1306_128x32_i2c/ssd1306_128x32_i2c.ino b/examples/ssd1306_128x32_i2c/ssd1306_128x32_i2c.ino index e84ca45..0349785 100644 --- a/examples/ssd1306_128x32_i2c/ssd1306_128x32_i2c.ino +++ b/examples/ssd1306_128x32_i2c/ssd1306_128x32_i2c.ino @@ -70,7 +70,7 @@ void setup() { display.clearDisplay(); // Draw a single pixel in white - display.drawPixel(10, 10, Adafruit_SSD1306::WHITE); + display.drawPixel(10, 10, SSD1306_WHITE); // Show the display buffer on the screen. You MUST call display() after // drawing commands to make them visible on screen! @@ -125,12 +125,12 @@ void testdrawline() { display.clearDisplay(); // Clear display buffer for(i=0; i=0; i-=4) { - display.drawLine(0, display.height()-1, display.width()-1, i, Adafruit_SSD1306::WHITE); + display.drawLine(0, display.height()-1, display.width()-1, i, SSD1306_WHITE); display.display(); delay(1); } @@ -153,12 +153,12 @@ void testdrawline() { display.clearDisplay(); for(i=display.width()-1; i>=0; i-=4) { - display.drawLine(display.width()-1, display.height()-1, i, 0, Adafruit_SSD1306::WHITE); + display.drawLine(display.width()-1, display.height()-1, i, 0, SSD1306_WHITE); display.display(); delay(1); } for(i=display.height()-1; i>=0; i-=4) { - display.drawLine(display.width()-1, display.height()-1, 0, i, Adafruit_SSD1306::WHITE); + display.drawLine(display.width()-1, display.height()-1, 0, i, SSD1306_WHITE); display.display(); delay(1); } @@ -167,12 +167,12 @@ void testdrawline() { display.clearDisplay(); for(i=0; i0; i-=3) { // The INVERSE color is used so circles alternate white/black - display.fillCircle(display.width() / 2, display.height() / 2, i, Adafruit_SSD1306::INVERSE); + display.fillCircle(display.width() / 2, display.height() / 2, i, SSD1306_INVERSE); display.display(); // Update screen with each newly-drawn circle delay(1); } @@ -235,7 +235,7 @@ void testdrawroundrect(void) { for(int16_t i=0; i=0; i-=4) { - display.drawLine(0, display.height()-1, display.width()-1, i, Adafruit_SSD1306::WHITE); + display.drawLine(0, display.height()-1, display.width()-1, i, SSD1306_WHITE); display.display(); delay(1); } @@ -166,12 +166,12 @@ void testdrawline() { display.clearDisplay(); for(i=display.width()-1; i>=0; i-=4) { - display.drawLine(display.width()-1, display.height()-1, i, 0, Adafruit_SSD1306::WHITE); + display.drawLine(display.width()-1, display.height()-1, i, 0, SSD1306_WHITE); display.display(); delay(1); } for(i=display.height()-1; i>=0; i-=4) { - display.drawLine(display.width()-1, display.height()-1, 0, i, Adafruit_SSD1306::WHITE); + display.drawLine(display.width()-1, display.height()-1, 0, i, SSD1306_WHITE); display.display(); delay(1); } @@ -180,12 +180,12 @@ void testdrawline() { display.clearDisplay(); for(i=0; i0; i-=3) { // The INVERSE color is used so circles alternate white/black - display.fillCircle(display.width() / 2, display.height() / 2, i, Adafruit_SSD1306::INVERSE); + display.fillCircle(display.width() / 2, display.height() / 2, i, SSD1306_INVERSE); display.display(); // Update screen with each newly-drawn circle delay(1); } @@ -248,7 +248,7 @@ void testdrawroundrect(void) { for(int16_t i=0; i=0; i-=4) { - display.drawLine(0, display.height()-1, display.width()-1, i, Adafruit_SSD1306::WHITE); + display.drawLine(0, display.height()-1, display.width()-1, i, SSD1306_WHITE); display.display(); delay(1); } @@ -153,12 +153,12 @@ void testdrawline() { display.clearDisplay(); for(i=display.width()-1; i>=0; i-=4) { - display.drawLine(display.width()-1, display.height()-1, i, 0, Adafruit_SSD1306::WHITE); + display.drawLine(display.width()-1, display.height()-1, i, 0, SSD1306_WHITE); display.display(); delay(1); } for(i=display.height()-1; i>=0; i-=4) { - display.drawLine(display.width()-1, display.height()-1, 0, i, Adafruit_SSD1306::WHITE); + display.drawLine(display.width()-1, display.height()-1, 0, i, SSD1306_WHITE); display.display(); delay(1); } @@ -167,12 +167,12 @@ void testdrawline() { display.clearDisplay(); for(i=0; i0; i-=3) { // The INVERSE color is used so circles alternate white/black - display.fillCircle(display.width() / 2, display.height() / 2, i, Adafruit_SSD1306::INVERSE); + display.fillCircle(display.width() / 2, display.height() / 2, i, SSD1306_INVERSE); display.display(); // Update screen with each newly-drawn circle delay(1); } @@ -235,7 +235,7 @@ void testdrawroundrect(void) { for(int16_t i=0; i=0; i-=4) { - display.drawLine(0, display.height()-1, display.width()-1, i, Adafruit_SSD1306::WHITE); + display.drawLine(0, display.height()-1, display.width()-1, i, SSD1306_WHITE); display.display(); delay(1); } @@ -167,12 +167,12 @@ void testdrawline() { display.clearDisplay(); for(i=display.width()-1; i>=0; i-=4) { - display.drawLine(display.width()-1, display.height()-1, i, 0, Adafruit_SSD1306::WHITE); + display.drawLine(display.width()-1, display.height()-1, i, 0, SSD1306_WHITE); display.display(); delay(1); } for(i=display.height()-1; i>=0; i-=4) { - display.drawLine(display.width()-1, display.height()-1, 0, i, Adafruit_SSD1306::WHITE); + display.drawLine(display.width()-1, display.height()-1, 0, i, SSD1306_WHITE); display.display(); delay(1); } @@ -181,12 +181,12 @@ void testdrawline() { display.clearDisplay(); for(i=0; i0; i-=3) { // The INVERSE color is used so circles alternate white/black - display.fillCircle(display.width() / 2, display.height() / 2, i, Adafruit_SSD1306::INVERSE); + display.fillCircle(display.width() / 2, display.height() / 2, i, SSD1306_INVERSE); display.display(); // Update screen with each newly-drawn circle delay(1); } @@ -249,7 +249,7 @@ void testdrawroundrect(void) { for(int16_t i=0; i