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 /drivers/oled/oled_driver.c | |
parent | 08b405e1e93fbd1aa9aa061ce4ee271b6ac9e60c (diff) |
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>
Diffstat (limited to 'drivers/oled/oled_driver.c')
-rw-r--r-- | drivers/oled/oled_driver.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/oled/oled_driver.c b/drivers/oled/oled_driver.c index eedaedcd36..977b701783 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) { } } +void oled_write_pixel(uint8_t x, uint8_t y, bool on) { + if (x >= OLED_DISPLAY_WIDTH || y >= OLED_DISPLAY_HEIGHT) { + return; + } + uint16_t index = x + (y / 8) * OLED_DISPLAY_WIDTH; + if (on) { + oled_buffer[index] |= (1 << (y % 8)); + } else { + oled_buffer[index] &= ~(1 << (y % 8)); + } + oled_dirty |= (1 << (index / OLED_BLOCK_SIZE)); +} + #if defined(__AVR__) void oled_write_P(const char *data, bool invert) { uint8_t c = pgm_read_byte(data); |