Ersa Wearable Platform
Embedded smartwatch firmware and application framework
Loading...
Searching...
No Matches
display.h
Go to the documentation of this file.
1#pragma once
2
3#include "ersa/common/types.h"
4#include <stdint.h>
5#include <stddef.h>
6
7namespace ersa {
8namespace hal {
9
10enum class Color : uint8_t {
11 Black = 0,
12 White = 1,
13 Inverse = 2
14};
15
16using DisplayBusyCallback = void (*)(void* userData);
17
18// Logical font assets selected by the application. A concrete display driver
19// maps these names to its rendering backend without exposing that backend.
29
40class IDisplay {
41public:
43 virtual ~IDisplay() = default;
44
49 virtual Result<void> init() = 0;
51 virtual int16_t width() const = 0;
53 virtual int16_t height() const = 0;
54
55 // Buffer manipulation
60 virtual void clear(Color color = Color::Black) = 0;
62 virtual void drawPixel(int16_t x, int16_t y, Color color) = 0;
64 virtual void drawLine(int16_t x1, int16_t y1, int16_t x2, int16_t y2, Color color) = 0;
66 virtual void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, Color color) = 0;
68 virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, Color color) = 0;
70 virtual void drawFastVLine(int16_t x, int16_t y, int16_t h, Color color) = 0;
72 virtual void drawCircle(int16_t x, int16_t y, int16_t r, Color color) = 0;
74 virtual void fillCircle(int16_t x, int16_t y, int16_t r, Color color) = 0;
76 virtual void drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h,
77 int16_t radius, Color color) = 0;
79 virtual void fillRoundRect(int16_t x, int16_t y, int16_t w, int16_t h,
80 int16_t radius, Color color) = 0;
81
82 // Text operations use logical fonts and colors. They deliberately avoid
83 // backend font pointers and graphics-library types.
85 virtual void setFont(FontFace face) = 0;
87 virtual void setTextSize(uint8_t size) = 0;
89 virtual void setTextColor(Color color) = 0;
91 virtual void setTextWrap(bool wrap) = 0;
93 virtual void setCursor(int16_t x, int16_t y) = 0;
98 virtual size_t print(const char* text) = 0;
100 virtual size_t print(uint8_t value) = 0;
102 virtual size_t print(int32_t value) = 0;
104 virtual size_t print(uint32_t value) = 0;
116 virtual void getTextBounds(const char* text, int16_t x, int16_t y,
117 int16_t* x1, int16_t* y1,
118 uint16_t* w, uint16_t* h) = 0;
119
120 // Compatibility conveniences preserve the historical 0=black/1=white
121 // convention for older monochrome UI code. New code should use Color so
122 // intent is explicit and no panel-specific numeric constant leaks upward.
124 void fillScreen(uint16_t color) { clear(color ? Color::White : Color::Black); }
126 void setTextColor(uint16_t color) { setTextColor(color ? Color::White : Color::Black); }
128 void drawLine(int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color) {
129 drawLine(x1, y1, x2, y2, color ? Color::White : Color::Black);
130 }
131 void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color) {
132 drawFastHLine(x, y, w, color ? Color::White : Color::Black);
133 }
134 void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color) {
135 drawFastVLine(x, y, h, color ? Color::White : Color::Black);
136 }
137 void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
138 fillRect(x, y, w, h, color ? Color::White : Color::Black);
139 }
140 void drawCircle(int16_t x, int16_t y, int16_t r, uint16_t color) {
141 drawCircle(x, y, r, color ? Color::White : Color::Black);
142 }
143 void fillCircle(int16_t x, int16_t y, int16_t r, uint16_t color) {
144 fillCircle(x, y, r, color ? Color::White : Color::Black);
145 }
146 void drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color) {
147 drawRoundRect(x, y, w, h, r, color ? Color::White : Color::Black);
148 }
149 void fillRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color) {
150 fillRoundRect(x, y, w, h, r, color ? Color::White : Color::Black);
151 }
152
153 // Refresh control is separate from drawing so the UI can coalesce multiple
154 // drawing operations into one panel update and honor display timing limits.
159 virtual void refresh(bool full = false) = 0;
164 virtual void refreshRect(const Rect& rect) = 0;
166 virtual bool isBusy() const = 0;
172 virtual void setBusyCallback(DisplayBusyCallback cb, void* userData = nullptr) = 0;
173
174 // Power management
179 virtual void powerOff() = 0;
181 virtual void powerOn() = 0;
183 virtual bool isPowered() const = 0;
184
185 // Direct framebuffer access if available
187 virtual const uint8_t* getBuffer() const = 0;
192 virtual uint8_t* getBuffer() = 0;
193};
194
195} // namespace hal
196} // namespace ersa
Definition types.h:52
Definition display.h:40
virtual void setTextWrap(bool wrap)=0
virtual const uint8_t * getBuffer() const =0
virtual void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, Color color)=0
virtual Result< void > init()=0
virtual void setCursor(int16_t x, int16_t y)=0
virtual void setBusyCallback(DisplayBusyCallback cb, void *userData=nullptr)=0
virtual void refreshRect(const Rect &rect)=0
virtual uint8_t * getBuffer()=0
virtual void fillRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t radius, Color color)=0
Draw a filled rectangle with rounded corners.
virtual void clear(Color color=Color::Black)=0
virtual void getTextBounds(const char *text, int16_t x, int16_t y, int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h)=0
void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)
Definition display.h:137
void drawCircle(int16_t x, int16_t y, int16_t r, uint16_t color)
Definition display.h:140
virtual size_t print(uint8_t value)=0
Draw an unsigned byte value and return the number of characters consumed.
virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, Color color)=0
virtual void drawPixel(int16_t x, int16_t y, Color color)=0
virtual void drawFastVLine(int16_t x, int16_t y, int16_t h, Color color)=0
virtual void drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t radius, Color color)=0
Draw an unfilled rectangle with rounded corners.
void fillScreen(uint16_t color)
Clear the framebuffer using the legacy 0=black, nonzero=white mapping.
Definition display.h:124
virtual size_t print(const char *text)=0
virtual void setFont(FontFace face)=0
void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color)
Definition display.h:134
void fillRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color)
Definition display.h:149
virtual int16_t width() const =0
virtual void drawCircle(int16_t x, int16_t y, int16_t r, Color color)=0
void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color)
Definition display.h:131
virtual size_t print(int32_t value)=0
Draw a signed 32-bit value and return the number of characters consumed.
virtual void setTextSize(uint8_t size)=0
void drawLine(int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color)
Draw a line using the legacy monochrome color convention.
Definition display.h:128
virtual void setTextColor(Color color)=0
virtual int16_t height() const =0
void drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color)
Definition display.h:146
virtual size_t print(uint32_t value)=0
Draw an unsigned 32-bit value and return the number of characters consumed.
virtual ~IDisplay()=default
virtual bool isPowered() const =0
virtual void refresh(bool full=false)=0
virtual void drawLine(int16_t x1, int16_t y1, int16_t x2, int16_t y2, Color color)=0
void fillCircle(int16_t x, int16_t y, int16_t r, uint16_t color)
Definition display.h:143
virtual void fillCircle(int16_t x, int16_t y, int16_t r, Color color)=0
void setTextColor(uint16_t color)
Set legacy monochrome text color; nonzero maps to white.
Definition display.h:126
virtual void powerOn()=0
virtual void powerOff()=0
virtual bool isBusy() const =0
Return whether the panel is still processing a refresh.
void(*)(void *userData) DisplayBusyCallback
Definition display.h:16
Color
Definition display.h:10
FontFace
Definition display.h:20
Definition application.h:10
size_t size
Definition ota_service.cpp:47
Definition types.h:121