fix resistive Touch xpt for 2 spi busses (#21814)

* fix xpt touch for 2 spi busses

* support for 2 utouch spi busses

* Update support.ino
This commit is contained in:
gemu 2024-07-22 13:58:50 +02:00 committed by GitHub
parent 9878a96c0b
commit 58485dec2a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 38 additions and 8 deletions

View File

@ -30,6 +30,7 @@
#include "tasmota_options.h"
extern int Cache_WriteBack_Addr(uint32_t addr, uint32_t size);
@ -2020,11 +2021,15 @@ bool uDisplay::utouch_Init(char **name) {
attachInterrupt(ut_irq, ut_touch_irq, FALLING);
}
extern SPIClass *Init_SPI_Bus(uint32 bus);
if (ut_spi_nr == spi_nr) {
// same as display
ut_spi = uspi;
} else {
// not yet
ut_spi = nullptr;
#ifdef ESP32
ut_spi = Init_SPI_Bus(ut_spi_nr);
#endif
}
return ut_execute(ut_init_code);
}
@ -2245,7 +2250,6 @@ void uDisplay::pushColors(uint16_t *data, uint16_t len, boolean not_swapped) {
} else {
uint16_t *fb_y = rgb_fb + (int32_t)seta_yp1 * _width;
for (uint32_t y = seta_yp1; y < seta_yp2; y++) {
seta_yp1++;
uint16_t * fb_xy = fb_y + seta_xp1;
// we get the 'not_swapped' test outside of the inner loop
if (not_swapped) {
@ -2254,7 +2258,7 @@ void uDisplay::pushColors(uint16_t *data, uint16_t len, boolean not_swapped) {
*fb_xy = color;
fb_xy++;
lenc--;
if (!lenc) goto update_cache; // failsafe - exist if len (pixel number) is exhausted
if (!lenc) break; // failsafe - exist if len (pixel number) is exhausted
}
} else {
for (uint32_t x = seta_xp1; x < seta_xp2; x++) {
@ -2263,16 +2267,18 @@ void uDisplay::pushColors(uint16_t *data, uint16_t len, boolean not_swapped) {
*fb_xy = color;
fb_xy++;
lenc--;
if (!lenc) goto update_cache; // failsafe - exist if len (pixel number) is exhausted
if (!lenc) break; // failsafe - exist if len (pixel number) is exhausted
}
}
uint16_t * flush_ptr = rgb_fb + (int32_t)seta_yp1 * _width + seta_xp1;
esp_cache_msync(flush_ptr, (seta_xp2 - seta_xp1) * 2, 0);
fb_y += _width;
seta_yp1++;
if (!lenc) break;
}
// using esp_cache_msync() to flush the PSRAM cache and ensure that all data is actually written to PSRAM
// from https://github.com/espressif/esp-idf/blob/636ff35b52f10e1a804a3760a5bd94e68f4b1b71/components/esp_lcd/rgb/esp_lcd_panel_rgb.c#L159
update_cache:
uint16_t * flush_ptr = rgb_fb + (int32_t)seta_yp1 * _width;
esp_cache_msync(flush_ptr, len * 2, 0);
}
#endif
return;

View File

@ -1784,6 +1784,7 @@ bool ValidGPIO(uint32_t pin, uint32_t gpio) {
return (GPIO_USER == ValidPin(pin, BGPIO(gpio))); // Only allow GPIO_USER pins
}
bool ValidSpiPinUsed(uint32_t gpio) {
// ESP8266: If SPI pin selected chk if it's not one of the three Hardware SPI pins (12..14)
bool result = false;
@ -1794,6 +1795,29 @@ bool ValidSpiPinUsed(uint32_t gpio) {
return result;
}
#ifdef ESP32
#ifndef FIRMWARE_SAFEBOOT
SPIClass *Init_SPI_Bus(uint32 bus) {
SPIClass *spi;
if (1 == bus) {
if (TasmotaGlobal.spi_enabled) {
spi = &SPI;
spi->begin(Pin(GPIO_SPI_CLK, 0), Pin(GPIO_SPI_MISO, 0), Pin(GPIO_SPI_MOSI, 0), -1);
return spi;
}
}
if (2 == bus) {
if (TasmotaGlobal.spi_enabled2) {
spi = new SPIClass(HSPI);
spi->begin(Pin(GPIO_SPI_CLK, 1), Pin(GPIO_SPI_MISO, 1), Pin(GPIO_SPI_MOSI, 1), -1);
return spi;
}
}
return nullptr;
}
#endif // FIRMWARE_SAFEBOOT
#endif // ESP32
bool JsonTemplate(char* dataBuf)
{
// Old: {"NAME":"Shelly 2.5","GPIO":[56,0,17,0,21,83,0,0,6,82,5,22,156],"FLAG":2,"BASE":18}