#ifndef LED_DISPLAY_CONTROLLER #define LED_DISPLAY_CONTROLLER #include #include #include #include #include #include "esp_task_wdt.h" #include #include // function for updater task on core 0 void updateDisplayGlobal(void* object); //extern LedDisplayController *ledDisplayControllerGlobal; class LedDisplayController { public: template explicit LedDisplayController(NeoPixelBrightnessBusGfx *matrix ) { this->eepromUnit = nullptr; //ledDisplayControllerGlobal = this; this->loadTextSets(); this->matrix = matrix; this->matrix->Begin(); this->matrix->setTextWrap(false); text_curr_nr = 0; text_set_starttime = 0; text_pass = 0; textpixel = 0; disp_show = false; this->disp_init(); // create updater task xTaskCreatePinnedToCore(updateDisplayGlobal, "DisplayUpdateTask", 10000, this, 1, &displayUpdateTask, 0); } ; ~LedDisplayController(); //typedef uint16_t (*remapfn)(uint16_t, uint16_t); enum text_align_t { AlignLeft, AlignCenter, AlignRight }; enum DisplayTextSetParameter { TextParameter = 0, ActiveParameter, RuntimeParameter, ColorParameter, AlignmentParameter, ScrollParameter, ScrollDirectionParameter, 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 bool registerEepromUnit(EepromManager* eepromManager); String getTextSetParameter(int index, DisplayTextSetParameter parameter); GetSetTextSetParameterExitCode setTextSetParameter(int index, DisplayTextSetParameter parameter, String value); // brightness control int getBrightness(); bool setBrightness(int brightness); bool getAutomaticBrightnessAdjustment(); void setAutomaticBrightnessAdjustment(bool automaticBrightnessAdjustment); private: // matrix objects TaskHandle_t displayUpdateTask; NeoPixelBrightnessBusGfx *matrix; // matrix variables uint16_t text_curr_nr; uint32_t text_set_starttime; bool text_no_activ_legal_sets; int text_pos; unsigned int text_pass; unsigned int textpixel; bool disp_show; long last_display_show_ms; uint8_t default_display_show_wait_ms; uint8_t display_show_wait_ms; // matrix control //uint16_t remap(uint16_t x, uint16_t y); 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 scrollDirection; int scrollSpeed; /*!< Between 0 and 10 */ uint16_t scrollCount; } text_set_t; typedef struct sets_t { text_set_t sets[maximumTextSets]; int disp_brightness; bool disp_automatic_brightness_adjustment; char valid[3]; } sets_t; // storage variables const text_set_t defaultTextSet {"", false, 0, "", AlignCenter, false, 0, 0, 0}; sets_t text_sets; // storage control EepromUnit* eepromUnit; GetSetTextSetParameterExitCode getSetTextSetParameter(int index, DisplayTextSetParameter parameter, String *value, bool set = false); bool storeTextSets(); bool loadTextSets(); }; #endif // LED_DISPLAY_CONTROLLER