diff options
author | Thomas Baart <thomas@splitkb.com> | 2019-11-03 23:34:47 +0100 |
---|---|---|
committer | Drashna Jaelre <drashna@live.com> | 2019-11-03 14:34:47 -0800 |
commit | be6562a22335b85e9904c0f7cc748943c9e809a7 (patch) | |
tree | fc1036ab54253a0c2c66c8ca12a2f6490f0d5b8a /drivers/oled | |
parent | 732d1dd4f6f9ec060b4b8332309c82ebb6c3ca25 (diff) | |
download | qmk_firmware-be6562a22335b85e9904c0f7cc748943c9e809a7.tar.gz qmk_firmware-be6562a22335b85e9904c0f7cc748943c9e809a7.zip |
Adds raw write functions to the OLED driver (#7237)
* Added oled_write_raw and oled_write_raw_P functions to the OLED driver
* Added oled_write_raw method calls to feature_oled_driver.md
Diffstat (limited to 'drivers/oled')
-rw-r--r-- | drivers/oled/oled_driver.c | 21 | ||||
-rw-r--r-- | drivers/oled/oled_driver.h | 6 |
2 files changed, 25 insertions, 2 deletions
diff --git a/drivers/oled/oled_driver.c b/drivers/oled/oled_driver.c index 72960cca4c..f20f4629aa 100644 --- a/drivers/oled/oled_driver.c +++ b/drivers/oled/oled_driver.c @@ -431,6 +431,15 @@ void oled_write_ln(const char *data, bool invert) { oled_advance_page(true); } +void oled_write_raw(const char *data, uint16_t size) { + if (size > OLED_MATRIX_SIZE) size = OLED_MATRIX_SIZE; + for (uint16_t i = 0; i < size; i++) { + if (oled_buffer[i] == data[i]) continue; + oled_buffer[i] = data[i]; + oled_dirty |= (1 << (i / OLED_BLOCK_SIZE)); + } +} + #if defined(__AVR__) void oled_write_P(const char *data, bool invert) { uint8_t c = pgm_read_byte(data); @@ -444,6 +453,16 @@ void oled_write_ln_P(const char *data, bool invert) { oled_write_P(data, invert); oled_advance_page(true); } + +void oled_write_raw_P(const char *data, uint16_t size) { + if (size > OLED_MATRIX_SIZE) size = OLED_MATRIX_SIZE; + for (uint16_t i = 0; i < size; i++) { + uint8_t c = pgm_read_byte(++data); + if (oled_buffer[i] == c) continue; + oled_buffer[i] = c; + oled_dirty |= (1 << (i / OLED_BLOCK_SIZE)); + } +} #endif // defined(__AVR__) bool oled_on(void) { @@ -566,4 +585,4 @@ void oled_task(void) { #endif } -__attribute__((weak)) void oled_task_user(void) {} +__attribute__((weak)) void oled_task_user(void) {}
\ No newline at end of file diff --git a/drivers/oled/oled_driver.h b/drivers/oled/oled_driver.h index ac8a1c7651..bba6a7a129 100644 --- a/drivers/oled/oled_driver.h +++ b/drivers/oled/oled_driver.h @@ -200,6 +200,8 @@ void oled_write(const char *data, bool invert); // Advances the cursor to the next page, wiring ' ' to the remainder of the current page void oled_write_ln(const char *data, bool invert); +void oled_write_raw(const char *data, uint16_t size); + #if defined(__AVR__) // Writes a PROGMEM string to the buffer at current cursor position // Advances the cursor while writing, inverts the pixels if true @@ -211,6 +213,8 @@ void oled_write_P(const char *data, bool invert); // Advances the cursor to the next page, wiring ' ' to the remainder of the current page // Remapped to call 'void oled_write_ln(const char *data, bool invert);' on ARM void oled_write_ln_P(const char *data, bool invert); + +void oled_write_raw_P(const char *data, uint16_t size); #else // Writes a string to the buffer at current cursor position // Advances the cursor while writing, inverts the pixels if true @@ -254,4 +258,4 @@ bool oled_scroll_off(void); uint8_t oled_max_chars(void); // Returns the maximum number of lines that will fit on the oled -uint8_t oled_max_lines(void); +uint8_t oled_max_lines(void);
\ No newline at end of file |