151 lines
No EOL
3.9 KiB
C++
151 lines
No EOL
3.9 KiB
C++
#ifndef LED_DISPLAY_CONTROLLER
|
|
#define LED_DISPLAY_CONTROLLER
|
|
|
|
#include <Arduino.h>
|
|
#include <Adafruit_GFX.h>
|
|
#include <Adafruit_NeoMatrix.h>
|
|
#include <Adafruit_NeoPixel.h>
|
|
#include <EepromManager.h>
|
|
#include "esp_task_wdt.h"
|
|
#include <NeoPixelBrightnessBusGfx.h>
|
|
#include <NeoPixelBrightnessBus.h>
|
|
|
|
// function for updater task on core 0
|
|
void updateDisplayGlobal(void* object);
|
|
//extern LedDisplayController *ledDisplayControllerGlobal;
|
|
|
|
class LedDisplayController
|
|
{
|
|
public:
|
|
template<typename T_COLOR_FEATURE, typename T_METHOD>
|
|
explicit LedDisplayController(NeoPixelBrightnessBusGfx<T_COLOR_FEATURE, T_METHOD> *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,
|
|
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);
|
|
|
|
private:
|
|
// matrix objects
|
|
TaskHandle_t displayUpdateTask;
|
|
NeoPixelBrightnessBusGfx<NeoGrbFeature, Neo800KbpsMethod> *matrix;
|
|
|
|
// matrix variables
|
|
uint16_t text_curr_nr;
|
|
uint32_t text_set_starttime;
|
|
|
|
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 scrollSpeed; /*!< Between 0 and 10 */
|
|
uint16_t scrollCount;
|
|
} text_set_t;
|
|
|
|
typedef struct sets_t
|
|
{
|
|
text_set_t sets[maximumTextSets];
|
|
int disp_brightness;
|
|
char valid[3];
|
|
} sets_t;
|
|
|
|
// storage variables
|
|
const text_set_t defaultTextSet {"", false, 0, "", AlignCenter, false, 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
|