diff options
Diffstat (limited to 'drivers/oled/oled_driver.c')
-rw-r--r-- | drivers/oled/oled_driver.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/drivers/oled/oled_driver.c b/drivers/oled/oled_driver.c index 72960cca4..f20f4629a 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) { | |||
431 | oled_advance_page(true); | 431 | oled_advance_page(true); |
432 | } | 432 | } |
433 | 433 | ||
434 | void oled_write_raw(const char *data, uint16_t size) { | ||
435 | if (size > OLED_MATRIX_SIZE) size = OLED_MATRIX_SIZE; | ||
436 | for (uint16_t i = 0; i < size; i++) { | ||
437 | if (oled_buffer[i] == data[i]) continue; | ||
438 | oled_buffer[i] = data[i]; | ||
439 | oled_dirty |= (1 << (i / OLED_BLOCK_SIZE)); | ||
440 | } | ||
441 | } | ||
442 | |||
434 | #if defined(__AVR__) | 443 | #if defined(__AVR__) |
435 | void oled_write_P(const char *data, bool invert) { | 444 | void oled_write_P(const char *data, bool invert) { |
436 | uint8_t c = pgm_read_byte(data); | 445 | uint8_t c = pgm_read_byte(data); |
@@ -444,6 +453,16 @@ void oled_write_ln_P(const char *data, bool invert) { | |||
444 | oled_write_P(data, invert); | 453 | oled_write_P(data, invert); |
445 | oled_advance_page(true); | 454 | oled_advance_page(true); |
446 | } | 455 | } |
456 | |||
457 | void oled_write_raw_P(const char *data, uint16_t size) { | ||
458 | if (size > OLED_MATRIX_SIZE) size = OLED_MATRIX_SIZE; | ||
459 | for (uint16_t i = 0; i < size; i++) { | ||
460 | uint8_t c = pgm_read_byte(++data); | ||
461 | if (oled_buffer[i] == c) continue; | ||
462 | oled_buffer[i] = c; | ||
463 | oled_dirty |= (1 << (i / OLED_BLOCK_SIZE)); | ||
464 | } | ||
465 | } | ||
447 | #endif // defined(__AVR__) | 466 | #endif // defined(__AVR__) |
448 | 467 | ||
449 | bool oled_on(void) { | 468 | bool oled_on(void) { |
@@ -566,4 +585,4 @@ void oled_task(void) { | |||
566 | #endif | 585 | #endif |
567 | } | 586 | } |
568 | 587 | ||
569 | __attribute__((weak)) void oled_task_user(void) {} | 588 | __attribute__((weak)) void oled_task_user(void) {} \ No newline at end of file |