Skip to content

Commit

Permalink
Use cursor position as start index for oled_write_raw and oled_write_…
Browse files Browse the repository at this point in the history
…raw_P

The documentation for these APIs say that they write to the buffer
from the current current position, but they would always write
from the start of the buffer irrespective of the current cursor.
  • Loading branch information
daveallie committed Oct 31, 2020
1 parent c3221d4 commit 45ac99f
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions drivers/oled/oled_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -471,8 +471,9 @@ void oled_write_raw_byte(const char data, uint16_t index) {
}

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++) {
uint16_t cursor_start_index = oled_cursor - &oled_buffer[0];
if ((size + cursor_start_index) > OLED_MATRIX_SIZE) size = OLED_MATRIX_SIZE - cursor_start_index;
for (uint16_t i = cursor_start_index; i < cursor_start_index + size; i++) {
if (oled_buffer[i] == data[i]) continue;
oled_buffer[i] = data[i];
oled_dirty |= ((OLED_BLOCK_TYPE)1 << (i / OLED_BLOCK_SIZE));
Expand Down Expand Up @@ -514,8 +515,9 @@ void oled_write_ln_P(const char *data, bool invert) {
}

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++) {
uint16_t cursor_start_index = oled_cursor - &oled_buffer[0];
if ((size + cursor_start_index) > OLED_MATRIX_SIZE) size = OLED_MATRIX_SIZE - cursor_start_index;
for (uint16_t i = cursor_start_index; i < cursor_start_index + size; i++) {
uint8_t c = pgm_read_byte(data++);
if (oled_buffer[i] == c) continue;
oled_buffer[i] = c;
Expand Down

0 comments on commit 45ac99f

Please sign in to comment.