29#include "../SensorBuildOpt.h"
30#if !SENSORLIB_EXCLUDE_TOUCH_CST3530
34uint16_t TouchDrvCST3530::check_sum_16(
int val, uint8_t *
buf, uint16_t len)
37 while (len--) sum += *
buf++;
43 uint8_t numPoints = 0;
44 uint8_t keyNumber = 0;
51 if (!writeCommand(
READ_COMMAND, read_buffer,
sizeof(read_buffer))) {
56 if (read_buffer[2] != 0xFF) {
61 numPoints = read_buffer[3] & 0x0F;
62 keyNumber = (read_buffer[3] & 0xF0) >> 4;
69 for (uint8_t
i = 0;
i < numPoints;
i++) {
70 uint16_t idx = (keyNumber +
i) * 5;
74 const uint8_t pos_id = read_buffer[idx + 8] & 0x0F;
75 const uint8_t
event = read_buffer[idx + 8] >> 4;
76 const uint16_t pos_x = read_buffer[idx + 4] + ((uint16_t)(read_buffer[idx + 7] & 0x0F) << 8);
77 const uint16_t pos_y = read_buffer[idx + 5] + ((uint16_t)(read_buffer[idx + 7] & 0xF0) << 4);
78 const uint8_t
pressure = read_buffer[idx + 6];
80 if (check_sum_16(0x55, &read_buffer[4], (keyNumber + numPoints) * 5) != (read_buffer[0] | read_buffer[1] << 8)) {
102 writeCommand(0xD0000400);
104 writeCommand(0xD0000400);
111 writeCommand(0xD0000400);
113 writeCommand(0xD0000400);
114 writeCommand(0xD0000000);
115 writeCommand(0xD0000C00);
116 writeCommand(0xD0000100);
119bool TouchDrvCST3530::initImpl(uint8_t)
124 if (writeCommand(
INFO_COMMAND, buffer,
sizeof(buffer))) {
125 if (buffer[2] == 0xCA && buffer[3] == 0xCA) {
129 _chipID = buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];
137 SENSORLIB_LOG_D(
"Project ID:%04X", buffer[39] << 24 | buffer[38] << 16 | buffer[37] << 8 | buffer[36]);
139 SENSORLIB_LOG_D(
"Firmware Version:%04X", buffer[35] << 24 | buffer[34] << 16 | buffer[33] << 8 | buffer[32]);
#define SENSORLIB_LOG_D(...)
SensorPressure pressure(bhy)
std::unique_ptr< SensorHal > hal
static constexpr uint32_t SLEEP_COMMAND
static constexpr uint8_t MAX_FINGER_NUM
void wakeup() override
Wake up the touch driver.
static constexpr uint8_t MAX_READ_BYTES
const char * getModelName() override
Get the model name.
static constexpr uint32_t INFO_COMMAND
const TouchPoints & getTouchPoints() override
Get the touch points.
static constexpr uint32_t READ_COMMAND
static constexpr uint32_t CLEAR_COMMAND
void sleep() override
Puts the touch driver to sleep.
uint32_t _chipID
Chip identification value.
TouchConfig _touchConfig
Configuration for coordinate transformations.
virtual void reset()
Reset the touch controller.
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.
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.