From 419ac45e98809641a4356c4d4c05efe5a82def9c Mon Sep 17 00:00:00 2001 From: Matthew Colvin <35540398+Mc067415@users.noreply.github.com> Date: Sun, 13 Aug 2023 20:44:27 -0500 Subject: [PATCH] update Display interface and downstream code to add flush callback Hoping to allow implementation of interface to allow Hardware abstract to setup LVGL --- .../HAL/HardwareInterfaces/DisplayInterface.h | 12 ++++++++---- Platformio/HAL/Targets/ESP32/HardwareRevX.cpp | 4 +++- Platformio/HAL/Targets/ESP32/display/display.cpp | 13 ++++++++----- Platformio/HAL/Targets/ESP32/display/display.hpp | 16 ++++++++++------ 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/Platformio/HAL/HardwareInterfaces/DisplayInterface.h b/Platformio/HAL/HardwareInterfaces/DisplayInterface.h index be2fa7c..5080f8e 100644 --- a/Platformio/HAL/HardwareInterfaces/DisplayInterface.h +++ b/Platformio/HAL/HardwareInterfaces/DisplayInterface.h @@ -1,9 +1,13 @@ #pragma once #include +#include "lvgl.h" class DisplayInterface { - virtual void setup(int backlight_pin, int enable_pin) = 0; - virtual void pushPixel(uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint16_t* pixel_values) = 0; - virtual void turnOff() = 0; - virtual void setBrightness(uint8_t brightness) = 0; + public: + virtual void setBrightness(uint8_t brightness) = 0; + virtual void turnOff() = 0; + + protected: + virtual void pushPixel(uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint16_t* pixel_values) = 0; + virtual void flushDisplay(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p) = 0; }; \ No newline at end of file diff --git a/Platformio/HAL/Targets/ESP32/HardwareRevX.cpp b/Platformio/HAL/Targets/ESP32/HardwareRevX.cpp index 000ddca..909f937 100644 --- a/Platformio/HAL/Targets/ESP32/HardwareRevX.cpp +++ b/Platformio/HAL/Targets/ESP32/HardwareRevX.cpp @@ -1,4 +1,5 @@ #include "HardwareRevX.hpp" +#include "display.hpp" #include "wifihandler.hpp" #include "driver/ledc.h" @@ -53,7 +54,8 @@ void HardwareRevX::initIO() { HardwareRevX::HardwareRevX(): HardwareAbstract( std::make_shared(ADC_BAT,CRG_STAT), - wifiHandler::getInstance() + wifiHandler::getInstance(), + Display::getInstance() ){} HardwareRevX::WakeReason getWakeReason() { diff --git a/Platformio/HAL/Targets/ESP32/display/display.cpp b/Platformio/HAL/Targets/ESP32/display/display.cpp index 115cf5e..8ef3097 100644 --- a/Platformio/HAL/Targets/ESP32/display/display.cpp +++ b/Platformio/HAL/Targets/ESP32/display/display.cpp @@ -1,17 +1,20 @@ #include "display.hpp" +#include "omoteconfig.h" -Display* Display::getInstance() +std::shared_ptr Display::mInstance = nullptr; + +std::shared_ptr Display::getInstance() { - if (instance == nullptr) + if (mInstance == nullptr) { - instance = new Display(); + mInstance = std::shared_ptr(new Display(LCD_EN, LCD_BL)); } - return instance; + return mInstance; } -void Display::setup(int backlight_pin, int enable_pin) +Display::Display(int backlight_pin, int enable_pin) { this->enable_pin = enable_pin; this->backlight_pin = backlight_pin; diff --git a/Platformio/HAL/Targets/ESP32/display/display.hpp b/Platformio/HAL/Targets/ESP32/display/display.hpp index aef3fed..7baa25c 100644 --- a/Platformio/HAL/Targets/ESP32/display/display.hpp +++ b/Platformio/HAL/Targets/ESP32/display/display.hpp @@ -1,6 +1,7 @@ #pragma once #include "DisplayInterface.h" #include +#include #include "driver/ledc.h" /*LEDC Channel to use for the LCD backlight*/ @@ -13,19 +14,22 @@ #define DEFAULT_BACKLIGHT_BRIGHTNESS 128 -class Display:public DisplayInterface +class Display: public DisplayInterface { public: - static Display* getInstance(); + static std::shared_ptr getInstance(); - virtual void setup(int backlight_pin, int enable_pin) override; - virtual void pushPixel(uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint16_t* pixel_values) override; virtual void setBrightness(uint8_t brightness) override; virtual void turnOff() override; + + protected: + virtual void flushDisplay(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p) {}; + virtual void pushPixel(uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint16_t* pixel_values) override; + private: - static Display* instance; + static std::shared_ptr mInstance; int enable_pin; int backlight_pin; - Display(); + Display(int backlight_pin, int enable_pin); TFT_eSPI tft; }; \ No newline at end of file