From a664e5379ecaf5b0f9d1a3e079835c29d1aa23fe Mon Sep 17 00:00:00 2001 From: fvanroie Date: Sat, 22 Oct 2022 01:05:06 +0200 Subject: [PATCH] Update lovyan driver #220 #390 --- src/drv/tft/tft_driver_lovyangfx.cpp | 443 +++++++++++++++++---------- src/drv/touch/touch_driver_ft6336u.h | 2 +- 2 files changed, 287 insertions(+), 158 deletions(-) diff --git a/src/drv/tft/tft_driver_lovyangfx.cpp b/src/drv/tft/tft_driver_lovyangfx.cpp index 18ec74fc..ee4d722a 100644 --- a/src/drv/tft/tft_driver_lovyangfx.cpp +++ b/src/drv/tft/tft_driver_lovyangfx.cpp @@ -11,7 +11,7 @@ void tftPinInfo(const __FlashStringHelper* pinfunction, int8_t pin) { if(pin != -1) { char buffer[64]; - snprintf_P(buffer, sizeof(buffer), PSTR("%-11s: %s (GPIO %02d)"), String(pinfunction).c_str(), + snprintf_P(buffer, sizeof(buffer), PSTR("%-12s: %s (GPIO %02d)"), String(pinfunction).c_str(), haspDevice.gpio_name(pin).c_str(), pin); LOG_VERBOSE(TAG_TFT, buffer); } @@ -54,7 +54,8 @@ static lgfx::Bus_Parallel16* init_parallel_16_bus(Preferences* prefs, int8_t dat 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("i2s_port", 0); +#if !defined(CONFIG_IDF_TARGET_ESP32S3) + uint8_t port = prefs->getUInt("i2s_port", 0); switch(port) { #if SOC_I2S_NUM > 1 case 1: @@ -64,6 +65,7 @@ static lgfx::Bus_Parallel16* init_parallel_16_bus(Preferences* prefs, int8_t dat default: cfg.i2s_port = I2S_NUM_0; } +#endif for(uint8_t i = 0; i < num; i++) { cfg.pin_data[i] = data_pins[i]; } @@ -81,7 +83,8 @@ 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("i2s_port", 0); +#if !defined(CONFIG_IDF_TARGET_ESP32S3) + uint8_t port = prefs->getUInt("i2s_port", 0); switch(port) { #if SOC_I2S_NUM > 1 case 1: @@ -91,6 +94,7 @@ static lgfx::Bus_Parallel8* init_parallel_8_bus(Preferences* prefs, int8_t data_ default: cfg.i2s_port = I2S_NUM_0; } +#endif for(uint8_t i = 0; i < num; i++) { cfg.pin_data[i] = data_pins[i]; } @@ -195,12 +199,12 @@ static void configure_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 -// #endif +#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", TFT_RGB_ORDER != 0); // true if the red and blue of the panel are swapped @@ -309,7 +313,42 @@ lgfx::ITouch* _init_touch(Preferences* preferences) // break; // } -#if 0 && TOUCH_DRIVER == 0x6336 +#if defined(HASP_USE_LGFX_TOUCH) + +#if TOUCH_DRIVER == 0x0911 + { // タッチスクリーン制御の設定を行います。(必要なければ削除) + auto touch = new lgfx::Touch_GT911(); + auto cfg = touch->config(); + + cfg.x_min = 0; // タッチスクリーンから得られる最小のX値(生の値) + cfg.x_max = TFT_WIDTH - 1; // タッチスクリーンから得られる最大のX値(生の値) + cfg.y_min = 0; // タッチスクリーンから得られる最小のY値(生の値) + cfg.y_max = TFT_HEIGHT - 1; // タッチスクリーンから得られる最大のY値(生の値) + cfg.bus_shared = false; // 画面と共通のバスを使用している場合 trueを設定 + cfg.offset_rotation = TOUCH_OFFSET_ROTATION; // 表示とタッチの向きのが一致しない場合の調整 0~7の値で設定 + + // SPI接続の場合 + // cfg.spi_host = VSPI_HOST; // 使用するSPIを選択 (HSPI_HOST or VSPI_HOST) + // cfg.freq = 1000000; // SPIクロックを設定 + // cfg.pin_sclk = 18; // SCLKが接続されているピン番号 + // cfg.pin_mosi = 23; // MOSIが接続されているピン番号 + // cfg.pin_miso = 19; // MISOが接続されているピン番号 + // cfg.pin_cs = 5; // CSが接続されているピン番号 + + // I2C接続の場合 + cfg.i2c_port = I2C_TOUCH_PORT; // 使用するI2Cを選択 (0 or 1) + cfg.i2c_addr = I2C_TOUCH_ADDRESS; // I2Cデバイスアドレス番号 + cfg.pin_sda = TOUCH_SDA; // SDAが接続されているピン番号 + cfg.pin_scl = TOUCH_SCL; // SCLが接続されているピン番号 + cfg.pin_int = -1; // INTが接続されているピン番号 + cfg.freq = I2C_TOUCH_FREQUENCY; // I2Cクロックを設定 + + touch->config(cfg); + return touch; + } +#endif + +#if TOUCH_DRIVER == 0x6336 { // タッチスクリーン制御の設定を行います。(必要なければ削除) auto touch = new lgfx::Touch_FT5x06(); auto cfg = touch->config(); @@ -342,6 +381,31 @@ lgfx::ITouch* _init_touch(Preferences* preferences) } #endif +#if TOUCH_DRIVER == 0x2046 + + { // タッチスクリーン制御の設定を行います。(必要なければ削除) + auto touch = new lgfx::Touch_XPT2046(); + auto cfg = touch->config(); + LOG_DEBUG(TAG_TFT, F("%s - %d"), __FILE__, __LINE__); + + cfg.bus_shared = true; // 画面と共通のバスを使用している場合 trueを設定 + cfg.offset_rotation = 0; // 表示とタッチの向きのが一致しない場合の調整 0~7の値で設定 + + // SPI接続の場合 + cfg.spi_host = VSPI_HOST; // 使用するSPIを選択 (HSPI_HOST or VSPI_HOST) + cfg.pin_sclk = 18; // SCLKが接続されているピン番号 + cfg.pin_mosi = 23; // MOSIが接続されているピン番号 + cfg.pin_miso = 19; // MISOが接続されているピン番号 + cfg.pin_cs = 21; // CSが接続されているピン番号 + cfg.pin_int = GPIO_NUM_NC; // INTが接続されているピン番号 + + touch->config(cfg); + return touch; + } +#endif + +#endif // HASP_USE_LGFX_TOUCH + return nullptr; } @@ -349,23 +413,105 @@ void LovyanGfx::init(int w, int h) { LOG_TRACE(TAG_TFT, F(D_SERVICE_STARTING)); +#ifdef WTSC01PLUS + auto _panel_instance = new lgfx::Panel_ST7796(); + auto _bus_instance = new lgfx::v1::Bus_Parallel8(); + auto _touch_instance = new lgfx::Touch_FT5x06(); // FT5206, FT5306, FT5406, FT6206, FT6236, FT6336, FT6436 + { // バス制御の設定を行います。 + auto cfg = _bus_instance->config(); // バス設定用の構造体を取得します。 + // 8ビットパラレルバスの設定 + // cfg.i2s_port = I2S_NUM_0; // 使用するI2Sポートを選択 (I2S_NUM_0 or I2S_NUM_1) (ESP32のI2S + // LCDモードを使用します) + cfg.freq_write = 20000000; // 送信クロック (最大20MHz, 80MHzを整数で割った値に丸められます) + cfg.pin_wr = 47; // WR を接続しているピン番号 + cfg.pin_rd = -1; // RD を接続しているピン番号 + cfg.pin_rs = 0; // RS(D/C)を接続しているピン番号 + cfg.pin_d0 = 9; // D0を接続しているピン番号 + cfg.pin_d1 = 46; // D1を接続しているピン番号 + cfg.pin_d2 = 3; // D2を接続しているピン番号 + cfg.pin_d3 = 8; // D3を接続しているピン番号 + cfg.pin_d4 = 18; // D4を接続しているピン番号 + cfg.pin_d5 = 17; // D5を接続しているピン番号 + cfg.pin_d6 = 16; // D6を接続しているピン番号 + cfg.pin_d7 = 15; // D7を接続しているピン番号 + _bus_instance->config(cfg); // 設定値をバスに反映します。 + _panel_instance->setBus(_bus_instance); // バスをパネルにセットします。 + } + + { // 表示パネル制御の設定を行います。 + auto cfg = _panel_instance->config(); // 表示パネル設定用の構造体を取得します。 + + cfg.pin_cs = -1; // CSが接続されているピン番号 (-1 = disable) + cfg.pin_rst = 4; // RSTが接続されているピン番号 (-1 = disable) + cfg.pin_busy = -1; // BUSYが接続されているピン番号 (-1 = disable) + + // ※ + // 以下の設定値はパネル毎に一般的な初期値が設定されていますので、不明な項目はコメントアウトして試してみてください。 + + cfg.panel_width = 320; // 実際に表示可能な幅 + cfg.panel_height = 480; // 実際に表示可能な高さ + cfg.offset_x = 0; // パネルのX方向オフセット量 + cfg.offset_y = 0; // パネルのY方向オフセット量 + cfg.offset_rotation = 0; // 回転方向の値のオフセット 0~7 (4~7は上下反転) + cfg.dummy_read_pixel = 8; // ピクセル読出し前のダミーリードのビット数 + cfg.dummy_read_bits = 1; // ピクセル以外のデータ読出し前のダミーリードのビット数 + cfg.readable = true; // データ読出しが可能な場合 trueに設定 + cfg.invert = true; // パネルの明暗が反転してしまう場合 trueに設定 + cfg.rgb_order = false; // パネルの赤と青が入れ替わってしまう場合 trueに設定 + cfg.dlen_16bit = false; // 16bitパラレルやSPIでデータ長を16bit単位で送信するパネルの場合 trueに設定 + cfg.bus_shared = true; // SDカードとバスを共有している場合 trueに設定(drawJpgFile等でバス制御を行います) + + // 以下はST7735やILI9163のようにピクセル数が可変のドライバで表示がずれる場合にのみ設定してください。 + // cfg.memory_width = 240; // ドライバICがサポートしている最大の幅 + // cfg.memory_height = 320; // ドライバICがサポートしている最大の高さ + + _panel_instance->config(cfg); + } + + { // タッチスクリーン制御の設定を行います。(必要なければ削除) + auto cfg = _touch_instance->config(); + + cfg.x_min = 0; // タッチスクリーンから得られる最小のX値(生の値) + cfg.x_max = 319; // タッチスクリーンから得られる最大のX値(生の値) + cfg.y_min = 0; // タッチスクリーンから得られる最小のY値(生の値) + cfg.y_max = 479; // タッチスクリーンから得られる最大のY値(生の値) + cfg.pin_int = 7; // INTが接続されているピン番号 + cfg.bus_shared = true; // 画面と共通のバスを使用している場合 trueを設定 + cfg.offset_rotation = 0; // 表示とタッチの向きのが一致しない場合の調整 0~7の値で設定 + // I2C接続の場合 + cfg.i2c_port = 1; // 使用するI2Cを選択 (0 or 1) + cfg.i2c_addr = 0x38; // I2Cデバイスアドレス番号 + cfg.pin_sda = 6; // SDAが接続されているピン番号 + cfg.pin_scl = 5; // SCLが接続されているピン番号 + cfg.freq = 400000; // I2Cクロックを設定 + + _touch_instance->config(cfg); + _panel_instance->setTouch(_touch_instance); // タッチスクリーンをパネルにセットします。 + } +#else + 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); + lgfx::IBus* _bus_instance = _init_bus(&preferences); + this->tft_driver = preferences.getUInt("DRIVER", get_tft_driver()); + lgfx::Panel_Device* _panel_instance = _init_panel(_bus_instance); + if(_panel_instance != nullptr) { + _panel_instance->setBus(_bus_instance); + configure_panel(_panel_instance, &preferences); } lgfx::ITouch* touch = _init_touch(&preferences); - if(touch != nullptr) { - panel->setTouch(touch); - } +#endif - tft.setPanel(panel); + tft.setPanel(_panel_instance); + + lgfx::v1::ITouch* touch = _panel_instance->getTouch(); + if(touch) { + LOG_INFO(TAG_TFT, F("Touch " D_SERVICE_STARTED)); + } else { + LOG_WARNING(TAG_TFT, F("Touch " D_SERVICE_START_FAILED)); + } /* TFT init */ LOG_DEBUG(TAG_TFT, F("%s - %d"), __FILE__, __LINE__); @@ -379,71 +525,99 @@ void LovyanGfx::show_info() { splashscreen(); - LOG_VERBOSE(TAG_TFT, F("LovyanGFX : v%d.%d.%d"), LGFX_VERSION_MAJOR, LGFX_VERSION_MINOR, LGFX_VERSION_PATCH); + LOG_VERBOSE(TAG_TFT, F("LovyanGFX : v%d.%d.%d"), LGFX_VERSION_MAJOR, LGFX_VERSION_MINOR, LGFX_VERSION_PATCH); + auto panel = tft.getPanel(); + if(!panel) return; -#ifdef ESP32_PARALLEL - { - // LOG_VERBOSE(TAG_TFT, F("Interface : Parallel")); - // auto bus = _bus_instance; - // auto cfg = bus->config(); // Get the structure for bus configuration. - // tftPinInfo(F("TFT_WR"), cfg.pin_wr); - // tftPinInfo(F("TFT_RD"), cfg.pin_rd); - // tftPinInfo(F("TFT_RS"), cfg.pin_rs); + if(!panel->getBus()) return; + lgfx::v1::bus_type_t bus_type = panel->getBus()->busType(); - // tftPinInfo(F("TFT_D0"), cfg.pin_d0); - // tftPinInfo(F("TFT_D1"), cfg.pin_d1); - // tftPinInfo(F("TFT_D2"), cfg.pin_d2); - // tftPinInfo(F("TFT_D3"), cfg.pin_d3); - // tftPinInfo(F("TFT_D4"), cfg.pin_d4); - // tftPinInfo(F("TFT_D5"), cfg.pin_d5); - // tftPinInfo(F("TFT_D6"), cfg.pin_d6); - // tftPinInfo(F("TFT_D7"), cfg.pin_d7); + if(bus_type == lgfx::v1::bus_parallel8) { + LOG_VERBOSE(TAG_TFT, F("Interface : Parallel 8bit")); + auto bus = (lgfx::Bus_Parallel8*)panel->getBus(); + auto cfg = bus->config(); // Get the structure for bus configuration. + tftPinInfo(F("TFT_WR"), cfg.pin_wr); + tftPinInfo(F("TFT_RD"), cfg.pin_rd); + tftPinInfo(F("TFT_RS"), cfg.pin_rs); + + tftPinInfo(F("TFT_D0"), cfg.pin_d0); + tftPinInfo(F("TFT_D1"), cfg.pin_d1); + tftPinInfo(F("TFT_D2"), cfg.pin_d2); + tftPinInfo(F("TFT_D3"), cfg.pin_d3); + tftPinInfo(F("TFT_D4"), cfg.pin_d4); + tftPinInfo(F("TFT_D5"), cfg.pin_d5); + tftPinInfo(F("TFT_D6"), cfg.pin_d6); + tftPinInfo(F("TFT_D7"), cfg.pin_d7); } -#else - { - LOG_VERBOSE(TAG_TFT, F("Interface : Serial")); - auto panel = tft.getPanel(); + + if(bus_type == lgfx::v1::bus_parallel16) { + LOG_VERBOSE(TAG_TFT, F("Interface : Parallel 16bit")); + auto bus = (lgfx::v1::Bus_Parallel16*)panel->getBus(); + auto cfg = bus->config(); // Get the structure for bus configuration. + tftPinInfo(F("TFT_WR"), cfg.pin_wr); + tftPinInfo(F("TFT_RD"), cfg.pin_rd); + tftPinInfo(F("TFT_RS"), cfg.pin_rs); + + tftPinInfo(F("TFT_D0"), cfg.pin_d0); + tftPinInfo(F("TFT_D1"), cfg.pin_d1); + tftPinInfo(F("TFT_D2"), cfg.pin_d2); + tftPinInfo(F("TFT_D3"), cfg.pin_d3); + tftPinInfo(F("TFT_D4"), cfg.pin_d4); + tftPinInfo(F("TFT_D5"), cfg.pin_d5); + tftPinInfo(F("TFT_D6"), cfg.pin_d6); + tftPinInfo(F("TFT_D7"), cfg.pin_d7); + tftPinInfo(F("TFT_D1"), cfg.pin_d8); + tftPinInfo(F("TFT_D1"), cfg.pin_d9); + tftPinInfo(F("TFT_D1"), cfg.pin_d10); + tftPinInfo(F("TFT_D1"), cfg.pin_d11); + tftPinInfo(F("TFT_D1"), cfg.pin_d12); + tftPinInfo(F("TFT_D1"), cfg.pin_d13); + tftPinInfo(F("TFT_D1"), cfg.pin_d14); + tftPinInfo(F("TFT_D1"), cfg.pin_d15); + } + + if(bus_type == lgfx::v1::bus_spi) { + LOG_VERBOSE(TAG_TFT, F("Interface : Serial")); auto bus = (lgfx::Bus_SPI*)panel->getBus(); auto cfg = bus->config(); // Get the structure for bus configuration. - tftPinInfo(F("MOSI"), cfg.pin_mosi); - tftPinInfo(F("MISO"), cfg.pin_miso); - tftPinInfo(F("SCLK"), cfg.pin_sclk); + tftPinInfo(F("TFT_MOSI"), cfg.pin_mosi); + tftPinInfo(F("TFT_MISO"), cfg.pin_miso); + tftPinInfo(F("TFT_SCLK"), cfg.pin_sclk); tftPinInfo(F("TFT_DC"), cfg.pin_dc); } -#endif { - auto panel = tft.getPanel(); - auto cfg = panel->config(); // Get the structure for panel configuration. + auto cfg = panel->config(); // Get the structure for panel configuration. tftPinInfo(F("TFT_CS"), cfg.pin_cs); tftPinInfo(F("TFT_RST"), cfg.pin_rst); + tftPinInfo(F("TFT_BUSY"), cfg.pin_busy); } -#ifndef ESP32_PARALLEL - { - auto panel = tft.getPanel(); + if(bus_type == lgfx::v1::bus_spi) { auto bus = (lgfx::Bus_SPI*)panel->getBus(); auto cfg = bus->config(); // Get the structure for bus configuration. uint32_t freq = cfg.freq_write / 100000; - LOG_VERBOSE(TAG_TFT, F("Display SPI freq. : %d.%d MHz"), freq / 10, freq % 10); + LOG_VERBOSE(TAG_TFT, F("TFT SPI freq: %d.%d MHz"), freq / 10, freq % 10); } -#endif - { - // auto cfg = tft._touch_instance->config(); // Get the structure for bus configuration. - // if(cfg.pin_cs != -1) { - // tftPinInfo(F("TOUCH_CS"), cfg.pin_cs); - // uint32_t freq = cfg.freq / 100000; - // LOG_VERBOSE(TAG_TFT, F("Touch SPI freq. : %d.%d MHz"), freq / 10, freq % 10); - // } - // if(cfg.pin_sda != -1) { - // tftPinInfo(F("TOUCH_SDA"), cfg.pin_sda); - // } - // if(cfg.pin_scl != -1) { - // tftPinInfo(F("TOUCH_SCL"), cfg.pin_scl); - // uint32_t freq = cfg.freq / 100000; - // LOG_VERBOSE(TAG_TFT, F("Touch I2C freq. : %d.%d MHz"), freq / 10, freq % 10); - // } + lgfx::v1::ITouch* touch = panel->getTouch(); + if(touch) { + auto cfg = touch->config(); // Get the structure for bus configuration. + uint32_t freq = cfg.freq / 100000; + tftPinInfo(F("TOUCH_INT"), cfg.pin_int); + tftPinInfo(F("TOUCH_RST"), cfg.pin_rst); + if(touch->isSPI()) { + tftPinInfo(F("TOUCH_MISO"), cfg.pin_miso); + tftPinInfo(F("TOUCH_MOSI"), cfg.pin_mosi); + tftPinInfo(F("TOUCH_SCLK"), cfg.pin_sclk); + tftPinInfo(F("TOUCH_CS"), cfg.pin_cs); + LOG_VERBOSE(TAG_TFT, F("Touch SPI freq. : %d.%d MHz"), freq / 10, freq % 10); + } else { + tftPinInfo(F("TOUCH_SDA"), cfg.pin_sda); + tftPinInfo(F("TOUCH_SCL"), cfg.pin_scl); + tftPinInfo(F("TOUCH_ADDR"), cfg.i2c_addr); + LOG_VERBOSE(TAG_TFT, F("Touch I2C freq. : %d.%d MHz"), freq / 10, freq % 10); + } } } @@ -458,11 +632,12 @@ void LovyanGfx::splashscreen() int x = (tft.width() - logoWidth) / 2; int y = (tft.height() - logoHeight) / 2; tft.drawXBitmap(x, y, logoImage, logoWidth, logoHeight, fgColor.full); + // tft.fillSmoothRoundRect(x, y, logoWidth, logoWidth, 15, fgColor.full); } void LovyanGfx::set_rotation(uint8_t rotation) { - LOG_VERBOSE(TAG_TFT, F("Rotation : %d"), rotation); + LOG_VERBOSE(TAG_TFT, F("Rotation : %d"), rotation); tft.setRotation(rotation); } @@ -471,7 +646,7 @@ void LovyanGfx::set_invert(bool invert) char buffer[4]; memcpy_P(buffer, invert ? PSTR(D_YES) : PSTR(D_NO), sizeof(buffer)); - LOG_VERBOSE(TAG_TFT, F("Invert Disp: %s"), buffer); + LOG_VERBOSE(TAG_TFT, F("Invert Color: %s"), buffer); tft.invertDisplay(invert); } @@ -493,97 +668,51 @@ void IRAM_ATTR LovyanGfx::flush_pixels(lv_disp_drv_t* disp, const lv_area_t* are bool LovyanGfx::is_driver_pin(uint8_t pin) { - if(false // start condition is always needed + auto panel = tft.getPanel(); + if(panel && panel->getBus()) { + lgfx::v1::bus_type_t bus_type = panel->getBus()->busType(); -// Use individual checks instead of switch statement, as some case labels could be duplicated -#ifdef TOUCH_CS - || (pin == TOUCH_CS) -#endif -#ifdef TFT_MOSI - || (pin == TFT_MOSI) -#endif -#ifdef TFT_MISO - || (pin == TFT_MISO) -#endif -#ifdef TFT_SCLK - || (pin == TFT_SCLK) -#endif -#ifdef TFT_CS - || (pin == TFT_CS) -#endif -#ifdef TFT_DC - || (pin == TFT_DC) -#endif -#ifdef TFT_BL - || (pin == TFT_BL) -#endif -#ifdef TFT_RST - || (pin == TFT_RST) -#endif -#ifdef TFT_WR - || (pin == TFT_WR) -#endif -#ifdef TFT_RD - || (pin == TFT_RD) -#endif -#ifdef TFT_D0 - || (pin == TFT_D0) -#endif -#ifdef TFT_D1 - || (pin == TFT_D1) -#endif -#ifdef TFT_D2 - || (pin == TFT_D2) -#endif -#ifdef TFT_D3 - || (pin == TFT_D3) -#endif -#ifdef TFT_D4 - || (pin == TFT_D4) -#endif -#ifdef TFT_D5 - || (pin == TFT_D5) -#endif -#ifdef TFT_D6 - || (pin == TFT_D6) -#endif -#ifdef TFT_D7 - || (pin == TFT_D7) -#endif -#ifdef TFT_D8 - || (pin == TFT_D8) -#endif -#ifdef TFT_D9 - || (pin == TFT_D9) -#endif -#ifdef TFT_D10 - || (pin == TFT_D10) -#endif -#ifdef TFT_D11 - || (pin == TFT_D11) -#endif -#ifdef TFT_D12 - || (pin == TFT_D12) -#endif -#ifdef TFT_D13 - || (pin == TFT_D13) -#endif -#ifdef TFT_D14 - || (pin == TFT_D14) -#endif -#ifdef TFT_D15 - || (pin == TFT_D15) -#endif - ) { - return true; + if(bus_type == lgfx::v1::bus_parallel8) { + auto bus = (lgfx::Bus_Parallel8*)panel->getBus(); + auto cfg = bus->config(); // Get the structure for bus configuration. + if(pin == cfg.pin_wr || pin == cfg.pin_rd || pin == cfg.pin_rs || pin == cfg.pin_d0 || pin == cfg.pin_d1 || + pin == cfg.pin_d2 || pin == cfg.pin_d3 || pin == cfg.pin_d4 || pin == cfg.pin_d5 || pin == cfg.pin_d6 || + pin == cfg.pin_d7) + return true; + + } else if(bus_type == lgfx::v1::bus_parallel16) { + auto bus = (lgfx::v1::Bus_Parallel16*)panel->getBus(); + auto cfg = bus->config(); // Get the structure for bus configuration. + if(cfg.pin_wr || pin == cfg.pin_rd || pin == cfg.pin_rs || pin == cfg.pin_d0 || pin == cfg.pin_d1 || + pin == cfg.pin_d2 || pin == cfg.pin_d3 || pin == cfg.pin_d4 || pin == cfg.pin_d5 || pin == cfg.pin_d6 || + pin == cfg.pin_d7 || pin == cfg.pin_d8 || pin == cfg.pin_d9 || pin == cfg.pin_d10 || + pin == cfg.pin_d11 || pin == cfg.pin_d12 || pin == cfg.pin_d13 || pin == cfg.pin_d14 || + pin == cfg.pin_d15) + return true; + + } else if(bus_type == lgfx::v1::bus_spi) { + auto bus = (lgfx::Bus_SPI*)panel->getBus(); + auto cfg = bus->config(); // Get the structure for bus configuration. + if(pin == cfg.pin_mosi || pin == cfg.pin_miso || pin == cfg.pin_sclk || pin == cfg.pin_dc) return true; + } + + { + auto cfg = panel->config(); // Get the structure for panel configuration. + if(pin == cfg.pin_cs || pin == cfg.pin_rst || pin == cfg.pin_busy) return true; + } + + lgfx::v1::ITouch* touch = panel->getTouch(); + if(touch) { + auto cfg = touch->config(); // Get the structure for bus configuration. + if(pin == cfg.pin_int || pin == cfg.pin_rst) return true; + if(touch->isSPI()) { + if(pin == cfg.pin_miso || pin == cfg.pin_mosi || pin == cfg.pin_sclk || pin == cfg.pin_cs) return true; + } else { + if(pin == cfg.pin_sda || pin == cfg.pin_scl) return true; + } + } } -#ifdef ARDUINO_ARCH_ESP8266 -#ifndef TFT_SPI_OVERLAP - if((pin >= 12) && (pin <= 14)) return true; // HSPI -#endif -#endif - return false; } diff --git a/src/drv/touch/touch_driver_ft6336u.h b/src/drv/touch/touch_driver_ft6336u.h index b2d16219..6a0c72a9 100644 --- a/src/drv/touch/touch_driver_ft6336u.h +++ b/src/drv/touch/touch_driver_ft6336u.h @@ -4,7 +4,7 @@ #ifndef HASP_FT6336T_TOUCH_DRIVER_H #define HASP_FT6336T_TOUCH_DRIVER_H -#ifdef ARDUINO +#if defined(ARDUINO) && !defined(HASP_USE_LGFX_TOUCH) #include #include "ArduinoLog.h" #include "hasp_conf.h"