diff options
Diffstat (limited to 'drivers/oled/oled_driver.c')
-rw-r--r-- | drivers/oled/oled_driver.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/oled/oled_driver.c b/drivers/oled/oled_driver.c index 8e5ed5f07..7d4197890 100644 --- a/drivers/oled/oled_driver.c +++ b/drivers/oled/oled_driver.c | |||
@@ -34,6 +34,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
34 | #define DISPLAY_ALL_ON 0xA5 | 34 | #define DISPLAY_ALL_ON 0xA5 |
35 | #define DISPLAY_ALL_ON_RESUME 0xA4 | 35 | #define DISPLAY_ALL_ON_RESUME 0xA4 |
36 | #define NORMAL_DISPLAY 0xA6 | 36 | #define NORMAL_DISPLAY 0xA6 |
37 | #define INVERT_DISPLAY 0xA7 | ||
37 | #define DISPLAY_ON 0xAF | 38 | #define DISPLAY_ON 0xAF |
38 | #define DISPLAY_OFF 0xAE | 39 | #define DISPLAY_OFF 0xAE |
39 | #define NOP 0xE3 | 40 | #define NOP 0xE3 |
@@ -114,6 +115,7 @@ OLED_BLOCK_TYPE oled_dirty = 0; | |||
114 | bool oled_initialized = false; | 115 | bool oled_initialized = false; |
115 | bool oled_active = false; | 116 | bool oled_active = false; |
116 | bool oled_scrolling = false; | 117 | bool oled_scrolling = false; |
118 | bool oled_inverted = false; | ||
117 | uint8_t oled_brightness = OLED_BRIGHTNESS; | 119 | uint8_t oled_brightness = OLED_BRIGHTNESS; |
118 | oled_rotation_t oled_rotation = 0; | 120 | oled_rotation_t oled_rotation = 0; |
119 | uint8_t oled_rotation_width = 0; | 121 | uint8_t oled_rotation_width = 0; |
@@ -690,6 +692,30 @@ bool oled_scroll_off(void) { | |||
690 | return !oled_scrolling; | 692 | return !oled_scrolling; |
691 | } | 693 | } |
692 | 694 | ||
695 | bool oled_invert(bool invert) { | ||
696 | if (!oled_initialized) { | ||
697 | return oled_inverted; | ||
698 | } | ||
699 | |||
700 | if (invert && !oled_inverted) { | ||
701 | static const uint8_t PROGMEM display_inverted[] = {I2C_CMD, INVERT_DISPLAY}; | ||
702 | if (I2C_TRANSMIT_P(display_inverted) != I2C_STATUS_SUCCESS) { | ||
703 | print("oled_invert cmd failed\n"); | ||
704 | return oled_inverted; | ||
705 | } | ||
706 | oled_inverted = true; | ||
707 | } else if (!invert && oled_inverted) { | ||
708 | static const uint8_t PROGMEM display_normal[] = {I2C_CMD, NORMAL_DISPLAY}; | ||
709 | if (I2C_TRANSMIT_P(display_normal) != I2C_STATUS_SUCCESS) { | ||
710 | print("oled_invert cmd failed\n"); | ||
711 | return oled_inverted; | ||
712 | } | ||
713 | oled_inverted = false; | ||
714 | } | ||
715 | |||
716 | return oled_inverted; | ||
717 | } | ||
718 | |||
693 | uint8_t oled_max_chars(void) { | 719 | uint8_t oled_max_chars(void) { |
694 | if (!HAS_FLAGS(oled_rotation, OLED_ROTATION_90)) { | 720 | if (!HAS_FLAGS(oled_rotation, OLED_ROTATION_90)) { |
695 | return OLED_DISPLAY_WIDTH / OLED_FONT_WIDTH; | 721 | return OLED_DISPLAY_WIDTH / OLED_FONT_WIDTH; |