Library for Modtronix im4OLED board with 128x64 OLED and 4 buttons. For details, see product page http://modtronix.com/im4oled.html. Is a clone of Adafruit_GFX library, with some additional code added.

Fork of Adafruit_GFX by Neal Horman

Committer:
modtronix-com
Date:
Wed Oct 21 14:49:56 2015 +1100
Revision:
23:44309099c532
Parent:
22:f63aeb3769b5
Changed defines and added dependency for modtronix_config.h file.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
modtronix-com 22:f63aeb3769b5 1 /*********************************************************************
modtronix-com 22:f63aeb3769b5 2 This is a library for our Monochrome OLEDs based on SSD1306 drivers
modtronix-com 22:f63aeb3769b5 3
modtronix-com 22:f63aeb3769b5 4 Pick one up today in the adafruit shop!
modtronix-com 22:f63aeb3769b5 5 ------> http://www.adafruit.com/category/63_98
modtronix-com 22:f63aeb3769b5 6
modtronix-com 22:f63aeb3769b5 7 These displays use SPI to communicate, 4 or 5 pins are required to
modtronix-com 22:f63aeb3769b5 8 interface
modtronix-com 22:f63aeb3769b5 9
modtronix-com 22:f63aeb3769b5 10 Adafruit invests time and resources providing this open source code,
modtronix-com 22:f63aeb3769b5 11 please support Adafruit and open-source hardware by purchasing
modtronix-com 22:f63aeb3769b5 12 products from Adafruit!
modtronix-com 22:f63aeb3769b5 13
modtronix-com 22:f63aeb3769b5 14 Written by Limor Fried/Ladyada for Adafruit Industries.
modtronix-com 22:f63aeb3769b5 15 BSD license, check license.txt for more information
modtronix-com 22:f63aeb3769b5 16 All text above, and the splash screen below must be included in any redistribution
modtronix-com 22:f63aeb3769b5 17 *********************************************************************/
modtronix-com 22:f63aeb3769b5 18
modtronix-com 22:f63aeb3769b5 19 /*
modtronix-com 22:f63aeb3769b5 20 * Modified by Neal Horman 7/14/2012 for use in mbed
modtronix-com 22:f63aeb3769b5 21 */
modtronix-com 22:f63aeb3769b5 22 #include "mbed.h"
modtronix-com 22:f63aeb3769b5 23 #include "mx_ssd1306.h"
modtronix-com 22:f63aeb3769b5 24
modtronix-com 22:f63aeb3769b5 25 //MODTRONIX BEGIN /////////////////////////////////////////////////////////////
modtronix-com 22:f63aeb3769b5 26 #define DEBUG_ENABLE 0
modtronix-com 22:f63aeb3769b5 27 #if (DEBUG_ENABLE == 1)
modtronix-com 22:f63aeb3769b5 28 extern Stream* pMxDebug; //Define Stream for debug output in user code called pMxDebug
modtronix-com 22:f63aeb3769b5 29 #define MX_DEBUG pMxDebug->printf
modtronix-com 22:f63aeb3769b5 30 #else
modtronix-com 22:f63aeb3769b5 31 #define MX_DEBUG(format, args...) ((void)0)
modtronix-com 22:f63aeb3769b5 32 #endif
modtronix-com 22:f63aeb3769b5 33 //MODTRONIX END ///////////////////////////////////////////////////////////////
modtronix-com 22:f63aeb3769b5 34
modtronix-com 22:f63aeb3769b5 35
modtronix-com 22:f63aeb3769b5 36 #define SSD1306_SETLOWCOLUMN 0x00 //Only used for "Page Addresss Mode"! Column start, will wrap around to this column
modtronix-com 22:f63aeb3769b5 37 #define SSD1306_SETHIGHCOLUMN 0x10 //Only used for "Page Addresss Mode"! Column end, will wrap around after this column
modtronix-com 22:f63aeb3769b5 38 #define SSD1306_MEMORYMODE 0x20 //0x22=Page Address mode, 0x20=Horizontal Address Mode
modtronix-com 22:f63aeb3769b5 39 //Only used for "Horizontal Address Mode"! Set Col start and end. Two command must follow, Col start(Reset=0) & Col End(Reset=127)
modtronix-com 22:f63aeb3769b5 40 #define SSD1306_SET_COLUMN_ADR 0x21
modtronix-com 22:f63aeb3769b5 41 //Only used for "Horizontal Address Mode"! Set Page start and end. Two command must follow, Page start(Reset=0) & Page End(Reset=7)
modtronix-com 22:f63aeb3769b5 42 #define SSD1306_SET_PAGE_ADR 0x22
modtronix-com 22:f63aeb3769b5 43 #define SSD1306_DISABLE_SCROLLING 0x2E
modtronix-com 22:f63aeb3769b5 44 #define SSD1306_SETSTARTLINE 0x40
modtronix-com 22:f63aeb3769b5 45 #define SSD1306_SETCONTRAST 0x81
modtronix-com 22:f63aeb3769b5 46 #define SSD1306_CHARGEPUMP 0x8D
modtronix-com 22:f63aeb3769b5 47 #define SSD1306_SEGREMAP 0xA0
modtronix-com 22:f63aeb3769b5 48 #define SSD1306_DISPLAYALLON_RESUME 0xA4
modtronix-com 22:f63aeb3769b5 49 #define SSD1306_DISPLAYALLON 0xA5
modtronix-com 22:f63aeb3769b5 50 #define SSD1306_NORMALDISPLAY 0xA6
modtronix-com 22:f63aeb3769b5 51 #define SSD1306_INVERTDISPLAY 0xA7
modtronix-com 22:f63aeb3769b5 52 #define SSD1306_SETMULTIPLEX 0xA8
modtronix-com 22:f63aeb3769b5 53 #define SSD1306_DISPLAYOFF 0xAE
modtronix-com 22:f63aeb3769b5 54 #define SSD1306_DISPLAYON 0xAF
modtronix-com 22:f63aeb3769b5 55 #define SSD1306_SET_PAGE_START_ADR 0xB0 //Only used for "Page Address Mode"! Set Page start address(Reset=0)
modtronix-com 22:f63aeb3769b5 56 #define SSD1306_COMSCANINC 0xC0
modtronix-com 22:f63aeb3769b5 57 #define SSD1306_COMSCANDEC 0xC8
modtronix-com 22:f63aeb3769b5 58 #define SSD1306_SETDISPLAYOFFSET 0xD3
modtronix-com 22:f63aeb3769b5 59 #define SSD1306_SETDISPLAYCLOCKDIV 0xD5
modtronix-com 22:f63aeb3769b5 60 #define SSD1306_SETPRECHARGE 0xD9
modtronix-com 22:f63aeb3769b5 61 #define SSD1306_SETCOMPINS 0xDA
modtronix-com 22:f63aeb3769b5 62 #define SSD1306_SETVCOMDETECT 0xDB
modtronix-com 22:f63aeb3769b5 63
modtronix-com 22:f63aeb3769b5 64 uint8_t MxSSD1306::begin(uint8_t vccstate)
modtronix-com 22:f63aeb3769b5 65 {
modtronix-com 22:f63aeb3769b5 66 uint8_t retVal;
modtronix-com 22:f63aeb3769b5 67 #if (OLED_HAS_RESET==1)
modtronix-com 22:f63aeb3769b5 68 rst = 1;
modtronix-com 22:f63aeb3769b5 69 #endif
modtronix-com 22:f63aeb3769b5 70 // VDD (3.3V) goes high at start, lets just chill for a ms
modtronix-com 22:f63aeb3769b5 71 wait_ms(1);
modtronix-com 22:f63aeb3769b5 72 #if (OLED_HAS_RESET==1)
modtronix-com 22:f63aeb3769b5 73 // bring reset low
modtronix-com 22:f63aeb3769b5 74 rst = 0;
modtronix-com 22:f63aeb3769b5 75 #endif
modtronix-com 22:f63aeb3769b5 76 // wait 10ms
modtronix-com 22:f63aeb3769b5 77 wait_ms(10);
modtronix-com 22:f63aeb3769b5 78 #if (OLED_HAS_RESET==1)
modtronix-com 22:f63aeb3769b5 79 // bring out of reset
modtronix-com 22:f63aeb3769b5 80 rst = 1;
modtronix-com 22:f63aeb3769b5 81 #endif
modtronix-com 22:f63aeb3769b5 82 // turn on VCC (9V?)
modtronix-com 22:f63aeb3769b5 83
modtronix-com 22:f63aeb3769b5 84 if((retVal=command(SSD1306_DISPLAYOFF)) != 0) {
modtronix-com 22:f63aeb3769b5 85 return retVal; //Return error code
modtronix-com 22:f63aeb3769b5 86 }
modtronix-com 22:f63aeb3769b5 87 command(SSD1306_SETDISPLAYCLOCKDIV);
modtronix-com 22:f63aeb3769b5 88 command(0x80); // the suggested ratio 0x80
modtronix-com 22:f63aeb3769b5 89
modtronix-com 22:f63aeb3769b5 90 command(SSD1306_SETMULTIPLEX);
modtronix-com 22:f63aeb3769b5 91 command(_rawHeight-1);
modtronix-com 22:f63aeb3769b5 92
modtronix-com 22:f63aeb3769b5 93 command(SSD1306_SETDISPLAYOFFSET);
modtronix-com 22:f63aeb3769b5 94 command(0x0); // no offset
modtronix-com 22:f63aeb3769b5 95
modtronix-com 22:f63aeb3769b5 96 command(SSD1306_SETSTARTLINE | 0x0); // line #0
modtronix-com 22:f63aeb3769b5 97
modtronix-com 22:f63aeb3769b5 98 command(SSD1306_CHARGEPUMP);
modtronix-com 22:f63aeb3769b5 99 command((vccstate == SSD1306_EXTERNALVCC) ? 0x10 : 0x14);
modtronix-com 22:f63aeb3769b5 100
modtronix-com 22:f63aeb3769b5 101 command(SSD1306_MEMORYMODE); // Set for "Page addressing mode"
modtronix-com 22:f63aeb3769b5 102 command(0x02); // 2 = Page addressing mode
modtronix-com 22:f63aeb3769b5 103
modtronix-com 22:f63aeb3769b5 104 command(SSD1306_SEGREMAP | 0x1);
modtronix-com 22:f63aeb3769b5 105
modtronix-com 22:f63aeb3769b5 106 command(SSD1306_COMSCANDEC);
modtronix-com 22:f63aeb3769b5 107
modtronix-com 22:f63aeb3769b5 108 command(SSD1306_SETCOMPINS);
modtronix-com 22:f63aeb3769b5 109 command(_rawHeight == 32 ? 0x02 : 0x12); // TODO - calculate based on _rawHieght ?
modtronix-com 22:f63aeb3769b5 110
modtronix-com 22:f63aeb3769b5 111 command(SSD1306_SETCONTRAST);
modtronix-com 22:f63aeb3769b5 112 command(_rawHeight == 32 ? 0x8F : ((vccstate == SSD1306_EXTERNALVCC) ? 0x9F : 0xCF) );
modtronix-com 22:f63aeb3769b5 113
modtronix-com 22:f63aeb3769b5 114 command(SSD1306_SETPRECHARGE);
modtronix-com 22:f63aeb3769b5 115 command((vccstate == SSD1306_EXTERNALVCC) ? 0x22 : 0xF1);
modtronix-com 22:f63aeb3769b5 116
modtronix-com 22:f63aeb3769b5 117 command(SSD1306_SETVCOMDETECT);
modtronix-com 22:f63aeb3769b5 118 command(0x40);
modtronix-com 22:f63aeb3769b5 119
modtronix-com 22:f63aeb3769b5 120 command(SSD1306_DISABLE_SCROLLING);
modtronix-com 22:f63aeb3769b5 121
modtronix-com 22:f63aeb3769b5 122 command(SSD1306_DISPLAYALLON_RESUME);
modtronix-com 22:f63aeb3769b5 123
modtronix-com 22:f63aeb3769b5 124 command(SSD1306_NORMALDISPLAY);
modtronix-com 22:f63aeb3769b5 125
modtronix-com 22:f63aeb3769b5 126 if((retVal=command(SSD1306_DISPLAYON)) != 0) {
modtronix-com 22:f63aeb3769b5 127 return retVal; //Return error code
modtronix-com 22:f63aeb3769b5 128 }
modtronix-com 22:f63aeb3769b5 129 return 0; //Success
modtronix-com 22:f63aeb3769b5 130 }
modtronix-com 22:f63aeb3769b5 131
modtronix-com 22:f63aeb3769b5 132 // Set a single pixel
modtronix-com 22:f63aeb3769b5 133 void MxSSD1306::drawPixel(int16_t x, int16_t y, uint16_t color)
modtronix-com 22:f63aeb3769b5 134 {
modtronix-com 22:f63aeb3769b5 135 bool changed = false;
modtronix-com 22:f63aeb3769b5 136 uint8_t colMask;
modtronix-com 22:f63aeb3769b5 137 uint8_t mask;
modtronix-com 22:f63aeb3769b5 138 uint16_t bufAdr;
modtronix-com 22:f63aeb3769b5 139
modtronix-com 22:f63aeb3769b5 140 if ((x < 0) || (x >= width()) || (y < 0) || (y >= height()))
modtronix-com 22:f63aeb3769b5 141 return;
modtronix-com 22:f63aeb3769b5 142
modtronix-com 22:f63aeb3769b5 143 // check rotation, move pixel around if necessary
modtronix-com 22:f63aeb3769b5 144 switch (getRotation())
modtronix-com 22:f63aeb3769b5 145 {
modtronix-com 22:f63aeb3769b5 146 case 1:
modtronix-com 22:f63aeb3769b5 147 swap(x, y);
modtronix-com 22:f63aeb3769b5 148 x = _rawWidth - x - 1;
modtronix-com 22:f63aeb3769b5 149 break;
modtronix-com 22:f63aeb3769b5 150 case 2:
modtronix-com 22:f63aeb3769b5 151 x = _rawWidth - x - 1;
modtronix-com 22:f63aeb3769b5 152 y = _rawHeight - y - 1;
modtronix-com 22:f63aeb3769b5 153 break;
modtronix-com 22:f63aeb3769b5 154 case 3:
modtronix-com 22:f63aeb3769b5 155 swap(x, y);
modtronix-com 22:f63aeb3769b5 156 y = _rawHeight - y - 1;
modtronix-com 22:f63aeb3769b5 157 break;
modtronix-com 22:f63aeb3769b5 158 }
modtronix-com 22:f63aeb3769b5 159
modtronix-com 22:f63aeb3769b5 160 //Get address of byte in buffer
modtronix-com 22:f63aeb3769b5 161 bufAdr = x+ ((y/8)*_rawWidth);
modtronix-com 22:f63aeb3769b5 162
modtronix-com 22:f63aeb3769b5 163 mask = 0x01 << (y%8);
modtronix-com 22:f63aeb3769b5 164
modtronix-com 22:f63aeb3769b5 165 // x is which column
modtronix-com 22:f63aeb3769b5 166 if (color == WHITE) {
modtronix-com 22:f63aeb3769b5 167 //If bit changed
modtronix-com 22:f63aeb3769b5 168 if((buffer[bufAdr]&mask) == 0) {
modtronix-com 22:f63aeb3769b5 169 buffer[bufAdr] |= mask; //Set bit
modtronix-com 22:f63aeb3769b5 170 changed = true;
modtronix-com 22:f63aeb3769b5 171 }
modtronix-com 22:f63aeb3769b5 172 }
modtronix-com 22:f63aeb3769b5 173 // else black
modtronix-com 22:f63aeb3769b5 174 else {
modtronix-com 22:f63aeb3769b5 175 //If bit changed
modtronix-com 22:f63aeb3769b5 176 if((buffer[bufAdr]&mask) != 0) {
modtronix-com 22:f63aeb3769b5 177 buffer[bufAdr] &= ~mask; //Clear bit
modtronix-com 22:f63aeb3769b5 178 changed = true;
modtronix-com 22:f63aeb3769b5 179 }
modtronix-com 22:f63aeb3769b5 180 }
modtronix-com 22:f63aeb3769b5 181
modtronix-com 22:f63aeb3769b5 182 //Set dirty bit IF CHANGED. Each dirty[] element contains dirty bits for 8 rows(y/8).
modtronix-com 22:f63aeb3769b5 183 //Each bit is for 16 columns(x/16). For example:
modtronix-com 22:f63aeb3769b5 184 // - bit 0 of dirty[0] will be "Rows 0-7, and Columns 0-15"
modtronix-com 22:f63aeb3769b5 185 // - bit 1 of dirty[0] will be "Rows 0-7, and Columns 16-31"
modtronix-com 22:f63aeb3769b5 186 // - bit 7 of dirty[0] will be "Rows 0-7, and Columns 112-127"
modtronix-com 22:f63aeb3769b5 187 // - bit 0 of dirty[1] will be "Rows 8-15, and Columns 0-15"
modtronix-com 22:f63aeb3769b5 188 if(changed) {
modtronix-com 22:f63aeb3769b5 189 colMask = 0x01 << (x/16);
modtronix-com 22:f63aeb3769b5 190 dirty[y/8] = dirty[y/8] | colMask; //Set the dirty bit
modtronix-com 22:f63aeb3769b5 191 }
modtronix-com 22:f63aeb3769b5 192 }
modtronix-com 22:f63aeb3769b5 193
modtronix-com 22:f63aeb3769b5 194 /** Set display contrast
modtronix-com 22:f63aeb3769b5 195 * @return 0 if success, else I2C or SPI error code
modtronix-com 22:f63aeb3769b5 196 */
modtronix-com 22:f63aeb3769b5 197 uint8_t MxSSD1306::setContrast(uint8_t contrast) {
modtronix-com 22:f63aeb3769b5 198 uint8_t retVal;
modtronix-com 22:f63aeb3769b5 199 if((retVal=command(SSD1306_SETCONTRAST)) != 0) {
modtronix-com 22:f63aeb3769b5 200 return retVal;
modtronix-com 22:f63aeb3769b5 201 }
modtronix-com 22:f63aeb3769b5 202 return command(contrast);
modtronix-com 22:f63aeb3769b5 203 }
modtronix-com 22:f63aeb3769b5 204
modtronix-com 22:f63aeb3769b5 205 /** Turn display on or off
modtronix-com 22:f63aeb3769b5 206 * @return 0 if success, else I2C or SPI error code
modtronix-com 22:f63aeb3769b5 207 */
modtronix-com 22:f63aeb3769b5 208 uint8_t MxSSD1306::displayOn(bool on) {
modtronix-com 22:f63aeb3769b5 209 return command(on ? SSD1306_DISPLAYON : SSD1306_DISPLAYOFF);
modtronix-com 22:f63aeb3769b5 210 }
modtronix-com 22:f63aeb3769b5 211
modtronix-com 22:f63aeb3769b5 212 uint8_t MxSSD1306::invertDisplay(bool i)
modtronix-com 22:f63aeb3769b5 213 {
modtronix-com 22:f63aeb3769b5 214 return command(i ? SSD1306_INVERTDISPLAY : SSD1306_NORMALDISPLAY);
modtronix-com 22:f63aeb3769b5 215 }
modtronix-com 22:f63aeb3769b5 216
modtronix-com 22:f63aeb3769b5 217 /** Send the display buffer out to the display
modtronix-com 22:f63aeb3769b5 218 * @return 0 if success, else I2C or SPI error code
modtronix-com 22:f63aeb3769b5 219 */
modtronix-com 22:f63aeb3769b5 220 uint8_t MxSSD1306::display(void)
modtronix-com 22:f63aeb3769b5 221 {
modtronix-com 22:f63aeb3769b5 222 uint8_t retVal;
modtronix-com 22:f63aeb3769b5 223 static uint8_t oldColBlock = 0xfe; //Do NOT use 0xff, seeing that is incremented by 1 below for test!
modtronix-com 22:f63aeb3769b5 224 static uint8_t oldRowBlock = 0xfe;
modtronix-com 22:f63aeb3769b5 225
modtronix-com 22:f63aeb3769b5 226 // Page Address Mode //////////////////////////////////////////////////////
modtronix-com 22:f63aeb3769b5 227 // Set "Page Address Mode". This mode requires SSD1306_SETLOWCOLUMN, SSD1306_SETHIGHCOLUMN and
modtronix-com 22:f63aeb3769b5 228 // Only do this after setAllDirty() is called, which sets rowBlock to 0xf0
modtronix-com 22:f63aeb3769b5 229 if(rowBlock==0xf0) {
modtronix-com 22:f63aeb3769b5 230 rowBlock = 0;
modtronix-com 22:f63aeb3769b5 231 if ((retVal=command(SSD1306_MEMORYMODE)) != 0) {return retVal;} //Set "Page Address Mode"
modtronix-com 22:f63aeb3769b5 232 if ((retVal=command(2)) != 0) {return retVal;}
modtronix-com 22:f63aeb3769b5 233 oldColBlock = oldRowBlock = 0xfe; //Cause column and row command to be sent to OLED again
modtronix-com 22:f63aeb3769b5 234 }
modtronix-com 22:f63aeb3769b5 235
modtronix-com 22:f63aeb3769b5 236 //dirty is array of 8 x uint8_t elements
modtronix-com 22:f63aeb3769b5 237 #if ((OLED_WIDTH == 128 ) && (OLED_HEIGHT==64))
modtronix-com 22:f63aeb3769b5 238 uint8_t colMask; //Width is 128 or less. Required 8 bits or less for colMask. Each bit = 16 columns. 8 bits = 128 columns.
modtronix-com 22:f63aeb3769b5 239 uint32_t * pDirty = (uint32_t*)&dirty[0];
modtronix-com 22:f63aeb3769b5 240 //Nothing to do
modtronix-com 22:f63aeb3769b5 241 if ((pDirty[0]==0) && (pDirty[1]==0)) {
modtronix-com 22:f63aeb3769b5 242 colBlock = rowBlock = 0; //Reset
modtronix-com 22:f63aeb3769b5 243 return 0; //Return OK
modtronix-com 22:f63aeb3769b5 244 }
modtronix-com 22:f63aeb3769b5 245
modtronix-com 22:f63aeb3769b5 246 #elif (OLED_WIDTH <= 256 )
modtronix-com 22:f63aeb3769b5 247 uint16_t colMask; //Width is 256 or less. Required 16 bits or less for colMask. Each bit = 16 columns. 16 bits = 256 columns.
modtronix-com 22:f63aeb3769b5 248 bool isDirty = false;
modtronix-com 22:f63aeb3769b5 249 for(int iDirty=0; iDirty<(OLED_HEIGHT/8); iDirty++) {
modtronix-com 22:f63aeb3769b5 250 if(dirty[iDirty] != 0) {
modtronix-com 22:f63aeb3769b5 251 isDirty=true;
modtronix-com 22:f63aeb3769b5 252 break;
modtronix-com 22:f63aeb3769b5 253 }
modtronix-com 22:f63aeb3769b5 254 }
modtronix-com 22:f63aeb3769b5 255 //Nothing to do
modtronix-com 22:f63aeb3769b5 256 if (isDirty == false) {
modtronix-com 22:f63aeb3769b5 257 colBlock = rowBlock = 0; //Reset
modtronix-com 22:f63aeb3769b5 258 return 0; //Return OK
modtronix-com 22:f63aeb3769b5 259 }
modtronix-com 22:f63aeb3769b5 260 #else
modtronix-com 22:f63aeb3769b5 261 #error "OLED width and height not supported yet!"
modtronix-com 22:f63aeb3769b5 262 #endif
modtronix-com 22:f63aeb3769b5 263
modtronix-com 22:f63aeb3769b5 264 //Find dirty block!
modtronix-com 22:f63aeb3769b5 265 //Check if current block of display data is dirty. Each dirty[] element contains bits for whole
modtronix-com 22:f63aeb3769b5 266 //row(all columns). Each bit of dirty = 16 columns. For example:
modtronix-com 22:f63aeb3769b5 267 // - bit 0 of dirty[0] will be "Rows 0-7, and Columns 0-15"
modtronix-com 22:f63aeb3769b5 268 // - bit 1 of dirty[0] will be "Rows 0-7, and Columns 16-31"
modtronix-com 22:f63aeb3769b5 269 // - bit 7 of dirty[0] will be "Rows 0-7, and Columns 112-127"
modtronix-com 22:f63aeb3769b5 270 // - bit 0 of dirty[1] will be "Rows 8-15, and Columns 0-15"
modtronix-com 22:f63aeb3769b5 271 while(1) {
modtronix-com 22:f63aeb3769b5 272 colMask = 0x01 << colBlock; //Get current column
modtronix-com 22:f63aeb3769b5 273 //Found the dirty bit, break!
modtronix-com 22:f63aeb3769b5 274 if((dirty[rowBlock] & colMask) != 0) {
modtronix-com 22:f63aeb3769b5 275 //Clear the dirty bit
modtronix-com 22:f63aeb3769b5 276 dirty[rowBlock] = dirty[rowBlock] & (~colMask);
modtronix-com 22:f63aeb3769b5 277 break;
modtronix-com 22:f63aeb3769b5 278 }
modtronix-com 22:f63aeb3769b5 279 //Increment colBlock and rowBlock
modtronix-com 22:f63aeb3769b5 280 if (++colBlock >= (OLED_WIDTH/16)) {
modtronix-com 22:f63aeb3769b5 281 colBlock = 0;
modtronix-com 22:f63aeb3769b5 282 rowBlock = (rowBlock+1) % (OLED_HEIGHT/8);
modtronix-com 22:f63aeb3769b5 283 }
modtronix-com 22:f63aeb3769b5 284 }
modtronix-com 22:f63aeb3769b5 285
modtronix-com 22:f63aeb3769b5 286 MX_DEBUG("\r\nOLED.display %d,%d", rowBlock, colBlock);
modtronix-com 22:f63aeb3769b5 287
modtronix-com 22:f63aeb3769b5 288 //Set "Current Page" - Required by "Page Addressing Mode" (Page is NOT auto incremented in "Page Mode")
modtronix-com 22:f63aeb3769b5 289 if (rowBlock != oldRowBlock) {
modtronix-com 22:f63aeb3769b5 290 oldRowBlock = rowBlock;
modtronix-com 22:f63aeb3769b5 291 // Set current Page. Each page = 8 rows
modtronix-com 22:f63aeb3769b5 292 if ((retVal=command(SSD1306_SET_PAGE_START_ADR | rowBlock)) != 0) {return retVal;}
modtronix-com 22:f63aeb3769b5 293 }
modtronix-com 22:f63aeb3769b5 294
modtronix-com 22:f63aeb3769b5 295 //Set "Current Column" - Required by "Page Addressing Mode"
modtronix-com 22:f63aeb3769b5 296 //Not required if last written colBlock was previous one. In that case, will automatically increments (columns are auto incremented in "Page Mode")
modtronix-com 22:f63aeb3769b5 297 if (colBlock != (oldColBlock+1)) {
modtronix-com 22:f63aeb3769b5 298 uint8_t column = colBlock * 16;
modtronix-com 22:f63aeb3769b5 299 // Column Low nibble (bits 0-3) = 0
modtronix-com 22:f63aeb3769b5 300 if ((retVal=command(SSD1306_SETLOWCOLUMN | (column & 0x0f))) != 0) {return retVal;}
modtronix-com 22:f63aeb3769b5 301 // Column High nibble (bits 4-7) = 0
modtronix-com 22:f63aeb3769b5 302 if ((retVal=command(SSD1306_SETHIGHCOLUMN | ((column>>4) & 0x0f))) != 0) {return retVal;}
modtronix-com 22:f63aeb3769b5 303 }
modtronix-com 22:f63aeb3769b5 304 oldColBlock = colBlock;
modtronix-com 22:f63aeb3769b5 305
modtronix-com 22:f63aeb3769b5 306 if ((retVal=sendDisplayBuffer(rowBlock, colBlock)) != 0) {
modtronix-com 22:f63aeb3769b5 307 return retVal; //Return error
modtronix-com 22:f63aeb3769b5 308 }
modtronix-com 22:f63aeb3769b5 309
modtronix-com 22:f63aeb3769b5 310 return 0; //Success
modtronix-com 22:f63aeb3769b5 311
modtronix-com 22:f63aeb3769b5 312 //----- Alternative Method -----
modtronix-com 22:f63aeb3769b5 313 //If used, MUST ALSO update begin() function to initialize with "Horizontal Address Mode"
modtronix-com 22:f63aeb3769b5 314 // // Horizontal Address Mode ////////////////////////////////////////////////
modtronix-com 22:f63aeb3769b5 315 // //Set "Horizontal Address Mode". This mode requires SSD1306_SET_COLUMN_ADR and SSD1306_SET_PAGE_ADR
modtronix-com 22:f63aeb3769b5 316 // //commands to set start/stop column & page
modtronix-com 22:f63aeb3769b5 317 // if ((retVal=command(SSD1306_MEMORYMODE)) != 0) {return retVal;} //Set "Horizontal Address Mode"
modtronix-com 22:f63aeb3769b5 318 // if ((retVal=command(0)) != 0) {return retVal;}
modtronix-com 22:f63aeb3769b5 319 //
modtronix-com 22:f63aeb3769b5 320 // //Set column Start and End, used for "Horizontal Address Mode".
modtronix-com 22:f63aeb3769b5 321 // if ((retVal=command(SSD1306_SET_COLUMN_ADR)) != 0) {return retVal;}
modtronix-com 22:f63aeb3769b5 322 // if ((retVal=command(0)) != 0) {return retVal;} //Column 0 - first column
modtronix-com 22:f63aeb3769b5 323 // if ((retVal=command(127)) != 0) {return retVal;} //Column 7 - last column
modtronix-com 22:f63aeb3769b5 324 //
modtronix-com 22:f63aeb3769b5 325 // //Set page Start and End, used for "Horizontal Address Mode".
modtronix-com 22:f63aeb3769b5 326 // if ((retVal=command(SSD1306_SET_PAGE_ADR)) != 0) {return retVal;}
modtronix-com 22:f63aeb3769b5 327 // if ((retVal=command(0)) != 0) {return retVal;} //Page 0 - first page
modtronix-com 22:f63aeb3769b5 328 // if ((retVal=command(7)) != 0) {return retVal;} //Page 7 - last page
modtronix-com 22:f63aeb3769b5 329 //
modtronix-com 22:f63aeb3769b5 330 // for(rowBlock=0; rowBlock<8; rowBlock++) {
modtronix-com 22:f63aeb3769b5 331 // for(colBlock=0; colBlock<8; colBlock++) {
modtronix-com 22:f63aeb3769b5 332 // if ((retVal=sendDisplayBuffer(rowBlock, colBlock)) != 0) {
modtronix-com 22:f63aeb3769b5 333 // return retVal; //Return error
modtronix-com 22:f63aeb3769b5 334 // }
modtronix-com 22:f63aeb3769b5 335 // }
modtronix-com 22:f63aeb3769b5 336 // }
modtronix-com 22:f63aeb3769b5 337 }
modtronix-com 22:f63aeb3769b5 338
modtronix-com 22:f63aeb3769b5 339
modtronix-com 22:f63aeb3769b5 340 void MxSSD1306::clearDisplay(void)
modtronix-com 22:f63aeb3769b5 341 {
modtronix-com 22:f63aeb3769b5 342 setAllDirty(); //Set whole display as dirty
modtronix-com 22:f63aeb3769b5 343
modtronix-com 23:44309099c532 344 #if (OLED_USE_VECTOR==0)
modtronix-com 22:f63aeb3769b5 345 for(uint i=0; i<sizeof(buffer); i++) {
modtronix-com 22:f63aeb3769b5 346 buffer[i] = 0;
modtronix-com 22:f63aeb3769b5 347 }
modtronix-com 22:f63aeb3769b5 348 #else
modtronix-com 22:f63aeb3769b5 349 std::fill(buffer.begin(),buffer.end(),0);
modtronix-com 22:f63aeb3769b5 350 #endif
modtronix-com 22:f63aeb3769b5 351 }
modtronix-com 22:f63aeb3769b5 352
modtronix-com 22:f63aeb3769b5 353 // Set whole display as being dirty
modtronix-com 22:f63aeb3769b5 354 void MxSSD1306::setAllDirty(void) {
modtronix-com 22:f63aeb3769b5 355 colBlock = 0;
modtronix-com 22:f63aeb3769b5 356 rowBlock = 0xf0; //Mark with 0xf0 so SSD1306_MEMORYMODE command is sent again in display() function
modtronix-com 22:f63aeb3769b5 357 //Set whole display as Dirty
modtronix-com 22:f63aeb3769b5 358 #if (OLED_WIDTH == 128) //Each entry of dirty[] is a UINT8, and each bit is 16 columns
modtronix-com 22:f63aeb3769b5 359 memset(&dirty[0], 0xff, sizeof(dirty)); //Test - make ALL dirty
modtronix-com 22:f63aeb3769b5 360 #elif (OLED_WIDTH == 256) //Each entry of dirty[] is a UINT16, and each bit is 16 columns
modtronix-com 22:f63aeb3769b5 361 memset(&dirty[0], 0xff, sizeof(dirty)); //Test - make ALL dirty
modtronix-com 22:f63aeb3769b5 362 #else
modtronix-com 22:f63aeb3769b5 363 #error "setAllDirty() does not support current screen width"
modtronix-com 22:f63aeb3769b5 364 #endif
modtronix-com 22:f63aeb3769b5 365 }
modtronix-com 22:f63aeb3769b5 366
modtronix-com 22:f63aeb3769b5 367
modtronix-com 22:f63aeb3769b5 368 void MxSSD1306::splash(void)
modtronix-com 22:f63aeb3769b5 369 {
modtronix-com 23:44309099c532 370 #if (OLED_HAS_SPLASH==1)
modtronix-com 22:f63aeb3769b5 371 uint8_t adaFruitLogo[64 * 128 / 8] =
modtronix-com 22:f63aeb3769b5 372 {
modtronix-com 22:f63aeb3769b5 373 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 374 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 375 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 376 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
modtronix-com 22:f63aeb3769b5 377 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 378 0x00, 0x80, 0x80, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 379 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 380 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 381 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 382 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xF8, 0xE0, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 383 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
modtronix-com 22:f63aeb3769b5 384 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0xFF,
modtronix-com 22:f63aeb3769b5 385 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 386 0x80, 0xFF, 0xFF, 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80,
modtronix-com 22:f63aeb3769b5 387 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x8C, 0x8E, 0x84, 0x00, 0x00, 0x80, 0xF8,
modtronix-com 22:f63aeb3769b5 388 0xF8, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 389 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0x80,
modtronix-com 22:f63aeb3769b5 390 0x00, 0xE0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 391 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xC7, 0x01, 0x01,
modtronix-com 22:f63aeb3769b5 392 0x01, 0x01, 0x83, 0xFF, 0xFF, 0x00, 0x00, 0x7C, 0xFE, 0xC7, 0x01, 0x01, 0x01, 0x01, 0x83, 0xFF,
modtronix-com 22:f63aeb3769b5 393 0xFF, 0xFF, 0x00, 0x38, 0xFE, 0xC7, 0x83, 0x01, 0x01, 0x01, 0x83, 0xC7, 0xFF, 0xFF, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 394 0x01, 0xFF, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0xFF, 0x07, 0x01, 0x01, 0x01, 0x00, 0x00, 0x7F, 0xFF,
modtronix-com 22:f63aeb3769b5 395 0x80, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0xFF,
modtronix-com 22:f63aeb3769b5 396 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 397 0x03, 0x0F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC7, 0xC7, 0x8F,
modtronix-com 22:f63aeb3769b5 398 0x8F, 0x9F, 0xBF, 0xFF, 0xFF, 0xC3, 0xC0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0xFC,
modtronix-com 22:f63aeb3769b5 399 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF0, 0xF0, 0xE0, 0xC0, 0x00, 0x01, 0x03, 0x03, 0x03,
modtronix-com 22:f63aeb3769b5 400 0x03, 0x03, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01,
modtronix-com 22:f63aeb3769b5 401 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 402 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
modtronix-com 22:f63aeb3769b5 403 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x03,
modtronix-com 22:f63aeb3769b5 404 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 405 // 128x32^^^ 128x64vvv
modtronix-com 22:f63aeb3769b5 406 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x0F,
modtronix-com 22:f63aeb3769b5 407 0x87, 0xC7, 0xF7, 0xFF, 0xFF, 0x1F, 0x1F, 0x3D, 0xFC, 0xF8, 0xF8, 0xF8, 0xF8, 0x7C, 0x7D, 0xFF,
modtronix-com 22:f63aeb3769b5 408 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x0F, 0x07, 0x00, 0x30, 0x30, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 409 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 410 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 411 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC0, 0x00,
modtronix-com 22:f63aeb3769b5 412 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 413 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 414 0x00, 0xC0, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x3F, 0x1F,
modtronix-com 22:f63aeb3769b5 415 0x0F, 0x07, 0x1F, 0x7F, 0xFF, 0xFF, 0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0xE0,
modtronix-com 22:f63aeb3769b5 416 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 417 0x00, 0xFC, 0xFE, 0xFC, 0x0C, 0x06, 0x06, 0x0E, 0xFC, 0xF8, 0x00, 0x00, 0xF0, 0xF8, 0x1C, 0x0E,
modtronix-com 22:f63aeb3769b5 418 0x06, 0x06, 0x06, 0x0C, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFC,
modtronix-com 22:f63aeb3769b5 419 0xFE, 0xFC, 0x00, 0x18, 0x3C, 0x7E, 0x66, 0xE6, 0xCE, 0x84, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0x06,
modtronix-com 22:f63aeb3769b5 420 0x06, 0xFC, 0xFE, 0xFC, 0x0C, 0x06, 0x06, 0x06, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0xC0, 0xF8,
modtronix-com 22:f63aeb3769b5 421 0xFC, 0x4E, 0x46, 0x46, 0x46, 0x4E, 0x7C, 0x78, 0x40, 0x18, 0x3C, 0x76, 0xE6, 0xCE, 0xCC, 0x80,
modtronix-com 22:f63aeb3769b5 422 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 423 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0F, 0x1F, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x0F, 0x03,
modtronix-com 22:f63aeb3769b5 424 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 425 0x00, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x03, 0x07, 0x0E, 0x0C,
modtronix-com 22:f63aeb3769b5 426 0x18, 0x18, 0x0C, 0x06, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x01, 0x0F, 0x0E, 0x0C, 0x18, 0x0C, 0x0F,
modtronix-com 22:f63aeb3769b5 427 0x07, 0x01, 0x00, 0x04, 0x0E, 0x0C, 0x18, 0x0C, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00,
modtronix-com 22:f63aeb3769b5 428 0x00, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x07,
modtronix-com 22:f63aeb3769b5 429 0x07, 0x0C, 0x0C, 0x18, 0x1C, 0x0C, 0x06, 0x06, 0x00, 0x04, 0x0E, 0x0C, 0x18, 0x0C, 0x0F, 0x07,
modtronix-com 22:f63aeb3769b5 430 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 431 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 432 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 433 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 434 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 435 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 436 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
modtronix-com 22:f63aeb3769b5 437 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
modtronix-com 22:f63aeb3769b5 438 };
modtronix-com 22:f63aeb3769b5 439
modtronix-com 22:f63aeb3769b5 440 setAllDirty(); //Set whole display as dirty
modtronix-com 22:f63aeb3769b5 441
modtronix-com 23:44309099c532 442 #if (OLED_USE_VECTOR==0)
modtronix-com 22:f63aeb3769b5 443 memcpy(&buffer[0], &adaFruitLogo[0], sizeof(adaFruitLogo));
modtronix-com 22:f63aeb3769b5 444 #else
modtronix-com 22:f63aeb3769b5 445 std::copy(
modtronix-com 22:f63aeb3769b5 446 &adaFruitLogo[0]
modtronix-com 22:f63aeb3769b5 447 , &adaFruitLogo[0] + (_rawHeight == 32 ? sizeof(adaFruitLogo)/2 : sizeof(adaFruitLogo))
modtronix-com 22:f63aeb3769b5 448 , buffer.begin()
modtronix-com 22:f63aeb3769b5 449 );
modtronix-com 22:f63aeb3769b5 450 #endif
modtronix-com 22:f63aeb3769b5 451 #endif
modtronix-com 22:f63aeb3769b5 452 }