forked from forks/qmk_firmware
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>
This commit is contained in:
parent
08b405e1e9
commit
92d0a71af7
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue