summaryrefslogtreecommitdiff
path: root/drivers/lcd/st7565.c
diff options
context:
space:
mode:
authorRyan <fauxpark@gmail.com>2021-06-19 18:51:35 +1000
committerGitHub <noreply@github.com>2021-06-19 18:51:35 +1000
commit37fba09021fe094ea4daf0813626b1b6a201c8c0 (patch)
tree7dc87da3d0852f521a63f8c6f665137821815d92 /drivers/lcd/st7565.c
parent0311c8036d693baf63ed4d3b7badf4257ffd5f46 (diff)
ST7565 invert (#13237)
Diffstat (limited to 'drivers/lcd/st7565.c')
-rw-r--r--drivers/lcd/st7565.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/lcd/st7565.c b/drivers/lcd/st7565.c
index ee2661a5eb..49b13c00f1 100644
--- a/drivers/lcd/st7565.c
+++ b/drivers/lcd/st7565.c
@@ -31,6 +31,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DISPLAY_ALL_ON 0xA5
#define DISPLAY_ALL_ON_RESUME 0xA4
#define NORMAL_DISPLAY 0xA6
+#define INVERT_DISPLAY 0xA7
#define DISPLAY_ON 0xAF
#define DISPLAY_OFF 0xAE
#define NOP 0xE3
@@ -72,6 +73,7 @@ uint8_t * st7565_cursor;
ST7565_BLOCK_TYPE st7565_dirty = 0;
bool st7565_initialized = false;
bool st7565_active = false;
+bool st7565_inverted = false;
display_rotation_t st7565_rotation = DISPLAY_ROTATION_0;
#if ST7565_TIMEOUT > 0
uint32_t st7565_timeout;
@@ -429,6 +431,20 @@ __attribute__((weak)) void st7565_off_user(void) {}
bool st7565_is_on(void) { return st7565_active; }
+bool st7565_invert(bool invert) {
+ if (!st7565_initialized) {
+ return st7565_inverted;
+ }
+
+ if (invert != st7565_inverted) {
+ spi_start(ST7565_SS_PIN, false, 0, ST7565_SPI_CLK_DIVISOR);
+ st7565_send_cmd(invert ? INVERT_DISPLAY : NORMAL_DISPLAY);
+ spi_stop();
+ st7565_inverted = invert;
+ }
+ return st7565_inverted;
+}
+
uint8_t st7565_max_chars(void) { return ST7565_DISPLAY_WIDTH / ST7565_FONT_WIDTH; }
uint8_t st7565_max_lines(void) { return ST7565_DISPLAY_HEIGHT / ST7565_FONT_HEIGHT; }