diff options
| author | Gautham Yerroju <gautham.yerroju@gmail.com> | 2020-07-15 22:48:04 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-16 15:48:04 +1000 |
| commit | 92d0a71af71973ac3f80398ed4f7f61dd97733b3 (patch) | |
| tree | db3eaf53df756a728633581968f72a026af0074c | |
| parent | 08b405e1e93fbd1aa9aa061ce4ee271b6ac9e60c (diff) | |
| download | qmk_firmware-92d0a71af71973ac3f80398ed4f7f61dd97733b3.tar.gz qmk_firmware-92d0a71af71973ac3f80398ed4f7f61dd97733b3.zip | |
OLED driver function to set pixels (#9713)
* Add a function to set individual pixels
* Add documentation for oled_write_pixel
* use smaller data type for oled_write_pixel
* Fix boundary check edge case
* Update oled_write_pixel doc
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
| -rw-r--r-- | docs/feature_oled_driver.md | 4 | ||||
| -rw-r--r-- | drivers/oled/oled_driver.c | 13 | ||||
| -rw-r--r-- | drivers/oled/oled_driver.h | 4 |
3 files changed, 21 insertions, 0 deletions
diff --git a/docs/feature_oled_driver.md b/docs/feature_oled_driver.md index 772ce57bd..5f3095198 100644 --- a/docs/feature_oled_driver.md +++ b/docs/feature_oled_driver.md | |||
| @@ -247,6 +247,10 @@ void oled_write_raw_byte(const char data, uint16_t index); | |||
| 247 | // Writes a PROGMEM string to the buffer at current cursor position | 247 | // Writes a PROGMEM string to the buffer at current cursor position |
| 248 | void oled_write_raw_P(const char *data, uint16_t size); | 248 | void oled_write_raw_P(const char *data, uint16_t size); |
| 249 | 249 | ||
| 250 | // Sets a specific pixel on or off | ||
| 251 | // Coordinates start at top-left and go right and down for positive x and y | ||
| 252 | void oled_write_pixel(uint8_t x, uint8_t y, bool on); | ||
| 253 | |||
| 250 | // Can be used to manually turn on the screen if it is off | 254 | // Can be used to manually turn on the screen if it is off |
| 251 | // Returns true if the screen was on or turns on | 255 | // Returns true if the screen was on or turns on |
| 252 | bool oled_on(void); | 256 | bool oled_on(void); |
diff --git a/drivers/oled/oled_driver.c b/drivers/oled/oled_driver.c index eedaedcd3..977b70178 100644 --- a/drivers/oled/oled_driver.c +++ b/drivers/oled/oled_driver.c | |||
| @@ -462,6 +462,19 @@ void oled_write_raw(const char *data, uint16_t size) { | |||
| 462 | } | 462 | } |
| 463 | } | 463 | } |
| 464 | 464 | ||
| 465 | void oled_write_pixel(uint8_t x, uint8_t y, bool on) { | ||
| 466 | if (x >= OLED_DISPLAY_WIDTH || y >= OLED_DISPLAY_HEIGHT) { | ||
| 467 | return; | ||
| 468 | } | ||
| 469 | uint16_t index = x + (y / 8) * OLED_DISPLAY_WIDTH; | ||
| 470 | if (on) { | ||
| 471 | oled_buffer[index] |= (1 << (y % 8)); | ||
| 472 | } else { | ||
| 473 | oled_buffer[index] &= ~(1 << (y % 8)); | ||
| 474 | } | ||
| 475 | oled_dirty |= (1 << (index / OLED_BLOCK_SIZE)); | ||
| 476 | } | ||
| 477 | |||
| 465 | #if defined(__AVR__) | 478 | #if defined(__AVR__) |
| 466 | void oled_write_P(const char *data, bool invert) { | 479 | void oled_write_P(const char *data, bool invert) { |
| 467 | uint8_t c = pgm_read_byte(data); | 480 | uint8_t c = pgm_read_byte(data); |
diff --git a/drivers/oled/oled_driver.h b/drivers/oled/oled_driver.h index 3e5a5bcab..af6e5a2b6 100644 --- a/drivers/oled/oled_driver.h +++ b/drivers/oled/oled_driver.h | |||
| @@ -206,6 +206,10 @@ void oled_pan(bool left); | |||
| 206 | void oled_write_raw(const char *data, uint16_t size); | 206 | void oled_write_raw(const char *data, uint16_t size); |
| 207 | void oled_write_raw_byte(const char data, uint16_t index); | 207 | void oled_write_raw_byte(const char data, uint16_t index); |
| 208 | 208 | ||
| 209 | // Sets a specific pixel on or off | ||
| 210 | // Coordinates start at top-left and go right and down for positive x and y | ||
| 211 | void oled_write_pixel(uint8_t x, uint8_t y, bool on); | ||
| 212 | |||
| 209 | #if defined(__AVR__) | 213 | #if defined(__AVR__) |
| 210 | // Writes a PROGMEM string to the buffer at current cursor position | 214 | // Writes a PROGMEM string to the buffer at current cursor position |
| 211 | // Advances the cursor while writing, inverts the pixels if true | 215 | // Advances the cursor while writing, inverts the pixels if true |
