From be6562a22335b85e9904c0f7cc748943c9e809a7 Mon Sep 17 00:00:00 2001 From: Thomas Baart Date: Sun, 3 Nov 2019 23:34:47 +0100 Subject: 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 --- drivers/oled/oled_driver.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'drivers/oled/oled_driver.c') 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 -- cgit v1.2.3