ESPHome 2025.6.3
Loading...
Searching...
No Matches
display.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstdarg>
4#include <vector>
5
6#include "rect.h"
7
10#include "esphome/core/time.h"
11#include "esphome/core/log.h"
12#include "display_color_utils.h"
13
14#ifdef USE_GRAPH
16#endif
17
18#ifdef USE_QR_CODE
20#endif
21
22#ifdef USE_GRAPHICAL_DISPLAY_MENU
24#endif
25
26namespace esphome {
27namespace display {
28
79
127
133
140
141#define PI 3.1415926535897932384626433832795
142
143const int EDGES_TRIGON = 3;
144const int EDGES_TRIANGLE = 3;
145const int EDGES_TETRAGON = 4;
147const int EDGES_PENTAGON = 5;
148const int EDGES_HEXAGON = 6;
149const int EDGES_HEPTAGON = 7;
150const int EDGES_OCTAGON = 8;
151const int EDGES_NONAGON = 9;
152const int EDGES_ENNEAGON = 9;
153const int EDGES_DECAGON = 10;
154const int EDGES_HENDECAGON = 11;
155const int EDGES_DODECAGON = 12;
156const int EDGES_TRIDECAGON = 13;
157const int EDGES_TETRADECAGON = 14;
158const int EDGES_PENTADECAGON = 15;
159const int EDGES_HEXADECAGON = 16;
160
161const float ROTATION_0_DEGREES = 0.0;
162const float ROTATION_45_DEGREES = 45.0;
163const float ROTATION_90_DEGREES = 90.0;
164const float ROTATION_180_DEGREES = 180.0;
165const float ROTATION_270_DEGREES = 270.0;
166
171
176
177class Display;
178class DisplayPage;
179class DisplayOnPageChangeTrigger;
180
181using display_writer_t = std::function<void(Display &)>;
182
183#define LOG_DISPLAY(prefix, type, obj) \
184 if ((obj) != nullptr) { \
185 ESP_LOGCONFIG(TAG, \
186 prefix type "\n" \
187 "%s Rotations: %d °\n" \
188 "%s Dimensions: %dpx x %dpx", \
189 prefix, (obj)->rotation_, prefix, (obj)->get_width(), (obj)->get_height()); \
190 }
191
193extern const Color COLOR_OFF;
195extern const Color COLOR_ON;
196
198 public:
199 virtual void draw(int x, int y, Display *display, Color color_on, Color color_off) = 0;
200 virtual int get_width() const = 0;
201 virtual int get_height() const = 0;
202};
203
204class BaseFont {
205 public:
206 virtual void print(int x, int y, Display *display, Color color, const char *text, Color background) = 0;
207 virtual void measure(const char *str, int *width, int *x_offset, int *baseline, int *height) = 0;
208};
209
210class Display : public PollingComponent {
211 public:
213 virtual void fill(Color color);
215 void clear();
216
218 virtual int get_width() { return this->get_width_internal(); }
220 virtual int get_height() { return this->get_height_internal(); }
221
223 int get_native_width() { return this->get_width_internal(); }
225 int get_native_height() { return this->get_height_internal(); }
226
228 inline void draw_pixel_at(int x, int y) { this->draw_pixel_at(x, y, COLOR_ON); }
229
231 virtual void draw_pixel_at(int x, int y, Color color) = 0;
232
252 virtual void draw_pixels_at(int x_start, int y_start, int w, int h, const uint8_t *ptr, ColorOrder order,
253 ColorBitness bitness, bool big_endian, int x_offset, int y_offset, int x_pad);
254
256 void draw_pixels_at(int x_start, int y_start, int w, int h, const uint8_t *ptr, ColorOrder order,
257 ColorBitness bitness, bool big_endian) {
258 this->draw_pixels_at(x_start, y_start, w, h, ptr, order, bitness, big_endian, 0, 0, 0);
259 }
260
262 void line(int x1, int y1, int x2, int y2, Color color = COLOR_ON);
263
265 void line_at_angle(int x, int y, int angle, int length, Color color = COLOR_ON);
266
269 void line_at_angle(int x, int y, int angle, int start_radius, int stop_radius, Color color = COLOR_ON);
270
272 void horizontal_line(int x, int y, int width, Color color = COLOR_ON);
273
275 void vertical_line(int x, int y, int height, Color color = COLOR_ON);
276
279 void rectangle(int x1, int y1, int width, int height, Color color = COLOR_ON);
280
282 void filled_rectangle(int x1, int y1, int width, int height, Color color = COLOR_ON);
283
285 void circle(int center_x, int center_xy, int radius, Color color = COLOR_ON);
286
288 void filled_circle(int center_x, int center_y, int radius, Color color = COLOR_ON);
289
292 void filled_ring(int center_x, int center_y, int radius1, int radius2, Color color = COLOR_ON);
295 void filled_gauge(int center_x, int center_y, int radius1, int radius2, int progress, Color color = COLOR_ON);
296
298 void triangle(int x1, int y1, int x2, int y2, int x3, int y3, Color color = COLOR_ON);
299
301 void filled_triangle(int x1, int y1, int x2, int y2, int x3, int y3, Color color = COLOR_ON);
302
311 void get_regular_polygon_vertex(int vertex_id, int *vertex_x, int *vertex_y, int center_x, int center_y, int radius,
312 int edges, RegularPolygonVariation variation = VARIATION_POINTY_TOP,
313 float rotation_degrees = ROTATION_0_DEGREES);
314
321 void regular_polygon(int x, int y, int radius, int edges, RegularPolygonVariation variation = VARIATION_POINTY_TOP,
322 float rotation_degrees = ROTATION_0_DEGREES, Color color = COLOR_ON,
324 void regular_polygon(int x, int y, int radius, int edges, RegularPolygonVariation variation, Color color,
326 void regular_polygon(int x, int y, int radius, int edges, Color color,
328
333 void filled_regular_polygon(int x, int y, int radius, int edges,
335 float rotation_degrees = ROTATION_0_DEGREES, Color color = COLOR_ON);
336 void filled_regular_polygon(int x, int y, int radius, int edges, RegularPolygonVariation variation, Color color);
337 void filled_regular_polygon(int x, int y, int radius, int edges, Color color);
338
349 void print(int x, int y, BaseFont *font, Color color, TextAlign align, const char *text,
350 Color background = COLOR_OFF);
351
361 void print(int x, int y, BaseFont *font, Color color, const char *text, Color background = COLOR_OFF);
362
371 void print(int x, int y, BaseFont *font, TextAlign align, const char *text);
372
380 void print(int x, int y, BaseFont *font, const char *text);
381
393 void printf(int x, int y, BaseFont *font, Color color, Color background, TextAlign align, const char *format, ...)
394 __attribute__((format(printf, 8, 9)));
395
406 void printf(int x, int y, BaseFont *font, Color color, TextAlign align, const char *format, ...)
407 __attribute__((format(printf, 7, 8)));
408
418 void printf(int x, int y, BaseFont *font, Color color, const char *format, ...) __attribute__((format(printf, 6, 7)));
419
429 void printf(int x, int y, BaseFont *font, TextAlign align, const char *format, ...)
430 __attribute__((format(printf, 6, 7)));
431
440 void printf(int x, int y, BaseFont *font, const char *format, ...) __attribute__((format(printf, 5, 6)));
441
453 void strftime(int x, int y, BaseFont *font, Color color, Color background, TextAlign align, const char *format,
454 ESPTime time) __attribute__((format(strftime, 8, 0)));
455
466 void strftime(int x, int y, BaseFont *font, Color color, TextAlign align, const char *format, ESPTime time)
467 __attribute__((format(strftime, 7, 0)));
468
478 void strftime(int x, int y, BaseFont *font, Color color, const char *format, ESPTime time)
479 __attribute__((format(strftime, 6, 0)));
480
490 void strftime(int x, int y, BaseFont *font, TextAlign align, const char *format, ESPTime time)
491 __attribute__((format(strftime, 6, 0)));
492
501 void strftime(int x, int y, BaseFont *font, const char *format, ESPTime time) __attribute__((format(strftime, 5, 0)));
502
511 void image(int x, int y, BaseImage *image, Color color_on = COLOR_ON, Color color_off = COLOR_OFF);
512
522 void image(int x, int y, BaseImage *image, ImageAlign align, Color color_on = COLOR_ON, Color color_off = COLOR_OFF);
523
524#ifdef USE_GRAPH
532 void graph(int x, int y, graph::Graph *graph, Color color_on = COLOR_ON);
533
545 void legend(int x, int y, graph::Graph *graph, Color color_on = COLOR_ON);
546#endif // USE_GRAPH
547
548#ifdef USE_QR_CODE
556 void qr_code(int x, int y, qr_code::QrCode *qr_code, Color color_on = COLOR_ON, int scale = 1);
557#endif
558
559#ifdef USE_GRAPHICAL_DISPLAY_MENU
567 void menu(int x, int y, graphical_display_menu::GraphicalDisplayMenu *menu, int width, int height);
568#endif // USE_GRAPHICAL_DISPLAY_MENU
569
582 void get_text_bounds(int x, int y, const char *text, BaseFont *font, TextAlign align, int *x1, int *y1, int *width,
583 int *height);
584
586 void set_writer(display_writer_t &&writer);
587
588 void show_page(DisplayPage *page);
589 void show_next_page();
590 void show_prev_page();
591
592 void set_pages(std::vector<DisplayPage *> pages);
593
594 const DisplayPage *get_active_page() const { return this->page_; }
595
597
599 void set_rotation(DisplayRotation rotation);
600
601 // Internal method to set display auto clearing.
602 void set_auto_clear(bool auto_clear_enabled) { this->auto_clear_enabled_ = auto_clear_enabled; }
603
604 DisplayRotation get_rotation() const { return this->rotation_; }
605
610
617 void start_clipping(Rect rect);
618 void start_clipping(int16_t left, int16_t top, int16_t right, int16_t bottom) {
619 start_clipping(Rect(left, top, right - left, bottom - top));
620 };
621
627 void extend_clipping(Rect rect);
628 void extend_clipping(int16_t left, int16_t top, int16_t right, int16_t bottom) {
629 this->extend_clipping(Rect(left, top, right - left, bottom - top));
630 };
631
637 void shrink_clipping(Rect rect);
638 void shrink_clipping(uint16_t left, uint16_t top, uint16_t right, uint16_t bottom) {
639 this->shrink_clipping(Rect(left, top, right - left, bottom - top));
640 };
641
644 void end_clipping();
645
650 Rect get_clipping() const;
651
652 bool is_clipping() const { return !this->clipping_rectangle_.empty(); }
653
656 bool clip(int x, int y);
657
658 void test_card();
659 void show_test_card() { this->show_test_card_ = true; }
660
661 protected:
662 bool clamp_x_(int x, int w, int &min_x, int &max_x);
663 bool clamp_y_(int y, int h, int &min_y, int &max_y);
664 void vprintf_(int x, int y, BaseFont *font, Color color, Color background, TextAlign align, const char *format,
665 va_list arg);
666
667 void do_update_();
668 void clear_clipping_();
669
670 virtual int get_height_internal() = 0;
671 virtual int get_width_internal() = 0;
672
679 void filled_flat_side_triangle_(int x1, int y1, int x2, int y2, int x3, int y3, Color color);
680 void sort_triangle_points_by_y_(int *x1, int *y1, int *x2, int *y2, int *x3, int *y3);
681
686 std::vector<DisplayOnPageChangeTrigger *> on_page_change_triggers_;
688 std::vector<Rect> clipping_rectangle_;
689 bool show_test_card_{false};
690};
691
693 public:
695 void show();
696 void show_next();
697 void show_prev();
698 void set_parent(Display *parent);
699 void set_prev(DisplayPage *prev);
700 void set_next(DisplayPage *next);
701 const display_writer_t &get_writer() const;
702
703 protected:
708};
709
710template<typename... Ts> class DisplayPageShowAction : public Action<Ts...> {
711 public:
713
714 void play(Ts... x) override {
715 auto *page = this->page_.value(x...);
716 if (page != nullptr) {
717 page->show();
718 }
719 }
720};
721
722template<typename... Ts> class DisplayPageShowNextAction : public Action<Ts...> {
723 public:
725
726 void play(Ts... x) override { this->buffer_->show_next_page(); }
727
729};
730
731template<typename... Ts> class DisplayPageShowPrevAction : public Action<Ts...> {
732 public:
734
735 void play(Ts... x) override { this->buffer_->show_prev_page(); }
736
738};
739
740template<typename... Ts> class DisplayIsDisplayingPageCondition : public Condition<Ts...> {
741 public:
743
744 void set_page(DisplayPage *page) { this->page_ = page; }
745 bool check(Ts... x) override { return this->parent_->get_active_page() == this->page_; }
746
747 protected:
750};
751
752class DisplayOnPageChangeTrigger : public Trigger<DisplayPage *, DisplayPage *> {
753 public:
755 void process(DisplayPage *from, DisplayPage *to);
756 void set_from(DisplayPage *p) { this->from_ = p; }
757 void set_to(DisplayPage *p) { this->to_ = p; }
758
759 protected:
761 DisplayPage *to_{nullptr};
762};
763
764const LogString *text_align_to_string(TextAlign textalign);
765
766} // namespace display
767} // namespace esphome
uint8_t h
Definition bl0906.h:2
virtual void play(Ts... x)=0
Base class for all automation conditions.
Definition automation.h:75
This class simplifies creating components that periodically check a state.
Definition component.h:331
virtual void measure(const char *str, int *width, int *x_offset, int *baseline, int *height)=0
virtual void print(int x, int y, Display *display, Color color, const char *text, Color background)=0
virtual int get_height() const =0
virtual int get_width() const =0
virtual void draw(int x, int y, Display *display, Color color_on, Color color_off)=0
void show_page(DisplayPage *page)
Definition display.cpp:639
bool clip(int x, int y)
Check if pixel is within region of display.
Definition display.cpp:722
void get_regular_polygon_vertex(int vertex_id, int *vertex_x, int *vertex_y, int center_x, int center_y, int radius, int edges, RegularPolygonVariation variation=VARIATION_POINTY_TOP, float rotation_degrees=ROTATION_0_DEGREES)
Get the specified vertex (x,y) coordinates for the regular polygon inscribed in the circle centered o...
Definition display.cpp:418
void clear()
Clear the entire screen by filling it with OFF pixels.
Definition display.cpp:16
void end_clipping()
Reset the invalidation region.
Definition display.cpp:693
void start_clipping(Rect rect)
Set the clipping rectangle for further drawing.
Definition display.cpp:686
void shrink_clipping(uint16_t left, uint16_t top, uint16_t right, uint16_t bottom)
Definition display.h:638
bool is_clipping() const
Definition display.h:652
void set_pages(std::vector< DisplayPage * > pages)
Definition display.cpp:627
const DisplayPage * get_active_page() const
Definition display.h:594
void vprintf_(int x, int y, BaseFont *font, Color color, Color background, TextAlign align, const char *format, va_list arg)
Definition display.cpp:487
int get_native_width()
Get the native (original) width of the display in pixels.
Definition display.h:223
virtual int get_height()
Get the calculated height of the display in pixels with rotation applied.
Definition display.h:220
virtual void fill(Color color)
Fill the entire screen with the given color.
Definition display.cpp:15
void horizontal_line(int x, int y, int width, Color color=COLOR_ON)
Draw a horizontal line from the point [x,y] to [x+width,y] with the given color.
Definition display.cpp:88
void sort_triangle_points_by_y_(int *x1, int *y1, int *x2, int *y2, int *x3, int *y3)
Definition display.cpp:307
void add_on_page_change_trigger(DisplayOnPageChangeTrigger *t)
Definition display.h:596
virtual int get_width()
Get the calculated width of the display in pixels with rotation applied.
Definition display.h:218
void circle(int center_x, int center_xy, int radius, Color color=COLOR_ON)
Draw the outline of a circle centered around [center_x,center_y] with the radius radius with the give...
Definition display.cpp:110
void filled_triangle(int x1, int y1, int x2, int y2, int x3, int y3, Color color=COLOR_ON)
Fill a triangle contained between the points [x1,y1], [x2,y2] and [x3,y3] with the given color.
Definition display.cpp:404
void set_rotation(DisplayRotation rotation)
Internal method to set the display rotation with.
Definition display.cpp:17
void filled_regular_polygon(int x, int y, int radius, int edges, RegularPolygonVariation variation=VARIATION_POINTY_TOP, float rotation_degrees=ROTATION_0_DEGREES, Color color=COLOR_ON)
Fill a regular polygon inscribed in the circle centered on [x,y] with the given radius and color.
Definition display.cpp:468
virtual void draw_pixel_at(int x, int y, Color color)=0
Set a single pixel at the specified coordinates to the given color.
bool clamp_x_(int x, int w, int &min_x, int &max_x)
Definition display.cpp:729
void draw_pixels_at(int x_start, int y_start, int w, int h, const uint8_t *ptr, ColorOrder order, ColorBitness bitness, bool big_endian)
Convenience overload for base case where the pixels are packed into the buffer with no gaps (e....
Definition display.h:256
void line(int x1, int y1, int x2, int y2, Color color=COLOR_ON)
Draw a straight line from the point [x1,y1] to [x2,y2] with the given color.
Definition display.cpp:18
bool clamp_y_(int y, int h, int &min_y, int &max_y)
Definition display.cpp:744
void filled_gauge(int center_x, int center_y, int radius1, int radius2, int progress, Color color=COLOR_ON)
Fill a half-ring "gauge" centered around [center_x,center_y] between two circles with the radius1 and...
Definition display.cpp:215
virtual DisplayType get_display_type()=0
Get the type of display that the buffer corresponds to.
void legend(int x, int y, graph::Graph *graph, Color color_on=COLOR_ON)
Draw the legend for graph with the top-left corner at [x,y] to the screen.
Definition display.cpp:532
void start_clipping(int16_t left, int16_t top, int16_t right, int16_t bottom)
Definition display.h:618
DisplayRotation get_rotation() const
Definition display.h:604
void rectangle(int x1, int y1, int width, int height, Color color=COLOR_ON)
Draw the outline of a rectangle with the top left point at [x1,y1] and the bottom right point at [x1+...
Definition display.cpp:98
virtual int get_width_internal()=0
DisplayPage * previous_page_
Definition display.h:685
void filled_circle(int center_x, int center_y, int radius, Color color=COLOR_ON)
Fill a circle centered around [center_x,center_y] with the radius radius with the given color.
Definition display.cpp:133
void void void void void void strftime(int x, int y, BaseFont *font, Color color, Color background, TextAlign align, const char *format, ESPTime time) __attribute__((format(strftime
Evaluate the strftime-format format and print the result with the anchor point at [x,...
Definition display.cpp:666
void triangle(int x1, int y1, int x2, int y2, int x3, int y3, Color color=COLOR_ON)
Draw the outline of a triangle contained between the points [x1,y1], [x2,y2] and [x3,...
Definition display.cpp:302
void printf(int x, int y, BaseFont *font, Color color, Color background, TextAlign align, const char *format,...) __attribute__((format(printf
Evaluate the printf-format format and print the result with the anchor point at [x,...
Definition display.cpp:595
DisplayPage * page_
Definition display.h:684
void set_writer(display_writer_t &&writer)
Internal method to set the display writer lambda.
Definition display.cpp:626
void draw_pixel_at(int x, int y)
Set a single pixel at the specified coordinates to default color.
Definition display.h:228
void vertical_line(int x, int y, int height, Color color=COLOR_ON)
Draw a vertical line from the point [x,y] to [x,y+width] with the given color.
Definition display.cpp:93
int get_native_height()
Get the native (original) height of the display in pixels.
Definition display.h:225
virtual int get_height_internal()=0
optional< display_writer_t > writer_
Definition display.h:683
Rect get_clipping() const
Get the current the clipping rectangle.
Definition display.cpp:714
void filled_ring(int center_x, int center_y, int radius1, int radius2, Color color=COLOR_ON)
Fill a ring centered around [center_x,center_y] between two circles with the radius1 and radius2 with...
Definition display.cpp:159
void extend_clipping(Rect rect)
Add a rectangular region to the invalidation region.
Definition display.cpp:700
void menu(int x, int y, graphical_display_menu::GraphicalDisplayMenu *menu, int width, int height)
Definition display.cpp:542
void line_at_angle(int x, int y, int angle, int length, Color color=COLOR_ON)
Draw a straight line at the given angle based on the origin [x, y] for a specified length with the gi...
Definition display.cpp:39
void get_text_bounds(int x, int y, const char *text, BaseFont *font, TextAlign align, int *x1, int *y1, int *width, int *height)
Get the text bounds of the given string.
Definition display.cpp:548
void set_auto_clear(bool auto_clear_enabled)
Definition display.h:602
DisplayRotation rotation_
Definition display.h:682
std::vector< DisplayOnPageChangeTrigger * > on_page_change_triggers_
Definition display.h:686
virtual void draw_pixels_at(int x_start, int y_start, int w, int h, const uint8_t *ptr, ColorOrder order, ColorBitness bitness, bool big_endian, int x_offset, int y_offset, int x_pad)
Given an array of pixels encoded in the nominated format, draw these into the display's buffer.
Definition display.cpp:54
void regular_polygon(int x, int y, int radius, int edges, RegularPolygonVariation variation=VARIATION_POINTY_TOP, float rotation_degrees=ROTATION_0_DEGREES, Color color=COLOR_ON, RegularPolygonDrawing drawing=DRAWING_OUTLINE)
Draw the outline of a regular polygon inscribed in the circle centered on [x,y] with the given radius...
Definition display.cpp:441
void filled_flat_side_triangle_(int x1, int y1, int x2, int y2, int x3, int y3, Color color)
This method fills a triangle using only integer variables by using a modified bresenham algorithm.
Definition display.cpp:324
void extend_clipping(int16_t left, int16_t top, int16_t right, int16_t bottom)
Definition display.h:628
void shrink_clipping(Rect rect)
substract a rectangular region to the invalidation region
Definition display.cpp:707
void filled_rectangle(int x1, int y1, int width, int height, Color color=COLOR_ON)
Fill a rectangle with the top left point at [x1,y1] and the bottom right point at [x1+width,...
Definition display.cpp:104
std::vector< Rect > clipping_rectangle_
Definition display.h:688
void process(DisplayPage *from, DisplayPage *to)
Definition display.cpp:662
display_writer_t writer_
Definition display.h:705
void set_next(DisplayPage *next)
Definition display.cpp:834
const display_writer_t & get_writer() const
Definition display.cpp:835
void set_parent(Display *parent)
Definition display.cpp:832
DisplayPage(display_writer_t writer)
Definition display.cpp:816
void set_prev(DisplayPage *prev)
Definition display.cpp:833
TEMPLATABLE_VALUE(DisplayPage *, page) void play(Ts... x) override
Definition display.h:712
struct @67::@68 __attribute__
@ DISPLAY_ROTATION_0_DEGREES
Definition display.h:135
@ DISPLAY_ROTATION_270_DEGREES
Definition display.h:138
@ DISPLAY_ROTATION_180_DEGREES
Definition display.h:137
@ DISPLAY_ROTATION_90_DEGREES
Definition display.h:136
const Color COLOR_ON(255, 255, 255, 255)
Turn the pixel ON.
Definition display.h:195
const int EDGES_TRIGON
Definition display.h:143
const int EDGES_PENTADECAGON
Definition display.h:158
const int EDGES_OCTAGON
Definition display.h:150
const int EDGES_HEXADECAGON
Definition display.h:159
const int EDGES_DODECAGON
Definition display.h:155
const int EDGES_PENTAGON
Definition display.h:147
const float ROTATION_45_DEGREES
Definition display.h:162
const int EDGES_TRIANGLE
Definition display.h:144
const LogString * text_align_to_string(TextAlign textalign)
Definition display.cpp:837
ImageAlign
ImageAlign is used to tell the display class how to position a image.
Definition display.h:103
const int EDGES_QUADRILATERAL
Definition display.h:146
const int EDGES_DECAGON
Definition display.h:153
const int EDGES_TETRADECAGON
Definition display.h:157
const float ROTATION_270_DEGREES
Definition display.h:165
const float ROTATION_180_DEGREES
Definition display.h:164
std::function< void(Display &)> display_writer_t
Definition display.h:181
const int EDGES_HEPTAGON
Definition display.h:149
const int EDGES_HENDECAGON
Definition display.h:154
const int EDGES_TRIDECAGON
Definition display.h:156
TextAlign
TextAlign is used to tell the display class how to position a piece of text.
Definition display.h:53
const int EDGES_NONAGON
Definition display.h:151
const float ROTATION_90_DEGREES
Definition display.h:163
const int EDGES_ENNEAGON
Definition display.h:152
const Color COLOR_OFF(0, 0, 0, 0)
Turn the pixel OFF.
Definition display.h:193
const int EDGES_TETRAGON
Definition display.h:145
const int EDGES_HEXAGON
Definition display.h:148
const float ROTATION_0_DEGREES
Definition display.h:161
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
A more user-friendly version of struct tm from time.h.
Definition time.h:15
std::string print()
uint16_t length
Definition tt21100.cpp:0
uint16_t x
Definition tt21100.cpp:5
uint16_t y
Definition tt21100.cpp:6