Tasmota/lib/lib_display/UDisplay/include/uDisplay_RGB_panel.h

55 lines
1.7 KiB
C++

// ======================================================
// uDisplay_rgb_panel.h - RGB Panel Implementation
// ======================================================
#pragma once
#ifdef ESP32
#if __has_include("soc/soc_caps.h")
# include "soc/soc_caps.h"
#else
# error "No ESP capability header found"
#endif
#endif
#if SOC_LCD_RGB_SUPPORTED
#include "uDisplay_panel.h"
#include "esp_lcd_panel_interface.h"
#include "esp_lcd_panel_rgb.h"
#include "esp_lcd_panel_io.h"
#include "esp_lcd_panel_ops.h"
class RGBPanel : public UniversalPanel {
public:
// Takes only the ESP-IDF config
RGBPanel(const esp_lcd_rgb_panel_config_t *config);
~RGBPanel();
bool drawPixel(int16_t x, int16_t y, uint16_t color) override;
bool fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) override;
bool pushColors(uint16_t *data, uint16_t len, bool first = false) override;
bool setAddrWindow(int16_t x0, int16_t y0, int16_t x1, int16_t y1) override;
bool drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color) override;
bool drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color) override;
bool displayOnff(int8_t on) override;
bool invertDisplay(bool invert) override;
bool setRotation(uint8_t rotation) override;
bool updateFrame() override;
uint16_t* framebuffer = nullptr;
private:
esp_lcd_panel_handle_t panel_handle = nullptr;
uint8_t rotation = 0;
uint16_t width = 0;
uint16_t height = 0;
int16_t window_x1 = 0;
int16_t window_y1 = 0;
int16_t window_x2 = 1;
int16_t window_y2 = 1;
size_t framebuffer_size = 0;
uint32_t framebuffer_dirty = false;
};
#endif //SOC_LCD_RGB_SUPPORTED