Refactoring completed: NeoPixel implementation in C instead of js

This commit is contained in:
Dirk Jahnke
2017-12-07 10:33:14 +01:00
parent b79d6dfd48
commit 94e5dce045
9 changed files with 228 additions and 125 deletions

View File

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