5#ifndef MODES_DRAW_TEXT_DISPLAY_HPP
6#define MODES_DRAW_TEXT_DISPLAY_HPP
10namespace lampda::modes::draw {
23 virtual const uint8_t* get_letter(
const u_char letter)
const = 0;
25 virtual uint8_t get_height()
const = 0;
26 virtual uint8_t get_width()
const = 0;
28 inline int8_t get_arrayLenght()
const {
return get_height() * get_width() / 8; };
33 static inline constexpr uint8_t font[96][6] = {
34 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
35 {0x10, 0xE3, 0x84, 0x10, 0x01, 0x00},
36 {0x6D, 0xB4, 0x80, 0x00, 0x00, 0x00},
37 {0x00, 0xA7, 0xCA, 0x29, 0xF2, 0x80},
38 {0x20, 0xE4, 0x0C, 0x09, 0xC1, 0x00},
39 {0x65, 0x90, 0x84, 0x21, 0x34, 0xC0},
40 {0x21, 0x45, 0x08, 0x55, 0x23, 0x40},
41 {0x30, 0xC2, 0x00, 0x00, 0x00, 0x00},
42 {0x10, 0x82, 0x08, 0x20, 0x81, 0x00},
43 {0x20, 0x41, 0x04, 0x10, 0x42, 0x00},
44 {0x00, 0xA3, 0x9F, 0x38, 0xA0, 0x00},
45 {0x00, 0x41, 0x1F, 0x10, 0x40, 0x00},
46 {0x00, 0x00, 0x00, 0x00, 0xC3, 0x08},
47 {0x00, 0x00, 0x1F, 0x00, 0x00, 0x00},
48 {0x00, 0x00, 0x00, 0x00, 0xC3, 0x00},
49 {0x00, 0x10, 0x84, 0x21, 0x00, 0x00},
50 {0x39, 0x14, 0xD5, 0x65, 0x13, 0x80},
51 {0x10, 0xC1, 0x04, 0x10, 0x43, 0x80},
52 {0x39, 0x10, 0x46, 0x21, 0x07, 0xC0},
53 {0x39, 0x10, 0x4E, 0x05, 0x13, 0x80},
54 {0x08, 0x62, 0x92, 0x7C, 0x20, 0x80},
55 {0x7D, 0x04, 0x1E, 0x05, 0x13, 0x80},
56 {0x18, 0x84, 0x1E, 0x45, 0x13, 0x80},
57 {0x7C, 0x10, 0x84, 0x20, 0x82, 0x00},
58 {0x39, 0x14, 0x4E, 0x45, 0x13, 0x80},
59 {0x39, 0x14, 0x4F, 0x04, 0x23, 0x00},
60 {0x00, 0x03, 0x0C, 0x00, 0xC3, 0x00},
61 {0x00, 0x03, 0x0C, 0x00, 0xC3, 0x08},
62 {0x08, 0x42, 0x10, 0x20, 0x40, 0x80},
63 {0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00},
64 {0x20, 0x40, 0x81, 0x08, 0x42, 0x00},
65 {0x39, 0x10, 0x46, 0x10, 0x01, 0x00},
66 {0x39, 0x15, 0xD5, 0x5D, 0x03, 0x80},
67 {0x39, 0x14, 0x51, 0x7D, 0x14, 0x40},
68 {0x79, 0x14, 0x5E, 0x45, 0x17, 0x80},
69 {0x39, 0x14, 0x10, 0x41, 0x13, 0x80},
70 {0x79, 0x14, 0x51, 0x45, 0x17, 0x80},
71 {0x7D, 0x04, 0x1E, 0x41, 0x07, 0xC0},
72 {0x7D, 0x04, 0x1E, 0x41, 0x04, 0x00},
73 {0x39, 0x14, 0x17, 0x45, 0x13, 0xC0},
74 {0x45, 0x14, 0x5F, 0x45, 0x14, 0x40},
75 {0x38, 0x41, 0x04, 0x10, 0x43, 0x80},
76 {0x04, 0x10, 0x41, 0x45, 0x13, 0x80},
77 {0x45, 0x25, 0x18, 0x51, 0x24, 0x40},
78 {0x41, 0x04, 0x10, 0x41, 0x07, 0xC0},
79 {0x45, 0xB5, 0x51, 0x45, 0x14, 0x40},
80 {0x45, 0x95, 0x53, 0x45, 0x14, 0x40},
81 {0x39, 0x14, 0x51, 0x45, 0x13, 0x80},
82 {0x79, 0x14, 0x5E, 0x41, 0x04, 0x00},
83 {0x39, 0x14, 0x51, 0x55, 0x23, 0x40},
84 {0x79, 0x14, 0x5E, 0x49, 0x14, 0x40},
85 {0x39, 0x14, 0x0E, 0x05, 0x13, 0x80},
86 {0x7C, 0x41, 0x04, 0x10, 0x41, 0x00},
87 {0x45, 0x14, 0x51, 0x45, 0x13, 0x80},
88 {0x45, 0x14, 0x51, 0x44, 0xA1, 0x00},
89 {0x45, 0x15, 0x55, 0x55, 0x52, 0x80},
90 {0x45, 0x12, 0x84, 0x29, 0x14, 0x40},
91 {0x45, 0x14, 0x4A, 0x10, 0x41, 0x00},
92 {0x78, 0x21, 0x08, 0x41, 0x07, 0x80},
93 {0x38, 0x82, 0x08, 0x20, 0x83, 0x80},
94 {0x01, 0x02, 0x04, 0x08, 0x10, 0x00},
95 {0x38, 0x20, 0x82, 0x08, 0x23, 0x80},
96 {0x10, 0xA4, 0x40, 0x00, 0x00, 0x00},
97 {0x00, 0x00, 0x00, 0x00, 0x00, 0x3F},
98 {0x30, 0xC1, 0x00, 0x00, 0x00, 0x00},
99 {0x00, 0x03, 0x81, 0x3D, 0x13, 0xC0},
100 {0x41, 0x07, 0x91, 0x45, 0x17, 0x80},
101 {0x00, 0x03, 0x91, 0x41, 0x13, 0x80},
102 {0x04, 0x13, 0xD1, 0x45, 0x13, 0xC0},
103 {0x00, 0x03, 0x91, 0x79, 0x03, 0x80},
104 {0x18, 0x82, 0x1E, 0x20, 0x82, 0x00},
105 {0x00, 0x03, 0xD1, 0x44, 0xF0, 0x4E},
106 {0x41, 0x07, 0x12, 0x49, 0x24, 0x80},
107 {0x10, 0x01, 0x04, 0x10, 0x41, 0x80},
108 {0x08, 0x01, 0x82, 0x08, 0x24, 0x8C},
109 {0x41, 0x04, 0x94, 0x61, 0x44, 0x80},
110 {0x10, 0x41, 0x04, 0x10, 0x41, 0x80},
111 {0x00, 0x06, 0x95, 0x55, 0x14, 0x40},
112 {0x00, 0x07, 0x12, 0x49, 0x24, 0x80},
113 {0x00, 0x03, 0x91, 0x45, 0x13, 0x80},
114 {0x00, 0x07, 0x91, 0x45, 0x17, 0x90},
115 {0x00, 0x03, 0xD1, 0x45, 0x13, 0xC1},
116 {0x00, 0x05, 0x89, 0x20, 0x87, 0x00},
117 {0x00, 0x03, 0x90, 0x38, 0x13, 0x80},
118 {0x00, 0x87, 0x88, 0x20, 0xA1, 0x00},
119 {0x00, 0x04, 0x92, 0x49, 0x62, 0x80},
120 {0x00, 0x04, 0x51, 0x44, 0xA1, 0x00},
121 {0x00, 0x04, 0x51, 0x55, 0xF2, 0x80},
122 {0x00, 0x04, 0x92, 0x31, 0x24, 0x80},
123 {0x00, 0x04, 0x92, 0x48, 0xE1, 0x18},
124 {0x00, 0x07, 0x82, 0x31, 0x07, 0x80},
125 {0x18, 0x82, 0x18, 0x20, 0x81, 0x80},
126 {0x10, 0x41, 0x00, 0x10, 0x41, 0x00},
127 {0x30, 0x20, 0x83, 0x08, 0x23, 0x00},
128 {0x29, 0x40, 0x00, 0x00, 0x00, 0x00},
129 {0x10, 0xE6, 0xD1, 0x45, 0xF0, 0x00}
132 const uint8_t* get_letter(
const u_char letter)
const override
134 if (letter >= 32 and letter < 128)
136 return SmallFont::font[letter - 32];
137 return SmallFont::font[1];
140 inline uint8_t get_height()
const override {
return 8; };
141 inline uint8_t get_width()
const override {
return 6; };
147 static inline constexpr uint8_t font[96][24] = {
148 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
150 {0x06, 0x00, 0x60, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0x60,
151 0x06, 0x00, 0x60, 0x00, 0x00, 0x00, 0x06, 0x00, 0x60, 0x00, 0x00, 0x00},
152 {0x00, 0x00, 0x00, 0x19, 0x81, 0x98, 0x19, 0x81, 0x98, 0x00, 0x00, 0x00,
153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
154 {0x00, 0x00, 0x66, 0x06, 0x60, 0x66, 0x3F, 0xF0, 0xCC, 0x0C, 0xC1, 0x98,
155 0x19, 0x87, 0xFC, 0x33, 0x03, 0x30, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00},
156 {0x06, 0x00, 0x60, 0x1F, 0x83, 0xFC, 0x36, 0x03, 0x60, 0x3F, 0x81, 0xFC,
157 0x06, 0xC0, 0x6C, 0x3F, 0xC1, 0xF8, 0x06, 0x00, 0x60, 0x00, 0x00, 0x00},
158 {0x00, 0x00, 0x00, 0x00, 0x13, 0x83, 0x38, 0x73, 0x8E, 0x01, 0xC0, 0x38,
159 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x8E, 0x70, 0xE6, 0x0E, 0x00, 0x00, 0x00},
160 {0x00, 0x00, 0x70, 0x0D, 0x81, 0x98, 0x19, 0x81, 0xB0, 0x0E, 0x01, 0xE0,
161 0x3E, 0x03, 0x36, 0x33, 0xC3, 0x18, 0x3B, 0xC1, 0xE6, 0x00, 0x00, 0x00},
162 {0x0E, 0x00, 0xE0, 0x0E, 0x00, 0x60, 0x06, 0x00, 0xC0, 0x00, 0x00, 0x00,
163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
164 {0x03, 0x80, 0x60, 0x0E, 0x00, 0xC0, 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0xC0,
165 0x1C, 0x01, 0xC0, 0x0C, 0x00, 0xE0, 0x06, 0x00, 0x38, 0x00, 0x00, 0x00},
166 {0x1C, 0x00, 0x60, 0x07, 0x00, 0x30, 0x03, 0x80, 0x38, 0x03, 0x80, 0x38,
167 0x03, 0x80, 0x38, 0x03, 0x00, 0x70, 0x06, 0x01, 0xC0, 0x00, 0x00, 0x00},
168 {0x00, 0x00, 0x00, 0x00, 0x03, 0x6C, 0x36, 0xC1, 0xF8, 0x0F, 0x03, 0xFC,
169 0x0F, 0x01, 0xF8, 0x36, 0xC3, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
170 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x60, 0x06, 0x03, 0xFC,
171 0x3F, 0xC0, 0x60, 0x06, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
172 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
173 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x06, 0x00, 0xC0},
174 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC,
175 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
176 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
177 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x00, 0x00, 0x00},
178 {0x00, 0x00, 0x01, 0x00, 0x30, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70,
179 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00},
180 {0x0F, 0x83, 0xFE, 0x30, 0x66, 0x07, 0x60, 0xF6, 0x1B, 0x63, 0x36, 0x63,
181 0x6C, 0x37, 0x83, 0x70, 0x33, 0x06, 0x3F, 0xE0, 0xF8, 0x00, 0x00, 0x00},
182 {0x03, 0x00, 0x70, 0x1F, 0x01, 0xF0, 0x03, 0x00, 0x30, 0x03, 0x00, 0x30,
183 0x03, 0x00, 0x30, 0x03, 0x00, 0x30, 0x1F, 0xE1, 0xFE, 0x00, 0x00, 0x00},
184 {0x1F, 0xC3, 0xFE, 0x70, 0x76, 0x03, 0x60, 0x70, 0x0E, 0x01, 0xC0, 0x38,
185 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x7F, 0xF7, 0xFF, 0x00, 0x00, 0x00},
186 {0x1F, 0xC3, 0xFE, 0x70, 0x76, 0x03, 0x00, 0x30, 0x07, 0x0F, 0xE0, 0xFC,
187 0x00, 0x60, 0x03, 0x60, 0x37, 0x07, 0x3F, 0xE1, 0xFC, 0x00, 0x00, 0x00},
188 {0x01, 0xC0, 0x3C, 0x07, 0xC0, 0xEC, 0x1C, 0xC3, 0x8C, 0x70, 0xC6, 0x0C,
189 0x7F, 0xF7, 0xFF, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0x00, 0x00},
190 {0x7F, 0xF7, 0xFF, 0x60, 0x06, 0x00, 0x60, 0x07, 0xFC, 0x3F, 0xE0, 0x07,
191 0x00, 0x30, 0x03, 0x60, 0x37, 0x07, 0x3F, 0xE1, 0xFC, 0x00, 0x00, 0x00},
192 {0x03, 0xC0, 0x7C, 0x0E, 0x01, 0xC0, 0x38, 0x03, 0x00, 0x7F, 0xC7, 0xFE,
193 0x70, 0x76, 0x03, 0x60, 0x37, 0x07, 0x3F, 0xE1, 0xFC, 0x00, 0x00, 0x00},
194 {0x7F, 0xF7, 0xFF, 0x00, 0x60, 0x06, 0x00, 0xC0, 0x0C, 0x01, 0x80, 0x18,
195 0x03, 0x00, 0x30, 0x06, 0x00, 0x60, 0x0C, 0x00, 0xC0, 0x00, 0x00, 0x00},
196 {0x0F, 0x81, 0xFC, 0x38, 0xE3, 0x06, 0x30, 0x63, 0x8E, 0x1F, 0xC3, 0xFE,
197 0x70, 0x76, 0x03, 0x60, 0x37, 0x07, 0x3F, 0xE1, 0xFC, 0x00, 0x00, 0x00},
198 {0x1F, 0xC3, 0xFE, 0x70, 0x76, 0x03, 0x60, 0x37, 0x07, 0x3F, 0xF1, 0xFF,
199 0x00, 0x60, 0x0E, 0x01, 0xC0, 0x38, 0x1F, 0x01, 0xE0, 0x00, 0x00, 0x00},
200 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0x00,
201 0x00, 0x00, 0x00, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00},
202 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0x00,
203 0x00, 0x00, 0x00, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0x60, 0x06, 0x00, 0xC0},
204 {0x00, 0xC0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x03, 0x80,
205 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0C, 0x00, 0x00, 0x00},
206 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x3F, 0xE0, 0x00,
207 0x00, 0x03, 0xFE, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
208 {0x30, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x1C,
209 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x03, 0x00, 0x00, 0x00, 0x00},
210 {0x1F, 0x83, 0xFC, 0x70, 0xE6, 0x06, 0x60, 0xE0, 0x1C, 0x03, 0x80, 0x70,
211 0x06, 0x00, 0x60, 0x06, 0x00, 0x00, 0x06, 0x00, 0x60, 0x00, 0x00, 0x00},
212 {0x1F, 0xC3, 0xFE, 0x30, 0x66, 0x7B, 0x6F, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB,
213 0x6D, 0xB6, 0xFE, 0x67, 0xC7, 0x00, 0x3F, 0xC0, 0xFC, 0x00, 0x00, 0x00},
214 {0x06, 0x00, 0x60, 0x0F, 0x00, 0xF0, 0x0F, 0x01, 0x98, 0x19, 0x81, 0x98,
215 0x30, 0xC3, 0xFC, 0x3F, 0xC6, 0x06, 0x60, 0x66, 0x06, 0x00, 0x00, 0x00},
216 {0x7F, 0x07, 0xF8, 0x61, 0xC6, 0x0C, 0x60, 0xC6, 0x1C, 0x7F, 0x87, 0xFC,
217 0x60, 0xE6, 0x06, 0x60, 0x66, 0x0E, 0x7F, 0xC7, 0xF8, 0x00, 0x00, 0x00},
218 {0x0F, 0x81, 0xFC, 0x38, 0xE3, 0x06, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00,
219 0x60, 0x06, 0x00, 0x30, 0x63, 0x8E, 0x1F, 0xC0, 0xF8, 0x00, 0x00, 0x00},
220 {0x7F, 0x07, 0xF8, 0x61, 0xC6, 0x0C, 0x60, 0x66, 0x06, 0x60, 0x66, 0x06,
221 0x60, 0x66, 0x06, 0x60, 0xC6, 0x1C, 0x7F, 0x87, 0xF0, 0x00, 0x00, 0x00},
222 {0x7F, 0xE7, 0xFE, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x7F, 0x87, 0xF8,
223 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x7F, 0xE7, 0xFE, 0x00, 0x00, 0x00},
224 {0x7F, 0xE7, 0xFE, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x7F, 0x87, 0xF8,
225 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x00, 0x00, 0x00},
226 {0x0F, 0xC1, 0xFE, 0x38, 0x63, 0x00, 0x60, 0x06, 0x00, 0x63, 0xE6, 0x3E,
227 0x60, 0x66, 0x06, 0x30, 0x63, 0x86, 0x1F, 0xE0, 0xFE, 0x00, 0x00, 0x00},
228 {0x60, 0x66, 0x06, 0x60, 0x66, 0x06, 0x60, 0x66, 0x06, 0x7F, 0xE7, 0xFE,
229 0x60, 0x66, 0x06, 0x60, 0x66, 0x06, 0x60, 0x66, 0x06, 0x00, 0x00, 0x00},
230 {0x1F, 0x81, 0xF8, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60,
231 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x1F, 0x81, 0xF8, 0x00, 0x00, 0x00},
232 {0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06,
233 0x00, 0x66, 0x06, 0x60, 0x67, 0x0C, 0x3F, 0xC1, 0xF8, 0x00, 0x00, 0x00},
234 {0x60, 0x66, 0x0E, 0x61, 0xC6, 0x38, 0x67, 0x06, 0xE0, 0x7C, 0x07, 0xC0,
235 0x6E, 0x06, 0x70, 0x63, 0x86, 0x1C, 0x60, 0xE6, 0x06, 0x00, 0x00, 0x00},
236 {0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00,
237 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x7F, 0xE7, 0xFE, 0x00, 0x00, 0x00},
238 {0x60, 0x67, 0x0E, 0x70, 0xE7, 0x9E, 0x79, 0xE6, 0xF6, 0x6F, 0x66, 0x66,
239 0x66, 0x66, 0x06, 0x60, 0x66, 0x06, 0x60, 0x66, 0x06, 0x00, 0x00, 0x00},
240 {0x60, 0x67, 0x06, 0x70, 0x67, 0x86, 0x6C, 0x66, 0xC6, 0x66, 0x66, 0x66,
241 0x63, 0x66, 0x36, 0x61, 0xE6, 0x0E, 0x60, 0xE6, 0x06, 0x00, 0x00, 0x00},
242 {0x0F, 0x01, 0xF8, 0x39, 0xC3, 0x0C, 0x60, 0x66, 0x06, 0x60, 0x66, 0x06,
243 0x60, 0x66, 0x06, 0x30, 0xC3, 0x9C, 0x1F, 0x80, 0xF0, 0x00, 0x00, 0x00},
244 {0x7F, 0x87, 0xFC, 0x60, 0xE6, 0x06, 0x60, 0x66, 0x06, 0x60, 0xE7, 0xFC,
245 0x7F, 0x86, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x00, 0x00, 0x00},
246 {0x0F, 0x01, 0xF8, 0x39, 0xC3, 0x0C, 0x60, 0x66, 0x06, 0x60, 0x66, 0x06,
247 0x60, 0x66, 0x36, 0x33, 0xC3, 0x9C, 0x1F, 0xE0, 0xF6, 0x00, 0x00, 0x00},
248 {0x7F, 0x87, 0xFC, 0x60, 0xE6, 0x06, 0x60, 0x66, 0x06, 0x60, 0xE7, 0xFC,
249 0x7F, 0x86, 0x70, 0x63, 0x86, 0x1C, 0x60, 0xE6, 0x06, 0x00, 0x00, 0x00},
250 {0x1F, 0x83, 0xFC, 0x70, 0xE6, 0x06, 0x60, 0x07, 0x00, 0x3F, 0x81, 0xFC,
251 0x00, 0xE0, 0x06, 0x60, 0x67, 0x0E, 0x3F, 0xC1, 0xF8, 0x00, 0x00, 0x00},
252 {0x3F, 0xC3, 0xFC, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60,
253 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x00, 0x00, 0x00},
254 {0x60, 0x66, 0x06, 0x60, 0x66, 0x06, 0x60, 0x66, 0x06, 0x60, 0x66, 0x06,
255 0x60, 0x66, 0x06, 0x60, 0x63, 0x0C, 0x3F, 0xC1, 0xF8, 0x00, 0x00, 0x00},
256 {0x60, 0x66, 0x06, 0x60, 0x63, 0x0C, 0x30, 0xC3, 0x0C, 0x19, 0x81, 0x98,
257 0x19, 0x80, 0xF0, 0x0F, 0x00, 0xF0, 0x06, 0x00, 0x60, 0x00, 0x00, 0x00},
258 {0x60, 0x66, 0x06, 0x60, 0x66, 0x06, 0x60, 0x66, 0x06, 0x60, 0x66, 0x66,
259 0x66, 0x66, 0xF6, 0x79, 0xE7, 0x0E, 0x70, 0xE6, 0x06, 0x00, 0x00, 0x00},
260 {0x60, 0x66, 0x06, 0x30, 0xC3, 0x0C, 0x19, 0x80, 0xF0, 0x06, 0x00, 0x60,
261 0x0F, 0x01, 0x98, 0x30, 0xC3, 0x0C, 0x60, 0x66, 0x06, 0x00, 0x00, 0x00},
262 {0x60, 0x66, 0x06, 0x30, 0xC3, 0x0C, 0x19, 0x81, 0x98, 0x0F, 0x00, 0xF0,
263 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x00, 0x00, 0x00},
264 {0x7F, 0xE7, 0xFE, 0x00, 0xC0, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0x60,
265 0x0C, 0x01, 0x80, 0x30, 0x03, 0x00, 0x7F, 0xE7, 0xFE, 0x00, 0x00, 0x00},
266 {0x1F, 0x81, 0xF8, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80,
267 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x1F, 0x81, 0xF8, 0x00, 0x00, 0x00},
268 {0x00, 0x04, 0x00, 0x60, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70,
269 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00},
270 {0x1F, 0x81, 0xF8, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18,
271 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x1F, 0x81, 0xF8, 0x00, 0x00, 0x00},
272 {0x02, 0x00, 0x70, 0x0F, 0x81, 0xDC, 0x38, 0xE7, 0x07, 0x60, 0x30, 0x00,
273 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
274 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
275 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF7, 0xFF},
276 {0x00, 0x00, 0x70, 0x07, 0x00, 0x70, 0x06, 0x00, 0x60, 0x03, 0x00, 0x00,
277 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
278 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x3F, 0xE0, 0x06,
279 0x1F, 0xE3, 0xFE, 0x60, 0x66, 0x06, 0x7F, 0xE3, 0xFE, 0x00, 0x00, 0x00},
280 {0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0xF8, 0x7F, 0xC7, 0x0E,
281 0x60, 0x66, 0x06, 0x60, 0x66, 0x0E, 0x7F, 0xC7, 0xF8, 0x00, 0x00, 0x00},
282 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x3F, 0xC7, 0x06,
283 0x60, 0x06, 0x00, 0x60, 0x07, 0x06, 0x3F, 0xC1, 0xF8, 0x00, 0x00, 0x00},
284 {0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x61, 0xF6, 0x3F, 0xE7, 0x1E,
285 0x60, 0x66, 0x06, 0x60, 0x67, 0x06, 0x3F, 0xE1, 0xFE, 0x00, 0x00, 0x00},
286 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x3F, 0xC7, 0x06,
287 0x7F, 0xE7, 0xFC, 0x60, 0x07, 0x00, 0x3F, 0xC1, 0xF8, 0x00, 0x00, 0x00},
288 {0x07, 0x80, 0xF8, 0x1C, 0x01, 0x80, 0x18, 0x01, 0x80, 0x7F, 0x07, 0xF0,
289 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x00, 0x00, 0x00},
290 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x3F, 0xE7, 0x06,
291 0x60, 0x67, 0x0E, 0x3F, 0xE1, 0xF6, 0x00, 0x60, 0x0E, 0x3F, 0xC3, 0xF8},
292 {0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0xF0, 0x7F, 0x87, 0x1C,
293 0x60, 0xC6, 0x0C, 0x60, 0xC6, 0x0C, 0x60, 0xC6, 0x0C, 0x00, 0x00, 0x00},
294 {0x00, 0x00, 0x00, 0x06, 0x00, 0x60, 0x00, 0x00, 0xE0, 0x0E, 0x00, 0x60,
295 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x1F, 0x81, 0xF8, 0x00, 0x00, 0x00},
296 {0x00, 0x00, 0x00, 0x01, 0x80, 0x18, 0x00, 0x00, 0x38, 0x03, 0x80, 0x18,
297 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x81, 0x98, 0x1F, 0x80, 0xF0},
298 {0x30, 0x03, 0x00, 0x30, 0x03, 0x00, 0x30, 0x03, 0x18, 0x33, 0x83, 0x70,
299 0x3E, 0x03, 0xE0, 0x37, 0x03, 0x38, 0x31, 0xC3, 0x0C, 0x00, 0x00, 0x00},
300 {0x0E, 0x00, 0xE0, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60,
301 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x1F, 0x81, 0xF8, 0x00, 0x00, 0x00},
302 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x98, 0x7F, 0xC7, 0xFE,
303 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00},
304 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x3F, 0xC3, 0x0E,
305 0x30, 0x63, 0x06, 0x30, 0x63, 0x06, 0x30, 0x63, 0x06, 0x00, 0x00, 0x00},
306 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x3F, 0xC7, 0x0E,
307 0x60, 0x66, 0x06, 0x60, 0x67, 0x0E, 0x3F, 0xC1, 0xF8, 0x00, 0x00, 0x00},
308 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x7F, 0xC6, 0x0E,
309 0x60, 0x66, 0x06, 0x70, 0xE7, 0xFC, 0x6F, 0x86, 0x00, 0x60, 0x06, 0x00},
310 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x3F, 0xE7, 0x06,
311 0x60, 0x66, 0x06, 0x70, 0xE3, 0xFE, 0x1F, 0x60, 0x06, 0x00, 0x60, 0x06},
312 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x7C, 0x3F, 0xE3, 0x86,
313 0x30, 0x03, 0x00, 0x30, 0x03, 0x00, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00},
314 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x7F, 0x86, 0x00,
315 0x7F, 0x03, 0xF8, 0x01, 0x80, 0x18, 0x7F, 0x83, 0xF0, 0x00, 0x00, 0x00},
316 {0x00, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x07, 0xF0, 0x7F, 0x01, 0x80,
317 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x1F, 0x80, 0xF8, 0x00, 0x00, 0x00},
318 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x60, 0x66, 0x06,
319 0x60, 0x66, 0x06, 0x60, 0x67, 0x0E, 0x3F, 0xE1, 0xF6, 0x00, 0x00, 0x00},
320 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x60, 0x63, 0x0C,
321 0x30, 0xC1, 0x98, 0x19, 0x80, 0xF0, 0x0F, 0x00, 0x60, 0x00, 0x00, 0x00},
322 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x66, 0x66, 0x66, 0x66,
323 0x66, 0x66, 0x66, 0x6F, 0x63, 0xFC, 0x39, 0xC1, 0x08, 0x00, 0x00, 0x00},
324 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x71, 0xC3, 0xB8,
325 0x1F, 0x00, 0xE0, 0x1F, 0x03, 0xB8, 0x71, 0xC6, 0x0C, 0x00, 0x00, 0x00},
326 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0C, 0x30, 0xC1, 0x98,
327 0x19, 0x80, 0xF0, 0x0F, 0x00, 0x60, 0x06, 0x00, 0xC0, 0x0C, 0x01, 0x80},
328 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x7F, 0x80, 0x30,
329 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x7F, 0xC7, 0xFC, 0x00, 0x00, 0x00},
330 {0x03, 0xC0, 0x7C, 0x0E, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x1C, 0x03, 0x80,
331 0x1C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0E, 0x00, 0x7C, 0x03, 0xC0, 0x00},
332 {0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60,
333 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x00, 0x00, 0x00},
334 {0x3C, 0x03, 0xE0, 0x07, 0x00, 0x30, 0x03, 0x00, 0x30, 0x03, 0x80, 0x1C,
335 0x03, 0x80, 0x30, 0x03, 0x00, 0x30, 0x07, 0x03, 0xE0, 0x3C, 0x00, 0x00},
336 {0x00, 0x00, 0x00, 0x1C, 0x63, 0x6C, 0x63, 0x80, 0x00, 0x00, 0x00, 0x00,
337 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
338 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0xF0, 0x19, 0x83, 0x0C,
339 0x60, 0x66, 0x06, 0x7F, 0xE7, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
342 const uint8_t* get_letter(
const u_char letter)
const override
344 if (letter >= 32 and letter < 128)
346 return BigFont::font[letter - 32];
347 return BigFont::font[1];
350 inline uint8_t get_height()
const override {
return 16; };
351 inline uint8_t get_width()
const override {
return 12; };
358 static constexpr float minScale = 0.1;
359 static constexpr float switchScale = 0.5;
361 float trueScale = lmpd_constrain<float>(scale, 0.0f, 1.0f);
362 if (trueScale <= switchScale)
364 trueScale =
lmpd_map(scale, 0.0, switchScale, minScale, 1.0);
365 return {smallFont, trueScale};
371 lmpd_map(scale, switchScale, 1.0, smallFont.get_height() /
static_cast<float>(bigFont.get_height()), 1.0);
372 return {bigFont, trueScale};
387 const int16_t startXIndex,
388 const int16_t startYIndex,
391 const uint32_t color,
397 bool hasCutoffX =
false;
399 bool isDisplayedOut =
true;
401 const auto& letterArray = font.get_letter(letter);
402 const uint8_t arrayLen = font.get_arrayLenght();
403 for (uint8_t i = 0; i < arrayLen; i++)
405 uint8_t letterPart = letterArray[i];
407 for (uint8_t j = 0; j < 8; ++j)
409 const int16_t targetX = startXIndex + xIndex * scale;
410 const int16_t targetY = startYIndex + yIndex * scale;
411 const bool isCutoff = targetX > stripXCoordinates or targetY > stripXCoordinates;
414 const bool shouldSet = (letterPart & 0x80) != 0;
417 if (targetX >= 0 and targetY >= 0)
419 isDisplayedOut =
false;
426 isDisplayedOut =
false;
429 hasCutoffX = hasCutoffX or (targetX > stripXCoordinates);
432 letterPart = letterPart << 1;
435 if (xIndex > font.get_width() - 1)
444 return {isDisplayedOut, 0};
445 return {isDisplayedOut, font.get_width()};
468 const std::string& text,
469 const std::function<uint32_t(
char)>& colorCallback,
470 const int16_t startXIndex = 0,
471 const int16_t startYIndex = 0,
473 const bool paddEnd =
false)
475 const auto& [font, trueScale] = __private::font_from_scale(scale);
477 bool lastLetterDisappeared =
true;
478 int16_t displayColumn = startXIndex;
479 for (
const char& c: text)
481 const auto& [isLetterDisplayed, charSize] =
482 __private::display_letter(c, displayColumn, startYIndex, font, trueScale, colorCallback(c), lamp);
483 lastLetterDisappeared = isLetterDisplayed;
487 displayColumn += charSize;
492 return lastLetterDisappeared;
static T lmpd_map(float x, const float in_min, const float in_max, const float out_min, const float out_max)
Linearly interpolate a number between two numbers.
Definition: utils.h:80
Definition: text_display.hpp:451
static bool display(LampTy &lamp, const std::string &text, const std::function< uint32_t(char)> &colorCallback, const int16_t startXIndex=0, const int16_t startYIndex=0, float scale=0.2, const bool paddEnd=false)
Display a given text string to the led.
Definition: text_display.hpp:467
Definition: text_display.hpp:146
Definition: text_display.hpp:22
Definition: text_display.hpp:32
Main interface between the user and the hardware of the lamp.
Definition: lamp_type.hpp:114
static constexpr uint16_t maxHeight
(indexable) Height of "pixel space" w/ lamp taken as a LED matrix
Definition: lamp_type.hpp:387
static constexpr float maxWidthFloat
Width as a precise floating point number, equal to stripXCoordinates.
Definition: lamp_type.hpp:369
void LMBD_INLINE setPixelColorXY(uint16_t X, uint16_t Y, uint32_t color)
(indexable) Set the X,Y-th LED color
Definition: lamp_type.hpp:916
static constexpr uint16_t maxWidth
(indexable) Width of "pixel space" w/ lamp taken as a LED matrix
Definition: lamp_type.hpp:366
std::pair< const IFont &, float > font_from_scale(const float scale)
get a font from a [0; 1] scale
Definition: text_display.hpp:356
std::pair< bool, uint8_t > display_letter(const char letter, const int16_t startXIndex, const int16_t startYIndex, const IFont &font, const float scale, const uint32_t color, LampTy &lamp)
Display a single character.
Definition: text_display.hpp:386