From c1f3a31b513e90b29f31f23ba24e5856837ea6d4 Mon Sep 17 00:00:00 2001 From: JF Date: Fri, 17 Jan 2020 22:16:45 +0100 Subject: Disable SPI, I²C, touch controller and display controller in sleep mode. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Re-enable them on wake up. Remove delays that were not needed in st7889 driver. Hopefully, it'll improve the battery life! --- src/drivers/St7789.cpp | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'src/drivers/St7789.cpp') diff --git a/src/drivers/St7789.cpp b/src/drivers/St7789.cpp index 7c52f179..0bb7b7c9 100644 --- a/src/drivers/St7789.cpp +++ b/src/drivers/St7789.cpp @@ -48,7 +48,10 @@ void St7789::SoftwareReset() { void St7789::SleepOut() { WriteCommand(static_cast(Commands::SleepOut)); - nrf_delay_ms(500); +} + +void St7789::SleepIn() { + WriteCommand(static_cast(Commands::SleepIn)); } void St7789::ColMod() { @@ -90,7 +93,6 @@ void St7789::NormalModeOn() { void St7789::DisplayOn() { WriteCommand(static_cast(Commands::DisplayOn)); - nrf_delay_ms(500); } void St7789::FillRectangle(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) { @@ -163,9 +165,30 @@ void St7789::NextDrawBuffer(const uint8_t *data, size_t size) { void St7789::HardwareReset() { nrf_gpio_pin_clear(26); - nrf_delay_ms(200); + nrf_delay_ms(10); nrf_gpio_pin_set(26); +} + +void St7789::Sleep() { + SleepIn(); + nrf_gpio_cfg_default(pinDataCommand); + spi.Sleep(); +} +void St7789::Wakeup() { + spi.Wakeup(); + + nrf_gpio_cfg_output(pinDataCommand); + // TODO why do we need to reset the controller? + SoftwareReset(); + SleepOut(); + ColMod(); + MemoryDataAccessControl(); + ColumnAddressSet(); + RowAddressSet(); + DisplayInversionOn(); + NormalModeOn(); + DisplayOn(); } -- cgit v1.2.3-70-g09d2