LedDisplay/vscode/OmobiLEDdisplayBluetooth/include/LedDisplayController.h

174 lines
No EOL
4.6 KiB
C++

#ifndef LED_DISPLAY_CONTROLLER
#define LED_DISPLAY_CONTROLLER
#define LDR_PIN 36
#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);
class LedDisplayController
{
public:
template<typename T_COLOR_FEATURE, typename T_METHOD>
explicit LedDisplayController(NeoPixelBrightnessBusGfx<T_COLOR_FEATURE, T_METHOD> *matrix )
{
this->eepromUnit = nullptr;
this->loadTextSets();
this->RFade = (StepsFade*log10(2))/log10(255);
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->brightness_init();
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<NeoGrbFeature, Neo800KbpsMethod> *matrix;
// brigthness meassurement collection set
static const uint8_t meas_slots = 5;
uint8_t current_meas_slot;
uint16_t brightness_levels[meas_slots];
float brightness_adjust;
long last_brightness_meas;
// 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;
static const uint8_t StepsFade = 50;
float RFade;
// matrix control
//uint16_t remap(uint16_t x, uint16_t y);
void disp_init();
void brightness_init();
void disp_start_set();
void disp_scroll_text();
void show_matrix(const char *text, int pos, const char *color);
void measureBrightnessEnv( void );
uint8_t adjustBrightnessToEnv( void );
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