// ====================================================== // 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