Move colors from ram to master config. Initialise colors only when

config is reset to defaults.
This commit is contained in:
Dominic Clifton 2014-09-18 22:53:12 +01:00
parent 79ea1ac088
commit 545980c14a
9 changed files with 26 additions and 18 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -28,6 +28,7 @@
#include "build_config.h"
#include "common/axis.h"
#include "common/color.h"
#include "common/typeconversion.h"
#include "drivers/system.h"

View File

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

View File

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

View File

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