#pragma once #include "driver/spi_master.h" #include "driver/gpio.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_lcd_touch_gt911.h" #include "display/constants.h" #include class DisplayHandler { public: DisplayHandler( EventGroupHandle_t system_event_group ) : _system_event_group(system_event_group) { } ~DisplayHandler(); // required to be called by inheriting class after SPI device is created // set set_display_ready to false if further initialization is needed before marking display ready void init_devices(bool set_display_ready = true); void epd_write_cmd(uint8_t cmd); void epd_write_data(uint8_t data); void epd_write_cmd_with_data(uint8_t cmd, const uint8_t* data, size_t data_len); private: SemaphoreHandle_t _spi_mutex = xSemaphoreCreateMutex(); spi_device_handle_t _spi = nullptr; EventGroupHandle_t _system_event_group = nullptr; esp_lcd_panel_io_handle_t _tp_io_handle = nullptr; esp_lcd_touch_handle_t _tp_handle = nullptr; void _dangerous_epd_write_cmd_without_lock(uint8_t cmd); void _dangerous_epd_write_data_without_lock(uint8_t data); void _epd_init(void); void _touch_init(void); };