From 237d59d1d16f0b9998b923ff9b2466ac005e6d0f Mon Sep 17 00:00:00 2001 From: David Tillotson Date: Sat, 6 Mar 2021 16:45:38 +0000 Subject: [PATCH] Slight efactor of st7789 driver, and addition of the flip function --- drivers/st7789/st7789.cpp | 19 +++++++++++++------ drivers/st7789/st7789.hpp | 1 + libraries/pico_display/pico_display.cpp | 5 ++++- libraries/pico_display/pico_display.hpp | 3 ++- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/drivers/st7789/st7789.cpp b/drivers/st7789/st7789.cpp index 251e8e90..099fb0b4 100644 --- a/drivers/st7789/st7789.cpp +++ b/drivers/st7789/st7789.cpp @@ -7,6 +7,7 @@ #include "hardware/pwm.h" namespace pimoroni { + char madctl[2]; void ST7789::init(bool auto_init_sequence) { // configure spi interface and pins @@ -50,15 +51,16 @@ namespace pimoroni { sleep_ms(150); if(width == 240 && height == 240) { - command(reg::MADCTL, 1, "\x04"); // row/column addressing order - rgb pixel order - command(reg::TEON, 1, "\x00"); // enable frame sync signal if used - command(reg::COLMOD, 1, "\x05"); // 16 bits per pixel + madctl = 0x04; } if(width == 240 && height == 135) { - command(reg::MADCTL, 1, "\x70"); - command(reg::COLMOD, 1, "\x05"); + madctl = 0x70; } + + command(reg::MADCTL, 1, madctl); // row/column addressing order - rgb pixel order + command(reg::TEON, 1, "\x00"); // enable frame sync signal if used + command(reg::COLMOD, 1, "\x05"); // 16 bits per pixel command(reg::INVON); // set inversion mode command(reg::SLPOUT); // leave sleep mode @@ -147,4 +149,9 @@ namespace pimoroni { void ST7789::vsync_callback(gpio_irq_callback_t callback) { gpio_set_irq_enabled_with_callback(vsync, GPIO_IRQ_EDGE_RISE, true, callback); } -} \ No newline at end of file + + void ST7789::flip(){ + madctl[0] ^= 0xC0; + command(reg::MADCTL, 1, madctl); + } +} diff --git a/drivers/st7789/st7789.hpp b/drivers/st7789/st7789.hpp index d4b62bff..76bef36a 100644 --- a/drivers/st7789/st7789.hpp +++ b/drivers/st7789/st7789.hpp @@ -47,6 +47,7 @@ namespace pimoroni { void vsync_callback(gpio_irq_callback_t callback); void update(bool dont_block = false); void set_backlight(uint8_t brightness); + void flip(); enum reg { SWRESET = 0x01, diff --git a/libraries/pico_display/pico_display.cpp b/libraries/pico_display/pico_display.cpp index 9b2720a9..3cc66c52 100644 --- a/libraries/pico_display/pico_display.cpp +++ b/libraries/pico_display/pico_display.cpp @@ -79,4 +79,7 @@ namespace pimoroni { return !gpio_get(button); } -} \ No newline at end of file + void flip() { + screen.flip(); + } +} diff --git a/libraries/pico_display/pico_display.hpp b/libraries/pico_display/pico_display.hpp index 152c6e7c..abc4e41c 100644 --- a/libraries/pico_display/pico_display.hpp +++ b/libraries/pico_display/pico_display.hpp @@ -26,6 +26,7 @@ namespace pimoroni { void set_backlight(uint8_t brightness); void set_led(uint8_t r, uint8_t g, uint8_t b); bool is_pressed(uint8_t button); + void flip(); }; -} \ No newline at end of file +}