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 (slow, no ghosting)
13 PARTIAL, // Partial refresh (fast, may ghost); periodically promoted to FULL to clear ghosting
14 PARTIAL_LIGHT // Partial refresh never promoted to FULL; for tiny low-churn updates (e.g. lock-screen clock)
15};
16
20class IDisplay : public core::IService {
21public:
22 virtual ~IDisplay() = default;
23
27 virtual void clear() = 0;
28
33 virtual void flush(RefreshMode mode = RefreshMode::PARTIAL) = 0;
34
39 virtual void flushSync(RefreshMode mode = RefreshMode::PARTIAL) = 0;
40
44 virtual bool isBusy() const = 0;
45
49 virtual uint16_t getWidth() const = 0;
50 virtual uint16_t getHeight() const = 0;
51
57 virtual void setBacklight(uint16_t level) = 0;
58
63 virtual void saveBacklight() = 0;
64
68 virtual uint16_t getBacklight() const = 0;
69
73 virtual bool isBacklightOn() const = 0;
74
78 virtual void backlightOn() = 0;
79
83 virtual void backlightOff() = 0;
84
89 virtual void* getNativeHandle() = 0;
90
94 virtual void showSplash(const char* subtitle = nullptr) = 0;
95
96 // === GFX Drawing Methods (avoid unsafe casts) ===
97
101 virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0;
102
106 virtual void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color) = 0;
107
111 virtual void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) = 0;
112
116 virtual void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) = 0;
117
121 virtual void setCursor(int16_t x, int16_t y) = 0;
122
126 virtual void setTextColor(uint16_t color) = 0;
127
131 virtual void setTextSize(uint8_t size) = 0;
132
136 virtual void setFont(const void* font) = 0;
137
141 virtual void print(const char* text) = 0;
142
146 virtual void printf(const char* fmt, ...) = 0;
147};
148
149// Factory function to get display instance
151
167void winkBacklight(uint8_t count = 2, uint16_t period_ms = 150);
168
169} // 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.