diff --git a/CHANGLELOG.md b/CHANGLELOG.md
index d9029bb7..1e3b1874 100644
--- a/CHANGLELOG.md
+++ b/CHANGLELOG.md
@@ -63,7 +63,7 @@
- Prepare support for ESP32-S2
- **Breaking:** Removed support for ESP8266!
-Updated libraries to ArduinoJson 6.19.3, ArduinoStreamUtils 1.6.2, TFT_eSPI 2.4.42, LovyanGFX 0.4.14 and Adafruit STMPE610 1.1.4
+Updated libraries to ArduinoJson 6.19.3, ArduinoStreamUtils 1.6.2, TFT_eSPI 2.4.43, LovyanGFX 0.4.15 and Adafruit STMPE610 1.1.4
## v0.6.2
diff --git a/platformio.ini b/platformio.ini
index 2e45733a..d66edcb9 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -98,11 +98,11 @@ src_filter = +<*> -<.git/> - - - - -getInt("wr", TFT_WR);
cfg.pin_rs = prefs->getInt("rs", TFT_DC);
cfg.freq_write = prefs->getUInt("write_freq", SPI_FREQUENCY);
- uint8_t port = prefs->getUInt("port", 0);
+ uint8_t port = prefs->getUInt("i2s_port", 0);
switch(port) {
#if SOC_I2S_NUM > 1
case 1:
@@ -81,7 +81,7 @@ static lgfx::Bus_Parallel8* init_parallel_8_bus(Preferences* prefs, int8_t data_
cfg.pin_wr = prefs->getInt("wr", TFT_WR);
cfg.pin_rs = prefs->getInt("rs", TFT_DC);
cfg.freq_write = prefs->getUInt("write_freq", SPI_FREQUENCY);
- uint8_t port = prefs->getUInt("port", 0);
+ uint8_t port = prefs->getUInt("i2s_port", 0);
switch(port) {
#if SOC_I2S_NUM > 1
case 1:
@@ -169,7 +169,7 @@ static lgfx::Bus_SPI* init_spi_bus(Preferences* prefs)
return bus;
}
-static void init_panel(lgfx::Panel_Device* panel, Preferences* prefs)
+static void configure_panel(lgfx::Panel_Device* panel, Preferences* prefs)
{
auto cfg = panel->config(); // Get the structure for display panel settings.
@@ -194,14 +194,15 @@ static void init_panel(lgfx::Panel_Device* panel, Preferences* prefs)
prefs->getUInt("dummy_read_bits", 1); // bits of dummy read before reading data other than pixels
cfg.readable = prefs->getBool("readable", false); // true if data can be read
-// #ifdef INVERT_COLORS // This is configurable un Web UI
-// cfg.invert =
-// prefs->getBool("invert", INVERT_COLORS != 0); // true if the light and darkness of the panel is reversed
-// #else
- cfg.invert = prefs->getBool("invert", false); // true if the light and darkness of the panel is reversed
+ // #ifdef INVERT_COLORS // This is configurable un Web UI
+ // cfg.invert =
+ // prefs->getBool("invert", INVERT_COLORS != 0); // true if the light and darkness of the panel is reversed
+ // #else
+ cfg.invert = prefs->getBool("invert", false); // true if the light and darkness of the panel is reversed
// #endif
#ifdef TFT_RGB_ORDER
- cfg.rgb_order = prefs->getBool("rgb_order", true); // true if the red and blue of the panel are swapped
+ cfg.rgb_order =
+ prefs->getBool("rgb_order", TFT_RGB_ORDER != 0); // true if the red and blue of the panel are swapped
#else
cfg.rgb_order = prefs->getBool("rgb_order", false); // true if the red and blue of the panel are swapped
#endif
@@ -211,94 +212,80 @@ static void init_panel(lgfx::Panel_Device* panel, Preferences* prefs)
panel->config(cfg);
}
-void LovyanGfx::init(int w, int h)
+// Initialize the bus
+lgfx::IBus* _init_bus(Preferences* preferences)
{
- LOG_TRACE(TAG_TFT, F(D_SERVICE_STARTING));
+ if(!preferences) return nullptr;
- Preferences preferences;
- preferences.begin("tft", false);
-
- lgfx::IBus* bus;
- { // Initialize the bus
- char key[8];
- int8_t data_pins[16] = {TFT_D0, TFT_D1, TFT_D2, TFT_D3, TFT_D4, TFT_D5, TFT_D6, TFT_D7,
- TFT_D8, TFT_D9, TFT_D10, TFT_D11, TFT_D12, TFT_D13, TFT_D14, TFT_D15};
- for(uint8_t i = 0; i < 16; i++) {
- snprintf(key, sizeof(key), "d%d", i + 1);
- data_pins[i] = preferences.getInt(key, data_pins[i]);
- LOG_DEBUG(TAG_TFT, F("D%d: %d"), i + 1, data_pins[i]);
- }
-
- LOG_DEBUG(TAG_TFT, F("%s - %d"), __FILE__, __LINE__);
- bool is_8bit = true;
- bool is_16bit = true;
- for(uint8_t i = 0; i < 16; i++) {
- if(i < 8) is_8bit = is_8bit && (data_pins[i] >= 0);
- is_16bit = is_16bit && (data_pins[i] >= 0);
- }
-
- LOG_DEBUG(TAG_TFT, F("%s - %d"), __FILE__, __LINE__);
-#if defined(ESP32S2)
- if(is_16bit) {
- is_8bit = false;
- bus = init_parallel_16_bus(&preferences, data_pins, 16);
- } else
-#endif // ESP32S2
- if(is_8bit) {
- is_16bit = false;
- bus = init_parallel_8_bus(&preferences, data_pins, 8);
- } else {
- bus = init_spi_bus(&preferences);
- }
+ char key[8];
+ int8_t data_pins[16] = {TFT_D0, TFT_D1, TFT_D2, TFT_D3, TFT_D4, TFT_D5, TFT_D6, TFT_D7,
+ TFT_D8, TFT_D9, TFT_D10, TFT_D11, TFT_D12, TFT_D13, TFT_D14, TFT_D15};
+ for(uint8_t i = 0; i < 16; i++) {
+ snprintf(key, sizeof(key), "d%d", i + 1);
+ data_pins[i] = preferences->getInt(key, data_pins[i]);
+ LOG_DEBUG(TAG_TFT, F("D%d: %d"), i + 1, data_pins[i]);
}
- uint32_t tft_driver = preferences.getUInt("DRIVER", get_tft_driver());
+ LOG_DEBUG(TAG_TFT, F("%s - %d"), __FILE__, __LINE__);
+ bool is_8bit = true;
+ bool is_16bit = true;
+ for(uint8_t i = 0; i < 16; i++) {
+ if(i < 8) is_8bit = is_8bit && (data_pins[i] >= 0);
+ is_16bit = is_16bit && (data_pins[i] >= 0);
+ }
+
+ LOG_DEBUG(TAG_TFT, F("%s - %d"), __FILE__, __LINE__);
+#if defined(ESP32S2)
+ if(is_16bit) {
+ is_8bit = false;
+ return init_parallel_16_bus(preferences, data_pins, 16);
+ } else
+#endif // ESP32S2
+ if(is_8bit) {
+ is_16bit = false;
+ return init_parallel_8_bus(preferences, data_pins, 8);
+ } else {
+ return init_spi_bus(preferences);
+ }
+ return nullptr;
+}
+
+lgfx::Panel_Device* LovyanGfx::_init_panel(lgfx::IBus* bus)
+{
+ lgfx::Panel_Device* panel = nullptr;
switch(tft_driver) {
case 0x9341: {
- auto panel = new lgfx::Panel_ILI9341();
- panel->setBus(bus);
- init_panel(panel, &preferences);
- tft.setPanel(panel);
+ panel = new lgfx::Panel_ILI9341();
LOG_DEBUG(TAG_TFT, F("%s - %d"), __FILE__, __LINE__);
break;
}
case 0x9342: {
- auto panel = new lgfx::Panel_ILI9342();
- panel->setBus(bus);
- init_panel(panel, &preferences);
- tft.setPanel(panel);
+ panel = new lgfx::Panel_ILI9342();
LOG_DEBUG(TAG_TFT, F("%s - %d"), __FILE__, __LINE__);
break;
}
case 0x9481: {
- auto panel = new lgfx::Panel_ILI9481();
- panel->setBus(bus);
- init_panel(panel, &preferences);
- tft.setPanel(panel);
+ panel = new lgfx::Panel_ILI9481();
LOG_DEBUG(TAG_TFT, F("%s - %d"), __FILE__, __LINE__);
break;
}
case 0x9488: {
- auto panel = new lgfx::Panel_ILI9488();
- panel->setBus(bus);
- init_panel(panel, &preferences);
- tft.setPanel(panel);
+ panel = new lgfx::Panel_ILI9488();
+ LOG_DEBUG(TAG_TFT, F("%s - %d"), __FILE__, __LINE__);
+ break;
+ }
+ case 0x7789: {
+ panel = new lgfx::Panel_ST7789();
LOG_DEBUG(TAG_TFT, F("%s - %d"), __FILE__, __LINE__);
break;
}
case 0x7796: {
- auto panel = new lgfx::Panel_ST7796();
- panel->setBus(bus);
- init_panel(panel, &preferences);
- tft.setPanel(panel);
+ panel = new lgfx::Panel_ST7796();
LOG_DEBUG(TAG_TFT, F("%s - %d"), __FILE__, __LINE__);
break;
}
case 0x8357D: {
- auto panel = new lgfx::Panel_HX8357D();
- panel->setBus(bus);
- init_panel(panel, &preferences);
- tft.setPanel(panel);
+ panel = new lgfx::Panel_HX8357D();
LOG_DEBUG(TAG_TFT, F("%s - %d"), __FILE__, __LINE__);
break;
}
@@ -306,6 +293,26 @@ void LovyanGfx::init(int w, int h)
LOG_FATAL(TAG_TFT, F(D_SERVICE_START_FAILED ": %s line %d"), __FILE__, __LINE__);
}
}
+
+ return panel;
+}
+
+void LovyanGfx::init(int w, int h)
+{
+ LOG_TRACE(TAG_TFT, F(D_SERVICE_STARTING));
+
+ Preferences preferences;
+ preferences.begin("tft", false);
+
+ lgfx::IBus* bus = _init_bus(&preferences);
+ this->tft_driver = preferences.getUInt("DRIVER", get_tft_driver());
+ lgfx::Panel_Device* panel = _init_panel(bus);
+ if(panel != nullptr) {
+ panel->setBus(bus);
+ configure_panel(panel, &preferences);
+ }
+ tft.setPanel(panel);
+
LOG_DEBUG(TAG_TFT, F("%s - %d"), __FILE__, __LINE__);
/* TFT init */
@@ -589,10 +596,10 @@ uint32_t LovyanGfx::get_tft_driver()
return 0xED;
#elif defined(ST7789_DRIVER)
return 0x7789;
-#elif defined(R61581_DRIVER)
- return 0x61581;
#elif defined(ST7789_2_DRIVER)
return 0x77892;
+#elif defined(R61581_DRIVER)
+ return 0x61581;
#elif defined(RM68140_DRIVER)
return 0x68140;
#else
diff --git a/src/drv/tft/tft_driver_lovyangfx.h b/src/drv/tft/tft_driver_lovyangfx.h
index fa76ffc5..949972ec 100644
--- a/src/drv/tft/tft_driver_lovyangfx.h
+++ b/src/drv/tft/tft_driver_lovyangfx.h
@@ -137,9 +137,13 @@ class LovyanGfx : BaseTft {
}
private:
+ uint32_t tft_driver;
+
uint32_t get_tft_driver();
uint32_t get_touch_driver();
+ lgfx::Panel_Device* _init_panel(lgfx::IBus* bus);
+
void tftOffsetInfo(uint8_t pin, uint8_t x_offset, uint8_t y_offset)
{
if(x_offset != 0) {
diff --git a/user_setups/esp32/lanbon_l8.ini b/user_setups/esp32/lanbon_l8.ini
index ee17597d..778373a4 100644
--- a/user_setups/esp32/lanbon_l8.ini
+++ b/user_setups/esp32/lanbon_l8.ini
@@ -16,8 +16,21 @@ build_flags =
-D HASP_MODEL="Lanbon L8"
;region -- TFT_eSPI build options ------------------------
- ${lcd.st7789v}
-D LANBONL8
+ ; -D USER_SETUP_LOADED=1
+ -D LGFX_USE_V1=1
+ -D ST7789_DRIVER=1
+ ;-D CGRAM_OFFSET=1 ; Library will add offsets required
+ -D TFT_SDA_READ ; Read from display, it only provides an SDA pin
+ -D TFT_WIDTH=240
+ -D TFT_HEIGHT=320
+ -D TFT_ROTATION=2 ; see TFT_ROTATION values
+ ; -D TFT_INVERSION_OFF ; for normal colors
+ ; -D TFT_RGB_ORDER=1 ; Colour order Red-Green-Blue
+ -D TFT_RGB_ORDER=0 ; Colour order Blue-Green-Red
+ -D SPI_FREQUENCY=60000000
+ -D SPI_READ_FREQUENCY=6000000
+ -D SUPPORT_TRANSACTIONS
-D TFT_RST=18 ; FCP pin2 RESET
-D TFT_SCLK=19 ; FCP pin3 SCL
-D TFT_DC=21 ; FCP pin4 D/C
@@ -44,7 +57,8 @@ build_flags =
lib_deps =
${env.lib_deps}
${esp32.lib_deps}
- ${tft_espi.lib_deps}
+ ${lovyangfx.lib_deps}
+ ;${tft_espi.lib_deps}
; FT6336U is 6x faster then FocalTech Library
;git+https://github.com/lewisxhe/FocalTech_Library.git
${ft6336.lib_deps}