mirror of
https://github.com/esphome/esphome.git
synced 2025-02-19 03:18:14 +00:00
60 lines
1.5 KiB
C++
60 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include "esphome/components/display/display_buffer.h"
|
|
#include "esphome/core/automation.h"
|
|
#include "esphome/core/hal.h"
|
|
|
|
#include <vector>
|
|
|
|
namespace esphome {
|
|
namespace touchscreen {
|
|
|
|
struct TouchPoint {
|
|
uint16_t x;
|
|
uint16_t y;
|
|
uint8_t id;
|
|
uint8_t state;
|
|
};
|
|
|
|
class TouchListener {
|
|
public:
|
|
virtual void touch(TouchPoint tp) = 0;
|
|
virtual void release() {}
|
|
};
|
|
|
|
enum TouchRotation {
|
|
ROTATE_0_DEGREES = 0,
|
|
ROTATE_90_DEGREES = 90,
|
|
ROTATE_180_DEGREES = 180,
|
|
ROTATE_270_DEGREES = 270,
|
|
};
|
|
|
|
class Touchscreen {
|
|
public:
|
|
void set_display(display::DisplayBuffer *display) {
|
|
this->display_ = display;
|
|
this->display_width_ = display->get_width_internal();
|
|
this->display_height_ = display->get_height_internal();
|
|
this->rotation_ = static_cast<TouchRotation>(display->get_rotation());
|
|
}
|
|
display::DisplayBuffer *get_display() const { return this->display_; }
|
|
|
|
Trigger<TouchPoint> *get_touch_trigger() { return &this->touch_trigger_; }
|
|
|
|
void register_listener(TouchListener *listener) { this->touch_listeners_.push_back(listener); }
|
|
|
|
protected:
|
|
/// Call this function to send touch points to the `on_touch` listener and the binary_sensors.
|
|
void send_touch_(TouchPoint tp);
|
|
|
|
uint16_t display_width_;
|
|
uint16_t display_height_;
|
|
display::DisplayBuffer *display_;
|
|
TouchRotation rotation_;
|
|
Trigger<TouchPoint> touch_trigger_;
|
|
std::vector<TouchListener *> touch_listeners_;
|
|
};
|
|
|
|
} // namespace touchscreen
|
|
} // namespace esphome
|