summaryrefslogtreecommitdiff
path: root/src/touchhandler/TouchHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/touchhandler/TouchHandler.cpp')
-rw-r--r--src/touchhandler/TouchHandler.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/touchhandler/TouchHandler.cpp b/src/touchhandler/TouchHandler.cpp
new file mode 100644
index 00000000..a13d1af3
--- /dev/null
+++ b/src/touchhandler/TouchHandler.cpp
@@ -0,0 +1,70 @@
+#include "TouchHandler.h"
+
+using namespace Pinetime::Controllers;
+
+TouchHandler::TouchHandler(Drivers::Cst816S& touchPanel, Components::LittleVgl& lvgl)
+ : touchPanel {touchPanel},
+ lvgl {lvgl} {
+}
+
+void TouchHandler::CancelTap() {
+ isCancelled = true;
+ lvgl.SetNewTapEvent(-1, -1, false);
+}
+
+Pinetime::Drivers::Cst816S::Gestures TouchHandler::GestureGet() {
+ auto returnGesture = gesture;
+ gesture = Drivers::Cst816S::Gestures::None;
+ return returnGesture;
+}
+
+void TouchHandler::Start() {
+ if (pdPASS != xTaskCreate(TouchHandler::Process, "Touch", 80, this, 0, &taskHandle)) {
+ APP_ERROR_HANDLER(NRF_ERROR_NO_MEM);
+ }
+}
+
+void TouchHandler::Process(void* instance) {
+ auto* app = static_cast<TouchHandler*>(instance);
+ app->Work();
+}
+
+void TouchHandler::Work() {
+ Pinetime::Drivers::Cst816S::TouchInfos info;
+ while (true) {
+ vTaskSuspend(taskHandle);
+ info = touchPanel.GetTouchInfo();
+ if (systemTask->IsSleeping()) {
+ systemTask->PushMessage(System::Messages::TouchWakeUp);
+ } else {
+ x = info.x;
+ y = info.y;
+ if (info.action == 0) {
+ lvgl.SetNewTapEvent(info.x, info.y, true);
+ } else if (info.action == 1) {
+ lvgl.SetNewTapEvent(info.x, info.y, false);
+ prevGesture = Pinetime::Drivers::Cst816S::Gestures::None;
+ isCancelled = false;
+ } else if (info.action == 2) {
+ if (!isCancelled) {
+ lvgl.SetNewTapEvent(info.x, info.y, true);
+ }
+ if (info.gesture != Pinetime::Drivers::Cst816S::Gestures::None) {
+ if (prevGesture != info.gesture) {
+ prevGesture = info.gesture;
+ gesture = info.gesture;
+ }
+ }
+ }
+ systemTask->OnTouchEvent();
+ }
+ }
+}
+
+void TouchHandler::Register(Pinetime::System::SystemTask* systemTask) {
+ this->systemTask = systemTask;
+}
+
+void TouchHandler::WakeUp() {
+ vTaskResume(taskHandle);
+}