diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/oled/oled_driver.c | 8 | ||||
| -rw-r--r-- | drivers/oled/oled_driver.h | 9 |
2 files changed, 17 insertions, 0 deletions
diff --git a/drivers/oled/oled_driver.c b/drivers/oled/oled_driver.c index f1990567f..bbf010a09 100644 --- a/drivers/oled/oled_driver.c +++ b/drivers/oled/oled_driver.c | |||
| @@ -444,6 +444,14 @@ void oled_pan(bool left) { | |||
| 444 | oled_dirty = ~((OLED_BLOCK_TYPE)0); | 444 | oled_dirty = ~((OLED_BLOCK_TYPE)0); |
| 445 | } | 445 | } |
| 446 | 446 | ||
| 447 | oled_buffer_reader_t oled_read_raw(uint16_t start_index) { | ||
| 448 | if (start_index > OLED_MATRIX_SIZE) start_index = OLED_MATRIX_SIZE; | ||
| 449 | oled_buffer_reader_t ret_reader; | ||
| 450 | ret_reader.current_element = &oled_buffer[start_index]; | ||
| 451 | ret_reader.remaining_element_count = OLED_MATRIX_SIZE - start_index; | ||
| 452 | return ret_reader; | ||
| 453 | } | ||
| 454 | |||
| 447 | void oled_write_raw_byte(const char data, uint16_t index) { | 455 | void oled_write_raw_byte(const char data, uint16_t index) { |
| 448 | if (index > OLED_MATRIX_SIZE) index = OLED_MATRIX_SIZE; | 456 | if (index > OLED_MATRIX_SIZE) index = OLED_MATRIX_SIZE; |
| 449 | if (oled_buffer[index] == data) return; | 457 | if (oled_buffer[index] == data) return; |
diff --git a/drivers/oled/oled_driver.h b/drivers/oled/oled_driver.h index 5c21c0cc8..7ec00d66a 100644 --- a/drivers/oled/oled_driver.h +++ b/drivers/oled/oled_driver.h | |||
| @@ -154,6 +154,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| 154 | # define OLED_I2C_TIMEOUT 100 | 154 | # define OLED_I2C_TIMEOUT 100 |
| 155 | #endif | 155 | #endif |
| 156 | 156 | ||
| 157 | typedef struct __attribute__((__packed__)) { | ||
| 158 | uint8_t *current_element; | ||
| 159 | uint16_t remaining_element_count; | ||
| 160 | } oled_buffer_reader_t; | ||
| 161 | |||
| 157 | // OLED Rotation enum values are flags | 162 | // OLED Rotation enum values are flags |
| 158 | typedef enum { | 163 | typedef enum { |
| 159 | OLED_ROTATION_0 = 0, | 164 | OLED_ROTATION_0 = 0, |
| @@ -207,6 +212,10 @@ void oled_write_ln(const char *data, bool invert); | |||
| 207 | // Pans the buffer to the right (or left by passing true) by moving contents of the buffer | 212 | // Pans the buffer to the right (or left by passing true) by moving contents of the buffer |
| 208 | void oled_pan(bool left); | 213 | void oled_pan(bool left); |
| 209 | 214 | ||
| 215 | // Returns a pointer to the requested start index in the buffer plus remaining | ||
| 216 | // buffer length as struct | ||
| 217 | oled_buffer_reader_t oled_read_raw(uint16_t start_index); | ||
| 218 | |||
| 210 | void oled_write_raw(const char *data, uint16_t size); | 219 | void oled_write_raw(const char *data, uint16_t size); |
| 211 | void oled_write_raw_byte(const char data, uint16_t index); | 220 | void oled_write_raw_byte(const char data, uint16_t index); |
| 212 | 221 | ||
