29#include "../SensorBuildOpt.h"
30#if !SENSORLIB_EXCLUDE_TOUCH_CST226
50 static constexpr uint8_t POINT_BUFFER_SIZE = 28;
51 static constexpr uint8_t STATUS_REG = 0x00;
52 uint8_t buffer[POINT_BUFFER_SIZE] = {0};
58 if (
readRegBuff(STATUS_REG, buffer, POINT_BUFFER_SIZE) == 0) {
60 if (buffer[0] == 0x83 && buffer[1] == 0x17 && buffer[5] == 0x80) {
72 uint8_t numPoints = buffer[5] & 0x7F;
75 if (numPoints == 0 || numPoints > MAX_FINGER_NUM) {
81 for (
int i = 0;
i < numPoints;
i++) {
82 const uint16_t
x = (buffer[index + 1] << 4) | ((buffer[index + 3] >> 4) & 0x0F);
83 const uint16_t
y = (buffer[index + 2] << 4) | (buffer[index + 3] & 0x0F);
84 const uint16_t
pressure = buffer[index + 4];
85 const uint8_t
id = (buffer[index] & 0xF0) >> 4;
86 const uint8_t
event = buffer[index] & 0x0F;
88 index = (
i == 0) ? (index + 7) : (index + 5);
99 case CST226SE_CHIPTYPE:
101 case CST328_CHIPTYPE:
103 case CST3240_CHIPTYPE:
114#ifdef ARDUINO_ARCH_ESP32
124bool TouchDrvCST226::initImpl(uint8_t)
130 uint8_t write_buffer[2] = {0xD1, 0xFC};
133 uint32_t checkcode = (buffer[3] << 24) | (buffer[2] << 16) | (buffer[1] << 8) | buffer[0];
136 write_buffer[0] = 0xD1;
137 write_buffer[1] = 0xF8;
143 write_buffer[0] = 0xD2;
144 write_buffer[1] = 0x04;
146 uint32_t chipType = buffer[3];
148 chipType |= buffer[2];
151 uint32_t ProjectID = buffer[1];
153 ProjectID |= buffer[0];
154 SENSORLIB_LOG_I(
"Chip type: 0x%04" PRIX32
", ProjectID: 0x%04" PRIX32, chipType, ProjectID);
157 write_buffer[0] = 0xD2;
158 write_buffer[1] = 0x08;
161 uint32_t fwVersion = buffer[3];
163 fwVersion |= buffer[2];
165 fwVersion |= buffer[1];
167 fwVersion |= buffer[0];
169 uint32_t checksum = buffer[7];
171 checksum |= buffer[6];
173 checksum |= buffer[5];
175 checksum |= buffer[4];
178 fwVersion, checksum);
180 if (fwVersion == 0xA5A5A5A5) {
184 if ((checkcode & 0xffff0000) != 0xCACA0000) {
190 case CST226SE_CHIPTYPE:
191 case CST3240_CHIPTYPE:
192 case CST328_CHIPTYPE:
195 SENSORLIB_LOG_E(
"Chip ID does not match, should be 0x%02" PRIX8
" ,but is 0x%02" PRIX32, CST226SE_CHIPTYPE, chipType);
#define SENSORLIB_LOG_I(...)
#define SENSORLIB_LOG_E(...)
SensorPressure pressure(bhy)
std::unique_ptr< SensorHal > hal
int writeReg(uint8_t reg, uint8_t val)
int writeThenRead(const uint8_t *write_buffer, size_t write_len, uint8_t *read_buffer, size_t read_len)
int readRegBuff(uint8_t reg, uint8_t *buf, size_t len) const
const char * getModelName() override
Get the model name.
void sleep() override
Puts the touch driver to sleep.
void reset() override
Reset the touch driver.
const TouchPoints & getTouchPoints() override
Get the touch points.
uint32_t _chipID
Chip identification value.
TouchConfig _touchConfig
Configuration for coordinate transformations.
void * _userData
User data for home button callback.
virtual void updateXY(TouchPoints &points) const
Apply coordinate transformations (swap, scale, mirror) to all touch points.
TouchPinsCfg _pinsCfg
Configuration for reset and interrupt pins.
TouchPoints _touchPoints
Touch points data.
uint8_t _maxTouchPoints
Maximum supported touch points.
HomeButtonCallback _HButtonCallback
Home button callback function.
Container for touch point data and optional gesture information.
bool addPoint(uint16_t x, uint16_t y, uint16_t pressure=0, uint8_t id=0, uint8_t event=0)
Adds a touch point to the container.
void clear()
Clears all stored touch points and gesture.