#ifndef LOW_LEVEL_DISPLAY_H #define LOW_LEVEL_DISPLAY_H #include #include // Display type enumeration typedef enum { DISPLAY_TYPE_ST7796, DISPLAY_TYPE_ST7789, DISPLAY_TYPE_EPAPER } DisplayType; // Abstract display interface class LowLevelDisplay { public: virtual ~LowLevelDisplay() {} // Core display operations - all work with 1-bit monochrome buffers virtual bool init() = 0; virtual void clear(bool white = true) = 0; // Clear to white or black virtual void draw_pixel(int x, int y, bool white) = 0; virtual void draw_buffer(const uint8_t* bit_buffer) = 0; // 1-bit buffer (width*height/8 bytes) virtual void refresh() = 0; // Update display (converts 1-bit to native format) // Display properties virtual int get_width() const = 0; virtual int get_height() const = 0; virtual DisplayType get_type() const = 0; virtual bool is_color() const = 0; // Optional: Backlight control (if supported) virtual void set_backlight(bool on) { (void)on; } // Optional: Brightness control (if supported) // brightness: 0-100 (percentage), 0=off, 100=full brightness virtual void set_brightness(uint8_t brightness) { (void)brightness; } virtual uint8_t get_brightness() const { return 100; } // Default to full brightness // Optional: Orientation control (not commonly needed for bitmap displays) virtual void set_rotation(uint8_t rotation) { (void)rotation; } // Factory method - creates display based on type, using board_config.h for pins static LowLevelDisplay* create(DisplayType type, int width, int height); }; #endif // LOW_LEVEL_DISPLAY_H