/* LEDState.c */ #include "LEDDefinition.h" #include "LEDState.h" #include "AnimationConfig.h" static LEDStateEngine theLEDStateEngine; static int ticks = 0; int getTicks(void) { return ticks; } void LEDStateEngine_setNumberOfLeds(int numberOfLeds) { if (numberOfLeds < 1 || numberOfLeds > MAX_LEDS) { LOG(LL_ERROR, ("Invalid number of LEDs %d", 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; icurrentTick = 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->ledDefinition->onColor; // state->onColor; break; case LEDMode_off: state->currentColor = offColor; break; default: state->currentColor = dimmedRedColor; break; } } // do animations, if necessary } LEDState *LEDStateEngine_getLedState(int n) { if (n>=0 && n= theLEDStateEngine.numberOfLeds) { LOG(LL_ERROR, ("*** Invalid LED number %d, set to zero", n)); n = 0; } return n; } void LEDState_initDefault(int n, LEDMode defaultMode) { n = verifyLedNumber(n); 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.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; }