#ifndef LED_DISPLAY_CONTROLLER #define LED_DISPLAY_CONTROLLER #include #include #include #include #include "esp_task_wdt.h" #include class LedDisplayController { public: explicit LedDisplayController(const byte pin); ~LedDisplayController(); enum text_align_t { TEXTLEFT, TEXTCENTER, TEXTRIGHT }; enum set_param_index_t { PTEXT, PTIME, PCOLOR, PALIGN, PSCROLL, PSCROLL_RUNS, PACTIVE }; static const uint16_t text_nr_sets = 2; static const uint16_t MAX_TXT_LENGTH = 256; static const int nr_param_names = 7; typedef struct text_set_t { char text[MAX_TXT_LENGTH]; uint16_t time_ms; uint16_t color; text_align_t align; bool text_scroll; uint16_t text_scroll_pass; bool active; } text_set_t; typedef struct sets_t { text_set_t sets[text_nr_sets]; char valid[3]; } sets_t; void disp_update(); void setTexts(sets_t texts); sets_t getTexts(); uint16_t Color(uint8_t r, uint8_t g, uint8_t b); private: TaskHandle_t displayUpdateTask; Adafruit_NeoMatrix* matrix; const String set_param_name[nr_param_names] = {"text_", "time_", "color_", "align_", "scroll_", "scroll_runs_", "active_"}; const uint16_t DISP_STRUCT_SIZE = sizeof(sets_t); sets_t text_sets; uint16_t text_curr_nr; uint32_t text_set_starttime; int text_pos; unsigned int text_pass; unsigned int textpixel; bool disp_show; void storeDisplaySet(); bool loadDisplaySet(); void disp_scroll_text(); void disp_switch_text(); void disp_start_set(); void disp_init(); void show_matrix(const char *text, int pos, uint16_t color); String get_paramstring_from_struct(String name); void set_param_to_struct(String name, String value); String getset_param_at_struct(String name, String value, bool set); }; void updateDisplayGlobal(void*); extern LedDisplayController *ledDisplayControllerGlobal; #endif // LED_DISPLAY_CONTROLLER