CDC Badge OS
Firmware for the CDC Badge v1.0 hardware security key
Loading...
Searching...
No Matches
IDisplay.h
Go to the documentation of this file.
1#pragma once
2
3#include "cdc_core/IService.h"
4#include <cstdint>
5
6namespace cdc::hal {
7
11enum class RefreshMode : uint8_t {
12 FULL, // Full display refresh (multi-flash OTP waveform, slow, no ghosting)
13 FAST, // Full-screen refresh with the short waveform (single flash); clears most ghosting.
14 // Escalated to FULL after FEATURE_EPD_MAX_FASTS_BEFORE_FULL fast refreshes.
15 PARTIAL, // Partial refresh (fast, may ghost); escalated to FAST after
16 // FEATURE_EPD_MAX_PARTIALS_BEFORE_FAST consecutive partials
17 PARTIAL_LIGHT // Partial refresh never promoted; for tiny low-churn updates (e.g. lock-screen clock)
18};
19
23class IDisplay : public core::IService {
24public:
25 virtual ~IDisplay() = default;
26
30 virtual void clear() = 0;
31
36 virtual void flush(RefreshMode mode = RefreshMode::PARTIAL) = 0;
37
42 virtual void flushSync(RefreshMode mode = RefreshMode::PARTIAL) = 0;
43
47 virtual bool isBusy() const = 0;
48
52 virtual uint16_t getWidth() const = 0;
53 virtual uint16_t getHeight() const = 0;
54
60 virtual void setBacklight(uint16_t level) = 0;
61
66 virtual void saveBacklight() = 0;
67
71 virtual uint16_t getBacklight() const = 0;
72
76 virtual bool isBacklightOn() const = 0;
77
81 virtual void backlightOn() = 0;
82
86 virtual void backlightOff() = 0;
87
92 virtual void* getNativeHandle() = 0;
93
97 virtual void showSplash(const char* subtitle = nullptr) = 0;
98
99 // === GFX Drawing Methods (avoid unsafe casts) ===
100
104 virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0;
105
109 virtual void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color) = 0;
110
114 virtual void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) = 0;
115
119 virtual void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) = 0;
120
124 virtual void setCursor(int16_t x, int16_t y) = 0;
125
129 virtual void setTextColor(uint16_t color) = 0;
130
134 virtual void setTextSize(uint8_t size) = 0;
135
139 virtual void setFont(const void* font) = 0;
140
144 virtual void print(const char* text) = 0;
145
149 virtual void printf(const char* fmt, ...) = 0;
150};
151
152// Factory function to get display instance
154
170void winkBacklight(uint8_t count = 2, uint16_t period_ms = 150);
171
172} // namespace cdc::hal
virtual void flush(RefreshMode mode=RefreshMode::PARTIAL)=0
virtual void backlightOff()=0
virtual void printf(const char *fmt,...)=0
virtual void showSplash(const char *subtitle=nullptr)=0
virtual uint16_t getBacklight() const =0
virtual void setCursor(int16_t x, int16_t y)=0
virtual void setTextSize(uint8_t size)=0
virtual void setBacklight(uint16_t level)=0
virtual bool isBusy() const =0
virtual ~IDisplay()=default
virtual uint16_t getWidth() const =0
virtual void flushSync(RefreshMode mode=RefreshMode::PARTIAL)=0
virtual void setFont(const void *font)=0
virtual void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)=0
virtual void clear()=0
virtual void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color)=0
virtual void setTextColor(uint16_t color)=0
virtual void saveBacklight()=0
virtual uint16_t getHeight() const =0
virtual bool isBacklightOn() const =0
virtual void drawPixel(int16_t x, int16_t y, uint16_t color)=0
virtual void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)=0
virtual void * getNativeHandle()=0
virtual void print(const char *text)=0
virtual void backlightOn()=0
IDisplay * getDisplayInstance()
Returns lazily created singleton display instance.
void winkBacklight(uint8_t count=2, uint16_t period_ms=150)
Blink the backlight as a visual "look at me" signal.