Files
basic1/display/low_level_display.h
2026-01-28 20:12:41 -05:00

43 lines
1.4 KiB
C++

#ifndef LOW_LEVEL_DISPLAY_H
#define LOW_LEVEL_DISPLAY_H
#include <stdint.h>
#include <stdbool.h>
// 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: 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