working touchscreen but gestures not moving display

This commit is contained in:
nasimovy 2025-04-20 15:41:20 +00:00
parent ffa5476be3
commit 3145061cae
3 changed files with 49 additions and 60 deletions

View File

@ -1829,7 +1829,7 @@ void Screen::setup()
new TouchScreenImpl1(dispdev->getWidth(), dispdev->getHeight(), static_cast<TFTDisplay *>(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

View File

@ -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<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT);
// break;
// }
// case TOUCH_ACTION_RIGHT: {
// e.inputEvent = static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT);
// break;
// }
// case TOUCH_ACTION_UP: {
// e.inputEvent = static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_UP);
// break;
// }
// case TOUCH_ACTION_DOWN: {
// e.inputEvent = static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_DOWN);
// break;
// }
// case TOUCH_ACTION_DOUBLE_TAP: {
// e.inputEvent = static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_SELECT);
// break;
// }
// case TOUCH_ACTION_LONG_PRESS: {
// e.inputEvent = static_cast<char>(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:
switch (event.touchEvent) {
case TOUCH_ACTION_LEFT: {
e.inputEvent = static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT);
break;
}
case TOUCH_ACTION_RIGHT: {
e.inputEvent = static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT);
break;
}
case TOUCH_ACTION_UP: {
e.inputEvent = static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_UP);
break;
}
case TOUCH_ACTION_DOWN: {
e.inputEvent = static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_DOWN);
break;
}
case TOUCH_ACTION_DOUBLE_TAP: {
e.inputEvent = static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_SELECT);
break;
}
case TOUCH_ACTION_LONG_PRESS: {
e.inputEvent = static_cast<char>(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);
}
this->notifyObservers(&e);
}
#endif

View File

@ -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);