From 545980c14a291ce9a87e3372748c0127756e34d5 Mon Sep 17 00:00:00 2001 From: Dominic Clifton Date: Thu, 18 Sep 2014 22:53:12 +0100 Subject: [PATCH] Move colors from ram to master config. Initialise colors only when config is reset to defaults. --- src/main/config/config.c | 4 +++- src/main/config/config_master.h | 3 +++ src/main/flight/altitudehold.c | 2 ++ src/main/io/ledstrip.c | 22 ++++++++-------------- src/main/io/ledstrip.h | 4 ++++ src/main/io/serial_cli.c | 1 + src/main/io/serial_msp.c | 3 ++- src/main/main.c | 4 ++-- src/main/mw.c | 1 + 9 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/main/config/config.c b/src/main/config/config.c index 1d51b693b..1ba0941ec 100755 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -23,6 +23,7 @@ #include "build_config.h" +#include "common/color.h" #include "common/axis.h" #include "flight/flight.h" @@ -98,7 +99,7 @@ void mixerUseConfigs(servoParam_t *servoConfToUse, flight3DConfig_t *flight3DCon master_t masterConfig; // master config struct with data independent from profiles profile_t *currentProfile; // profile config struct -static const uint8_t EEPROM_CONF_VERSION = 78; +static const uint8_t EEPROM_CONF_VERSION = 79; static void resetAccelerometerTrims(flightDynamicsTrims_t *accelerometerTrims) { @@ -376,6 +377,7 @@ static void resetConf(void) masterConfig.customMixer[i].throttle = 0.0f; #ifdef LED_STRIP + applyDefaultColors(masterConfig.colors, CONFIGURABLE_COLOR_COUNT); applyDefaultLedStripConfig(masterConfig.ledConfigs); #endif diff --git a/src/main/config/config_master.h b/src/main/config/config_master.h index da19a719c..8344934af 100644 --- a/src/main/config/config_master.h +++ b/src/main/config/config_master.h @@ -74,7 +74,10 @@ typedef struct master_t { telemetryConfig_t telemetryConfig; +#ifdef LED_STRIP ledConfig_t ledConfigs[MAX_LED_STRIP_LENGTH]; + hsvColor_t colors[CONFIGURABLE_COLOR_COUNT]; +#endif profile_t profile[3]; // 3 separate profiles uint8_t current_profile_index; // currently loaded profile diff --git a/src/main/flight/altitudehold.c b/src/main/flight/altitudehold.c index c3b02b962..526100e86 100644 --- a/src/main/flight/altitudehold.c +++ b/src/main/flight/altitudehold.c @@ -33,6 +33,8 @@ // FIXME remove dependency on currentProfile and masterConfig globals and clean up include file list. +#include "common/color.h" + #include "flight/flight.h" #include "sensors/sensors.h" #include "sensors/acceleration.h" diff --git a/src/main/io/ledstrip.c b/src/main/io/ledstrip.c index 58edbee56..509d2634b 100644 --- a/src/main/io/ledstrip.c +++ b/src/main/io/ledstrip.c @@ -54,6 +54,8 @@ static failsafe_t* failsafe; #error "Led strip length must match driver" #endif +static hsvColor_t *colors; + //#define USE_LED_ANIMATION // H S V @@ -89,10 +91,6 @@ const hsvColor_t hsv_deepPink = LED_DEEP_PINK; #define LED_DIRECTION_COUNT 6 -#define CONFIGURABLE_COLOR_COUNT 16 - -hsvColor_t colors[CONFIGURABLE_COLOR_COUNT]; - const hsvColor_t * const defaultColors[] = { &hsv_black, &hsv_white, @@ -110,8 +108,6 @@ const hsvColor_t * const defaultColors[] = { &hsv_deepPink }; - - typedef enum { COLOR_BLACK = 0, COLOR_WHITE, @@ -760,12 +756,11 @@ void updateLedStrip(void) ws2811UpdateStrip(); } -void applyDefaultColors() +void applyDefaultColors(hsvColor_t *colors, uint8_t colorCount) { - hsvColor_t *colorConfig = colors; - memset(colorConfig, 0, CONFIGURABLE_COLOR_COUNT * sizeof(colorConfig)); - for (uint8_t colorIndex = 0; colorIndex < CONFIGURABLE_COLOR_COUNT && colorIndex < (sizeof(defaultColors) / sizeof(defaultColors[0])); colorIndex++) { - *colorConfig++ = *defaultColors[colorIndex]; + memset(colors, 0, colorCount * sizeof(colors)); + for (uint8_t colorIndex = 0; colorIndex < colorCount && colorIndex < (sizeof(defaultColors) / sizeof(defaultColors[0])); colorIndex++) { + *colors++ = *defaultColors[colorIndex]; } } @@ -777,13 +772,12 @@ void applyDefaultLedStripConfig(ledConfig_t *ledConfigs) reevalulateLedConfig(); } -void ledStripInit(ledConfig_t *ledConfigsToUse, failsafe_t* failsafeToUse) +void ledStripInit(ledConfig_t *ledConfigsToUse, hsvColor_t *colorsToUse, failsafe_t* failsafeToUse) { ledConfigs = ledConfigsToUse; + colors = colorsToUse; failsafe = failsafeToUse; - applyDefaultColors(); - reevalulateLedConfig(); ledStripInitialised = true; } diff --git a/src/main/io/ledstrip.h b/src/main/io/ledstrip.h index 4425801b1..a01aa3bf5 100644 --- a/src/main/io/ledstrip.h +++ b/src/main/io/ledstrip.h @@ -53,7 +53,11 @@ typedef struct ledConfig_s { extern uint8_t ledCount; +#define CONFIGURABLE_COLOR_COUNT 16 + + bool parseLedStripConfig(uint8_t ledIndex, const char *config); void updateLedStrip(void); +void applyDefaultColors(hsvColor_t *colors, uint8_t colorCount); void applyDefaultLedStripConfig(ledConfig_t *ledConfig); void generateLedConfig(uint8_t ledIndex, char *ledConfigBuffer, size_t bufferSize); diff --git a/src/main/io/serial_cli.c b/src/main/io/serial_cli.c index 77cdf7c38..b93f2099a 100644 --- a/src/main/io/serial_cli.c +++ b/src/main/io/serial_cli.c @@ -28,6 +28,7 @@ #include "build_config.h" #include "common/axis.h" +#include "common/color.h" #include "common/typeconversion.h" #include "drivers/system.h" diff --git a/src/main/io/serial_msp.c b/src/main/io/serial_msp.c index c8e11134d..ef2f11ee7 100755 --- a/src/main/io/serial_msp.c +++ b/src/main/io/serial_msp.c @@ -25,8 +25,9 @@ #include "platform.h" -#include "common/maths.h" #include "common/axis.h" +#include "common/color.h" +#include "common/maths.h" #include "drivers/system.h" #include "drivers/accgyro.h" diff --git a/src/main/main.c b/src/main/main.c index d5feb7b5f..457dd9e5f 100755 --- a/src/main/main.c +++ b/src/main/main.c @@ -91,7 +91,7 @@ void navigationInit(gpsProfile_t *initialGpsProfile, pidProfile_t *pidProfile); bool sensorsAutodetect(sensorAlignmentConfig_t *sensorAlignmentConfig, uint16_t gyroLpf, uint8_t accHardwareToUse, int16_t magDeclinationFromConfig); void imuInit(void); void displayInit(void); -void ledStripInit(ledConfig_t *ledConfigsToUse, failsafe_t* failsafeToUse); +void ledStripInit(ledConfig_t *ledConfigsToUse, hsvColor_t *colorsToUse, failsafe_t* failsafeToUse); void loop(void); // FIXME bad naming - this appears to be for some new board that hasn't been made available yet. @@ -245,7 +245,7 @@ void init(void) #ifdef LED_STRIP if (feature(FEATURE_LED_STRIP)) { ws2811LedStripInit(); - ledStripInit(masterConfig.ledConfigs, failsafe); + ledStripInit(masterConfig.ledConfigs, masterConfig.colors, failsafe); } #endif diff --git a/src/main/mw.c b/src/main/mw.c index df311033e..8f7ca25e4 100755 --- a/src/main/mw.c +++ b/src/main/mw.c @@ -24,6 +24,7 @@ #include "common/maths.h" #include "common/axis.h" +#include "common/color.h" #include "drivers/accgyro.h" #include "drivers/light_led.h"