feat(boards): Add Waveshare ESP32-C6-Touch-AMOLED-2.16 support
- Add complete board support for Waveshare ESP32-C6-Touch-AMOLED-2.16 with SH8601 display driver - Implement board initialization with AXP2101 PMU rail configuration for LCD and touch power - Add display driver for SH8601 QSPI panel (480×480 resolution) - Add CST9217 touch controller support via I2C - Add QMI8658 IMU initialization and sensor reading - Add AXP2101 power management and battery monitoring - Add input handling for BOOT button (GPIO 9) - Configure PlatformIO environment with C6-specific build flags and 16 MB flash layout - Update capability flags documentation to clarify BOARD_HAS_PSRAM build-flag macro usage - C6 has no external PSRAM; shared code gates on this flag to use internal SRAM and reduce LVGL buffer sizes - Screenshot capture disabled on this board due to internal SRAM constraints
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
#include "../../hal/touch_hal.h"
|
||||
#include "board.h"
|
||||
#include <Arduino.h>
|
||||
#include <Wire.h>
|
||||
#include <TouchDrvCSTXXX.hpp>
|
||||
|
||||
static TouchDrvCST92xx touch;
|
||||
|
||||
static volatile bool touch_data_ready = false;
|
||||
static volatile bool touch_pressed = false;
|
||||
static volatile uint16_t touch_x = 0;
|
||||
static volatile uint16_t touch_y = 0;
|
||||
|
||||
static void IRAM_ATTR touch_isr(void) {
|
||||
touch_data_ready = true;
|
||||
}
|
||||
|
||||
void touch_hal_init(void) {
|
||||
touch.setPins(TP_RST, TP_INT);
|
||||
if (!touch.begin(Wire, CST9220_ADDR, IIC_SDA, IIC_SCL)) {
|
||||
Serial.println("Touch init failed");
|
||||
return;
|
||||
}
|
||||
touch.setMaxCoordinates(LCD_WIDTH, LCD_HEIGHT);
|
||||
// C6 2.16 panel mapping (verified empirically): the CST9217's raw
|
||||
// axes are swapped relative to the SH8601 raster AND X is mirrored.
|
||||
// Matches the Waveshare BSP, which reads y = raw_byte1, x = W - raw_byte2.
|
||||
touch.setSwapXY(true);
|
||||
touch.setMirrorXY(true, false);
|
||||
pinMode(TP_INT, INPUT_PULLUP);
|
||||
attachInterrupt(TP_INT, touch_isr, FALLING);
|
||||
Serial.println("Touch init OK");
|
||||
}
|
||||
|
||||
void touch_hal_read(uint16_t* x, uint16_t* y, bool* pressed) {
|
||||
if (touch_data_ready) {
|
||||
touch_data_ready = false;
|
||||
int16_t tx[5], ty[5];
|
||||
uint8_t n = touch.getPoint(tx, ty, touch.getSupportTouchPoint());
|
||||
if (n > 0) {
|
||||
touch_pressed = true;
|
||||
touch_x = (uint16_t)tx[0];
|
||||
touch_y = (uint16_t)ty[0];
|
||||
} else {
|
||||
touch_pressed = false;
|
||||
}
|
||||
}
|
||||
*x = touch_x;
|
||||
*y = touch_y;
|
||||
*pressed = touch_pressed;
|
||||
}
|
||||
Reference in New Issue
Block a user