Animation works with default animation

This commit is contained in:
2017-11-27 06:47:27 +01:00
parent e2209504da
commit 54a6ee1cd1
14 changed files with 216 additions and 918 deletions

View File

@@ -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;
}