43 lines
1.4 KiB
C++
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
|