1
0
Fork 0
mirror of https://github.com/iNavFlight/inav.git synced 2025-07-23 16:25:26 +03:00

Minor LED fixes, catchup with betaflight (#533)

This commit is contained in:
Martin Budden 2016-08-30 10:22:07 +01:00 committed by Konstantin Sharlaimov
parent 17bf4bdb49
commit 11c42fd4a2
3 changed files with 12 additions and 172 deletions

View file

@ -46,7 +46,6 @@
#include "fc/rc_controls.h"
#include "sensors/battery.h"
#include "sensors/sensors.h"
#include "sensors/boardalignment.h"
@ -90,7 +89,6 @@ static bool ledStripEnabled = true;
static void ledStripDisable(void);
//#define USE_LED_ANIMATION
//#define USE_LED_RING_DEFAULT_CONFIG
#define LED_STRIP_HZ(hz) ((int32_t)((1000 * 1000) / (hz)))
#define LED_STRIP_MS(ms) ((int32_t)(1000 * (ms)))
@ -146,73 +144,6 @@ STATIC_UNIT_TESTED uint8_t lowestXValueForEast;
STATIC_UNIT_TESTED ledCounts_t ledCounts;
// macro for initializer
#define LF(name) LED_FUNCTION_ ## name
#define LO(name) LED_FLAG_OVERLAY(LED_OVERLAY_ ## name)
#define LD(name) LED_FLAG_DIRECTION(LED_DIRECTION_ ## name)
#ifdef USE_LED_RING_DEFAULT_CONFIG
static const ledConfig_t defaultLedStripConfig[] = {
DEFINE_LED( 2, 2, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 2, 1, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 2, 0, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 1, 0, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 0, 0, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 0, 1, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 0, 2, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 1, 2, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 1, 1, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 1, 1, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 1, 1, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 1, 1, 3, 0, LF(THRUST_RING), 0, 0),
};
#else
static const ledConfig_t defaultLedStripConfig[] = {
DEFINE_LED(15, 15, 0, LD(SOUTH) | LD(EAST), LF(ARM_STATE), LO(INDICATOR), 0),
DEFINE_LED(15, 8, 0, LD(EAST) , LF(FLIGHT_MODE), LO(WARNING), 0),
DEFINE_LED(15, 7, 0, LD(EAST) , LF(FLIGHT_MODE), LO(WARNING), 0),
DEFINE_LED(15, 0, 0, LD(NORTH) | LD(EAST), LF(ARM_STATE) , LO(INDICATOR), 0),
DEFINE_LED( 8, 0, 0, LD(NORTH) , LF(FLIGHT_MODE), 0, 0),
DEFINE_LED( 7, 0, 0, LD(NORTH) , LF(FLIGHT_MODE), 0, 0),
DEFINE_LED( 0, 0, 0, LD(NORTH) | LD(WEST), LF(ARM_STATE) , LO(INDICATOR), 0),
DEFINE_LED( 0, 7, 0, LD(WEST) , LF(FLIGHT_MODE), LO(WARNING), 0),
DEFINE_LED( 0, 8, 0, LD(WEST) , LF(FLIGHT_MODE), LO(WARNING), 0),
DEFINE_LED( 0, 15, 0, LD(SOUTH) | LD(WEST), LF(ARM_STATE) , LO(INDICATOR), 0),
DEFINE_LED( 7, 15, 0, LD(SOUTH) , LF(FLIGHT_MODE), LO(WARNING), 0),
DEFINE_LED( 8, 15, 0, LD(SOUTH) , LF(FLIGHT_MODE), LO(WARNING), 0),
DEFINE_LED( 7, 7, 0, LD(UP) , LF(FLIGHT_MODE), LO(WARNING), 0),
DEFINE_LED( 8, 7, 0, LD(UP) , LF(FLIGHT_MODE), LO(WARNING), 0),
DEFINE_LED( 7, 8, 0, LD(DOWN) , LF(FLIGHT_MODE), LO(WARNING), 0),
DEFINE_LED( 8, 8, 0, LD(DOWN) , LF(FLIGHT_MODE), LO(WARNING), 0),
DEFINE_LED( 8, 9, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 9, 10, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED(10, 11, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED(10, 12, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 9, 13, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 8, 14, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 7, 14, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 6, 13, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 5, 12, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 5, 11, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 6, 10, 3, 0, LF(THRUST_RING), 0, 0),
DEFINE_LED( 7, 9, 3, 0, LF(THRUST_RING), 0, 0),
};
#endif
#undef LD
#undef LF
#undef LO
static const modeColorIndexes_t defaultModeColors[] = {
// NORTH EAST SOUTH WEST UP DOWN
[LED_MODE_ORIENTATION] = {{ COLOR_WHITE, COLOR_DARK_VIOLET, COLOR_RED, COLOR_DEEP_PINK, COLOR_BLUE, COLOR_ORANGE }},
@ -235,88 +166,8 @@ static const specialColorIndexes_t defaultSpecialColors[] = {
}}
};
static int scaledThrottle;
/*
#ifdef USE_LED_RING_DEFAULT_CONFIG
const ledConfig_t defaultLedStripConfig[] = {
{ CALCULATE_LED_XY( 2, 2), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 2, 1), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 2, 0), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 1, 0), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 0, 0), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 0, 1), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 0, 2), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 1, 2), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 1, 1), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 1, 1), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 1, 1), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 1, 1), 3, LED_FUNCTION_THRUST_RING},
};
#elif defined(USE_COLIBTI_RACE_LED_DEFAULT_CONFIG)
const ledConfig_t defaultLedStripConfig[] = {
{ CALCULATE_LED_XY( 0, 0), 6, LED_DIRECTION_WEST | LED_FUNCTION_WARNING | LED_FUNCTION_COLOR },
{ CALCULATE_LED_XY( 0, 1), 6, LED_DIRECTION_WEST | LED_FUNCTION_WARNING | LED_FUNCTION_COLOR },
{ CALCULATE_LED_XY( 0, 8), 6, LED_DIRECTION_WEST | LED_FUNCTION_WARNING | LED_FUNCTION_COLOR },
{ CALCULATE_LED_XY( 7, 15), 6, LED_FUNCTION_COLOR },
{ CALCULATE_LED_XY( 8, 15), 6, LED_FUNCTION_COLOR },
{ CALCULATE_LED_XY( 7, 14), 6, LED_FUNCTION_COLOR },
{ CALCULATE_LED_XY( 8, 14), 6, LED_FUNCTION_COLOR },
{ CALCULATE_LED_XY( 15, 8), 6, LED_DIRECTION_EAST | LED_FUNCTION_WARNING | LED_FUNCTION_COLOR },
{ CALCULATE_LED_XY( 15, 1), 6, LED_DIRECTION_EAST | LED_FUNCTION_WARNING | LED_FUNCTION_COLOR },
{ CALCULATE_LED_XY( 15, 0), 6, LED_DIRECTION_EAST | LED_FUNCTION_WARNING | LED_FUNCTION_COLOR },
};
#else
const ledConfig_t defaultLedStripConfig[] = {
{ CALCULATE_LED_XY(15, 15), 0, LED_DIRECTION_SOUTH | LED_DIRECTION_EAST | LED_FUNCTION_INDICATOR | LED_FUNCTION_ARM_STATE },
{ CALCULATE_LED_XY(15, 8), 0, LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
{ CALCULATE_LED_XY(15, 7), 0, LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
{ CALCULATE_LED_XY(15, 0), 0, LED_DIRECTION_NORTH | LED_DIRECTION_EAST | LED_FUNCTION_INDICATOR | LED_FUNCTION_ARM_STATE },
{ CALCULATE_LED_XY( 8, 0), 0, LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE },
{ CALCULATE_LED_XY( 7, 0), 0, LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE },
{ CALCULATE_LED_XY( 0, 0), 0, LED_DIRECTION_NORTH | LED_DIRECTION_WEST | LED_FUNCTION_INDICATOR | LED_FUNCTION_ARM_STATE },
{ CALCULATE_LED_XY( 0, 7), 0, LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
{ CALCULATE_LED_XY( 0, 8), 0, LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
{ CALCULATE_LED_XY( 0, 15), 0, LED_DIRECTION_SOUTH | LED_DIRECTION_WEST | LED_FUNCTION_INDICATOR | LED_FUNCTION_ARM_STATE },
{ CALCULATE_LED_XY( 7, 15), 0, LED_DIRECTION_SOUTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
{ CALCULATE_LED_XY( 8, 15), 0, LED_DIRECTION_SOUTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
{ CALCULATE_LED_XY( 7, 7), 0, LED_DIRECTION_UP | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
{ CALCULATE_LED_XY( 8, 7), 0, LED_DIRECTION_UP | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
{ CALCULATE_LED_XY( 7, 8), 0, LED_DIRECTION_DOWN | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
{ CALCULATE_LED_XY( 8, 8), 0, LED_DIRECTION_DOWN | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
{ CALCULATE_LED_XY( 8, 9), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 9, 10), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY(10, 11), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY(10, 12), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 9, 13), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 8, 14), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 7, 14), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 6, 13), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 5, 12), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 5, 11), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 6, 10), 3, LED_FUNCTION_THRUST_RING},
{ CALCULATE_LED_XY( 7, 9), 3, LED_FUNCTION_THRUST_RING},
};
#endif
*/
static void updateLedRingCounts(void);
STATIC_UNIT_TESTED void determineLedStripDimensions(void)
@ -336,10 +187,10 @@ STATIC_UNIT_TESTED void determineLedStripDimensions(void)
STATIC_UNIT_TESTED void determineOrientationLimits(void)
{
highestYValueForNorth = (ledGridHeight / 2) - 1;
lowestYValueForSouth = ((ledGridHeight + 1) / 2);
highestXValueForWest = (ledGridWidth / 2) - 1;
lowestXValueForEast = ((ledGridWidth + 1) / 2);
highestYValueForNorth = MIN((ledGridHeight / 2) - 1, 0);
lowestYValueForSouth = (ledGridHeight + 1) / 2;
highestXValueForWest = MIN((ledGridWidth / 2) - 1, 0);
lowestXValueForEast = (ledGridWidth + 1) / 2;
}
STATIC_UNIT_TESTED void updateLedCount(void)
@ -473,13 +324,11 @@ bool parseLedStripConfig(int ledIndex, const char *config)
return true;
}
void generateLedConfig(int ledIndex, char *ledConfigBuffer, size_t bufferSize)
void generateLedConfig(ledConfig_t *ledConfig, char *ledConfigBuffer, size_t bufferSize)
{
char directions[LED_DIRECTION_COUNT + 1];
char baseFunctionOverlays[LED_OVERLAY_COUNT + 2];
ledConfig_t *ledConfig = &masterConfig.ledConfigs[ledIndex];
memset(ledConfigBuffer, 0, bufferSize);
char *dptr = directions;
@ -504,7 +353,6 @@ void generateLedConfig(int ledIndex, char *ledConfigBuffer, size_t bufferSize)
sprintf(ledConfigBuffer, "%u,%u:%s:%s:%u", ledGetX(ledConfig), ledGetY(ledConfig), directions, baseFunctionOverlays, ledGetColor(ledConfig));
}
typedef enum {
// the ordering is important, see below how NSEW is mapped to NE/SE/NW/SW
QUADRANT_NORTH = 1 << 0,
@ -578,7 +426,6 @@ static hsvColor_t* getDirectionalModeColor(const int ledIndex, const modeColorIn
return NULL;
}
// map flight mode to led mode, in order of priority
// flightMode == 0 is always active
static const struct {
@ -614,7 +461,11 @@ static void applyLedFixedLayers()
case LED_FUNCTION_FLIGHT_MODE:
for (unsigned i = 0; i < ARRAYLEN(flightModeToLed); i++)
if (!flightModeToLed[i].flightMode || FLIGHT_MODE(flightModeToLed[i].flightMode)) {
color = *getDirectionalModeColor(ledIndex, &masterConfig.modeColors[flightModeToLed[i].ledMode]);
hsvColor_t *directionalColor = getDirectionalModeColor(ledIndex, &masterConfig.modeColors[flightModeToLed[i].ledMode]);
if (directionalColor) {
color = *directionalColor;
}
break; // stop on first match
}
break;
@ -663,7 +514,6 @@ typedef enum {
WARNING_FAILSAFE,
} warningFlags_e;
static void applyLedWarningLayer(bool updateNow, uint32_t *timer)
{
static uint8_t warningFlashCounter = 0;
@ -811,7 +661,6 @@ static void applyLedGpsLayer(bool updateNow, uint32_t *timer)
#endif
#define INDICATOR_DEADBAND 25
static void applyLedIndicatorLayer(bool updateNow, uint32_t *timer)
@ -999,9 +848,7 @@ static void applyLedBlinkLayer(bool updateNow, uint32_t *timer)
}
}
#ifdef USE_LED_ANIMATION
static void applyLedAnimationLayer(bool updateNow, uint32_t *timer)
{
static uint8_t frameCounter = 0;
@ -1052,7 +899,6 @@ typedef enum {
static uint32_t timerVal[timTimerCount];
// function to apply layer.
// function must replan self using timer pointer
// when updateNow is true (timer triggered), state must be updated first,
@ -1060,7 +906,6 @@ static uint32_t timerVal[timTimerCount];
// may modify LED state.
typedef void applyLayerFn_timed(bool updateNow, uint32_t *timer);
static applyLayerFn_timed* layerTable[] = {
[timBlink] = &applyLedBlinkLayer,
[timLarson] = &applyLarsonScannerLayer,
@ -1223,9 +1068,6 @@ void pgResetFn_specialColors(specialColorIndexes_t *instance)
void applyDefaultLedStripConfig(ledConfig_t *ledConfigs)
{
memset(ledConfigs, 0, LED_MAX_STRIP_LENGTH * sizeof(ledConfig_t));
memcpy(ledConfigs, &defaultLedStripConfig, sizeof(defaultLedStripConfig));
reevaluateLedConfig();
}
void applyDefaultColors(hsvColor_t *colors)
@ -1247,8 +1089,6 @@ void applyDefaultSpecialColors(specialColorIndexes_t *specialColors)
memcpy_fn(specialColors, &defaultSpecialColors, sizeof(defaultSpecialColors));
}
void ledStripInit(ledConfig_t *ledConfigsToUse, hsvColor_t *colorsToUse, modeColorIndexes_t *modeColorsToUse, specialColorIndexes_t *specialColorsToUse)
{
ledConfigs = ledConfigsToUse;

View file

@ -160,7 +160,7 @@ PG_DECLARE(specialColorIndexes_t, specialColors);
bool parseColor(int index, const char *colorConfig);
bool parseLedStripConfig(int ledIndex, const char *config);
void generateLedConfig(int ledIndex, char *ledConfigBuffer, size_t bufferSize);
void generateLedConfig(ledConfig_t *ledConfig, char *ledConfigBuffer, size_t bufferSize);
void reevaluateLedConfig(void);
void ledStripInit(ledConfig_t *ledConfigsToUse, hsvColor_t *colorsToUse, modeColorIndexes_t *modeColorsToUse, specialColorIndexes_t *specialColorsToUse);

View file

@ -1375,7 +1375,7 @@ static void cliLed(char *cmdline)
if (isEmpty(cmdline)) {
for (i = 0; i < LED_MAX_STRIP_LENGTH; i++) {
generateLedConfig(i, ledConfigBuffer, sizeof(ledConfigBuffer));
generateLedConfig(&masterConfig.ledConfigs[i], ledConfigBuffer, sizeof(ledConfigBuffer));
cliPrintf("led %u %s\r\n", i, ledConfigBuffer);
}
} else {