58 lines
1.9 KiB
C++
58 lines
1.9 KiB
C++
#ifndef LOW_LEVEL_DISPLAY_EPAPER_H
|
|
#define LOW_LEVEL_DISPLAY_EPAPER_H
|
|
|
|
#include "low_level_display.h"
|
|
|
|
// E-paper display configuration structure
|
|
struct epaper_config {
|
|
void* spi; // SPI instance
|
|
int gpio_din; // MOSI pin
|
|
int gpio_clk; // Clock pin
|
|
int gpio_cs; // Chip select pin
|
|
int gpio_dc; // Data/Command pin
|
|
int gpio_rst; // Reset pin
|
|
int gpio_busy; // Busy pin
|
|
};
|
|
|
|
class LowLevelDisplayEPaper : public LowLevelDisplay {
|
|
private:
|
|
const epaper_config* config;
|
|
int width;
|
|
int height;
|
|
bool initialized;
|
|
uint8_t* framebuffer; // E-paper needs a framebuffer
|
|
bool dirty; // Track if display needs refresh
|
|
|
|
public:
|
|
LowLevelDisplayEPaper(const epaper_config* cfg, int w, int h);
|
|
~LowLevelDisplayEPaper() override;
|
|
|
|
// Core display operations - native 1-bit monochrome
|
|
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; // Actually update the e-paper display
|
|
|
|
// Display properties
|
|
int get_width() const override { return width; }
|
|
int get_height() const override { return height; }
|
|
DisplayType get_type() const override { return DISPLAY_TYPE_EPAPER; }
|
|
bool is_color() const override { return false; } // Most e-paper is monochrome
|
|
|
|
// E-paper specific
|
|
void clear_display(); // Full clear with refresh
|
|
void full_refresh(); // Force full screen refresh (slower but removes ghosting)
|
|
void sleep(); // Put display in low power mode
|
|
|
|
// Power saving hooks
|
|
void on_idle_2min() override;
|
|
void on_idle_10min() override;
|
|
void on_user_interaction() override;
|
|
|
|
private:
|
|
bool is_sleeping = false;
|
|
};
|
|
|
|
#endif // LOW_LEVEL_DISPLAY_EPAPER_H
|