Refactoring completed: NeoPixel implementation in C instead of js
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
/* LEDState.c */
|
||||
|
||||
#include "mgos_sys_config.h"
|
||||
|
||||
#include "LEDDefinition.h"
|
||||
#include "LEDState.h"
|
||||
#include "AnimationConfig.h"
|
||||
|
||||
#include "NeoPixel.h"
|
||||
|
||||
static LEDStateEngine theLEDStateEngine;
|
||||
static int ticks = 0;
|
||||
@@ -15,13 +17,16 @@ void LEDStateEngine_setNumberOfLeds(int numberOfLeds) {
|
||||
LOG(LL_ERROR, ("Invalid number of LEDs %d", numberOfLeds));
|
||||
numberOfLeds = MAX_LEDS;
|
||||
}
|
||||
NeoPixel_release();
|
||||
NeoPixel_create(theLEDStateEngine.pin, numberOfLeds, NeoPixel_colorOrder_RGB);
|
||||
theLEDStateEngine.numberOfLeds = numberOfLeds;
|
||||
LOG(LL_INFO, ("LEDStateEngine initialized: numLEDs=%d, MAX_LEDS=%d", numberOfLeds, MAX_LEDS));
|
||||
LOG(LL_INFO, ("LEDStateEngine initialized: numLEDs=%d, MAX_LEDS=%d, pin=%d", numberOfLeds, MAX_LEDS, theLEDStateEngine.pin));
|
||||
}
|
||||
|
||||
void LEDStateEngine_init(int numberOfLeds) {
|
||||
LEDStateEngine_setNumberOfLeds(numberOfLeds);
|
||||
void LEDStateEngine_init(int ledPin, int numberOfLeds) {
|
||||
theLEDStateEngine.comment = "";
|
||||
theLEDStateEngine.pin = ledPin;
|
||||
LEDStateEngine_setNumberOfLeds(numberOfLeds);
|
||||
for (int i=0; i<numberOfLeds; ++i) {
|
||||
LEDState_init(i, LEDDefinition_get(i));
|
||||
}
|
||||
@@ -42,6 +47,18 @@ void LEDStateEngine_tick() {
|
||||
for (int i=0; i<theLEDStateEngine.numberOfLeds; ++i) {
|
||||
LEDState_tick(i);
|
||||
}
|
||||
NeoPixel_show();
|
||||
}
|
||||
|
||||
static uint8_t adjustBrightness(uint8_t value) {
|
||||
return (value * mgos_sys_config_get_led_brightness()/100);
|
||||
}
|
||||
|
||||
static void updateLedDisplay(LEDState *state) {
|
||||
// strip.setPixel(i, adjustBrightness(LEDState_getRed(i)), adjustBrightness(LEDState_getGreen(i)), adjustBrightness(LEDState_getBlue(i)));
|
||||
// strip.setPixel(i, adjustBrightness(LEDState_getRed(i)), adjustBrightness(LEDState_getGreen(i)), adjustBrightness(LEDState_getBlue(i)));
|
||||
NeoPixel_set(state->index,
|
||||
adjustBrightness(state->currentColor.red), adjustBrightness(state->currentColor.green), adjustBrightness(state->currentColor.blue));
|
||||
}
|
||||
|
||||
void LEDState_tick(int ledNum) {
|
||||
@@ -65,6 +82,7 @@ void LEDState_tick(int ledNum) {
|
||||
state->currentColor = dimmedRedColor;
|
||||
break;
|
||||
}
|
||||
updateLedDisplay(state);
|
||||
}
|
||||
// do animations, if necessary
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user