Files
basic1/display/low_level_display_st7796.h

63 lines
1.9 KiB
C++

#ifndef LOW_LEVEL_DISPLAY_ST7796_H
#define LOW_LEVEL_DISPLAY_ST7796_H
#include "low_level_display.h"
#include "st7796.h"
class LowLevelDisplayST7796 : public LowLevelDisplay {
private:
const st7796_config* config;
int width;
int height;
bool initialized;
uint16_t* rgb_buffer; // Persistent buffer for 1-bit to RGB565 conversion
bool invert_color; // If true, swap black/white
public:
LowLevelDisplayST7796(const st7796_config* cfg, int w, int h, bool invert = false);
~LowLevelDisplayST7796() override;
// Core display operations - converts 1-bit to RGB565 internally
bool init() override;
void clear(bool white = true) override;
void draw_pixel(int x, int y, bool white) override;
void draw_buffer(const uint8_t* bit_buffer) override;
void refresh() override;
// Display properties
int get_width() const override { return width; }
int get_height() const override { return height; }
DisplayType get_type() const override { return DISPLAY_TYPE_ST7796; }
bool is_color() const override { return true; }
// Backlight control
void set_backlight(bool on) override;
// Brightness control (0-100)
void set_brightness(uint8_t brightness) override;
uint8_t get_brightness() const override;
// Power management
void sleep(); // Put display to sleep (low power, touch still active)
void wake(); // Wake display from sleep
// Orientation control
void set_rotation(uint8_t rotation) override;
// Color inversion control
void set_invert_color(bool inv) { invert_color = inv; }
bool get_invert_color() const { return invert_color; }
// Power saving hooks
void on_idle_2min() override;
void on_idle_10min() override;
void on_user_interaction() override;
private:
uint8_t saved_brightness = 100;
bool is_dimmed = false;
bool is_sleeping = false;
};
#endif // LOW_LEVEL_DISPLAY_ST7796_H