Reading and using config files for lamps, colors and animation
This commit is contained in:
@@ -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;
|
||||
|
@@ -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;
|
||||
|
||||
|
53
src/main.c
53
src/main.c
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user