#pragma once #include #include #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_system.h" class TouchHandler { public: TouchHandler(QueueHandle_t touch_queue); // the system_event_group is used to set touch-calibrated bit virtual void init(EventGroupHandle_t system_event_group) = 0; virtual void start_event_loop() = 0; virtual ~TouchHandler() = 0; private: TouchHandler(const TouchHandler&) = delete; TouchHandler& operator=(const TouchHandler&) = delete; }; class EInkTouchHandler : public TouchHandler { public: EInkTouchHandler(QueueHandle_t touch_queue); void init(EventGroupHandle_t system_event_group) override; void start_event_loop() override; ~EInkTouchHandler() override; private: // Task adapter used for FreeRTOS task creation. Forwards to // `run_event_loop()` using the `this` pointer passed as the task param. static void task_adapter(void* arg); // Instance method implementing the touch event loop. void run_event_loop(); // prevent copying EInkTouchHandler(const EInkTouchHandler&) = delete; EInkTouchHandler& operator=(const EInkTouchHandler&) = delete; };