#ifndef LED_DISPLAY_CONTROLLER #define LED_DISPLAY_CONTROLLER #include #include #include #include #include #include "esp_task_wdt.h" class LedDisplayController { public: explicit LedDisplayController(Adafruit_NeoMatrix *matrix); ~LedDisplayController(); enum text_align_t { AlignLeft, AlignCenter, AlignRight }; enum DisplayTextSetParameter { TextParameter = 0, ActiveParameter, RuntimeParameter, ColorParameter, AlignmentParameter, ScrollParameter, ScrollSpeedParameter, ScrollCountParameter, IndexParameter, DisplayTextSetParameterCount /*!< Just for helping purposes */ }; enum GetSetTextSetParameterExitCode { Success, InvalidParameterError, ParameterNotWritableError, ValueOutOfRangeError, IndexOutOfRangeError, ValueIsNullptrError, InternalError }; static const uint16_t maximumTextSets = 6; static const uint16_t maximumTextLength = 256; void loop(); // modifiers for the internal text sets String getTextSetParameter(int index, DisplayTextSetParameter parameter); GetSetTextSetParameterExitCode setTextSetParameter(int index, DisplayTextSetParameter parameter, String value); // brightness control int getBrightness(); bool setBrightness(int brightness); private: // matrix objects TaskHandle_t displayUpdateTask; Adafruit_NeoMatrix *matrix; // matrix variables uint16_t text_curr_nr; uint32_t text_set_starttime; int text_pos; unsigned int text_pass; unsigned int textpixel; int disp_brightness; bool disp_show; // matrix control void disp_init(); void disp_start_set(); void disp_scroll_text(); void show_matrix(const char *text, int pos, const char *color); uint16_t colorFromHex(String hex); // storage structs typedef struct text_set_t { char text[maximumTextLength]; bool active; uint16_t runtime; char color[7]; text_align_t alignment; bool scroll; int scrollSpeed; /*!< Between 0 and 10 */ uint16_t scrollCount; } text_set_t; typedef struct sets_t { text_set_t sets[maximumTextSets]; char valid[3]; } sets_t; // storage variables sets_t text_sets; // storage control GetSetTextSetParameterExitCode getSetTextSetParameter(int index, DisplayTextSetParameter parameter, String *value, bool set = false); void storeTextSets(); bool loadTextSets(); }; // function for updater task on core 0 void updateDisplayGlobal(void *); extern LedDisplayController *ledDisplayControllerGlobal; #endif // LED_DISPLAY_CONTROLLER