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/oled_driver.c | |
| 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/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 |
