From 17b7cfb7a8770e0ab0795721ac5521e62bc66a93 Mon Sep 17 00:00:00 2001 From: vanklompf Date: Fri, 2 Feb 2018 21:07:09 +0100 Subject: [PATCH] Implement idle mode for ILI9163 Support of idle mode. Based on ILI9163 datasheet: https://www.rockbox.org/wiki/pub/Main/SonyNWZE370/ILI9163.pdf --- TFT_Drivers/ILI9163_Defines.h | 8 +++++--- TFT_eSPI.cpp | 14 ++++++++++++++ TFT_eSPI.h | 4 +++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/TFT_Drivers/ILI9163_Defines.h b/TFT_Drivers/ILI9163_Defines.h index 8c2e5c6..06f5c4f 100644 --- a/TFT_Drivers/ILI9163_Defines.h +++ b/TFT_Drivers/ILI9163_Defines.h @@ -61,6 +61,8 @@ #define TFT_INVOFF 0x20 #define TFT_INVON 0x21 -#define TFT_NORON 0x13 //normal mode -#define TFT_PTLON 0x12 //partial mode -#define TFT_PTLAR 0x30 //partial area +#define TFT_NORON 0x13 //normal mode +#define TFT_PTLON 0x12 //partial mode +#define TFT_PTLAR 0x30 //partial area +#define TFT_IDMOFF 0x38 //idle mode off +#define TFT_IDMON 0x39 //idle mode on diff --git a/TFT_eSPI.cpp b/TFT_eSPI.cpp index 92f7678..81a3a9a 100644 --- a/TFT_eSPI.cpp +++ b/TFT_eSPI.cpp @@ -3273,6 +3273,20 @@ void TFT_eSPI::setPartialArea(int16_t startLine, int16_t endLine) #endif } +/*************************************************************************************** +** Function name: setIdleMode +** Description: enables/disables "idle" mode, where color expression is reduced to 8 colors +** can be used with partial mode, further reducing power consumption +***************************************************************************************/ +void TFT_eSPI::setIdleMode(bool mode) +{ +#ifdef ILI9163_DRIVER + spi_begin(); + writecommand(mode ? TFT_IDMON : TFT_IDMOFF); + spi_end(); +#endif +} + /*************************************************************************************** ** Function name: write ** Description: draw characters piped through serial stream diff --git a/TFT_eSPI.h b/TFT_eSPI.h index 38b3382..4c78ecb 100644 --- a/TFT_eSPI.h +++ b/TFT_eSPI.h @@ -355,9 +355,11 @@ class TFT_eSPI : public Print { setRotation(uint8_t r), invertDisplay(boolean i), - + setPartialMode(bool mode), setPartialArea(int16_t startLine, int16_t endLine), + + setIdleMode(bool mode), drawCircle(int32_t x0, int32_t y0, int32_t r, uint32_t color), drawCircleHelper(int32_t x0, int32_t y0, int32_t r, uint8_t cornername, uint32_t color),