ArduinoDumbDisplay v0.9.9-r50
DumbDisplay Arduino Library -- https://github.com/trevorwslee/Arduino-DumbDisplay
 
Loading...
Searching...
No Matches
dumbdisplay.h
1/*
2
3============================
4
5if want to disable int parameter encoding, define DD_DISABLE_PARAM_ENCODING before including dumbdisplay.h, like
6
7#define DD_DISABLE_PARAM_ENCODING
8
9=============================
10
11*/
12
13#ifdef DD_DISABLE_PARAM_ENCODING
14 #pragma "message ***** DD_DISABLE_PARAM_ENCODING *****"
15#endif
16
17
18
19
20#ifndef dumbdisplay_h
21#define dumbdisplay_h
22
23
24// not used???
25// #ifdef DD_4_ESP32
26// #include <esp_spp_api.h>
27// #include "HardwareSerial.h"
28// #endif
29
30
31#define DUMBDISPLAY_BAUD 115200
32#define DD_SERIAL_BAUD DUMBDISPLAY_BAUD
33#define DD_WIFI_PORT 10201
34
35
36#define DD_DEF_SEND_BUFFER_SIZE 128
37#define DD_DEF_IDLE_TIMEOUT 5000
38#define DD_DEF_TUNNEL_TIMEOUT 150000
39
40
41#include "_dd_util.h"
42
43
44#define DD_CONDENSE_COMMAND
45
46
47#define DD_HEX_COLOR(color) ("#" + String(color, 16))
48
49
50#ifdef DD_CONDENSE_COMMAND
51 #define DD_INT_COLOR(color) ("+" + DDIntEncoder(color).encoded())
52 #if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_NANO) || defined(DD_DISABLE_PARAM_ENCODING)
53 #define DD_RGB_COLOR(r, g, b) (String(r) + "-" + String(g) + "-" + String(b))
54 #else
55 #define DD_RGB_COLOR(r, g, b) ("+" + DDIntEncoder(0xffffff & ((((((int32_t) (r)) << 8) + ((int32_t) (g))) << 8) + ((int32_t) (b)))).encoded())
56 #endif
57 // #if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_NANO)
58 // #define DD_RGB_COLOR(r, g, b) (String(r) + "-" + String(g) + "-" + String(b))
59 // //#define DD_RGB_COLOR(r, g, b) (String(r<0?0:(r>255?255:r)) + "-" + String(g<0?0:(g>255?255:g)) + "-" + String(b<0?0:(b>255?255:b)))
60 // #else
61 // #if defined(DD_DISABLE_PARAM_ENCODING)
62 // #define DD_RGB_COLOR(r, g, b) ("#" + String(0xffffff & ((((((int32_t) (r)) << 8) + ((int32_t) (g))) << 8) + ((int32_t) (b))), 16))
63 // #else
64 // #define DD_RGB_COLOR(r, g, b) ("+" + DDIntEncoder(0xffffff & ((((((int32_t) (r)) << 8) + ((int32_t) (g))) << 8) + ((int32_t) (b)))).encoded())
65 // #endif
66 // #endif
67#else
68 #define DD_RGB_COLOR(r, g, b) (String(r<0?0:(r>255?255:r)) + "-" + String(g<0?0:(g>255?255:g)) + "-" + String(b<0?0:(b>255?255:b)))
69 #define DD_INT_COLOR(color) ("+" + String(color))
70#endif
71
72
73
74#define DD_AP_HORI "H(*)"
75#define DD_AP_VERT "V(*)"
76#define DD_AP_STACK "S(*)"
77#define DD_AP_HORI_2(id1, id2) ("H(" + id1 + "+" + id2 + ")")
78#define DD_AP_VERT_2(id1, id2) ("V(" + id1 + "+" + id2 + ")")
79#define DD_AP_STACK_2(id1, id2) ("S(" + id1 + "+" + id2 + ")")
80#define DD_AP_HORI_3(id1, id2, id3) ("H(" + id1 + "+" + id2 + "+" + id3 + ")")
81#define DD_AP_VERT_3(id1, id2, id3) ("V(" + id1 + "+" + id2 + "+" + id3 + ")")
82#define DD_AP_STACK_3(id1, id2, id3) ("S(" + id1 + "+" + id2 + "+" + id3 + ")")
83#define DD_AP_HORI_4(id1, id2, id3, id4) ("H(" + id1 + "+" + id2 + "+" + id3 + "+" + id4 + ")")
84#define DD_AP_VERT_4(id1, id2, id3, id4) ("V(" + id1 + "+" + id2 + "+" + id3 + "+" + id4 + ")")
85#define DD_AP_STACK_4(id1, id2, id3, id4) ("S(" + id1 + "+" + id2 + "+" + id3 + "+" + id4 + ")")
86#define DD_AP_HORI_5(id1, id2, id3, id4, id5) ("H(" + id1 + "+" + id2 + "+" + id3 + "+" + id4 + "+" + id5 + ")")
87#define DD_AP_VERT_5(id1, id2, id3, id4, id5) ("V(" + id1 + "+" + id2 + "+" + id3 + "+" + id4 + "+" + id5 + ")")
88#define DD_AP_STACK_5(id1, id2, id3, id4, id5) ("S(" + id1 + "+" + id2 + "+" + id3 + "+" + id4 + "+" + id5 + ")")
89#define DD_AP_HORI_6(id1, id2, id3, id4, id5, id6) ("H(" + id1 + "+" + id2 + "+" + id3 + "+" + id4 + "+" + id5 + ")" + "+" + id6 + ")")
90#define DD_AP_VERT_6(id1, id2, id3, id4, id5, id6) ("V(" + id1 + "+" + id2 + "+" + id3 + "+" + id4 + "+" + id5 + ")" + "+" + id6 + ")")
91#define DD_AP_STACK_6(id1, id2, id3, id4, id5, id6) ("S(" + id1 + "+" + id2 + "+" + id3 + "+" + id4 + "+" + id5 + ")" + "+" + id6 + ")")
92
93#define DD_AP_PADDING(lp, tp, rp, bp, id) ("S/" + String(lp) + "-" + String(tp) + "-" + String(rp) + "-" + String(bp) + "(" + id + ")")
94
95#define DD_AP_SPACER(w, h) (String("<") + String(w) + "x" + String(h) + String(">"))
96
97#define DD_PROGRAM_SPACE_COMPRESS_BA_0 '!'
98#define DD_COMPRESS_BA_0 '0'
99
100#ifndef DD_TUNNEL_DEF_BUFFER_SIZE
101 #if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_NANO)
102 #define DD_TUNNEL_DEF_BUFFER_SIZE 2
103 #else
104 #define DD_TUNNEL_DEF_BUFFER_SIZE 4
105 #endif
106#endif
107#if DD_TUNNEL_DEF_BUFFER_SIZE < 2
108 #error "DD_TUNNEL_DEF_BUFFER_SIZE must be at least 2"
109#endif
110
111
112#define DDIO_USE_DD_SERIAL
113
114#include "_dd_serial.h"
115#ifdef DDIO_USE_DD_SERIAL
116 extern DDSerial* _The_DD_Serial;
117#endif
118
119#include "_dd_io.h"
120#include "_dd_feedback.h"
121#include "_dd_colors.h"
122
123
124class DDLayer;
125
132typedef void (*DDFeedbackHandler)(DDLayer* pLayer, DDFeedbackType type, const DDFeedback& feedback);
133
134
135const int8_t DD_OBJECT_TYPE_LAYER = 0;
136const int8_t DD_OBJECT_TYPE_TUNNEL = 1;
137
138
140struct DDObject {
143#ifdef DD_NO_CUSTOM_DATA
144 #warning ??? DD_NO_CUSTOM_DATA set ???
145#else
148#endif
149public:
150 // since 20230601
151 virtual ~DDObject() {}
152};
153
154
157 int _h;
158};
159
160
162class DDLayer: public DDObject {
163 public:
173 void border(float size, const String& color, const String& shape = "flat", float extraSize = 0);
176 void noBorder();
180 void padding(float size);
184 void padding(float left, float top, float right, float bottom);
187 void noPadding();
191 void margin(float size);
195 void margin(float left, float top, float right, float bottom);
198 void noMargin();
203 void backgroundColor(const String& color, int opacity = 100);
213 void backgroundImage(const String& backgroundImageName, const String& drawBackgroundOptions, int refImageWidth = 0);
220 void exportAsBackgroundImage(bool replace = true, bool noDrawBackground = true, int exportAsWidth = 0);
226 void animateBackgroundImage(float fps, bool reset = true, const String& options = "");
229 void stopAnimateBackgroundImage(bool reset = true);
232 void visible(bool visible);
238 void disabled(bool disabled = true);
242 void opacity(int opacity);
246 void alpha(int alpha);
252 void blend(const String& color, int alpha = 255, const String& mode = "darken");
255 void noblend();
257 void clear();
259 void flash();
261 void flashArea(int x, int y);
270 void explicitFeedback(int16_t x = 0, int16_t y = 0, const String& text = "", DDFeedbackType type = DDFeedbackType::CLICK, const String& option = "");
271 inline const String& getLayerId() const { return layerId; }
277 void setFeedbackHandler(DDFeedbackHandler handler, const String& autoFeedbackMethod = "", const String& allowFeedbackTypes = "");
288 void enableFeedback(const String& autoFeedbackMethod = "", const String& allowFeedbackTypes = "");
295 void debugOnly(int i);
296 public:
297#ifndef DD_NO_FEEDBACK
299 inline DDFeedbackManager* getFeedbackManager() const { return pFeedbackManager; }
301 inline DDFeedbackHandler getFeedbackHandler() const { return feedbackHandler; }
302#endif
303 protected:
304 DDLayer(int8_t layerId);
305 public:
306 // made virtual since 20230601
307 virtual ~DDLayer();
308 protected:
309 void _enableFeedback();
310 protected:
311 String layerId;
312#ifndef DD_NO_FEEDBACK
313 // either feedbackManager or feedbackHandler is used
314 DDFeedbackManager *pFeedbackManager;
315 DDFeedbackHandler feedbackHandler;
316#endif
317};
318
319#define DD_DEF_LAYER_LEVEL_ID "_"
320
325 public:
330 void addLevel(const String& levelId, float width, float height, bool switchToIt = false);
332 inline void addLevel(const String& levelId, bool switchToIt = false) {
333 addLevel(levelId, 0, 0, switchToIt);
334 }
336 void addTopLevel(const String& levelId, float width = 0, float height = 0, bool switchToIt = false);
338 inline void addTopLevel(const String& levelId, bool switchToIt) {
339 addTopLevel(levelId, 0, 0, switchToIt);
340 }
344 void switchLevel(const String& levelId, bool addIfMissing = true);
346 void pushLevel();
349 void pushLevelAndSwitchTo(const String& switchTolevelId, bool addIfMissing = true);
351 void popLevel();
358 void setLevelAnchor(float x, float y, long reachInMillis = 0);
360 void moveLevelAnchorBy(float byX, float byY, long reachInMillis = 0);
367 void registerLevelBackground(const String& backgroundId, const String& backgroundImageName, const String& drawBackgroundOptions = "");
373 void exportLevelAsRegisteredBackground(const String& backgroundId, bool replace = true);
380 void setLevelBackground(const String& backgroundId, const String& backgroundImageName = "", const String& drawBackgroundOptions = "");
387 void animateLevelBackground(float fps, bool reset = true, const String& options = "");
390 void stopAnimateLevelBackground(bool reset = true);
393 void reorderLevel(const String& levelId, const String& how);
395 void exportLevelsAsImage(const String& imageFileName, bool cacheItNotSave = false);
397 void deleteLevel(const String& levelId);
398 protected:
399 MultiLevelDDLayer(int8_t layerId): DDLayer(layerId) {}
400};
401
402
403
404enum MbArrow { North, NorthEast, East, SouthEast, South, SouthWest, West, NorthWest };
405enum MbIcon { Heart, SmallHeart, Yes, No, Happy, Sad, Confused, Angry, Asleep, Surprised,
406 Silly, Fabulous, Meh, TShirt, Rollerskate, Duck, House, Tortoise, Butterfly, StickFigure,
407 Ghost, Sword, Giraffe, Skull, Umbrella, Snake, Rabbit, Cow, QuarterNote, EigthNote,
408 Pitchfork, Target, Triangle, LeftTriangle, Chessboard, Diamond, SmallDiamond, Square, SmallSquare, Scissors };
409
410class MbImage {
411 public:
412 MbImage(int8_t imageId) {
413 this->imageId = String(imageId);
414 }
415 inline const String& getImageId() const { return this->imageId; }
416 private:
417 String imageId;
418};
419
421class MbDDLayer: public DDLayer {
422 public:
424 MbDDLayer(int8_t layerId): DDLayer(layerId) {
425 }
427 void showIcon(MbIcon icon);
429 void showArrow(MbArrow arrow);
431 void showNumber(int num);
433 void showString(const String& str);
435 void plot(int x, int y);
437 void unplot(int x, int y);
439 void toggle(int x, int y);
445 void showLeds(const String& ledPattern);
448 void ledColor(const String& color);
449 MbImage* createImage(const String& ledPattern);
450 void releaseImage(MbImage *pImage);
451 void showImage(MbImage *pImage, int xOff);
452 void scrollImage(MbImage *pImage, int xOff, long interval);
453};
454
457 public:
459 TurtleDDLayer(int8_t layerId): MultiLevelDDLayer(layerId) {
460 }
462 void forward(int distance, bool withPen = true);
464 void backward(int distance, bool withPen = true);
466 void leftTurn(int angle);
468 void rightTurn(int angle);
470 void home(bool withPen = true);
472 void goTo(int x, int y, bool withPen = true);
474 void goBy(int byX, int byY, bool withPen = true);
476 void setHeading(int angle);
478 void penSize(int size);
481 void penColor(const String& color);
484 void fillColor(const String& color);
488 void penFilled(bool filled);
490 void setTextSize(int size);
493 void setTextFont(const String& fontName = "", int textSize = 0);
495 void penUp();
497 void penDown();
498 void beginFill();
499 void endFill();
501 void dot(int size, const String& color);
503 void circle(int radius, bool centered = false);
505 void oval(int width, int height, bool centered = false);
507 void arc(int width, int height, int startAngle, int sweepAngle, bool centered = false);
509 void triangle(int side1, int angle, int side2);
511 void isoscelesTriangle(int side, int angle);
513 void rectangle(int width, int height, bool centered = false);
515 void polygon(int side, int vertexCount);
519 void centeredPolygon(int radius, int vertexCount, bool inside = false);
521 void write(const String& text, bool draw = false);
522};
523
525class LedGridDDLayer: public DDLayer {
526 public:
528 LedGridDDLayer(int8_t layerId): DDLayer(layerId) {
529 }
531 void turnOn(int x = 0, int y = 0);
533 void turnOff(int x = 0, int y = 0);
535 void toggle(int x = 0, int y = 0);
538 void turnOnEx(int x = 0, int y = 0, const String& onColor = "");
543 void bitwise(unsigned int bits, int y = 0, bool reverse = false);
546 void bitwise2(unsigned int bits_0, unsigned int bits_1, int y = 0, bool reverse = false);
549 void bitwise3(unsigned int bits_0, unsigned int bits_1, unsigned int bits_2, int y = 0, bool reverse = false);
552 void bitwise4(unsigned int bits_0, unsigned int bits_1, unsigned int bits_2, unsigned int bits_3, int y = 0, bool reverse = false);
555 void horizontalBar(int count, bool rightToLeft = false);
558 void verticalBar(int count, bool bottomToTop = true);
563 void horizontalBarEx(int count, int startX = 0, const String& color = "");
568 void verticalBarEx(int count, int startY = 0, const String& color = "");
571 void onColor(const String& color);
574 void offColor(const String& color);
577};
578
579
581
587class LcdDDLayer: public DDLayer {
588 public:
591 LcdDDLayer(LcdDDLayerHandle layerHandle): DDLayer(layerHandle._h) {
592 }
593 public:
595 LcdDDLayer(int8_t layerId): DDLayer(layerId) {
596 }
598 void print(const String& text);
600 void home();
604 void setCursor(int x, int y);
606 void cursor();
608 void noCursor();
613 void display();
614 void noDisplay();
615 void scrollDisplayLeft();
616 void scrollDisplayRight();
619 void writeLine(const String& text, int y = 0, const String& align = "L");
621 void writeRightAlignedLine(const String& text, int y = 0);
623 void writeCenteredLine(const String& text, int y = 0);
626 void pixelColor(const String &color);
629 void bgPixelColor(const String &color, bool sameForBackgroundColor = false, int backgroundOpacity = 100);
632};
633
634
636 public:
638 SelectionBaseDDLayer(int8_t layerId): DDLayer(layerId) {
639 _enableFeedback();
640 }
644 void pixelColor(const String &color);
648 void pixelColor(const String &color, bool selected);
649 // /// set background pixel color
650 // /// @param color DD_RGB_COLOR(...) or common color name
651 // void bgPixelColor(const String &color, bool sameForBackgroundColor = false, int backgroundOpacity = 100);
653 void selectAll();
659 void highlightBorder(bool forSelected, const String& borderColor = "", const String& borderShape = "");
660};
661
667 public:
669 SelectionDDLayer(int8_t layerId): SelectionBaseDDLayer(layerId) {}
672 void text(const String& text, int y = 0, int horiSelectionIdx = 0, int vertSelectionIdx = 0, const String& align = "L");
674 void textCentered(const String& text, int y = 0, int horiSelectionIdx = 0, int vertSelectionIdx = 0);
676 void textRightAligned(const String& text, int y = 0, int horiSelectionIdx = 0, int vertSelectionIdx = 0);
679 void unselectedText(const String& text, int y = 0, int horiSelectionIdx = 0, int vertSelectionIdx = 0, const String& align = "L");
681 void unselectedTextCentered(const String& text, int y = 0, int horiSelectionIdx = 0, int vertSelectionIdx = 0);
683 void unselectedTextRightAligned(const String& text, int y = 0, int horiSelectionIdx = 0, int vertSelectionIdx = 0);
685 void select(int horiSelectionIdx = 0, int vertSelectionIdx = 0, bool deselectTheOthers = true);
687 void deselect(int horiSelectionIdx = 0, int vertSelectionIdx = 0, bool selectTheOthers = false);
689 void setSelected(bool selected, int horiSelectionIdx = 0, int vertSelectionIdx = 0) {
690 if (selected) {
691 select(horiSelectionIdx, vertSelectionIdx, false);
692 } else {
693 deselect(horiSelectionIdx, vertSelectionIdx, false);
694 }
695 }
697 void selected(bool selected, int horiSelectionIdx = 0, int vertSelectionIdx = 0, bool reverseTheOthers = false);
698};
699
706 public:
708 SelectionListDDLayer(int8_t layerId): SelectionBaseDDLayer(layerId) {}
711 void add(int selectionIdx);
714 void remove(int selectionIdx);
716 void offset(int offset);
719 void text(int selectionIdx, const String& text, int y = 0, const String& align = "L");
721 void textCentered(int selectionIdx, const String& text, int y = 0);
723 void textRightAligned(int selectionIdx, const String& text, int y = 0);
726 void unselectedText(int selectionIdx, const String& text, int y = 0, const String& align = "L");
728 void unselectedTextCentered(int selectionIdx, const String& text, int y = 0);
730 void unselectedTextRightAligned(int selectionIdx, const String& text, int y = 0);
732 void select(int selectionIdx, bool deselectTheOthers = true);
734 void deselect(int selectionIdx, bool selectTheOthers = false);
736 void selected(int selectionIdx, bool selected, bool reverseTheOthers = false);
737};
738
739
741
742
745 public:
749 }
750 public:
752 GraphicalDDLayer(int8_t layerId): MultiLevelDDLayer(layerId) {
753 }
755 void setRotation(int8_t rotationType);
757 void setCursor(int x, int y);
759 void moveCursorBy(int byX, int byY);
763 void setTextColor(const String& color, const String& bgColor = "");
765 void setTextSize(int size);
769 void setTextFont(const String& fontName);
773 inline void setTextFont(const String& fontName, int textSize) {
774 setTextFont(fontName);
775 if (textSize > 0) {
776 setTextSize(textSize);
777 }
778 }
780 void setTextWrap(bool wrapOn);
783 void fillScreen(const String& color);
785 void print(const String& text);
787 void println(const String& text = "");
792 void drawChar(int x, int y, char c, const String& color = "", const String& bgColor = "", int size = 0);
797 void drawStr(int x, int y, const String& string, const String& color = "", const String& bgColor = "", int size = 0);
800 void drawTextLine(const String& text, int y, const String& align = "L", const String& color = "", const String& bgColor = "", int size = 0);
803 void drawPixel(int x, int y, const String& color = "");
806 void drawLine(int x1, int y1, int x2, int y2, const String& color = "");
809 void drawCircle(int x, int y, int r, const String& color = "", bool filled = false);
810 // draw filled circle
812 inline void fillCircle(int x, int y, int r, const String& color = "") {
813 drawCircle(x, y, r, color, true);
814 }
817 void drawTriangle(int x1, int y1, int x2, int y2, int x3, int y3, const String& color = "", bool filled = false);
820 inline void fillTriangle(int x1, int y1, int x2, int y2, int x3, int y3, const String& color = "") {
821 drawTriangle(x1, y1, x2, y2, x3, y3, color, true);
822 }
825 void drawRect(int x, int y, int w, int h, const String& color = "", bool filled = false);
828 inline void fillRect(int x, int y, int w, int h, const String& color = "") {
829 drawRect(x, y, w, h, color, true);
830 }
833 void drawRoundRect(int x, int y, int w, int h, int r, const String& color = "", bool filled = false);
836 inline void fillRoundRect(int x, int y, int w, int h, int r, const String& color = "") {
837 drawRoundRect(x, y, w, h, r, color, true);
838 }
841 void drawOval(int x, int y, int w, int h, const String& color = "", bool filled = false);
844 inline void fillOval(int x, int y, int w, int h, const String& color = "") {
845 drawOval(x, y, w, h, color, true);
846 }
849 void drawArc(int x, int y, int w, int h, int startAngle, int sweepAngle, bool useCenter, const String& color = "", bool filled = false);
852 inline void fillArc(int x, int y, int w, int h, int startAngle, int sweepAngle, bool useCenter, const String& color = "") {
853 drawArc(x, y, w, h, startAngle, sweepAngle, useCenter, color, true);
854 }
856 void forward(int distance, bool withPen = true);
858 void backward(int distance, bool withPen = true);
860 void leftTurn(int angle);
862 void rightTurn(int angle);
864 void setHeading(int angle);
866 void penSize(int size);
869 void penColor(const String& color);
872 void fillColor(const String& color);
876 void circle(int radius, bool centered = false);
878 void oval(int width, int height, bool centered = false);
880 void arc(int width, int height, int startAngle, int sweepAngle, bool centered = false);
882 void triangle(int side1, int angle, int side2);
884 void isoscelesTriangle(int side, int angle);
886 void rectangle(int width, int height, bool centered = false);
888 void polygon(int side, int vertexCount);
893 void centeredPolygon(int radius, int vertexCount, bool inside = false);
896 void write(const String& text, bool draw = false);
900 void loadImageFile(const String& imageFileName, int w = 0, int h = 0, const String& asImageFileName = "");
906 inline void loadImageFileScaled(const String& imageFileName, int w, int h, const String& asImageFileName) {
907 loadImageFile(imageFileName, w, h, asImageFileName);
908 }
909 void loadImageFileCropped(const String& imageFileName, int x, int y, int w, int h, const String& asImageFileName, int scaleW = 0, int scaleH = 0);
911 void unloadImageFile(const String& imageFileName);
917 void drawImageFile(const String& imageFileName, int x = 0, int y = 0, int w = 0, int h = 0, const String& options = "");
919 inline void drawImageFile(const String& imageFileName, const String& options) {
920 drawImageFile(imageFileName, 0, 0, 0, 0, options);
921 }
924 inline void drawImageFileScaled(const String& imageFileName, int w, int h, const String& options = "") {
925 drawImageFile(imageFileName, 0, 0, w, h, options);
926 }
930 void drawImageFileFit(const String& imageFileName, int x = 0, int y = 0, int w = 0, int h = 0, const String& options = "");
932 inline void drawImageFileFit(const String& imageFileName, const String& options) {
933 drawImageFileFit(imageFileName, 0, 0, 0, 0, options);
934 }
937 void cacheImage(const String& imageName, const uint8_t *bytes, int byteCount, char compressionMethod = 0);
940 void cacheImageWithTS(const String& imageName, const uint8_t *bytes, int byteCount, long imageTimestamp, char compressionMethod = 0);
943 void cachePixelImage(const String& imageName, const uint8_t *bytes, int width, int height, const String& color = "", char compressionMethod = 0);
946 void cachePixelImage16(const String& imageName, const uint16_t *data, int width, int height, const String& options = "", char compressMethod = 0);
949 void cachePixelImageGS(const String& imageName, const uint8_t *data, int width, int height, const String& options = "", char compressMethod = 0);
952 void saveCachedImageFile(const String& imageName, const String& asImageName = "");
953#ifdef ESP32
956 void saveCachedImageFileWithTS(const String& imageName, const String& asImageName, int64_t imageTimestamp);
957#endif
960 void saveCachedImageFileAsync(const String& imageName, const String& asImageName = "");
961#ifdef ESP32
964 void saveCachedImageFileWithTSAsync(const String& imageName, const String& asImageName, int64_t imageTimestamp);
965#endif
968 void saveCachedImageFiles(const String& stitchAsImageName = "");
969};
970
971
974 public:
976 SevenSegmentRowDDLayer(int8_t layerId): DDLayer(layerId) {
977 }
980 void segmentColor(const String& color);
983 void resetSegmentOffColor(const String& color);
989 void turnOn(const String& segments, int digitIdx = 0);
993 void turnOff(const String& segments, int digitIdx = 0);
996 void setOn(const String& segments = "", int digitIdx = 0);
998 void showDigit(int digit, int digitIdx = 0);
1000 void showNumber(float number, const String& padding = " ");
1002 void showHexNumber(int16_t number);
1005 void showFormatted(const String& formatted, bool completeReplace = true, int startIdx = 0);
1006};
1007
1008
1013 public:
1015 JoystickDDLayer(int8_t layerId): DDLayer(layerId) {
1016 _enableFeedback();
1017 }
1020 void autoRecenter(bool autoRecenter = true);
1022 void colors(const String& stickColor, const String& stickOutlineColor, const String& socketColor = "", const String& socketOutlineColor = "");
1027 void moveToPos(int16_t x, int16_t y, bool sendFeedback = false);
1030 void moveToCenter(bool sendFeedback = false);
1035 void valueRange(int16_t minValue, int16_t maxValue, int valueStep = 1, bool sendFeedback = false);
1037 void snappy(bool snappy = true);
1039 void showValue(bool show = true, const String& color = "");
1040};
1041
1044 public:
1046 PlotterDDLayer(int8_t layerId): DDLayer(layerId) {
1047 }
1050 void label(const String& key, const String& lab);
1051 inline void label(const String& lab) { label("", lab); }
1054 void set(const String& key, float value);
1056 inline void set(float value) { set("", value); }
1057 void set(const String& key1, float value1, const String& key2, float value2);
1058 void set(const String& key1, float value1, const String& key2, float value2, const String& key3, float value3);
1059 void set(const String& key1, float value1, const String& key2, float value2, const String& key3, float value3, const String& key4, float value4);
1060};
1061
1062
1066 public:
1068 TomTomMapDDLayer(int8_t layerId): DDLayer(layerId) {
1069 }
1070 void goTo(float latitude, float longitude, const String& label = "");
1071 void zoomTo(float latitude, float longitude, float zoomLevel = 15.0, const String& label = "");
1072 void zoom(float zoomLevel);
1073};
1074
1075
1078 public:
1080 TerminalDDLayer(int8_t layerId): DDLayer(layerId) {
1081 }
1082 void print(const String& val);
1083 void println(const String& val);
1084 inline void print(int intVal) {
1085 String val(intVal);
1086 print(val);
1087 }
1088 inline void println(int intVal) {
1089 String val(intVal);
1090 print(val);
1091 }
1092 inline void print(float floatVal) {
1093 String val(floatVal);
1094 print(val);
1095 }
1096 inline void println(float floatVal) {
1097 String val(floatVal);
1098 print(val);
1099 }
1100 inline void println() {
1101 println("");
1102 }
1103};
1104
1108 public:
1110 WebViewDDLayer(int8_t layerId): DDLayer(layerId) {
1111 _enableFeedback();
1112 }
1113 void loadUrl(const String& url);
1114 void loadHtml(const String& html);
1115 void execJs(const String& js);
1116};
1117
1118
1122 public:
1124 DumbDisplayWindowDDLayer(int8_t layerId): DDLayer(layerId) {
1125 }
1126 void connect(const String& deviceType, const String& deviceName, const String& deviceAddress);
1127 void disconnect();
1128};
1129
1133 public:
1135 RtspClientDDLayer(int8_t layerId): DDLayer(layerId) {}
1137 void start(const String& url);
1138 void stop();
1139};
1140
1141
1142
1143
1144
1147 public:
1148 DDTunnelEndpoint(const String& endPoint) {
1149 this->endPoint = endPoint;
1150 this->headers = "";
1151 this->params = "";
1152 }
1154 void resetEndpoint(const String& endPoint) {
1155 this->endPoint = endPoint;
1156 }
1159 void resetSoundAttachment(const String& soundName) {
1160 if (soundName == "") {
1161 this->attachmentId = "";
1162 } else {
1163 this->attachmentId = "sound:" + soundName;
1164 }
1165 }
1168 this->headers = "";
1169 }
1172 this->params = "";
1173 }
1175 void addParam(const String& param) {
1176 if (true) {
1177 if (this->params.length() > 0) {
1178 this->params.concat(',');
1179 }
1180 this->params.concat(param);
1181 } else {
1182 if (this->params == "") {
1183 this->params = param;
1184 } else {
1185 this->params = this->params + "," + param;
1186 }
1187 }
1188 }
1190 void addNamedParam(const String& paramName, const String& paramValue) {
1191 addParam(paramName + "=" + paramValue);
1192 }
1194 void addHeader(const String& headerKey, const String& headerValue) {
1195 if (true) {
1196 if (this->headers.length() > 0) {
1197 this->headers.concat('|');
1198 }
1199 this->headers.concat(headerKey);
1200 this->headers.concat(":");
1201 this->headers.concat(headerValue);
1202 } else {
1203 if (this->headers == "") {
1204 this->headers = String(headerKey) + ":" + headerValue;
1205 } else {
1206 this->headers = this->headers + "|" + headerKey + ":" + headerValue;
1207 }
1208 }
1209 }
1210 public:
1211 String endPoint;
1212 String headers;
1213 String attachmentId;
1214 String params;
1215};
1216
1217
1219class DDTunnel: public DDObject {
1220 public:
1222 DDTunnel(const String& type, int8_t tunnelId, const String& params, const String& endPoint/*, bool connectNow*/);
1223 void afterConstruct(bool connectNow);
1224 virtual ~DDTunnel();
1225 public:
1226 const String& getEndpoint() { return endPoint; }
1227 public:
1228 virtual void release();
1229 protected:
1230 virtual void _reconnect(const String& extraParams = "");
1231 void _reconnectTo(const String& endPoint, const String& extraParams = "");
1232 public:
1233 const String& getTunnelId() const { return tunnelId; }
1236 public:
1237 inline void reconnectTo(const String& endPoint) { _reconnectTo(endPoint); }
1238 protected:
1239 // /// reconnect to specified endpoint with parameters
1240 // /// @param endPoint endpoint to connect to
1241 // /// @param params parameters to to end point; empty if none
1242 // void reconnectToSetParams(const String& endPoint, const String& params) {
1243 // this->endPoint = endPoint;
1244 // this->params = params;
1245 // _reconnect();
1246 // }
1247 public:
1250 this->endPoint = endpoint.endPoint;
1251 this->headers = endpoint.headers;
1252 this->attachmentId = endpoint.attachmentId;
1253 this->params = endpoint.params;
1254 _reconnect();
1255 }
1256 protected:
1257 inline bool _pending() { return doneState == 0; }
1258 //int _count();
1259 inline bool _timedOut() { return /*timedOut*/doneState == -1; }
1260 virtual bool _eof(long timeoutMillis);
1261 //void _readLine(String &buffer);
1262 void _writeLine(const String& data);
1263 void _writeSound(const String& soundName);
1264 public:
1265 virtual void handleInput(const String& data, uint8_t* fbBytes, bool final) { doneHandleInput(final); }
1266 protected:
1267 void doneHandleInput(bool final);
1268 protected:
1269 String type;
1270 String tunnelId;
1271 String endPoint;
1272 String headers;
1273 String attachmentId;
1274 String params;
1275 unsigned long connectMillis;
1276 // int arraySize;
1277 // String* dataArray;
1278 // int nextArrayIdx;
1279 // int validArrayIdx;
1280 private:
1281 //bool done;
1282 //bool timedOut;
1283 int8_t doneState; // 0 not done; 1 done; -1 timed out
1284};
1285
1286
1289 public:
1291 DDBufferedTunnel(const String& type, int8_t tunnelId, const String& params, const String& endPoint/*, bool connectNow*/, int8_t bufferSize);
1292 virtual ~DDBufferedTunnel();
1293 public:
1294 virtual void release();
1295 protected:
1296 virtual void _reconnect(const String& extraParams = "");
1297 //const String& getTunnelId() { return tunnelId; }
1298 public:
1299 inline void reconnect() { _reconnect(); }
1300 protected:
1301 int _count();
1302 virtual bool _eof(long timeoutMillis);
1303 bool _readLine(String &buffer, uint8_t** pFBBytes = NULL);
1304 //void _writeLine(const String& data);
1305 public:
1307 virtual void handleInput(const String& data, uint8_t* fbBytes, bool final);
1308 private:
1309 // String endPoint;
1310 // String tunnelId;
1311 int8_t arraySize;
1312 String* dataArray;
1313 uint8_t** fbByesArray;
1314 int8_t nextArrayIdx;
1315 int8_t validArrayIdx;
1316 //bool done;
1317 public:
1318 bool pending();
1320 inline int count() { return _count(); }
1324 inline bool eof(long timeoutMillis = DD_DEF_TUNNEL_TIMEOUT) { return _eof(timeoutMillis); }
1326 inline bool timedOut() { return _timedOut(); }
1328 String readLine();
1330 inline bool readLine(String &buffer) { return _readLine(buffer); }
1332 inline void writeLine(const String& data) { _writeLine(data); }
1334 bool read(String& fieldId, String& fieldValue);
1335};
1336
1337
1344
1371
1374 public:
1376 SimpleToolDDTunnel(const String& type, int8_t tunnelId, const String& params, const String& endPoint/*, bool connectNow*/, int bufferSize):
1377 BasicDDTunnel(type, tunnelId, params, endPoint/*, connectNow*/, bufferSize) {
1378 this->result = 0;
1379 }
1380 protected:
1381 virtual void _reconnect(const String& extraParams = "");
1382 public:
1383 //inline void reconnect() { _reconnect(); }
1386 private:
1387 int result;
1388};
1389
1392 public:
1394 ImageDownloadDDTunnel(int8_t tunnelId, const String& params, const String& endPoint/*, bool connectNow*/, int bufferSize):
1395 SimpleToolDDTunnel("dddownloadimage", tunnelId, params, endPoint/*, connectNow*/, bufferSize) {}
1396 public:
1398 void reconnectTo(const String& endPoint, const String& cropUIConfig = "");
1399};
1400
1401
1404 float latitude;
1405 float longitude;
1406};
1409 public:
1411 GpsServiceDDTunnel(const String& type, int8_t tunnelId, const String& params, const String& endPoint/*, bool connectNow*/, int8_t bufferSize):
1412 BasicDDTunnel(type, tunnelId, params, endPoint/*, connectNow*/, bufferSize) {
1413 }
1414 public:
1416 void reconnectForLocation(int repeat = -1);
1417 bool readLocation(DDLocation& location);
1418};
1419
1420
1423 int left;
1424 int top;
1425 int right;
1426 int bottom;
1427 String label;
1428};
1431 public:
1433 ObjectDetectDemoServiceDDTunnel(const String& type, int8_t tunnelId, const String& params, const String& endPoint/*, bool connectNow*/, int8_t bufferSize):
1434 BasicDDTunnel(type, tunnelId, params, endPoint/*, connectNow*/, bufferSize) {
1435 }
1436 public:
1437 void reconnectForObjectDetect(const String& imageName);
1438 void reconnectForObjectDetectFrom(GraphicalDDLayer* pGraphicalLayer, const String& imageName);
1439 bool readObjectDetectResult(DDObjectDetectDemoResult& objectDetectResult);
1440};
1441
1443 DDImageData(): bytes(NULL) {};
1444 ~DDImageData();
1445 bool isValid() { return width > 0 && height > 0; }
1446 void release();
1447 int width;
1448 int height;
1449 int byteCount;
1450 uint8_t* bytes;
1451protected:
1452 void transferTo(DDImageData& imageData);
1453};
1455 void transferDataTo(DDPixelImage& pixelImage) { DDImageData::transferTo(pixelImage); }
1456};
1458 DDPixelImage16(): data(NULL) {};
1460 bool isValid() { return width > 0 && height > 0; }
1461 void transferTo(DDPixelImage16& pixelImage16);
1462 void release();
1463 int width;
1464 int height;
1465 int byteCount;
1466 uint16_t* data;
1467};
1468struct DDJpegImage: public DDImageData {
1469 void transferTo(DDJpegImage& jpegImage) { DDImageData::transferTo(jpegImage); }
1470};
1478 public:
1480 ImageRetrieverDDTunnel(const String& type, int8_t tunnelId, const String& params, const String& endPoint/*, bool connectNow*/, int8_t bufferSize):
1481 BasicDDTunnel(type, tunnelId, params, endPoint/*, connectNow*/, bufferSize) {
1482 }
1483 public:
1486 void reconnectForPixelImage(const String& imageName, int width, int height, bool fit = false);
1489 void reconnectForPixelImage16(const String& imageName, int width, int height, bool fit = false, bool grayscale = false);
1490 void reconnectForPixelImageGS(const String& imageName, int width, int height, bool fit = false);
1493 void reconnectForJpegImage(const String& imageName, int width, int height, int quality=100, bool fit = false);
1495 bool readPixelImage(DDPixelImage& pixelImage);
1497 bool readPixelImage16(DDPixelImage16& pixelImage16);
1498 bool readPixelImageGS(DDPixelImage& pixelImage);
1503 private:
1504 bool _readImageData(DDImageData& imageData, short type);
1505};
1506
1507
1508
1512 public:
1514 JsonDDTunnelMultiplexer(JsonDDTunnel** tunnels, int8_t tunnelCount);
1516 int count();
1517 bool eof();
1519 int read(String& fieldId, String& fieldValue);
1520 void release();
1521 void reconnect();
1522 private:
1523 int8_t tunnelCount;
1524 JsonDDTunnel** tunnels;
1525};
1526
1527#ifndef DD_NO_IDLE_CALLBACK
1531enum DDIdleConnectionState { IDLE_NOT_CONNECTED, IDLE_CONNECTING, IDLE_RECONNECTING };
1537typedef void (*DDIdleCallback)(long idleForMillis, DDIdleConnectionState connectionState);
1538#endif
1539
1540#ifndef DD_NO_CONNECT_VERSION_CHANGED_CALLBACK
1544typedef void (*DDConnectVersionChangedCallback)(int connectVersion);
1545#endif
1546
1547#ifndef DD_NO_DEBUG_INTERFACE
1551enum DDDebugConnectionState { DEBUG_NOT_CONNECTED, DEBUG_CONNECTING, DEBUG_CONNECTED, DEBUG_RECONNECTING, DEBUG_RECONNECTED };
1554 public:
1556 virtual void logConnectionState(DDDebugConnectionState connectionState) {}
1558 virtual void logSendCommand(int state) {}
1559 virtual void logError(const String& errMsg) {}
1560};
1561#endif
1562
1563
1564#ifndef DD_NO_PASSIVE_CONNECT
1573};
1574#endif
1575
1576
1577extern bool _DDDisableParamEncoding;
1578inline void DDDebugDisableParamEncoding() { _DDDisableParamEncoding = true; }
1579
1580
1585 public:
1586 DumbDisplay(DDInputOutput* pIO, uint16_t sendBufferSize = DD_DEF_SEND_BUFFER_SIZE, long idleTimeout = DD_DEF_IDLE_TIMEOUT/*, bool enableDoubleClick = true*/) {
1587#ifdef DD_DISABLE_PARAM_ENCODING
1588 DDDebugDisableParamEncoding();
1589#endif
1590#ifdef DD_NO_SERIAL
1591 #warning ***** DD_NO_SERIAL defined *****
1592#else
1593 #ifdef DDIO_USE_DD_SERIAL
1594 if (pIO->isForSerial() || pIO->isBackupBySerial()) {
1595 _The_DD_Serial = new DDSerial();
1596 }
1597 #endif
1598#endif
1599 initialize(pIO, sendBufferSize, idleTimeout/*, enableDoubleClick*/);
1600 }
1603 void connect();
1605 bool connected() const;
1613 void setFeedbackSingleClickOnly(bool singleClickOnly = true);
1621 void configAutoPin(const String& layoutSpec = DD_AP_VERT, bool autoControlLayerVisible = false);
1622 // /// in addition to DumbDisplay::configAutoPin(), also configure the remaining layout spec for the remaining layers not mentioned in the layoutSpec
1623 // /// @see configAutoPin
1624 // /// @see addRemainingAutoPinConfig
1625 // void configAutoPinEx(const String& layoutSpec = DD_AP_VERT, const String& remainingLayoutSpec);
1627 void addRemainingAutoPinConfig(const String& remainingLayoutSpec);
1631 void configPinFrame(int xUnitCount = 100, int yUnitCount = 100, bool autoControlLayerVisible = false);
1635 void pinLayer(DDLayer *pLayer, int uLeft, int uTop, int uWidth, int uHeight, const String& align = "");
1639 void pinAutoPinLayers(const String& layoutSpec, int uLeft, int uTop, int uWidth, int uHeight, const String& align = "");
1647 GraphicalDDLayer* setRootLayer(int width, int height, const String& containedAlignment = "");
1649 MbDDLayer* createMicrobitLayer(int width = 5, int height = 5);
1651 TurtleDDLayer* createTurtleLayer(int width, int height);
1653 LedGridDDLayer* createLedGridLayer(int colCount = 1, int rowCount = 1, int subColCount = 1, int subRowCount = 1);
1655 LcdDDLayer* createLcdLayer(int colCount = 16, int rowCount = 2, int charHeight = 0, const String& fontName = "");
1657 SelectionDDLayer* createSelectionLayer(int colCount = 16, int rowCount = 2,
1658 int horiSelectionCount = 1, int vertSelectionCount = 1,
1659 int charHeight = 0, const String& fontName = "",
1660 bool canDrawDots = true, float selectionBorderSizeCharHeightFactor = 0.3);
1662 SelectionListDDLayer* createSelectionListLayer(int colCount = 16, int rowCount = 2,
1663 int horiSelectionCount = 1, int vertSelectionCount = 1,
1664 int charHeight = 0, const String& fontName = "",
1665 bool canDrawDots = true, float selectionBorderSizeCharHeightFactor = 0.3);
1681 JoystickDDLayer* createJoystickLayer(int maxStickValue = 1023, const String& directions = "", float stickSizeFactor = 1.0/*, int stickValueDivider = 1*/);
1683 PlotterDDLayer* createPlotterLayer(int width, int height, int pixelsPerSecond = 10);
1687 PlotterDDLayer* createFixedRatePlotterLayer(int width, int height, int pixelsPerScale = 5);
1692 TomTomMapDDLayer* createTomTomMapLayer(const String& mapKey, int width, int height);
1695 TerminalDDLayer* createTerminalLayer(int width, int height);
1698 WebViewDDLayer* createWebViewLayer(int width, int height, const String& jsObjectName = "DD");
1704 RtspClientDDLayer* createRtspClient(int width, int height);
1708 BasicDDTunnel* createBasicTunnel(const String& endPoint, bool connectNow = true, int8_t bufferSize = DD_TUNNEL_DEF_BUFFER_SIZE);
1712 JsonDDTunnel* createJsonTunnel(const String& endPoint, bool connectNow = true, int8_t bufferSize = DD_TUNNEL_DEF_BUFFER_SIZE);
1717 JsonDDTunnel* createFilteredJsonTunnel(const String& endPoint, const String& fileNames, bool connectNow = true, int8_t bufferSize = DD_TUNNEL_DEF_BUFFER_SIZE);
1722 ImageDownloadDDTunnel* createImageDownloadTunnel(const String& endPoint, const String& imageName, bool redownload = true);
1737 ObjectDetectDemoServiceDDTunnel* createObjectDetectDemoServiceTunnel(int scaleToWidth = 0, int scaleToHeight = 0, int maxNumObjs = 1);
1738 ImageRetrieverDDTunnel* createImageRetrieverTunnel();
1744 LcdDDLayerHandle createLcdLayerHandle(int colCount = 16, int rowCount = 2, int charHeight = 0, const String& fontName = "");
1746 void deleteTunnel(DDTunnel *pTunnel);
1749 void backgroundColor(const String& color);
1756 void playbackLayerSetupCommands(const String& layerSetupPersistId);
1765 void stopRecordLayerCommands(const String& saveId = "", bool persistSave = false);
1772 void saveLayerCommands(const String& id, bool persist = false, bool stopAfterSave = false);
1777 void loadLayerCommands(const String& id);
1783 void capture(const String& imageFileName, int width, int height);
1785 void sendNoOp();
1787 void writeComment(const String& comment);
1789 void tone(uint32_t freq, uint32_t duration);
1790 void notone();
1792 void playSound(const String& soundName);
1793 void stopSound();
1795 void saveSound8(const String& soundName, const int8_t *bytes, int sampleCount, int sampleRate, int numChannels = 1);
1797 void saveSound16(const String& soundName, const int16_t *data, int sampleCount, int sampleRate, int numChannels = 1);
1799 void cacheSound8(const String& soundName, const int8_t *bytes, int sampleCount, int sampleRate, int numChannels = 1);
1801 void cacheSound16(const String& soundName, const int16_t *data, int sampleCount, int sampleRate, int numChannels = 1);
1803 void saveCachedSound(const String& soundName);
1805 void saveCachedSoundAsH(const String& soundName);
1807 int streamSound8(int sampleRate, int numChannels = 1);
1809 int streamSound16(int sampleRate, int numChannels = 1);
1812 int saveSoundChunked8(const String& soundName/*, const int8_t *bytes, int sampleCount*/, int sampleRate, int numChannels = 1);
1815 int saveSoundChunked16(const String& soundName/*, const int16_t *data, int sampleCount*/, int sampleRate, int numChannels = 1);
1818 int cacheSoundChunked8(const String& soundName/*, const int8_t *bytes, int sampleCount*/, int sampleRate, int numChannels = 1);
1821 int cacheSoundChunked16(const String& soundName/*, const int16_t *data, int sampleCount*/, int sampleRate, int numChannels = 1);
1823 void sendSoundChunk8(int chunkId, const int8_t *bytes, int sampleCount, bool isFinal = false);
1825 void sendSoundChunk16(int chunkId, const int16_t *data, int sampleCount, bool isFinal = false);
1827 void saveImage(const String& imageName, const uint8_t *bytes, int byteCount);
1829 void savePixelImage(const String& imageName, const uint8_t *bytes, int width, int height, const String& color = "", char compressMethod = 0);
1831 void savePixelImage16(const String& imageName, const uint16_t *data, int width, int height, const String& options = "", char compressMethod = 0);
1833 void savePixelImageGS(const String& imageName, const uint8_t *data, int width, int height, const String& options = "", char compressMethod = 0);
1837 void stitchImages(const String& imageNames, const String& asImageName);
1839 void alert(const String& message, const String& title = "");
1842 void reorderLayer(DDLayer *pLayer, const String& how);
1844 void deleteLayer(DDLayer *pLayer);
1846 void deleteLayer(DDLayerHandle layerHandle);
1848 void walkLayers(void (*walker)(DDLayer *));
1849 #ifndef DD_NO_IDLE_CALLBACK
1854 void setIdleCallback(DDIdleCallback idleCallback);
1855#endif
1856#ifndef DD_NO_CONNECT_VERSION_CHANGED_CALLBACK
1860#endif
1864 void logToSerial(const String& logLine, bool force = false);
1866 void log(const String& logLine, bool isError = false);
1867 public:
1868 #ifndef DD_NO_PASSIVE_CONNECT
1881#endif
1882 public:
1885#ifndef DD_NO_DEBUG_INTERFACE
1886 void debugSetup(DDDebugInterface *debugInterface);
1887#endif
1888 void debugOnly(int i);
1889 private:
1890 void initialize(DDInputOutput* pIO, uint16_t sendBufferSize, long idleTimeout/*, bool enableDoubleClick*/);
1891 //bool canLogToSerial();
1892};
1893
1894#include "_dd_misc.h"
1895
1896#endif
Class for DD "tunnel", with buffering support; created with DumbDisplay::createBasicTunnel()
Definition: dumbdisplay.h:1288
bool readLine(String &buffer)
read a line from buffer, in to the buffer passed in
Definition: dumbdisplay.h:1330
bool timedOut()
check whether EOF caused by timeout or not; note that timeout is only due to check of EOF with DDBuff...
Definition: dumbdisplay.h:1326
bool read(String &fieldId, String &fieldValue)
read a piece of JSON data
void writeLine(const String &data)
write a line
Definition: dumbdisplay.h:1332
bool eof(long timeoutMillis=DD_DEF_TUNNEL_TIMEOUT)
Definition: dumbdisplay.h:1324
virtual void handleInput(const String &data, uint8_t *fbBytes, bool final)
String readLine()
read a line from buffer
DDBufferedTunnel(const String &type, int8_t tunnelId, const String &params, const String &endPoint, int8_t bufferSize)
for internal use only
int count()
count buffer ready read
Definition: dumbdisplay.h:1320
Base class for debug callback set by calling DumbDisplay::debugSetup()
Definition: dumbdisplay.h:1553
virtual void logConnectionState(DDDebugConnectionState connectionState)
See DDDebugConnectionState.
Definition: dumbdisplay.h:1556
virtual void logSendCommand(int state)
Definition: dumbdisplay.h:1558
Class for DD input/output; you explicitly constructed it, pass in when instantiate DumbDisplay,...
Definition: _dd_io.h:9
Base class for the different layers support by DumbDisplay; created with various layer creation metho...
Definition: dumbdisplay.h:162
void animateBackgroundImage(float fps, bool reset=true, const String &options="")
void visible(bool visible)
void noBackgroundImage()
set no layer background image
void backgroundImage(const String &backgroundImageName, const String &drawBackgroundOptions, int refImageWidth=0)
void noBorder()
void enableFeedback(const String &autoFeedbackMethod="", const String &allowFeedbackTypes="")
void explicitFeedback(int16_t x=0, int16_t y=0, const String &text="", DDFeedbackType type=DDFeedbackType::CLICK, const String &option="")
void exportAsBackgroundImage(bool replace=true, bool noDrawBackground=true, int exportAsWidth=0)
void padding(float left, float top, float right, float bottom)
void blend(const String &color, int alpha=255, const String &mode="darken")
void setFeedbackHandler(DDFeedbackHandler handler, const String &autoFeedbackMethod="", const String &allowFeedbackTypes="")
void noblend()
void clear()
clear the layer
void disabled(bool disabled=true)
void stopAnimateBackgroundImage(bool reset=true)
DDFeedbackHandler getFeedbackHandler() const
Definition: dumbdisplay.h:301
void transparent(bool transparent)
DDFeedbackManager * getFeedbackManager() const
Definition: dumbdisplay.h:299
void noMargin()
void opacity(int opacity)
void noPadding()
void backgroundColor(const String &color, int opacity=100)
const DDFeedback * getFeedback()
void alpha(int alpha)
void border(float size, const String &color, const String &shape="flat", float extraSize=0)
void flash()
normally used for "feedback" – flash the default way (layer + border)
void margin(float left, float top, float right, float bottom)
void debugOnly(int i)
for debug use
void margin(float size)
void noBackgroundColor()
void disableFeedback()
disable "feedback"
void flashArea(int x, int y)
normally used for "feedback" – flash the area (x, y) where the layer is clicked
void padding(float size)
Helper class for constructing "tunnel" endpoint, if the endpoint is not a simple URL....
Definition: dumbdisplay.h:1146
void resetParams()
reset params (to the endpoint query string)
Definition: dumbdisplay.h:1171
void resetSoundAttachment(const String &soundName)
Definition: dumbdisplay.h:1159
void addParam(const String &param)
add param (to the endpoint query string)
Definition: dumbdisplay.h:1175
void resetHeaders()
reset headers
Definition: dumbdisplay.h:1167
void addHeader(const String &headerKey, const String &headerValue)
add header to the request
Definition: dumbdisplay.h:1194
void resetEndpoint(const String &endPoint)
reset the endpoint
Definition: dumbdisplay.h:1154
void addNamedParam(const String &paramName, const String &paramValue)
add named param (to the endpoint query string)
Definition: dumbdisplay.h:1190
Base class for DD "tunnel".
Definition: dumbdisplay.h:1219
void reconnectToEndpoint(const DDTunnelEndpoint endpoint)
reconnect to specified endpoint. See DDTunnelEndpoint.
Definition: dumbdisplay.h:1249
DDTunnel(const String &type, int8_t tunnelId, const String &params, const String &endPoint)
for internal use only
void reconnectTo(const String &endPoint)
Definition: dumbdisplay.h:1237
The core class for DumbDisplay; everything starts here. The most important argument to DumbDisplay is...
Definition: dumbdisplay.h:1584
LcdDDLayerHandle createLcdLayerHandle(int colCount=16, int rowCount=2, int charHeight=0, const String &fontName="")
int cacheSoundChunked8(const String &soundName, int sampleRate, int numChannels=1)
int getConnectVersion() const
void debugSetup(DDDebugInterface *debugInterface)
BasicDDTunnel * createGeneralServiceTunnel()
ObjectDetectDemoServiceDDTunnel * createObjectDetectDemoServiceTunnel(int scaleToWidth=0, int scaleToHeight=0, int maxNumObjs=1)
void backgroundColor(const String &color)
PlotterDDLayer * createFixedRatePlotterLayer(int width, int height, int pixelsPerScale=5)
void savePixelImage16(const String &imageName, const uint16_t *data, int width, int height, const String &options="", char compressMethod=0)
save 16-bit "pixel" image (i.e. 565 RGB image) with the given image data
void connect()
void saveCachedSoundAsH(const String &soundName)
save the cached sound as C header file (.h)
void stitchImages(const String &imageNames, const String &asImageName)
bool canPrintToSerial()
check if it is safe to print to Serial
BasicDDTunnel * createDateTimeServiceTunnel()
GraphicalDDLayer * createGraphicalLayer(int width, int height)
TurtleDDLayer * createTurtleLayer(int width, int height)
create a Turtle-like layer
bool connectPassive(DDConnectPassiveStatus *pStatus=NULL)
void recordLayerCommands()
void saveCachedSound(const String &soundName)
save the cached sound
void setConnectVersionChangedCallback(DDConnectVersionChangedCallback connectVersionChangedCallback)
void setIdleCallback(DDIdleCallback idleCallback)
GraphicalDDLayerHandle createGraphicalLayerHandle(int width, int height)
void configPinFrame(int xUnitCount=100, int yUnitCount=100, bool autoControlLayerVisible=false)
int cacheSoundChunked16(const String &soundName, int sampleRate, int numChannels=1)
void log(const String &logLine, bool isError=false)
like to Serial (if safe to do so); and if connected, will log as comment to DD as well
LcdDDLayer * createLcdLayer(int colCount=16, int rowCount=2, int charHeight=0, const String &fontName="")
create a LCD layer
TerminalDDLayer * createTerminalLayer(int width, int height)
int saveSoundChunked16(const String &soundName, int sampleRate, int numChannels=1)
GraphicalDDLayer * setRootLayer(int width, int height, const String &containedAlignment="")
int streamSound8(int sampleRate, int numChannels=1)
stream sound 8-bit sample (for playing sound)
void sendNoOp()
send "no-op" command
int streamSound16(int sampleRate, int numChannels=1)
stream sound 16-bit sample (for playing sound)
void deleteTunnel(DDTunnel *pTunnel)
if finished using a "tunnel", delete it to release resource
void pinLayer(DDLayer *pLayer, int uLeft, int uTop, int uWidth, int uHeight, const String &align="")
WebViewDDLayer * createWebViewLayer(int width, int height, const String &jsObjectName="DD")
MbDDLayer * createMicrobitLayer(int width=5, int height=5)
create a Microbit-like layer
void savePixelImage(const String &imageName, const uint8_t *bytes, int width, int height, const String &color="", char compressMethod=0)
save single-bit "pixel" image (i.e. B&W image) with the given image data
void addRemainingAutoPinConfig(const String &remainingLayoutSpec)
add the "auto pin" config for layers not included in "auto pin" set by configAutoPin()
int saveSoundChunked8(const String &soundName, int sampleRate, int numChannels=1)
void cacheSound16(const String &soundName, const int16_t *data, int sampleCount, int sampleRate, int numChannels=1)
cache 16-bit sound with the given sound samples
void masterReset()
JsonDDTunnel * createJsonTunnel(const String &endPoint, bool connectNow=true, int8_t bufferSize=DD_TUNNEL_DEF_BUFFER_SIZE)
void configAutoPin(const String &layoutSpec=DD_AP_VERT, bool autoControlLayerVisible=false)
RtspClientDDLayer * createRtspClient(int width, int height)
void recordLayerSetupCommands()
basically, functions the same as recordLayerCommands()
void alert(const String &message, const String &title="")
pop up a dialog to alert
SevenSegmentRowDDLayer * create7SegmentRowLayer(int digitCount=1)
JoystickDDLayer * createJoystickLayer(int maxStickValue=1023, const String &directions="", float stickSizeFactor=1.0)
void loadLayerCommands(const String &id)
void cacheSound8(const String &soundName, const int8_t *bytes, int sampleCount, int sampleRate, int numChannels=1)
cache 8-bit sound with the given sound samples
void playSound(const String &soundName)
make DD app play the sound of the given sound file
void deleteLayer(DDLayer *pLayer)
if layer is no longer used; delete it to release resources
void reorderLayer(DDLayer *pLayer, const String &how)
DumbDisplayWindowDDLayer * createDumbDisplayWindowLayer(int width, int height)
void playbackLayerSetupCommands(const String &layerSetupPersistId)
void setFeedbackSingleClickOnly(bool singleClickOnly=true)
void savePixelImageGS(const String &imageName, const uint8_t *data, int width, int height, const String &options="", char compressMethod=0)
save grayscale "pixel" image with the given image data
void saveLayerCommands(const String &id, bool persist=false, bool stopAfterSave=false)
void resetPinLayers()
rest pinning of layers, as if they are not pinned
int getCompatibilityVersion() const
void writeComment(const String &comment)
write out a comment to DD app
void playbackLayerCommands()
playback recorded commands (unfreeze the display)
JsonDDTunnel * createFilteredJsonTunnel(const String &endPoint, const String &fileNames, bool connectNow=true, int8_t bufferSize=DD_TUNNEL_DEF_BUFFER_SIZE)
void saveSound16(const String &soundName, const int16_t *data, int sampleCount, int sampleRate, int numChannels=1)
save 16-bit sound with the given sound samples
void saveImage(const String &imageName, const uint8_t *bytes, int byteCount)
svae image with the given image data
BasicDDTunnel * createBasicTunnel(const String &endPoint, bool connectNow=true, int8_t bufferSize=DD_TUNNEL_DEF_BUFFER_SIZE)
void capture(const String &imageFileName, int width, int height)
void logToSerial(const String &logLine, bool force=false)
log line to Serial; if it is not safe to output to Serial, will write comment with DumbDisplay::write...
void deleteLayer(DDLayerHandle layerHandle)
if layer is no longer used; delete it to release resources
void stopRecordLayerCommands(const String &saveId="", bool persistSave=false)
SelectionListDDLayer * createSelectionListLayer(int colCount=16, int rowCount=2, int horiSelectionCount=1, int vertSelectionCount=1, int charHeight=0, const String &fontName="", bool canDrawDots=true, float selectionBorderSizeCharHeightFactor=0.3)
create a list "selection" layer
void walkLayers(void(*walker)(DDLayer *))
loop through all the existing layers calling the function passed in
TomTomMapDDLayer * createTomTomMapLayer(const String &mapKey, int width, int height)
LedGridDDLayer * createLedGridLayer(int colCount=1, int rowCount=1, int subColCount=1, int subRowCount=1)
create a LED-grid layer
void saveSound8(const String &soundName, const int8_t *bytes, int sampleCount, int sampleRate, int numChannels=1)
save 8-bit sound with the given sound samples
bool connected() const
void sendSoundChunk8(int chunkId, const int8_t *bytes, int sampleCount, bool isFinal=false)
send 8-bit sound data chunk for saving/caching after calling saveSoundChunked8() or cacheSoundChunked...
void sendSoundChunk16(int chunkId, const int16_t *data, int sampleCount, bool isFinal=false)
send 16-bit sound data chunk for saving/caching after calling saveSoundChunked16() or cacheSoundChunk...
void pinAutoPinLayers(const String &layoutSpec, int uLeft, int uTop, int uWidth, int uHeight, const String &align="")
ImageDownloadDDTunnel * createImageDownloadTunnel(const String &endPoint, const String &imageName, bool redownload=true)
SelectionDDLayer * createSelectionLayer(int colCount=16, int rowCount=2, int horiSelectionCount=1, int vertSelectionCount=1, int charHeight=0, const String &fontName="", bool canDrawDots=true, float selectionBorderSizeCharHeightFactor=0.3)
create a "selection" layer
PlotterDDLayer * createPlotterLayer(int width, int height, int pixelsPerSecond=10)
create a plotter layer
void tone(uint32_t freq, uint32_t duration)
make DD app sound a tone
GpsServiceDDTunnel * createGpsServiceTunnel()
Definition: dumbdisplay.h:1121
DumbDisplayWindowDDLayer(int8_t layerId)
for internal use only
Definition: dumbdisplay.h:1124
Class for GPS service "tunnel".
Definition: dumbdisplay.h:1408
GpsServiceDDTunnel(const String &type, int8_t tunnelId, const String &params, const String &endPoint, int8_t bufferSize)
Definition: dumbdisplay.h:1411
void reconnectForLocation(int repeat=-1)
Class for graphical LCD layer; created with DumbDisplay::createGraphicalLayer()
Definition: dumbdisplay.h:744
void drawImageFileFit(const String &imageFileName, const String &options)
another version of drawImageFileFit() with options
Definition: dumbdisplay.h:932
void setTextSize(int size)
set text size
void drawCircle(int x, int y, int r, const String &color="", bool filled=false)
void println(const String &text="")
print text with line feed
void cachePixelImage16(const String &imageName, const uint16_t *data, int width, int height, const String &options="", char compressMethod=0)
void print(const String &text)
print text
void noFillColor()
set no fill color (for shape)
void loadImageFile(const String &imageFileName, int w=0, int h=0, const String &asImageFileName="")
void setTextWrap(bool wrapOn)
set whether "print" will auto wrap or not
void saveCachedImageFiles(const String &stitchAsImageName="")
void cacheImageWithTS(const String &imageName, const uint8_t *bytes, int byteCount, long imageTimestamp, char compressionMethod=0)
void penSize(int size)
set pen size
void setHeading(int angle)
set heading angle (degree)
void circle(int radius, bool centered=false)
draw a circle; centered or not
void setTextFont()
reset text font and size
void setTextFont(const String &fontName, int textSize)
Definition: dumbdisplay.h:773
void backward(int distance, bool withPen=true)
move backward (relative to cursor)
void isoscelesTriangle(int side, int angle)
draw isosceles triangle; given size and angle
void drawRect(int x, int y, int w, int h, const String &color="", bool filled=false)
void setTextColor(const String &color, const String &bgColor="")
void drawRoundRect(int x, int y, int w, int h, int r, const String &color="", bool filled=false)
void fillCircle(int x, int y, int r, const String &color="")
Definition: dumbdisplay.h:812
void drawOval(int x, int y, int w, int h, const String &color="", bool filled=false)
void arc(int width, int height, int startAngle, int sweepAngle, bool centered=false)
draw arc; centered or not
void fillRect(int x, int y, int w, int h, const String &color="")
Definition: dumbdisplay.h:828
void cachePixelImageGS(const String &imageName, const uint8_t *data, int width, int height, const String &options="", char compressMethod=0)
void rightTurn(int angle)
turn right
void setCursor(int x, int y)
set cursor to position
void saveCachedImageFile(const String &imageName, const String &asImageName="")
void fillScreen(const String &color)
void drawStr(int x, int y, const String &string, const String &color="", const String &bgColor="", int size=0)
void drawImageFile(const String &imageFileName, const String &options)
another version of drawImageFile() with options
Definition: dumbdisplay.h:919
void forward(int distance, bool withPen=true)
move forward (relative to cursor)
GraphicalDDLayer(int8_t layerId)
for internal use only
Definition: dumbdisplay.h:752
void unloadImageFile(const String &imageFileName)
unload image file from cache
void unloadAllImageFiles()
unload all image files from cache
void fillArc(int x, int y, int w, int h, int startAngle, int sweepAngle, bool useCenter, const String &color="")
Definition: dumbdisplay.h:852
void write(const String &text, bool draw=false)
void cachePixelImage(const String &imageName, const uint8_t *bytes, int width, int height, const String &color="", char compressionMethod=0)
void drawChar(int x, int y, char c, const String &color="", const String &bgColor="", int size=0)
void penColor(const String &color)
void saveCachedImageFileAsync(const String &imageName, const String &asImageName="")
void polygon(int side, int vertexCount)
draw polygon given side and vertex count
void centeredPolygon(int radius, int vertexCount, bool inside=false)
GraphicalDDLayer(GraphicalDDLayerHandle layerHandle)
Definition: dumbdisplay.h:748
void drawPixel(int x, int y, const String &color="")
void fillColor(const String &color)
void drawTextLine(const String &text, int y, const String &align="L", const String &color="", const String &bgColor="", int size=0)
void drawImageFileFit(const String &imageFileName, int x=0, int y=0, int w=0, int h=0, const String &options="")
void drawImageFileScaled(const String &imageFileName, int w, int h, const String &options="")
Definition: dumbdisplay.h:924
void drawTriangle(int x1, int y1, int x2, int y2, int x3, int y3, const String &color="", bool filled=false)
void setTextFont(const String &fontName)
void drawLine(int x1, int y1, int x2, int y2, const String &color="")
void leftTurn(int angle)
turn left
void triangle(int side1, int angle, int side2)
draw triangle (SAS)
void fillTriangle(int x1, int y1, int x2, int y2, int x3, int y3, const String &color="")
Definition: dumbdisplay.h:820
void drawImageFile(const String &imageFileName, int x=0, int y=0, int w=0, int h=0, const String &options="")
void cacheImage(const String &imageName, const uint8_t *bytes, int byteCount, char compressionMethod=0)
void moveCursorBy(int byX, int byY)
move cursor by some amount
void drawArc(int x, int y, int w, int h, int startAngle, int sweepAngle, bool useCenter, const String &color="", bool filled=false)
void fillRoundRect(int x, int y, int w, int h, int r, const String &color="")
Definition: dumbdisplay.h:836
void oval(int width, int height, bool centered=false)
draw an oval; centered or not
void setRotation(int8_t rotationType)
rotate the screen
void loadImageFileScaled(const String &imageFileName, int w, int h, const String &asImageFileName)
Definition: dumbdisplay.h:906
void rectangle(int width, int height, bool centered=false)
draw rectangle; centered or not
void fillOval(int x, int y, int w, int h, const String &color="")
Definition: dumbdisplay.h:844
Image download tool "tunnel" created with DumbDisplay::createImageDownloadTunnel()
Definition: dumbdisplay.h:1391
ImageDownloadDDTunnel(int8_t tunnelId, const String &params, const String &endPoint, int bufferSize)
Definition: dumbdisplay.h:1394
void reconnectTo(const String &endPoint, const String &cropUIConfig="")
Definition: dumbdisplay.h:1477
ImageRetrieverDDTunnel(const String &type, int8_t tunnelId, const String &params, const String &endPoint, int8_t bufferSize)
Definition: dumbdisplay.h:1480
bool readPixelImage16(DDPixelImage16 &pixelImage16)
get 16-bit image data retrieved with reconnectForPixelImage16
bool readJpegImage(DDJpegImage &jpeg)
get JPEG image data retrieved with reconnectForJpegImage
bool readPixelImage(DDPixelImage &pixelImage)
get single-bit image data retrieved with reconnectForPixelImage
bool readPixelImageGS16(DDPixelImage16 &pixelImage16)
get grayscale 16-bit image data retrieved with reconnectForPixelImageGS
void reconnectForJpegImage(const String &imageName, int width, int height, int quality=100, bool fit=false)
void reconnectForPixelImage16(const String &imageName, int width, int height, bool fit=false, bool grayscale=false)
void reconnectForPixelImage(const String &imageName, int width, int height, bool fit=false)
Class for virtual joystick layer; created with DumbDisplay::createJoystickLayer()
Definition: dumbdisplay.h:1012
void moveToPos(int16_t x, int16_t y, bool sendFeedback=false)
void colors(const String &stickColor, const String &stickOutlineColor, const String &socketColor="", const String &socketOutlineColor="")
set the colors of the stick UI
void valueRange(int16_t minValue, int16_t maxValue, int valueStep=1, bool sendFeedback=false)
void snappy(bool snappy=true)
set 'snappy' makes stick snaps to closest value when moved
JoystickDDLayer(int8_t layerId)
for internal use only
Definition: dumbdisplay.h:1015
void autoRecenter(bool autoRecenter=true)
void moveToCenter(bool sendFeedback=false)
void showValue(bool show=true, const String &color="")
show value on top of the stick
Definition: dumbdisplay.h:1511
JsonDDTunnelMultiplexer(JsonDDTunnel **tunnels, int8_t tunnelCount)
int read(String &fieldId, String &fieldValue)
Class for LCD layer; created with DumbDisplay::createLcdLayer()
Definition: dumbdisplay.h:587
void cursor()
show cursor
void noBgPixelColor()
set no "background" (off) pixel color
LcdDDLayer(LcdDDLayerHandle layerHandle)
Definition: dumbdisplay.h:591
void bgPixelColor(const String &color, bool sameForBackgroundColor=false, int backgroundOpacity=100)
void setCursor(int x, int y)
void print(const String &text)
print text, moving cursor
void pixelColor(const String &color)
void autoscroll()
enable auto-scroll
void writeCenteredLine(const String &text, int y=0)
write text as a line, with align "centered"
void writeRightAlignedLine(const String &text, int y=0)
write text as a right-aligned line
void noAutoscroll()
disable auto-scroll
LcdDDLayer(int8_t layerId)
for internal use only
Definition: dumbdisplay.h:595
void home()
move cursor to home
void noCursor()
hide cursor
void writeLine(const String &text, int y=0, const String &align="L")
Class for LED grid layer; created with DumbDisplay::createLedGridLayer()
Definition: dumbdisplay.h:525
LedGridDDLayer(int8_t layerId)
for internal use only
Definition: dumbdisplay.h:528
void onColor(const String &color)
void turnOff(int x=0, int y=0)
turn off LED @ (x, y)
void toggle(int x=0, int y=0)
toggle LED @ (x, y)
void bitwise3(unsigned int bits_0, unsigned int bits_1, unsigned int bits_2, int y=0, bool reverse=false)
void verticalBarEx(int count, int startY=0, const String &color="")
void verticalBar(int count, bool bottomToTop=true)
void bitwise(unsigned int bits, int y=0, bool reverse=false)
void bitwise4(unsigned int bits_0, unsigned int bits_1, unsigned int bits_2, unsigned int bits_3, int y=0, bool reverse=false)
void horizontalBar(int count, bool rightToLeft=false)
void offColor(const String &color)
void turnOn(int x=0, int y=0)
turn on LED @ (x, y)
void noOffColor()
set no LED off color
void turnOnEx(int x=0, int y=0, const String &onColor="")
void horizontalBarEx(int count, int startX=0, const String &color="")
void bitwise2(unsigned int bits_0, unsigned int bits_1, int y=0, bool reverse=false)
Class for Microbit-like DD layer; created with DumbDisplay::createMicrobitLayer()
Definition: dumbdisplay.h:421
void plot(int x, int y)
turn on LED @ (x, y)
void showString(const String &str)
show string; scroll if more than a single character; but you get to control timing by using delay()
void unplot(int x, int y)
turn off LED @ (x, y)
void showLeds(const String &ledPattern)
MbDDLayer(int8_t layerId)
for internal use only
Definition: dumbdisplay.h:424
void showIcon(MbIcon icon)
show Microbit icon
void showNumber(int num)
show number; scroll if more than a single digit; but you get to control timing by using delay()
void ledColor(const String &color)
void toggle(int x, int y)
toggle LED @ (x, y) on / off
void showArrow(MbArrow arrow)
show Microbit arrow
Definition: dumbdisplay.h:410
Definition: dumbdisplay.h:324
void pushLevelAndSwitchTo(const String &switchTolevelId, bool addIfMissing=true)
void moveLevelAnchorBy(float byX, float byY, long reachInMillis=0)
move the level anchor
void switchLevel(const String &levelId, bool addIfMissing=true)
void setLevelNoBackground()
set that the current level uses no background image
void popLevel()
pop a level from the level stack and make it the current level
void reorderLevel(const String &levelId, const String &how)
void stopAnimateLevelBackground(bool reset=true)
void setLevelAnchor(float x, float y, long reachInMillis=0)
set the anchor of the level; note that level anchor is the top-left corner of the level "opening"
void addTopLevel(const String &levelId, float width=0, float height=0, bool switchToIt=false)
like addLevel() but add to the top (i.e. will be drawn last)
void exportLevelAsRegisteredBackground(const String &backgroundId, bool replace=true)
void levelOpacity(int opacity)
void registerLevelBackground(const String &backgroundId, const String &backgroundImageName, const String &drawBackgroundOptions="")
void addTopLevel(const String &levelId, bool switchToIt)
another version of addTopLevel()
Definition: dumbdisplay.h:338
void deleteLevel(const String &levelId)
delete the specified level
void addLevel(const String &levelId, bool switchToIt=false)
another version of addLevel()
Definition: dumbdisplay.h:332
void pushLevel()
push the current level onto the level stack, to be pop with popLevel()
void levelTransparent(bool transparent)
set whether level is transparent
void animateLevelBackground(float fps, bool reset=true, const String &options="")
void setLevelBackground(const String &backgroundId, const String &backgroundImageName="", const String &drawBackgroundOptions="")
void exportLevelsAsImage(const String &imageFileName, bool cacheItNotSave=false)
export (and save) the levels as an image (without the decorations of the layer like border)
void addLevel(const String &levelId, float width, float height, bool switchToIt=false)
Class for "object detection demo" service "tunnel".
Definition: dumbdisplay.h:1430
ObjectDetectDemoServiceDDTunnel(const String &type, int8_t tunnelId, const String &params, const String &endPoint, int8_t bufferSize)
Definition: dumbdisplay.h:1433
Class for plotter layer; created with DumbDisplay::createPlotterLayer() or DumbDisplay::createFixedRa...
Definition: dumbdisplay.h:1043
void label(const String &key, const String &lab)
void set(float value)
set value with empty key
Definition: dumbdisplay.h:1056
void set(const String &key, float value)
PlotterDDLayer(int8_t layerId)
for internal use only
Definition: dumbdisplay.h:1046
Definition: dumbdisplay.h:1132
RtspClientDDLayer(int8_t layerId)
for internal use only
Definition: dumbdisplay.h:1135
void start(const String &url)
Definition: dumbdisplay.h:635
void pixelColor(const String &color)
void highlightBorder(bool forSelected, const String &borderColor="", const String &borderShape="")
void pixelColor(const String &color, bool selected)
void deselectAll()
deselect all "selection" units
SelectionBaseDDLayer(int8_t layerId)
for internal use only
Definition: dumbdisplay.h:638
void selectAll()
select all "selection" units
Class for "selection" layer of multiple LCD-like "selection" units; created with DumbDisplay::createS...
Definition: dumbdisplay.h:666
void unselectedTextRightAligned(const String &text, int y=0, int horiSelectionIdx=0, int vertSelectionIdx=0)
set a "selection" unit right-aligned text (of y-th row) when unselected (it defaults to the same text...
void textCentered(const String &text, int y=0, int horiSelectionIdx=0, int vertSelectionIdx=0)
set a "selection" unit centered text (of y-th row)
void selected(bool selected, int horiSelectionIdx=0, int vertSelectionIdx=0, bool reverseTheOthers=false)
set a "selection" unit selected or not (combination of select() and deselect())
void setSelected(bool selected, int horiSelectionIdx=0, int vertSelectionIdx=0)
Definition: dumbdisplay.h:689
void unselectedTextCentered(const String &text, int y=0, int horiSelectionIdx=0, int vertSelectionIdx=0)
set a "selection" unit centered text (of y-th row) when unselected (it defaults to the same text as s...
void text(const String &text, int y=0, int horiSelectionIdx=0, int vertSelectionIdx=0, const String &align="L")
void select(int horiSelectionIdx=0, int vertSelectionIdx=0, bool deselectTheOthers=true)
select a "selection" unit
SelectionDDLayer(int8_t layerId)
for internal use only
Definition: dumbdisplay.h:669
void textRightAligned(const String &text, int y=0, int horiSelectionIdx=0, int vertSelectionIdx=0)
set a "selection" unit right-aligned text (of y-th row)
void unselectedText(const String &text, int y=0, int horiSelectionIdx=0, int vertSelectionIdx=0, const String &align="L")
void deselect(int horiSelectionIdx=0, int vertSelectionIdx=0, bool selectTheOthers=false)
deselect a "selection" unit
Class for "selection list" layer, like SelectionDDLayer but "selections" can be added and removed dyn...
Definition: dumbdisplay.h:705
void add(int selectionIdx)
void select(int selectionIdx, bool deselectTheOthers=true)
select a "selection" unit
void textCentered(int selectionIdx, const String &text, int y=0)
set a "selection" unit centered text (of y-th row)
void deselect(int selectionIdx, bool selectTheOthers=false)
deselect a "selection" unit
void unselectedTextCentered(int selectionIdx, const String &text, int y=0)
set a "selection" unit centered text (of y-th row) when unselected (it defaults to the same text as s...
void unselectedTextRightAligned(int selectionIdx, const String &text, int y=0)
set a "selection" unit right-aligned text (of y-th row) when unselected (it defaults to the same text...
void unselectedText(int selectionIdx, const String &text, int y=0, const String &align="L")
void text(int selectionIdx, const String &text, int y=0, const String &align="L")
SelectionListDDLayer(int8_t layerId)
for internal use only
Definition: dumbdisplay.h:708
void offset(int offset)
set the offset to the "selection" unit start showing
void selected(int selectionIdx, bool selected, bool reverseTheOthers=false)
set a "selection" unit selected or not (combination of select() and deselect())
void remove(int selectionIdx)
void textRightAligned(int selectionIdx, const String &text, int y=0)
set a "selection" unit right-aligned text (of y-th row)
Class for 7-segment row layer; created with DumbDisplay::create7SegmentRowLayer()
Definition: dumbdisplay.h:973
void turnOn(const String &segments, int digitIdx=0)
void showFormatted(const String &formatted, bool completeReplace=true, int startIdx=0)
void resetSegmentOffColor(const String &color)
SevenSegmentRowDDLayer(int8_t layerId)
for internal use only
Definition: dumbdisplay.h:976
void setOn(const String &segments="", int digitIdx=0)
void showHexNumber(int16_t number)
show HEX number
void showNumber(float number, const String &padding=" ")
show number (can be float)
void segmentColor(const String &color)
void showDigit(int digit, int digitIdx=0)
show a digit
void resetSegmentOffNoColor()
reset segment off color to no color; note that this will clear all digits
void turnOff(const String &segments, int digitIdx=0)
Class for basic tool "tunnel".
Definition: dumbdisplay.h:1373
SimpleToolDDTunnel(const String &type, int8_t tunnelId, const String &params, const String &endPoint, int bufferSize)
Definition: dumbdisplay.h:1376
Class for a terminal-like "device dependent view" layer, for logging etc; created with DumbDisplay::c...
Definition: dumbdisplay.h:1077
TerminalDDLayer(int8_t layerId)
for internal use only
Definition: dumbdisplay.h:1080
Definition: dumbdisplay.h:1065
TomTomMapDDLayer(int8_t layerId)
for internal use only
Definition: dumbdisplay.h:1068
Class for Turtle-like DD layer; created with DumbDisplay::createTurtleLayer()
Definition: dumbdisplay.h:456
void penColor(const String &color)
void arc(int width, int height, int startAngle, int sweepAngle, bool centered=false)
draw arc; centered or not
void isoscelesTriangle(int side, int angle)
draw isosceles triangle; given size and angle
void penFilled(bool filled)
set pen filled or not; if filled, shape drawn will be filled
void goBy(int byX, int byY, bool withPen=true)
go by (byX, byY); with pen or not
void polygon(int side, int vertexCount)
draw polygon given side and vertex count
void goTo(int x, int y, bool withPen=true)
go to (x, y); with pen or not
void forward(int distance, bool withPen=true)
forward; with pen or not
void centeredPolygon(int radius, int vertexCount, bool inside=false)
void triangle(int side1, int angle, int side2)
draw triangle (SAS)
void oval(int width, int height, bool centered=false)
draw oval; centered or not
void circle(int radius, bool centered=false)
draw circle; centered or not
void dot(int size, const String &color)
draw a dot
void setTextFont(const String &fontName="", int textSize=0)
void write(const String &text, bool draw=false)
write text; draw means draw the text (honor heading)
void penUp()
pen up
TurtleDDLayer(int8_t layerId)
for internal use only
Definition: dumbdisplay.h:459
void home(bool withPen=true)
go home (0, 0); with pen or not
void leftTurn(int angle)
left turn
void setTextSize(int size)
set text size
void penDown()
pen down
void noFillColor()
set no fill color
void rightTurn(int angle)
right turn
void penSize(int size)
set pen size
void backward(int distance, bool withPen=true)
backward; with pen or not
void setHeading(int angle)
set heading angle (degree)
void fillColor(const String &color)
void rectangle(int width, int height, bool centered=false)
draw rectangle; centered or not
Definition: dumbdisplay.h:1107
WebViewDDLayer(int8_t layerId)
for internal use only
Definition: dumbdisplay.h:1110
Struct for the status values of calling DumbDisplay::connectPassive()
Definition: dumbdisplay.h:1566
bool reconnecting
reconnecting: when connected; detected reconnecting (after lost of connection)
Definition: dumbdisplay.h:1572
bool connecting
connecting: when not connected; starting to establish connection by sending hand-shake messages
Definition: dumbdisplay.h:1570
bool connected
connection made or not – same as the return value of DumbDisplay::connectPassive()
Definition: dumbdisplay.h:1568
Type signature for callback function that will be called when connect version (counting up) changed....
See DDDebugInterface.
Type signature for "feedback" handler. See DDLayer::setFeedbackHandler()
The struct that captures info about "feedback". See DDLayer::enableFeedback()
Definition: _dd_feedback.h:29
The enum indicating the type of "feedback". See DDFeedback.
Type signature for callback function that will be called when idle. See DumbDisplay::setIdleCallback(...
See DDIdleCallback.
Definition: dumbdisplay.h:1442
Definition: dumbdisplay.h:1468
experimental: _h is for internal use only
Definition: dumbdisplay.h:156
Output struct of GpsServiceDDTunnel.
Definition: dumbdisplay.h:1403
Output struct of ObjectDetectDemoServiceDDTunnel.
Definition: dumbdisplay.h:1422
Base class for DD objects.
Definition: dumbdisplay.h:140
int8_t objectType
object type – DD_OBJECT_TYPE_LAYER or DD_OBJECT_TYPE_TUNNEL
Definition: dumbdisplay.h:142
String customData
custom data
Definition: dumbdisplay.h:147
Definition: dumbdisplay.h:1457
Definition: dumbdisplay.h:1454
Definition: dumbdisplay.h:740
Definition: dumbdisplay.h:580