OLED driver function to set pixels (#9713)

* Add a function to set individual pixels

* Add documentation for oled_write_pixel

* use smaller data type for oled_write_pixel

* Fix boundary check edge case

* Update oled_write_pixel doc

Co-authored-by: Ryan <fauxpark@gmail.com>

Co-authored-by: Ryan <fauxpark@gmail.com>
daktil_manuform
Gautham Yerroju 2020-07-15 22:48:04 -07:00 committed by GitHub
parent 08b405e1e9
commit 92d0a71af7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 0 deletions

View File

@ -247,6 +247,10 @@ void oled_write_raw_byte(const char data, uint16_t index);
// Writes a PROGMEM string to the buffer at current cursor position // Writes a PROGMEM string to the buffer at current cursor position
void oled_write_raw_P(const char *data, uint16_t size); void oled_write_raw_P(const char *data, uint16_t size);
// Sets a specific pixel on or off
// Coordinates start at top-left and go right and down for positive x and y
void oled_write_pixel(uint8_t x, uint8_t y, bool on);
// Can be used to manually turn on the screen if it is off // Can be used to manually turn on the screen if it is off
// Returns true if the screen was on or turns on // Returns true if the screen was on or turns on
bool oled_on(void); bool oled_on(void);

View File

@ -462,6 +462,19 @@ void oled_write_raw(const char *data, uint16_t size) {
} }
} }
void oled_write_pixel(uint8_t x, uint8_t y, bool on) {
if (x >= OLED_DISPLAY_WIDTH || y >= OLED_DISPLAY_HEIGHT) {
return;
}
uint16_t index = x + (y / 8) * OLED_DISPLAY_WIDTH;
if (on) {
oled_buffer[index] |= (1 << (y % 8));
} else {
oled_buffer[index] &= ~(1 << (y % 8));
}
oled_dirty |= (1 << (index / OLED_BLOCK_SIZE));
}
#if defined(__AVR__) #if defined(__AVR__)
void oled_write_P(const char *data, bool invert) { void oled_write_P(const char *data, bool invert) {
uint8_t c = pgm_read_byte(data); uint8_t c = pgm_read_byte(data);

View File

@ -206,6 +206,10 @@ void oled_pan(bool left);
void oled_write_raw(const char *data, uint16_t size); void oled_write_raw(const char *data, uint16_t size);
void oled_write_raw_byte(const char data, uint16_t index); void oled_write_raw_byte(const char data, uint16_t index);
// Sets a specific pixel on or off
// Coordinates start at top-left and go right and down for positive x and y
void oled_write_pixel(uint8_t x, uint8_t y, bool on);
#if defined(__AVR__) #if defined(__AVR__)
// Writes a PROGMEM string to the buffer at current cursor position // Writes a PROGMEM string to the buffer at current cursor position
// Advances the cursor while writing, inverts the pixels if true // Advances the cursor while writing, inverts the pixels if true