mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-25 20:26:41 +00:00
Update touch driver
This commit is contained in:
parent
57ffe9a3ba
commit
7d4e04560a
@ -15,8 +15,8 @@ bool IRAM_ATTR FT6336U_getXY(int16_t * touchX, int16_t * touchY, bool debug)
|
|||||||
{
|
{
|
||||||
if(touchpanel->read_touch_number() != 1) return false;
|
if(touchpanel->read_touch_number() != 1) return false;
|
||||||
|
|
||||||
*touchX = TFT_WIDTH - touchpanel->read_touch1_y();
|
*touchX = touchpanel->read_touch1_x();
|
||||||
*touchY = touchpanel->read_touch1_x();
|
*touchY = touchpanel->read_touch1_y();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,9 +27,12 @@
|
|||||||
|
|
||||||
#include "../hasp/hasp.h" // for hasp_sleep_state
|
#include "../hasp/hasp.h" // for hasp_sleep_state
|
||||||
extern uint8_t hasp_sleep_state;
|
extern uint8_t hasp_sleep_state;
|
||||||
|
static uint8_t drv_touch_rotation;
|
||||||
|
|
||||||
void drv_touch_init(uint8_t rotation)
|
void drv_touch_init(uint8_t rotation)
|
||||||
{
|
{
|
||||||
|
drv_touch_rotation = rotation;
|
||||||
|
|
||||||
#if TOUCH_DRIVER == 2046 // XPT2046 Resistive touch panel driver
|
#if TOUCH_DRIVER == 2046 // XPT2046 Resistive touch panel driver
|
||||||
#if defined(USE_FSMC)
|
#if defined(USE_FSMC)
|
||||||
xpt2046_init(rotation);
|
xpt2046_init(rotation);
|
||||||
@ -59,41 +62,120 @@ void drv_touch_init(uint8_t rotation)
|
|||||||
|
|
||||||
static inline bool drv_touchpad_getXY(int16_t * touchX, int16_t * touchY)
|
static inline bool drv_touchpad_getXY(int16_t * touchX, int16_t * touchY)
|
||||||
{
|
{
|
||||||
|
bool touched;
|
||||||
|
int16_t normal_x;
|
||||||
|
int16_t normal_y;
|
||||||
#if TOUCH_DRIVER == 2046 // XPT2046 Resistive touch panel driver
|
#if TOUCH_DRIVER == 2046 // XPT2046 Resistive touch panel driver
|
||||||
return tft_espi_get_touch(touchX, touchY, 300u);
|
touched = tft_espi_get_touch(&normal_x, &normal_y, 300u);
|
||||||
|
|
||||||
#elif TOUCH_DRIVER == 0x2046B
|
#elif TOUCH_DRIVER == 0x2046B
|
||||||
return XPT2046_getXY(touchX, touchY, true);
|
touched = XPT2046_getXY(&normal_x, &normal_y, true);
|
||||||
|
|
||||||
#elif TOUCH_DRIVER == 911
|
#elif TOUCH_DRIVER == 911
|
||||||
return GT911_getXY(touchX, touchY, true);
|
touched = GT911_getXY(&normal_x, &normal_y, true);
|
||||||
|
|
||||||
#elif TOUCH_DRIVER == 0xADC // Analog Digital Touch Conroller
|
#elif TOUCH_DRIVER == 0xADC // Analog Digital Touch Conroller
|
||||||
return Touch_getXY(touchX, touchY, false);
|
touched = Touch_getXY(&normal_x, &normal_y, false);
|
||||||
|
|
||||||
#elif TOUCH_DRIVER == 5206
|
#elif TOUCH_DRIVER == 5206
|
||||||
return FT5206_getXY(touchX, touchY, false);
|
touched = FT5206_getXY(&normal_x, &normal_y, false);
|
||||||
|
|
||||||
#elif TOUCH_DRIVER == 6336
|
#elif TOUCH_DRIVER == 6336
|
||||||
return FT6336U_getXY(touchX, touchY, true);
|
touched = FT6336U_getXY(&normal_x, &normal_y, true);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
// xpt2046_alt_drv_read(indev_driver, data);
|
// xpt2046_alt_drv_read(indev_driver, data);
|
||||||
// xpt2046_read(indev_driver, data);
|
// xpt2046_read(indev_driver, data);
|
||||||
// if(data->state && guiSleeping != HASP_SLEEP_OFF) guiCheckSleep();
|
// if(data->state && guiSleeping != HASP_SLEEP_OFF) guiCheckSleep();
|
||||||
return false;
|
touched = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
*touchX = normal_x;
|
||||||
|
*touchY = normal_y;
|
||||||
|
|
||||||
|
/*
|
||||||
|
// TFT_ROTATION values:
|
||||||
|
// 0 - 0 deg (= default when not set)
|
||||||
|
// 1 - 90 deg anti-clockwise (from 0 deg)
|
||||||
|
// 2 - 180 deg anti-clockwise
|
||||||
|
// 3 - 270 deg anti-clockwise
|
||||||
|
// 4 - mirror content, and rotate 180 deg anti-clockwise
|
||||||
|
// 5 - mirror content, and rotate 270 deg anti-clockwise
|
||||||
|
// 6 - mirror content, and rotate 0 deg anti-clockwise
|
||||||
|
// 7 - mirror content, and rotate 90 deg anti-clockwise
|
||||||
|
|
||||||
|
int16_t inv_x = TFT_WIDTH - normal_x;
|
||||||
|
int16_t inv_y = TFT_HEIGHT - normal_y;
|
||||||
|
// inv_y can be negative for area below screen of M5Core2
|
||||||
|
switch(drv_touch_rotation) {
|
||||||
|
case 0:
|
||||||
|
*touchX = normal_x;
|
||||||
|
*touchY = normal_y;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
*touchX = normal_y;
|
||||||
|
*touchY = inv_x;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
*touchX = inv_x;
|
||||||
|
*touchY = inv_y;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
*touchX = inv_y;
|
||||||
|
*touchY = normal_x;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// rotations 4-7 are mirrored
|
||||||
|
case 4:
|
||||||
|
*touchX = inv_y;
|
||||||
|
*touchY = inv_x;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
*touchX = normal_x;
|
||||||
|
*touchY = inv_y;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
*touchX = normal_y;
|
||||||
|
*touchY = normal_x;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
*touchX = inv_x;
|
||||||
|
*touchY = normal_y;
|
||||||
|
break;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
return touched;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool touch_rotate = true;
|
||||||
|
bool touch_invert_x = true;
|
||||||
|
bool touch_invert_y = false;
|
||||||
|
|
||||||
bool IRAM_ATTR drv_touch_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data)
|
bool IRAM_ATTR drv_touch_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data)
|
||||||
{
|
{
|
||||||
#if TOUCH_DRIVER > 0
|
#if TOUCH_DRIVER > 0
|
||||||
int16_t touchX, touchY;
|
int16_t touchX = 0;
|
||||||
bool touched = drv_touchpad_getXY(&touchX, &touchY);
|
int16_t touchY = 0;
|
||||||
if(touched && hasp_sleep_state != HASP_SLEEP_OFF) hasp_update_sleep_state(); // update Idle
|
bool touched;
|
||||||
|
|
||||||
|
if(touch_rotate) {
|
||||||
|
touched = drv_touchpad_getXY(&touchY, &touchX);
|
||||||
|
} else {
|
||||||
|
touched = drv_touchpad_getXY(&touchX, &touchY);
|
||||||
|
}
|
||||||
|
|
||||||
// Ignore first press?
|
// Ignore first press?
|
||||||
|
|
||||||
|
if(touched && hasp_sleep_state != HASP_SLEEP_OFF) hasp_update_sleep_state(); // update Idle
|
||||||
|
|
||||||
|
if(touch_invert_x) {
|
||||||
|
touchX = indev_driver->disp->driver.hor_res - touchX;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(touch_invert_y) {
|
||||||
|
touchY = indev_driver->disp->driver.ver_res - touchY;
|
||||||
|
}
|
||||||
|
|
||||||
/*Save the state and save the pressed coordinate for cursor position */
|
/*Save the state and save the pressed coordinate for cursor position */
|
||||||
data->state = touched ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL;
|
data->state = touched ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL;
|
||||||
if(touched) {
|
if(touched) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user