mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-15 12:25:20 +03:00
Allow led strip to show failsafe state. Closes #76.
This commit is contained in:
parent
e14347bf47
commit
a287f9247d
6 changed files with 388 additions and 349 deletions
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
*.md eol=crlf
|
||||
|
|
@ -89,7 +89,7 @@ Note: It is perfectly possible to configure an LED to have all directions `NESWU
|
|||
|
||||
`mmm` specifies the modes that should be applied an LED. Modes are:
|
||||
|
||||
* `B` - `B`attery warning.
|
||||
* `W` - `W`warnings.
|
||||
* `F` - `F`light mode & Orientation
|
||||
* `I` - `I`ndicator.
|
||||
* `A` - `A`rmed state.
|
||||
|
@ -97,10 +97,10 @@ Note: It is perfectly possible to configure an LED to have all directions `NESWU
|
|||
Example:
|
||||
|
||||
```
|
||||
led 0 0,15:SD:IAB
|
||||
led 1 15,0:ND:IAB
|
||||
led 2 0,0:ND:IAB
|
||||
led 3 0,15:SD:IAB
|
||||
led 0 0,15:SD:IAW
|
||||
led 1 15,0:ND:IAW
|
||||
led 2 0,0:ND:IAW
|
||||
led 3 0,15:SD:IAW
|
||||
```
|
||||
|
||||
to erase an led, and to mark the end of the chain, use `0,0::` as the second argument, like this:
|
||||
|
@ -112,9 +112,12 @@ led 4 0,0::
|
|||
|
||||
### Modes
|
||||
|
||||
#### Battery Warning
|
||||
#### Warning
|
||||
|
||||
This mode simply flashes the LED RED when the battery is low if battery monitoring is enabled.
|
||||
This mode simply uses the leds to flash when warnings occur.
|
||||
|
||||
* Battery warning flashes the LEDs between red and off when the battery is low if battery monitoring is enabled.
|
||||
* Failsafe warning flashes the LEDs between light blue and lime green when failsafe is active.
|
||||
|
||||
#### Flight Mode & Orientation
|
||||
|
||||
|
@ -151,17 +154,17 @@ Orientation is when viewed with the front of the aircraft facing away from you a
|
|||
The default configuration is as follows
|
||||
```
|
||||
led 0 2,2:ES:IA
|
||||
led 1 2,1:E:BF
|
||||
led 1 2,1:E:WF
|
||||
led 2 2,0:NE:IA
|
||||
led 3 1,0:N:F
|
||||
led 4 0,0:NW:IA
|
||||
led 5 0,1:W:BF
|
||||
led 5 0,1:W:WF
|
||||
led 6 0,2:SW:IA
|
||||
led 7 1,2:S:BF
|
||||
led 8 1,1:U:BF
|
||||
led 9 1,1:U:BF
|
||||
led 10 1,1:D:BF
|
||||
led 11 1,1:D:BF
|
||||
led 7 1,2:S:WF
|
||||
led 8 1,1:U:WF
|
||||
led 9 1,1:U:WF
|
||||
led 10 1,1:D:WF
|
||||
led 11 1,1:D:WF
|
||||
```
|
||||
|
||||
Which translates into the following positions:
|
||||
|
@ -189,21 +192,21 @@ This is the default so that if you don't want to place LEDs top and bottom in th
|
|||
|
||||
```
|
||||
15,15:SD:IA
|
||||
8,8:E:FB
|
||||
8,7:E:FB
|
||||
8,8:E:FW
|
||||
8,7:E:FW
|
||||
15,0:ND:IA
|
||||
7,7:N:FB
|
||||
8,7:N:FB
|
||||
7,7:N:FW
|
||||
8,7:N:FW
|
||||
0,0:ND:IA
|
||||
7,7:W:FB
|
||||
7,8:W:FB
|
||||
7,7:W:FW
|
||||
7,8:W:FW
|
||||
0,15:SD:IA
|
||||
7,8:S:FB
|
||||
8,8:S:FB
|
||||
7,7:D:FB
|
||||
8,7:D:FB
|
||||
7,7:U:FB
|
||||
8,7:U:FB
|
||||
7,8:S:FW
|
||||
8,8:S:FW
|
||||
7,7:D:FW
|
||||
8,7:D:FW
|
||||
7,7:U:FW
|
||||
8,7:U:FW
|
||||
```
|
||||
|
||||
Which translates into the following positions:
|
||||
|
@ -228,8 +231,8 @@ LEDs 15-16 should be placed facing up, in the middle
|
|||
### Exmple 28 LED config
|
||||
|
||||
```
|
||||
9,9:S:FB
|
||||
10,10:S:FB
|
||||
9,9:S:FW
|
||||
10,10:S:FW
|
||||
11,11:S:IA
|
||||
11,11:E:IA
|
||||
10,10:E:F
|
||||
|
@ -240,10 +243,10 @@ LEDs 15-16 should be placed facing up, in the middle
|
|||
12,2:N:IA
|
||||
11,1:N:F
|
||||
10,0:N:F
|
||||
7,0:N:FB
|
||||
6,0:N:FB
|
||||
5,0:N:FB
|
||||
4,0:N:FB
|
||||
7,0:N:FW
|
||||
6,0:N:FW
|
||||
5,0:N:FW
|
||||
4,0:N:FW
|
||||
2,0:N:F
|
||||
1,1:N:F
|
||||
0,2:N:IA
|
||||
|
@ -254,8 +257,8 @@ LEDs 15-16 should be placed facing up, in the middle
|
|||
1,10:W:F
|
||||
0,11:W:IA
|
||||
0,11:S:IA
|
||||
1,10:S:FB
|
||||
2,9:S:FB
|
||||
1,10:S:FW
|
||||
2,9:S:FW
|
||||
```
|
||||
|
||||
```
|
||||
|
|
|
@ -42,9 +42,12 @@
|
|||
#include "config/config.h"
|
||||
#include "rx/rx.h"
|
||||
#include "io/rc_controls.h"
|
||||
#include "flight/failsafe.h"
|
||||
|
||||
#include "io/ledstrip.h"
|
||||
|
||||
static failsafe_t* failsafe;
|
||||
|
||||
#if MAX_LED_STRIP_LENGTH > WS2811_LED_STRIP_LENGTH
|
||||
#error "Led strip length must match driver"
|
||||
#endif
|
||||
|
@ -74,6 +77,8 @@ const rgbColor24bpp_t red = { LED_RED };
|
|||
const rgbColor24bpp_t orange = { LED_ORANGE };
|
||||
const rgbColor24bpp_t green = { LED_GREEN };
|
||||
const rgbColor24bpp_t blue = { LED_BLUE };
|
||||
const rgbColor24bpp_t lightBlue = { LED_LIGHT_BLUE };
|
||||
const rgbColor24bpp_t limeGreen = { LED_LIME_GREEN };
|
||||
|
||||
|
||||
uint8_t ledGridWidth;
|
||||
|
@ -84,17 +89,17 @@ ledConfig_t *ledConfigs;
|
|||
|
||||
const ledConfig_t defaultLedStripConfig[] = {
|
||||
{ CALCULATE_LED_XY( 2, 2), LED_DIRECTION_SOUTH | LED_DIRECTION_EAST | LED_FUNCTION_INDICATOR | LED_FUNCTION_ARM_STATE },
|
||||
{ CALCULATE_LED_XY( 2, 1), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 2, 1), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 2, 0), LED_DIRECTION_NORTH | LED_DIRECTION_EAST | LED_FUNCTION_INDICATOR | LED_FUNCTION_ARM_STATE },
|
||||
{ CALCULATE_LED_XY( 1, 0), LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE },
|
||||
{ CALCULATE_LED_XY( 0, 0), LED_DIRECTION_NORTH | LED_DIRECTION_WEST | LED_FUNCTION_INDICATOR | LED_FUNCTION_ARM_STATE },
|
||||
{ CALCULATE_LED_XY( 0, 1), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 0, 1), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 0, 2), LED_DIRECTION_SOUTH | LED_DIRECTION_WEST | LED_FUNCTION_INDICATOR | LED_FUNCTION_ARM_STATE },
|
||||
{ CALCULATE_LED_XY( 1, 2), LED_DIRECTION_SOUTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 1, 1), LED_DIRECTION_UP | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 1, 1), LED_DIRECTION_UP | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 1, 1), LED_DIRECTION_DOWN | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 1, 1), LED_DIRECTION_DOWN | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 1, 2), LED_DIRECTION_SOUTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 1, 1), LED_DIRECTION_UP | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 1, 1), LED_DIRECTION_UP | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 1, 1), LED_DIRECTION_DOWN | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 1, 1), LED_DIRECTION_DOWN | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
};
|
||||
|
||||
|
||||
|
@ -130,11 +135,11 @@ static const uint8_t directionMappings[DIRECTION_COUNT] = {
|
|||
LED_DIRECTION_DOWN
|
||||
};
|
||||
|
||||
static const char functionCodes[] = { 'I', 'B', 'F', 'A' };
|
||||
static const char functionCodes[] = { 'I', 'W', 'F', 'A' };
|
||||
#define FUNCTION_COUNT (sizeof(functionCodes) / sizeof(functionCodes[0]))
|
||||
static const uint16_t functionMappings[FUNCTION_COUNT] = {
|
||||
LED_FUNCTION_INDICATOR,
|
||||
LED_FUNCTION_BATTERY,
|
||||
LED_FUNCTION_WARNING,
|
||||
LED_FUNCTION_FLIGHT_MODE,
|
||||
LED_FUNCTION_ARM_STATE
|
||||
};
|
||||
|
@ -310,7 +315,7 @@ void generateLedConfig(uint8_t ledIndex, char *ledConfigBuffer, size_t bufferSiz
|
|||
// timers
|
||||
uint32_t nextAnimationUpdateAt = 0;
|
||||
uint32_t nextIndicatorFlashAt = 0;
|
||||
uint32_t nextBatteryFlashAt = 0;
|
||||
uint32_t nextWarningFlashAt = 0;
|
||||
|
||||
#define LED_STRIP_20HZ ((1000 * 1000) / 20)
|
||||
#define LED_STRIP_10HZ ((1000 * 1000) / 10)
|
||||
|
@ -506,23 +511,45 @@ void applyLedModeLayer(void)
|
|||
}
|
||||
}
|
||||
|
||||
void applyLedLowBatteryLayer(uint8_t batteryFlashState)
|
||||
typedef enum {
|
||||
WARNING_FLAG_NONE = 0,
|
||||
WARNING_FLAG_LOW_BATTERY = (1 << 0),
|
||||
WARNING_FLAG_FAILSAFE = (1 << 1)
|
||||
} warningFlags_e;
|
||||
|
||||
void applyLedWarningLayer(uint8_t warningState, uint8_t warningFlags)
|
||||
{
|
||||
const ledConfig_t *ledConfig;
|
||||
static uint8_t warningFlashCounter = 0;
|
||||
|
||||
if (warningState) {
|
||||
warningFlashCounter++;
|
||||
warningFlashCounter = warningFlashCounter % 4;
|
||||
}
|
||||
|
||||
uint8_t ledIndex;
|
||||
for (ledIndex = 0; ledIndex < ledCount; ledIndex++) {
|
||||
|
||||
ledConfig = &ledConfigs[ledIndex];
|
||||
|
||||
if (!(ledConfig->flags & LED_FUNCTION_BATTERY)) {
|
||||
if (!(ledConfig->flags & LED_FUNCTION_WARNING)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (batteryFlashState == 0) {
|
||||
setLedColor(ledIndex, &red);
|
||||
if (warningState == 0) {
|
||||
if (warningFlashCounter == 0 && warningFlags & WARNING_FLAG_LOW_BATTERY) {
|
||||
setLedColor(ledIndex, &red);
|
||||
}
|
||||
if (warningFlashCounter > 1 && warningFlags & WARNING_FLAG_FAILSAFE) {
|
||||
setLedColor(ledIndex, &lightBlue);
|
||||
}
|
||||
} else {
|
||||
setLedColor(ledIndex, &black);
|
||||
if (warningFlashCounter == 0 && warningFlags & WARNING_FLAG_LOW_BATTERY) {
|
||||
setLedColor(ledIndex, &black);
|
||||
}
|
||||
if (warningFlashCounter > 1 && warningFlags & WARNING_FLAG_FAILSAFE) {
|
||||
setLedColor(ledIndex, &limeGreen);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -625,15 +652,15 @@ void updateLedStrip(void)
|
|||
|
||||
bool animationUpdateNow = (int32_t)(now - nextAnimationUpdateAt) >= 0L;
|
||||
bool indicatorFlashNow = (int32_t)(now - nextIndicatorFlashAt) >= 0L;
|
||||
bool batteryFlashNow = (int32_t)(now - nextBatteryFlashAt) >= 0L;
|
||||
bool warningFlashNow = (int32_t)(now - nextWarningFlashAt) >= 0L;
|
||||
|
||||
if (!(batteryFlashNow || indicatorFlashNow || animationUpdateNow)) {
|
||||
if (!(warningFlashNow || indicatorFlashNow || animationUpdateNow)) {
|
||||
return;
|
||||
}
|
||||
|
||||
static uint8_t indicatorFlashState = 0;
|
||||
static uint8_t batteryFlashState = 0;
|
||||
static bool batteryWarningEnabled = false;
|
||||
static uint8_t warningState = 0;
|
||||
static uint8_t warningFlags;
|
||||
|
||||
// LAYER 1
|
||||
|
||||
|
@ -641,21 +668,27 @@ void updateLedStrip(void)
|
|||
|
||||
// LAYER 2
|
||||
|
||||
if (batteryFlashNow) {
|
||||
nextBatteryFlashAt = now + LED_STRIP_10HZ;
|
||||
if (warningFlashNow) {
|
||||
nextWarningFlashAt = now + LED_STRIP_10HZ;
|
||||
|
||||
if (batteryFlashState == 0) {
|
||||
batteryFlashState = 1;
|
||||
if (warningState == 0) {
|
||||
warningState = 1;
|
||||
|
||||
warningFlags = WARNING_FLAG_NONE;
|
||||
if (feature(FEATURE_VBAT) && shouldSoundBatteryAlarm()) {
|
||||
warningFlags |= WARNING_FLAG_LOW_BATTERY;
|
||||
}
|
||||
if (failsafe->vTable->hasTimerElapsed()) {
|
||||
warningFlags |= WARNING_FLAG_FAILSAFE;
|
||||
}
|
||||
|
||||
batteryWarningEnabled = feature(FEATURE_VBAT) && shouldSoundBatteryAlarm();
|
||||
} else {
|
||||
batteryFlashState = 0;
|
||||
|
||||
warningState = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (batteryWarningEnabled) {
|
||||
applyLedLowBatteryLayer(batteryFlashState);
|
||||
if (warningFlags) {
|
||||
applyLedWarningLayer(warningState, warningFlags);
|
||||
}
|
||||
|
||||
// LAYER 3
|
||||
|
@ -694,9 +727,10 @@ void applyDefaultLedStripConfig(ledConfig_t *ledConfigs)
|
|||
reevalulateLedConfig();
|
||||
}
|
||||
|
||||
void ledStripInit(ledConfig_t *ledConfigsToUse)
|
||||
void ledStripInit(ledConfig_t *ledConfigsToUse, failsafe_t* failsafeToUse)
|
||||
{
|
||||
ledConfigs = ledConfigsToUse;
|
||||
failsafe = failsafeToUse;
|
||||
reevalulateLedConfig();
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -41,7 +41,7 @@ typedef enum {
|
|||
LED_DIRECTION_UP = (1 << 4),
|
||||
LED_DIRECTION_DOWN = (1 << 5),
|
||||
LED_FUNCTION_INDICATOR = (1 << 6),
|
||||
LED_FUNCTION_BATTERY = (1 << 7),
|
||||
LED_FUNCTION_WARNING = (1 << 7),
|
||||
LED_FUNCTION_FLIGHT_MODE = (1 << 8),
|
||||
LED_FUNCTION_ARM_STATE = (1 << 9)
|
||||
} ledFlag_e;
|
||||
|
|
|
@ -89,8 +89,7 @@ void gpsInit(serialConfig_t *serialConfig, gpsConfig_t *initialGpsConfig);
|
|||
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 ledStripInit(ledConfig_t *ledConfigs);
|
||||
|
||||
void ledStripInit(ledConfig_t *ledConfigsToUse, failsafe_t* failsafeToUse);
|
||||
void loop(void);
|
||||
|
||||
// FIXME bad naming - this appears to be for some new board that hasn't been made available yet.
|
||||
|
@ -238,7 +237,7 @@ void init(void)
|
|||
#ifdef LED_STRIP
|
||||
if (feature(FEATURE_LED_STRIP)) {
|
||||
ws2811LedStripInit();
|
||||
ledStripInit(masterConfig.ledConfigs);
|
||||
ledStripInit(masterConfig.ledConfigs, failsafe);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
* along with Cleanflight. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
|
@ -56,8 +57,8 @@ TEST(LedStripTest, parseLedStripConfig)
|
|||
|
||||
// given
|
||||
static const ledConfig_t expectedLedStripConfig[WS2811_LED_STRIP_LENGTH] = {
|
||||
{ CALCULATE_LED_XY( 9, 9), LED_DIRECTION_SOUTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY(10, 10), LED_DIRECTION_SOUTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 9, 9), LED_DIRECTION_SOUTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY(10, 10), LED_DIRECTION_SOUTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY(11, 11), LED_DIRECTION_SOUTH | LED_FUNCTION_INDICATOR | LED_FUNCTION_ARM_STATE },
|
||||
{ CALCULATE_LED_XY(11, 11), LED_DIRECTION_EAST | LED_FUNCTION_INDICATOR | LED_FUNCTION_ARM_STATE },
|
||||
{ CALCULATE_LED_XY(10, 10), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE },
|
||||
|
@ -70,10 +71,10 @@ TEST(LedStripTest, parseLedStripConfig)
|
|||
{ CALCULATE_LED_XY(11, 1), LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE },
|
||||
{ CALCULATE_LED_XY(10, 0), LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE },
|
||||
|
||||
{ CALCULATE_LED_XY( 7, 0), LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 6, 0), LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 5, 0), LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 4, 0), LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 7, 0), LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 6, 0), LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 5, 0), LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 4, 0), LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
|
||||
{ CALCULATE_LED_XY( 2, 0), LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE },
|
||||
{ CALCULATE_LED_XY( 1, 1), LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE },
|
||||
|
@ -86,8 +87,8 @@ TEST(LedStripTest, parseLedStripConfig)
|
|||
{ CALCULATE_LED_XY( 1, 10), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE },
|
||||
{ CALCULATE_LED_XY( 0, 11), LED_DIRECTION_WEST | LED_FUNCTION_INDICATOR | LED_FUNCTION_ARM_STATE },
|
||||
{ CALCULATE_LED_XY( 0, 11), LED_DIRECTION_SOUTH | LED_FUNCTION_INDICATOR | LED_FUNCTION_ARM_STATE },
|
||||
{ CALCULATE_LED_XY( 1, 10), LED_DIRECTION_SOUTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 2, 9), LED_DIRECTION_SOUTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 1, 10), LED_DIRECTION_SOUTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 2, 9), LED_DIRECTION_SOUTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
|
||||
{ 0, 0 },
|
||||
{ 0, 0 },
|
||||
|
@ -100,8 +101,8 @@ TEST(LedStripTest, parseLedStripConfig)
|
|||
// Spider quad
|
||||
|
||||
// right rear cluster
|
||||
"9,9:S:FB",
|
||||
"10,10:S:FB",
|
||||
"9,9:S:FW",
|
||||
"10,10:S:FW",
|
||||
"11,11:S:IA",
|
||||
"11,11:E:IA",
|
||||
"10,10:E:F",
|
||||
|
@ -116,10 +117,10 @@ TEST(LedStripTest, parseLedStripConfig)
|
|||
"10,0:N:F",
|
||||
|
||||
// center front cluster
|
||||
"7,0:N:FB",
|
||||
"6,0:N:FB",
|
||||
"5,0:N:FB",
|
||||
"4,0:N:FB",
|
||||
"7,0:N:FW",
|
||||
"6,0:N:FW",
|
||||
"5,0:N:FW",
|
||||
"4,0:N:FW",
|
||||
|
||||
// left front cluster
|
||||
"2,0:N:F",
|
||||
|
@ -134,8 +135,8 @@ TEST(LedStripTest, parseLedStripConfig)
|
|||
"1,10:W:F",
|
||||
"0,11:W:IA",
|
||||
"0,11:S:IA",
|
||||
"1,10:S:FB",
|
||||
"2,9:S:FB"
|
||||
"1,10:S:FW",
|
||||
"2,9:S:FW"
|
||||
};
|
||||
// and
|
||||
memset(&systemLedConfigs, 0, sizeof(systemLedConfigs));
|
||||
|
@ -182,13 +183,13 @@ TEST(LedStripTest, smallestGridWithCenter)
|
|||
// and
|
||||
static const ledConfig_t testLedConfigs[] = {
|
||||
{ CALCULATE_LED_XY( 2, 2), LED_DIRECTION_SOUTH | LED_DIRECTION_EAST | LED_FUNCTION_INDICATOR | LED_FUNCTION_ARM_STATE },
|
||||
{ CALCULATE_LED_XY( 2, 1), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 2, 1), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 2, 0), LED_DIRECTION_NORTH | LED_DIRECTION_EAST | LED_FUNCTION_INDICATOR | LED_FUNCTION_ARM_STATE },
|
||||
{ CALCULATE_LED_XY( 1, 0), LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 1, 0), LED_DIRECTION_NORTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 0, 0), LED_DIRECTION_NORTH | LED_DIRECTION_WEST | LED_FUNCTION_INDICATOR | LED_FUNCTION_ARM_STATE },
|
||||
{ CALCULATE_LED_XY( 0, 1), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 0, 1), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 0, 2), LED_DIRECTION_SOUTH | LED_DIRECTION_WEST | LED_FUNCTION_INDICATOR | LED_FUNCTION_ARM_STATE },
|
||||
{ CALCULATE_LED_XY( 1, 2), LED_DIRECTION_SOUTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY }
|
||||
{ CALCULATE_LED_XY( 1, 2), LED_DIRECTION_SOUTH | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING }
|
||||
};
|
||||
memcpy(&systemLedConfigs, &testLedConfigs, sizeof(testLedConfigs));
|
||||
|
||||
|
@ -250,9 +251,9 @@ TEST(LedStripTest, smallestGrid)
|
|||
{ CALCULATE_LED_XY( 0, 11), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE },
|
||||
{ CALCULATE_LED_XY( 0, 10), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE },
|
||||
{ CALCULATE_LED_XY( 0, 9), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE },
|
||||
{ CALCULATE_LED_XY( 0, 8), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 0, 7), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 0, 6), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 0, 8), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 0, 7), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 0, 6), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 0, 5), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE },
|
||||
{ CALCULATE_LED_XY( 0, 4), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE },
|
||||
{ CALCULATE_LED_XY( 0, 3), LED_DIRECTION_WEST | LED_FUNCTION_FLIGHT_MODE },
|
||||
|
@ -270,9 +271,9 @@ TEST(LedStripTest, smallestGrid)
|
|||
{ CALCULATE_LED_XY( 4, 3), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE },
|
||||
{ CALCULATE_LED_XY( 4, 4), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE },
|
||||
{ CALCULATE_LED_XY( 4, 5), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE },
|
||||
{ CALCULATE_LED_XY( 4, 6), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 4, 7), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 4, 8), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_BATTERY },
|
||||
{ CALCULATE_LED_XY( 4, 6), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 4, 7), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 4, 8), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE | LED_FUNCTION_WARNING },
|
||||
{ CALCULATE_LED_XY( 4, 9), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE },
|
||||
{ CALCULATE_LED_XY( 4, 10), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE },
|
||||
{ CALCULATE_LED_XY( 4, 11), LED_DIRECTION_EAST | LED_FUNCTION_FLIGHT_MODE },
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue