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
mx_ssd1306.cpp@23:44309099c532, 2015-10-21 (annotated)
- 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?
User | Revision | Line number | New 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 | } |