From 3145061cae277169e34b690e4f4fb6c12ccb68d7 Mon Sep 17 00:00:00 2001 From: nasimovy Date: Sun, 20 Apr 2025 15:41:20 +0000 Subject: [PATCH] working touchscreen but gestures not moving display --- src/graphics/Screen.cpp | 2 +- src/input/TouchScreenCST226SE.cpp | 101 +++++++++++++----------------- src/input/TouchScreenCST226SE.h | 6 +- 3 files changed, 49 insertions(+), 60 deletions(-) diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index 95b21c93f..d62bf0c12 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -1829,7 +1829,7 @@ void Screen::setup() new TouchScreenImpl1(dispdev->getWidth(), dispdev->getHeight(), static_cast(dispdev)->getTouch); touchScreenImpl1->init(); #elif HAS_TOUCHSCREEN && HAS_CST226SE - touchScreenCST226SE = new TouchScreenCST226SE(TFT_HEIGHT, TFT_WIDTH, TouchScreenCST226SE::forwardGetTouch); + touchScreenCST226SE = new TouchScreenCST226SE(TFT_HEIGHT, TFT_WIDTH); touchScreenCST226SE->init(); #endif diff --git a/src/input/TouchScreenCST226SE.cpp b/src/input/TouchScreenCST226SE.cpp index 350cb3d05..1dca552e5 100644 --- a/src/input/TouchScreenCST226SE.cpp +++ b/src/input/TouchScreenCST226SE.cpp @@ -17,8 +17,7 @@ volatile bool isPressed = false; TouchScreenCST226SE *TouchScreenCST226SE::instance = nullptr; TouchScreenCST226SE *touchScreenCST226SE; -TouchScreenCST226SE::TouchScreenCST226SE(uint16_t width, uint16_t height, bool (*getTouch)(int16_t *, int16_t *)) - : TouchScreenBase("CST226", width, height), _getTouch(getTouch) +TouchScreenCST226SE::TouchScreenCST226SE(uint16_t width, uint16_t height) : TouchScreenBase("CST226", width, height) { instance = this; } @@ -36,6 +35,7 @@ void TouchScreenCST226SE::init() TOUCH_IRQ, []() { isPressed = true; }, FALLING); } touch.setMirrorXY(false, true); + touch.setSwapXY(true); LOG_DEBUG("CST226SE init OK at address 0x%02X", addr); return; } @@ -65,64 +65,53 @@ bool TouchScreenCST226SE::getTouch(int16_t &x, int16_t &y) return false; // No valid touch data } -bool TouchScreenCST226SE::forwardGetTouch(int16_t *x, int16_t *y) -{ - // if (instance) { - // bool result = instance->getTouch(*x, *y); - // if (result) { - // LOG_DEBUG("TouchScreen parsed %dx %dy", *x, *y); - // } - // return result; - // } else { - return false; // Instance not initialized - // } -} - void TouchScreenCST226SE::onEvent(const TouchEvent &event) { - // InputEvent e; - // e.source = event.source; + LOG_DEBUG("Event triggerd"); + InputEvent e; + e.source = event.source; - // e.touchX = event.x; - // e.touchY = event.y; + e.touchX = event.x; + e.touchY = event.y; - // switch (event.touchEvent) { - // case TOUCH_ACTION_LEFT: { - // e.inputEvent = static_cast(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT); - // break; - // } - // case TOUCH_ACTION_RIGHT: { - // e.inputEvent = static_cast(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT); - // break; - // } - // case TOUCH_ACTION_UP: { - // e.inputEvent = static_cast(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_UP); - // break; - // } - // case TOUCH_ACTION_DOWN: { - // e.inputEvent = static_cast(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_DOWN); - // break; - // } - // case TOUCH_ACTION_DOUBLE_TAP: { - // e.inputEvent = static_cast(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_SELECT); - // break; - // } - // case TOUCH_ACTION_LONG_PRESS: { - // e.inputEvent = static_cast(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_CANCEL); - // break; - // } - // case TOUCH_ACTION_TAP: { - // if (moduleConfig.external_notification.enabled && (externalNotificationModule->nagCycleCutoff != UINT32_MAX)) { - // externalNotificationModule->stopNow(); - // } else { - // powerFSM.trigger(EVENT_INPUT); - // } - // break; - // } - // default: - return; - // } - // this->notifyObservers(&e); + switch (event.touchEvent) { + case TOUCH_ACTION_LEFT: { + e.inputEvent = static_cast(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT); + break; + } + case TOUCH_ACTION_RIGHT: { + e.inputEvent = static_cast(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT); + break; + } + case TOUCH_ACTION_UP: { + e.inputEvent = static_cast(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_UP); + break; + } + case TOUCH_ACTION_DOWN: { + e.inputEvent = static_cast(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_DOWN); + break; + } + case TOUCH_ACTION_DOUBLE_TAP: { + e.inputEvent = static_cast(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_SELECT); + break; + } + case TOUCH_ACTION_LONG_PRESS: { + e.inputEvent = static_cast(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_CANCEL); + break; + } + case TOUCH_ACTION_TAP: { + LOG_DEBUG("tipie tap"); + if (moduleConfig.external_notification.enabled && (externalNotificationModule->nagCycleCutoff != UINT32_MAX)) { + externalNotificationModule->stopNow(); + } else { + powerFSM.trigger(EVENT_INPUT); + } + break; + } + default: + return; + } + this->notifyObservers(&e); } #endif \ No newline at end of file diff --git a/src/input/TouchScreenCST226SE.h b/src/input/TouchScreenCST226SE.h index 26bc7a449..8a9330ff7 100644 --- a/src/input/TouchScreenCST226SE.h +++ b/src/input/TouchScreenCST226SE.h @@ -12,11 +12,11 @@ class TouchScreenCST226SE : public TouchScreenBase { public: - TouchScreenCST226SE(uint16_t width, uint16_t height, bool (*getTouch)(int16_t *, int16_t *)); + TouchScreenCST226SE(uint16_t width, uint16_t height); + // TouchScreenCST226SE(uint16_t width, uint16_t height, bool (*getTouch)(int16_t *, int16_t *)); void init(void); - static bool forwardGetTouch(int16_t *x, int16_t *y); - bool (*_getTouch)(int16_t *, int16_t *); + // bool (*_getTouch)(int16_t *, int16_t *); virtual bool getTouch(int16_t &x, int16_t &y); virtual void onEvent(const TouchEvent &event);