update Display interface and downstream code to add flush callback

Hoping to allow implementation of interface to allow Hardware abstract to setup LVGL
This commit is contained in:
Matthew Colvin 2023-08-13 20:44:27 -05:00 committed by MatthewColvin
parent 40841c8d09
commit 419ac45e98
4 changed files with 29 additions and 16 deletions

View file

@ -1,9 +1,13 @@
#pragma once #pragma once
#include <cstdint> #include <cstdint>
#include "lvgl.h"
class DisplayInterface class DisplayInterface
{ {
virtual void setup(int backlight_pin, int enable_pin) = 0; public:
virtual void pushPixel(uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint16_t* pixel_values) = 0; virtual void setBrightness(uint8_t brightness) = 0;
virtual void turnOff() = 0; virtual void turnOff() = 0;
virtual void setBrightness(uint8_t brightness) = 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;
}; };

View file

@ -1,4 +1,5 @@
#include "HardwareRevX.hpp" #include "HardwareRevX.hpp"
#include "display.hpp"
#include "wifihandler.hpp" #include "wifihandler.hpp"
#include "driver/ledc.h" #include "driver/ledc.h"
@ -53,7 +54,8 @@ void HardwareRevX::initIO() {
HardwareRevX::HardwareRevX(): HardwareRevX::HardwareRevX():
HardwareAbstract( HardwareAbstract(
std::make_shared<Battery>(ADC_BAT,CRG_STAT), std::make_shared<Battery>(ADC_BAT,CRG_STAT),
wifiHandler::getInstance() wifiHandler::getInstance(),
Display::getInstance()
){} ){}
HardwareRevX::WakeReason getWakeReason() { HardwareRevX::WakeReason getWakeReason() {

View file

@ -1,17 +1,20 @@
#include "display.hpp" #include "display.hpp"
#include "omoteconfig.h"
Display* Display::getInstance() std::shared_ptr<Display> Display::mInstance = nullptr;
std::shared_ptr<Display> Display::getInstance()
{ {
if (instance == nullptr) if (mInstance == nullptr)
{ {
instance = new Display(); mInstance = std::shared_ptr<Display>(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->enable_pin = enable_pin;
this->backlight_pin = backlight_pin; this->backlight_pin = backlight_pin;

View file

@ -1,6 +1,7 @@
#pragma once #pragma once
#include "DisplayInterface.h" #include "DisplayInterface.h"
#include <TFT_eSPI.h> #include <TFT_eSPI.h>
#include <memory>
#include "driver/ledc.h" #include "driver/ledc.h"
/*LEDC Channel to use for the LCD backlight*/ /*LEDC Channel to use for the LCD backlight*/
@ -13,19 +14,22 @@
#define DEFAULT_BACKLIGHT_BRIGHTNESS 128 #define DEFAULT_BACKLIGHT_BRIGHTNESS 128
class Display:public DisplayInterface class Display: public DisplayInterface
{ {
public: public:
static Display* getInstance(); static std::shared_ptr<Display> 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 setBrightness(uint8_t brightness) override;
virtual void turnOff() 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: private:
static Display* instance; static std::shared_ptr<Display> mInstance;
int enable_pin; int enable_pin;
int backlight_pin; int backlight_pin;
Display(); Display(int backlight_pin, int enable_pin);
TFT_eSPI tft; TFT_eSPI tft;
}; };