mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-12 08:19:39 +00:00
44 lines
1.2 KiB
C++
44 lines
1.2 KiB
C++
#include "configuration.h"
|
|
|
|
#ifdef HAS_CST226SE
|
|
|
|
#include "TouchDrvCSTXXX.hpp"
|
|
#include "input/TouchScreenImpl1.h"
|
|
#include <Wire.h>
|
|
|
|
TouchDrvCSTXXX tsPanel;
|
|
static constexpr uint8_t PossibleAddresses[2] = {CST226SE_ADDR, CST226SE_ADDR_ALT};
|
|
uint8_t i2cAddress = 0;
|
|
|
|
bool readTouch(int16_t *x, int16_t *y)
|
|
{
|
|
int16_t x_array[1], y_array[1];
|
|
uint8_t touched = tsPanel.getPoint(x_array, y_array, 1);
|
|
if (touched > 0) {
|
|
*y = x_array[0];
|
|
*x = (TFT_WIDTH - y_array[0]);
|
|
// Check bounds
|
|
if (*x < 0 || *x >= TFT_WIDTH || *y < 0 || *y >= TFT_HEIGHT) {
|
|
return false;
|
|
}
|
|
return true; // Valid touch detected
|
|
}
|
|
return false; // No valid touch data
|
|
}
|
|
|
|
void lateInitVariant()
|
|
{
|
|
tsPanel.setTouchDrvModel(TouchDrv_CST226);
|
|
for (uint8_t addr : PossibleAddresses) {
|
|
if (tsPanel.begin(Wire, addr, I2C_SDA, I2C_SCL)) {
|
|
i2cAddress = addr;
|
|
LOG_DEBUG("CST226SE init OK at address 0x%02X", addr);
|
|
touchScreenImpl1 = new TouchScreenImpl1(TFT_WIDTH, TFT_HEIGHT, readTouch);
|
|
touchScreenImpl1->init();
|
|
return;
|
|
}
|
|
}
|
|
LOG_ERROR("CST226SE init failed at all known addresses");
|
|
}
|
|
#endif
|