Animation works with default animation
This commit is contained in:
@@ -64,6 +64,7 @@ void LEDDefinition_add(char *level, char *room, char *id, uint8_t red, uint8_t g
|
||||
ledDefinition[numberOfLEDDefinitions].level = level;
|
||||
ledDefinition[numberOfLEDDefinitions].room = room;
|
||||
ledDefinition[numberOfLEDDefinitions].id = id;
|
||||
ledDefinition[numberOfLEDDefinitions].onColor.name = "autoColor";
|
||||
ledDefinition[numberOfLEDDefinitions].onColor.red = red;
|
||||
ledDefinition[numberOfLEDDefinitions].onColor.green = green;
|
||||
ledDefinition[numberOfLEDDefinitions].onColor.blue = blue;
|
||||
@@ -72,6 +73,7 @@ void LEDDefinition_add(char *level, char *room, char *id, uint8_t red, uint8_t g
|
||||
LOG(LL_ERROR, ("Error: Too many LED Definitions to load, ignoring level=%s, room=%s, id=%s", level, room, id));
|
||||
}
|
||||
}
|
||||
|
||||
void LEDDefinition_init(int numberOfLeds, bool loadDefaultData) {
|
||||
// initialize
|
||||
numberOfLEDDefinitions = 0;
|
||||
@@ -95,3 +97,27 @@ void LEDDefinition_init(int numberOfLeds, bool loadDefaultData) {
|
||||
}
|
||||
}
|
||||
|
||||
char *LEDDefinition_getLevel(int ledNum) {
|
||||
ledNum = verifyLedDefinitionNum(ledNum);
|
||||
return ledDefinition[ledNum].level;
|
||||
}
|
||||
char *LEDDefinition_getRoom(int ledNum) {
|
||||
ledNum = verifyLedDefinitionNum(ledNum);
|
||||
return ledDefinition[ledNum].room;
|
||||
}
|
||||
char *LEDDefinition_getId(int ledNum) {
|
||||
ledNum = verifyLedDefinitionNum(ledNum);
|
||||
return ledDefinition[ledNum].id;
|
||||
}
|
||||
int LEDDefinition_getOnColorRed(int ledNum) {
|
||||
ledNum = verifyLedDefinitionNum(ledNum);
|
||||
return ledDefinition[ledNum].onColor.red;
|
||||
}
|
||||
int LEDDefinition_getOnColorGreen(int ledNum) {
|
||||
ledNum = verifyLedDefinitionNum(ledNum);
|
||||
return ledDefinition[ledNum].onColor.green;
|
||||
}
|
||||
int LEDDefinition_getOnColorBlue(int ledNum) {
|
||||
ledNum = verifyLedDefinitionNum(ledNum);
|
||||
return ledDefinition[ledNum].onColor.blue;
|
||||
}
|
@@ -36,6 +36,12 @@ extern LEDDefinition ledDefinition[MAX_LEDS];
|
||||
|
||||
extern LEDDefinition *LEDDefinition_get(int ledNum);
|
||||
extern void LEDDefinition_init(int numberOfLeds, bool loadDefaultData);
|
||||
void LEDDefinition_add(char *level, char *room, char *id, uint8_t red, uint8_t green, uint8_t blue);
|
||||
extern void LEDDefinition_add(char *level, char *room, char *id, uint8_t red, uint8_t green, uint8_t blue);
|
||||
extern char *LEDDefinition_getLevel(int ledNum);
|
||||
extern char *LEDDefinition_getRoom(int ledNum);
|
||||
extern char *LEDDefinition_getId(int ledNum);
|
||||
extern int LEDDefinition_getOnColorRed(int ledNum);
|
||||
extern int LEDDefinition_getOnColorGreen(int ledNum);
|
||||
extern int LEDDefinition_getOnColorBlue(int ledNum);
|
||||
|
||||
#endif
|
@@ -6,6 +6,9 @@
|
||||
|
||||
|
||||
static LEDStateEngine theLEDStateEngine;
|
||||
static int ticks = 0;
|
||||
|
||||
int getTicks(void) { return ticks; }
|
||||
|
||||
void LEDStateEngine_setNumberOfLeds(int numberOfLeds) {
|
||||
if (numberOfLeds < 1 || numberOfLeds > MAX_LEDS) {
|
||||
@@ -13,13 +16,14 @@ void LEDStateEngine_setNumberOfLeds(int numberOfLeds) {
|
||||
numberOfLeds = MAX_LEDS;
|
||||
}
|
||||
theLEDStateEngine.numberOfLeds = numberOfLeds;
|
||||
LOG(LL_INFO, ("LEDStateEngine initialized: numLEDs=%d, MAX_LEDS=%d", numberOfLeds, MAX_LEDS));
|
||||
}
|
||||
|
||||
void LEDStateEngine_init(int numberOfLeds) {
|
||||
LEDStateEngine_setNumberOfLeds(numberOfLeds);
|
||||
theLEDStateEngine.comment = "";
|
||||
for (int i=0; i<numberOfLeds; ++i) {
|
||||
LEDstate_init(i, LEDDefinition_get(i));
|
||||
LEDState_init(i, LEDDefinition_get(i));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,24 +37,26 @@ uint16_t LEDStateEngine_getNumberOfLeds() {
|
||||
|
||||
|
||||
void LEDStateEngine_tick() {
|
||||
++ticks;
|
||||
// LOG(LL_INFO, ("# %d/%d", theLEDStateEngine.numberOfLeds, ticks));
|
||||
for (int i=0; i<theLEDStateEngine.numberOfLeds; ++i) {
|
||||
LEDState_tick(i);
|
||||
}
|
||||
}
|
||||
|
||||
void LEDState_tick(int ledNum) {
|
||||
LEDState *state = &theLEDStateEngine.ledState[ledNum];
|
||||
if (/*state->index < 0 ||*/ state->index >= theLEDStateEngine.numberOfLeds)
|
||||
return; // ignore LED entries, that are not setup correctly
|
||||
state->currentTick++;
|
||||
LEDState *state = LEDStateEngine_getLedState(ledNum);
|
||||
state->currentTick = state->currentTick + 1;
|
||||
// LOG(LL_INFO,("LEDState_tick(%d) %d", ledNum, state->currentTick));
|
||||
if (state->currentTick == state->nextTick) {
|
||||
// perform/initiate next state change
|
||||
//LOG(LL_INFO, ("State change for led %d", ledNum));
|
||||
state->currentAnimationStep = AnimationConfig_getNextAnimationStepForLED(ledNum, state->currentAnimationStep);
|
||||
state->nextTick = state->currentTick + theAnimationConfig.animationStep[state->currentAnimationStep].durationTicks;
|
||||
state->mode = theAnimationConfig.animationStep[state->currentAnimationStep].ledMode;
|
||||
switch (state->mode) {
|
||||
case LEDMode_on:
|
||||
state->currentColor = state->onColor;
|
||||
state->currentColor = state->ledDefinition->onColor; // state->onColor;
|
||||
break;
|
||||
case LEDMode_off:
|
||||
state->currentColor = offColor;
|
||||
@@ -79,35 +85,57 @@ static int verifyLedNumber(int n) {
|
||||
return n;
|
||||
}
|
||||
|
||||
void LEDstate_initDefault(int n, LEDMode defaultMode) {
|
||||
void LEDState_initDefault(int n, LEDMode defaultMode) {
|
||||
n = verifyLedNumber(n);
|
||||
LEDState *state = &theLEDStateEngine.ledState[n];
|
||||
state->index = n;
|
||||
state->mode = defaultMode;
|
||||
state->nextTick = 0;
|
||||
state->ledDefinition = LEDDefinition_get(n);
|
||||
}
|
||||
|
||||
void LEDstate_init(int n, LEDDefinition *ledDefinition) {
|
||||
n = verifyLedNumber(n);
|
||||
LEDstate_initDefault(n, LEDMode_off);
|
||||
LEDState *state = LEDStateEngine_getLedState(n);
|
||||
state->index = n;
|
||||
state->mode = defaultMode;
|
||||
state->currentTick = -10;
|
||||
state->nextTick = 0;
|
||||
state->ledDefinition = LEDDefinition_get(n);
|
||||
state->currentAnimationStep = AnimationConfig_getNextAnimationStepForLED(n, 0);
|
||||
}
|
||||
|
||||
void LEDState_init(int n, LEDDefinition *ledDefinition) {
|
||||
n = verifyLedNumber(n);
|
||||
LEDState_initDefault(n, LEDMode_off);
|
||||
LEDState *state = LEDStateEngine_getLedState(n);
|
||||
state->ledDefinition = ledDefinition;
|
||||
state->onColor = ledDefinition->onColor;
|
||||
// state->onColor = ledDefinition->onColor;
|
||||
state->onColor.name = ledDefinition->onColor.name;
|
||||
state->onColor.red = ledDefinition->onColor.red;
|
||||
state->onColor.green = ledDefinition->onColor.green;
|
||||
state->onColor.blue = ledDefinition->onColor.blue;
|
||||
}
|
||||
|
||||
|
||||
int LEDState_getLedRed(int ledNum) {
|
||||
ledNum = verifyLedNumber(ledNum);
|
||||
LEDState *state = LEDStateEngine_getLedState(ledNum);
|
||||
return state->currentColor.red;
|
||||
}
|
||||
int LEDState_getLedGreen(int ledNum) {
|
||||
ledNum = verifyLedNumber(ledNum);
|
||||
LEDState *state = LEDStateEngine_getLedState(ledNum);
|
||||
return state->currentColor.green;
|
||||
}
|
||||
int LEDState_getLedBlue(int ledNum) {
|
||||
ledNum = verifyLedNumber(ledNum);
|
||||
LEDState *state = LEDStateEngine_getLedState(ledNum);
|
||||
return state->currentColor.blue;
|
||||
}
|
||||
|
||||
char * LEDState_getLedColorName(int ledNum) {
|
||||
ledNum = verifyLedNumber(ledNum);
|
||||
LEDState *state = LEDStateEngine_getLedState(ledNum);
|
||||
return state->currentColor.name;
|
||||
}
|
||||
int LEDState_getCurrentTick(int ledNum) {
|
||||
ledNum = verifyLedNumber(ledNum);
|
||||
LEDState *state = LEDStateEngine_getLedState(ledNum);
|
||||
return state->currentTick;
|
||||
}
|
||||
int LEDState_getNextTick(int ledNum) {
|
||||
ledNum = verifyLedNumber(ledNum);
|
||||
LEDState *state = LEDStateEngine_getLedState(ledNum);
|
||||
return state->nextTick;
|
||||
}
|
||||
|
@@ -28,6 +28,8 @@ typedef struct LEDStateEngine_t {
|
||||
char *comment;
|
||||
} LEDStateEngine;
|
||||
|
||||
extern int getTicks(void);
|
||||
|
||||
/* LEDStateEngine */
|
||||
extern void LEDStateEngine_init(int numberOfLeds);
|
||||
extern void LEDStateEngine_addComment(char *comment);
|
||||
@@ -37,11 +39,14 @@ extern void LEDStateEngine_tick();
|
||||
extern uint16_t LEDStateEngine_getNumberOfLeds();
|
||||
|
||||
/* LEDState */
|
||||
extern void LEDstate_init(int n, LEDDefinition *ledDefinition);
|
||||
extern void LEDstate_initDefault(int n, LEDMode defaultMode);
|
||||
extern void LEDState_init(int n, LEDDefinition *ledDefinition);
|
||||
extern void LEDState_initDefault(int n, LEDMode defaultMode);
|
||||
extern void LEDState_tick(int ledNum);
|
||||
extern int LEDState_getLedRed(int ledNum);
|
||||
extern int LEDState_getLedGreen(int ledNum);
|
||||
extern int LEDState_getLedBlue(int ledNum);
|
||||
extern char * LEDState_getLedColorName(int ledNum);
|
||||
extern int LEDState_getCurrentTick(int ledNum);
|
||||
extern int LEDState_getNextTick(int ledNum);
|
||||
|
||||
#endif
|
||||
|
13
src/main.c
13
src/main.c
@@ -37,9 +37,9 @@ int get_led_gpio_pin(void) {
|
||||
LEDStateEngine ledStateEngine;
|
||||
static bool stateEngineRunning = false;
|
||||
|
||||
static void timer_cb() {
|
||||
static void stateEngineTickTimer() {
|
||||
if (stateEngineRunning) {
|
||||
LOG(LL_INFO, ("tick"));
|
||||
// LOG(LL_INFO, ("digg"));
|
||||
LEDStateEngine_tick();
|
||||
} else {
|
||||
LOG(LL_INFO, ("--paused--"));
|
||||
@@ -47,12 +47,13 @@ static void timer_cb() {
|
||||
}
|
||||
|
||||
static void delayed_boot() {
|
||||
mgos_set_timer(100, true, timer_cb, NULL); // every 0.1 second call timer_cb
|
||||
LOG(LL_INFO, ("*** Start timer for LED state engine ticks"));
|
||||
mgos_set_timer(100, true, stateEngineTickTimer, NULL); // every 0.1 second call timer_cb
|
||||
}
|
||||
|
||||
enum mgos_app_init_result mgos_app_init(void) {
|
||||
int numberOfLeds = 20; /*mgos_sys_config_get_led_count()*/
|
||||
bool loadDefaultData = true; /*mgos_sys_config_get_led_useDefaults()*/
|
||||
int numberOfLeds = mgos_sys_config_get_led_count();
|
||||
bool loadDefaultData = mgos_sys_config_get_led_useDefaults();
|
||||
|
||||
LEDColor_init(loadDefaultData);
|
||||
LEDDefinition_init(numberOfLeds, loadDefaultData);
|
||||
@@ -88,7 +89,9 @@ void addAnimationStep(int ledIndex, int ledMode, int duration) {
|
||||
|
||||
void startLEDStateEngine(void) {
|
||||
stateEngineRunning = true;
|
||||
LOG(LL_INFO, ("LEDStateEngine started"));
|
||||
}
|
||||
void pauseLEDStateEngine(void) {
|
||||
stateEngineRunning = false;
|
||||
LOG(LL_INFO, ("LEDStateEngine stopped"));
|
||||
}
|
||||
|
Reference in New Issue
Block a user