mirror of https://github.com/arendst/Tasmota.git
add xpt2046 option for spi bus 2 (#18480)
* allow spi bus 2 * xpt spi bus 2 * xpt option bus * xpt option spi bus 2 * exclude c3 * exclude s2 * fix s3 * typo
This commit is contained in:
parent
f9e3b25c9b
commit
799ba675eb
|
@ -30,10 +30,31 @@
|
||||||
static XPT2046_Touchscreen *isrPinptr;
|
static XPT2046_Touchscreen *isrPinptr;
|
||||||
void isrPin(void);
|
void isrPin(void);
|
||||||
|
|
||||||
bool XPT2046_Touchscreen::begin(SPIClass &wspi)
|
bool XPT2046_Touchscreen::begin(SPIClass &wspi) {
|
||||||
{
|
|
||||||
|
#ifdef ESP32
|
||||||
|
if (!bus) {
|
||||||
|
_pspi = &wspi;
|
||||||
|
} else {
|
||||||
|
#ifndef CONFIG_IDF_TARGET_ESP32C3
|
||||||
|
#ifndef CONFIG_IDF_TARGET_ESP32S2
|
||||||
|
if (bus == 1) {
|
||||||
|
_pspi = new SPIClass(HSPI);
|
||||||
|
} else {
|
||||||
|
#ifndef CONFIG_IDF_TARGET_ESP32S3
|
||||||
|
_pspi = new SPIClass(VSPI);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
//Serial.printf("sclk=%d :: miso=%d, mosi=%d, irq=%d, bus=%d ", sclk, miso, mosi, tirqPin, bus);
|
||||||
|
_pspi->begin(sclk, miso, mosi, -1);
|
||||||
|
#else
|
||||||
_pspi = &wspi;
|
_pspi = &wspi;
|
||||||
_pspi->begin();
|
_pspi->begin();
|
||||||
|
#endif
|
||||||
|
|
||||||
pinMode(csPin, OUTPUT);
|
pinMode(csPin, OUTPUT);
|
||||||
digitalWrite(csPin, HIGH);
|
digitalWrite(csPin, HIGH);
|
||||||
if (255 != tirqPin) {
|
if (255 != tirqPin) {
|
||||||
|
|
|
@ -47,8 +47,8 @@ public:
|
||||||
|
|
||||||
class XPT2046_Touchscreen {
|
class XPT2046_Touchscreen {
|
||||||
public:
|
public:
|
||||||
constexpr XPT2046_Touchscreen(uint8_t cspin, uint8_t tirq=255)
|
constexpr XPT2046_Touchscreen(uint8_t cspin, uint8_t tirq=255, uint8_t bus=0, uint8_t sclk=0, uint8_t miso=0, uint8_t mosi=0)
|
||||||
: csPin(cspin), tirqPin(tirq) { }
|
: csPin(cspin), tirqPin(tirq), bus(bus), sclk(sclk), miso(miso), mosi(mosi) { }
|
||||||
bool begin(SPIClass &wspi = SPI);
|
bool begin(SPIClass &wspi = SPI);
|
||||||
#if defined(_FLEXIO_SPI_H_)
|
#if defined(_FLEXIO_SPI_H_)
|
||||||
bool begin(FlexIOSPI &wflexspi);
|
bool begin(FlexIOSPI &wflexspi);
|
||||||
|
@ -66,7 +66,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void update();
|
void update();
|
||||||
uint8_t csPin, tirqPin, rotation=1;
|
uint8_t csPin, tirqPin, rotation=1, bus=0, sclk=0, miso=0, mosi=0;
|
||||||
int16_t xraw=0, yraw=0, zraw=0;
|
int16_t xraw=0, yraw=0, zraw=0;
|
||||||
uint32_t msraw=0x80000000;
|
uint32_t msraw=0x80000000;
|
||||||
SPIClass *_pspi = nullptr;
|
SPIClass *_pspi = nullptr;
|
||||||
|
|
|
@ -228,6 +228,8 @@ bool GT911_Touch_Init(TwoWire *i2c, int8_t irq_pin, int8_t rst_pin, uint16_t xs,
|
||||||
if (ESP_OK == GT911_touchp->begin(i2c, irq_pin, rst_pin, xs, ys)) {
|
if (ESP_OK == GT911_touchp->begin(i2c, irq_pin, rst_pin, xs, ys)) {
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR("TI: GT911"));
|
AddLog(LOG_LEVEL_INFO, PSTR("TI: GT911"));
|
||||||
GT911_found = true;
|
GT911_found = true;
|
||||||
|
} else {
|
||||||
|
AddLog(LOG_LEVEL_INFO, PSTR("TI: GT911 failed"));
|
||||||
}
|
}
|
||||||
return GT911_found;
|
return GT911_found;
|
||||||
}
|
}
|
||||||
|
@ -247,8 +249,31 @@ void GT911_CheckTouch(void) {
|
||||||
#include <XPT2046_Touchscreen.h>
|
#include <XPT2046_Touchscreen.h>
|
||||||
XPT2046_Touchscreen *XPT2046_touchp;
|
XPT2046_Touchscreen *XPT2046_touchp;
|
||||||
|
|
||||||
bool XPT2046_Touch_Init(uint16_t CS) {
|
bool XPT2046_Touch_Init(uint16_t CS, int8_t irqpin, uint8_t bus) {
|
||||||
XPT2046_touchp = new XPT2046_Touchscreen(CS);
|
int8_t sclk = -1;
|
||||||
|
int8_t mosi = -1;
|
||||||
|
int8_t miso = -1;
|
||||||
|
uint8_t xbus = bus;
|
||||||
|
bus &= 1;
|
||||||
|
#ifdef ESP32
|
||||||
|
if (PinUsed(GPIO_SPI_CLK, bus) && PinUsed(GPIO_SPI_MISO, bus) && PinUsed(GPIO_SPI_MOSI, bus)) {
|
||||||
|
// must init SPI with pins
|
||||||
|
sclk = Pin(GPIO_SPI_CLK, bus);
|
||||||
|
miso = Pin(GPIO_SPI_MISO, bus);
|
||||||
|
mosi = Pin(GPIO_SPI_MOSI, bus);
|
||||||
|
}
|
||||||
|
#endif // ESP32
|
||||||
|
|
||||||
|
#ifdef ESP8266
|
||||||
|
if (PinUsed(GPIO_SPI_CLK) && PinUsed(GPIO_SPI_MISO) && PinUsed(GPIO_SPI_MOSI)) {
|
||||||
|
// must init SPI with pins
|
||||||
|
sclk = Pin(GPIO_SPI_CLK);
|
||||||
|
miso = Pin(GPIO_SPI_MISO);
|
||||||
|
mosi = Pin(GPIO_SPI_MOSI);
|
||||||
|
}
|
||||||
|
#endif // ESP8266
|
||||||
|
|
||||||
|
XPT2046_touchp = new XPT2046_Touchscreen(CS, irqpin, xbus, sclk, miso, mosi);
|
||||||
XPT2046_found = XPT2046_touchp->begin();
|
XPT2046_found = XPT2046_touchp->begin();
|
||||||
if (XPT2046_found) {
|
if (XPT2046_found) {
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR("TS: XPT2046"));
|
AddLog(LOG_LEVEL_INFO, PSTR("TS: XPT2046"));
|
||||||
|
|
|
@ -132,7 +132,7 @@ void ILI9341_InitDriver()
|
||||||
#endif // ESP32
|
#endif // ESP32
|
||||||
|
|
||||||
#ifdef USE_XPT2046
|
#ifdef USE_XPT2046
|
||||||
XPT2046_Touch_Init(Pin(GPIO_XPT2046_CS));
|
XPT2046_Touch_Init(Pin(GPIO_XPT2046_CS),-1,0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tft_init_done = true;
|
tft_init_done = true;
|
||||||
|
|
|
@ -394,7 +394,17 @@ int8_t cs;
|
||||||
if (cp) {
|
if (cp) {
|
||||||
cp += 4;
|
cp += 4;
|
||||||
uint8_t touch_cs = replacepin(&cp, Pin(GPIO_XPT2046_CS));
|
uint8_t touch_cs = replacepin(&cp, Pin(GPIO_XPT2046_CS));
|
||||||
XPT2046_Touch_Init(touch_cs);
|
int8_t irqpin = -1;
|
||||||
|
if (*(cp - 1) == ',') {
|
||||||
|
irqpin = strtol(cp, &cp, 10);
|
||||||
|
}
|
||||||
|
uint8_t bus = 1;
|
||||||
|
if (*cp == ',') {
|
||||||
|
cp++;
|
||||||
|
bus = strtol(cp, &cp, 10);
|
||||||
|
if (bus < 1) bus = 1;
|
||||||
|
}
|
||||||
|
XPT2046_Touch_Init(touch_cs, irqpin, bus - 1);
|
||||||
}
|
}
|
||||||
#endif // USE_XPT2046
|
#endif // USE_XPT2046
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue