117 lines
No EOL
2.9 KiB
C++
117 lines
No EOL
2.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 <EEPROM.h>
|
|
#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
|
|
const text_set_t defaultTextSet {"", false, 0, "", AlignCenter, false, 0, 0};
|
|
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
|