Reading and using config files for lamps, colors and animation

This commit is contained in:
2017-12-02 08:03:56 +01:00
parent 54a6ee1cd1
commit 3f369f3d6b
8 changed files with 188 additions and 65 deletions

View File

@@ -1,6 +1,7 @@
/* LEDDefinition.cpp */
#include "LEDDefinition.h"
#include "common/str_util.h"
LEDColor offColor = { name: "off", red: 0, green: 0, blue: 0};
LEDColor dimmedRedColor = { name: "dimmedRed", red: 80, green: 0, blue: 0};
@@ -20,7 +21,7 @@ LEDColor *LEDColor_get(char *name) {
void LEDColor_add(char *name, uint8_t red, uint8_t green, uint8_t blue) {
if (numberOfColors < MAX_COLORS) {
ledColor[numberOfColors].name = name;
ledColor[numberOfColors].name = strdup(name);
ledColor[numberOfColors].red = red;
ledColor[numberOfColors].green = green;
ledColor[numberOfColors].blue = blue;
@@ -61,10 +62,10 @@ LEDDefinition *LEDDefinition_get(int ledNum) {
void LEDDefinition_add(char *level, char *room, char *id, uint8_t red, uint8_t green, uint8_t blue) {
if (numberOfLEDDefinitions < MAX_LEDS) {
ledDefinition[numberOfLEDDefinitions].level = level;
ledDefinition[numberOfLEDDefinitions].room = room;
ledDefinition[numberOfLEDDefinitions].id = id;
ledDefinition[numberOfLEDDefinitions].onColor.name = "autoColor";
ledDefinition[numberOfLEDDefinitions].level = strdup(level);
ledDefinition[numberOfLEDDefinitions].room = strdup(room);
ledDefinition[numberOfLEDDefinitions].id = strdup(id);
ledDefinition[numberOfLEDDefinitions].onColor.name = strdup("autoColor");
ledDefinition[numberOfLEDDefinitions].onColor.red = red;
ledDefinition[numberOfLEDDefinitions].onColor.green = green;
ledDefinition[numberOfLEDDefinitions].onColor.blue = blue;

View File

@@ -9,7 +9,7 @@
#include "mongoose/mongoose.h"
#include "common/cs_dbg.h"
#define MAX_LEDS 100
#define MAX_LEDS 50
typedef enum LEDMode_e { LEDMode_on, LEDMode_off, LEDMode_blink, LEDMode_tv, LEDMode_fire } LEDMode;

View File

@@ -55,34 +55,61 @@ enum mgos_app_init_result mgos_app_init(void) {
int numberOfLeds = mgos_sys_config_get_led_count();
bool loadDefaultData = mgos_sys_config_get_led_useDefaults();
LOG(LL_DEBUG, ("LEDColor_init(loadDefaultData=%s)", loadDefaultData ? "true" : "false"));
mgos_msleep(50);
LEDColor_init(loadDefaultData);
LOG(LL_DEBUG, ("LEDDefinition_init(numberOfLeds=%d, loadDefaultData=%s)", numberOfLeds, loadDefaultData ? "true" : "false"));
mgos_msleep(50);
LEDDefinition_init(numberOfLeds, loadDefaultData);
LOG(LL_DEBUG, ("AnimationConfig_init(loadDefaultData=%s)", loadDefaultData ? "true" : "false"));
mgos_msleep(50);
AnimationConfig_init(loadDefaultData);
LEDStateEngine_init(numberOfLeds);
if (loadDefaultData) {
stateEngineRunning = true;
LOG(LL_DEBUG, ("LEDStateEngine_init(numberOfLeds=%d)", numberOfLeds));
mgos_msleep(50);
LEDStateEngine_init(numberOfLeds);
// stateEngineRunning = true;
} else {
LOG(LL_INFO, ("LEDStateEngine needs to be initialized, not started yet as LEDDefinition not loaded so far"));
}
mgos_set_timer(5000, false, delayed_boot, NULL); // after 5 seconds boot the functions
return MGOS_APP_INIT_SUCCESS;
}
void printColor(char *name) {
LEDColor *c = LEDColor_get(name);
LOG(LL_INFO, ("Color %s: %d/%d/%d", name, c->red, c->green, c->blue));
}
// javascript adapter functions:
void addColor(char *name, int red, int green, int blue) {
LEDColor_add(name, red, green, blue);
}
void addLedDefinition(char *level, char *room, char *id, int red, int green, int blue) {
LEDDefinition_add(level, room, id, red, green, blue);
void addLedDefinition(char *level, char *room, char *id, char *onColorName) {
LEDColor *c = LEDColor_get(onColorName);
LEDDefinition_add(level, room, id, c->red, c->green, c->blue);
}
void addAnimationStep(int ledIndex, int ledMode, int duration) {
void addAnimationStep(int ledIndex, char *ledMode, int duration) {
LEDMode m = LEDMode_off;
switch (ledMode) {
case 1: m = LEDMode_on; break;
case 2: m = LEDMode_off; break;
case 3: m = LEDMode_blink; break;
case 4: m = LEDMode_tv; break;
case 5: m = LEDMode_fire; break;
default: m = LEDMode_off;
if (strcmp(ledMode, "on") == 0 || strcmp(ledMode, "LEDMode_on") == 0) {
m = LEDMode_on;
}
else if (strcmp(ledMode, "off") == 0 || strcmp(ledMode, "LEDMode_off") == 0) {
m = LEDMode_off;
}
else if (strcmp(ledMode, "blink") == 0 || strcmp(ledMode, "LEDMode_blink") == 0) {
m = LEDMode_blink;
}
else if (strcmp(ledMode, "tv") == 0 || strcmp(ledMode, "LEDMode_tv") == 0) {
m = LEDMode_tv;
}
else if (strcmp(ledMode, "fire") == 0 || strcmp(ledMode, "LEDMode_fire") == 0) {
m = LEDMode_fire;
}
else {
m = LEDMode_off;
LOG(LL_ERROR, ("addAnimationStep: Invalid LEDMode %s, using LEDMode_off", ledMode));
}
AnimationStep_add(ledIndex, m, duration);
}