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 |