Unified warning activation conditions.

This commit is contained in:
mikeller 2018-11-03 17:37:18 +13:00
parent 99eab92200
commit 286f21150c
6 changed files with 17 additions and 8 deletions

View File

@ -370,7 +370,7 @@ void tryArm(void)
#ifdef USE_DSHOT #ifdef USE_DSHOT
if (currentTimeUs - getLastDshotBeaconCommandTimeUs() < DSHOT_BEACON_GUARD_DELAY_US) { if (currentTimeUs - getLastDshotBeaconCommandTimeUs() < DSHOT_BEACON_GUARD_DELAY_US) {
if (tryingToArm == ARMING_DELAYED_DISARMED) { if (tryingToArm == ARMING_DELAYED_DISARMED) {
if (isModeActivationConditionPresent(BOXFLIPOVERAFTERCRASH) && IS_RC_MODE_ACTIVE(BOXFLIPOVERAFTERCRASH)) { if (IS_RC_MODE_ACTIVE(BOXFLIPOVERAFTERCRASH)) {
tryingToArm = ARMING_DELAYED_CRASHFLIP; tryingToArm = ARMING_DELAYED_CRASHFLIP;
#ifdef USE_LAUNCH_CONTROL #ifdef USE_LAUNCH_CONTROL
} else if (canUseLaunchControl()) { } else if (canUseLaunchControl()) {
@ -784,7 +784,7 @@ bool processRx(timeUs_t currentTimeUs)
#ifdef USE_DSHOT #ifdef USE_DSHOT
/* Enable beep warning when the crash flip mode is active */ /* Enable beep warning when the crash flip mode is active */
if (isMotorProtocolDshot() && isModeActivationConditionPresent(BOXFLIPOVERAFTERCRASH) && IS_RC_MODE_ACTIVE(BOXFLIPOVERAFTERCRASH)) { if (isFlipOverAfterCrashWarningActive()) {
beeper(BEEPER_CRASH_FLIP_MODE); beeper(BEEPER_CRASH_FLIP_MODE);
} }
#endif #endif
@ -1093,6 +1093,11 @@ bool isFlipOverAfterCrashMode(void)
return flipOverAfterCrashMode; return flipOverAfterCrashMode;
} }
bool isFlipOverAfterCrashWarningActive(void)
{
return flipOverAfterCrashMode || IS_RC_MODE_ACTIVE(BOXFLIPOVERAFTERCRASH);
}
timeUs_t getLastDisarmTimeUs(void) timeUs_t getLastDisarmTimeUs(void)
{ {
return lastDisarmTimeUs; return lastDisarmTimeUs;

View File

@ -66,7 +66,9 @@ bool processRx(timeUs_t currentTimeUs);
void updateArmingStatus(void); void updateArmingStatus(void);
void taskMainPidLoop(timeUs_t currentTimeUs); void taskMainPidLoop(timeUs_t currentTimeUs);
bool isFlipOverAfterCrashMode(void); bool isFlipOverAfterCrashMode(void);
bool isFlipOverAfterCrashWarningActive(void);
void runawayTakeoffTemporaryDisable(uint8_t disableFlag); void runawayTakeoffTemporaryDisable(uint8_t disableFlag);
bool isAirmodeActivated(); bool isAirmodeActivated();

View File

@ -47,6 +47,7 @@
#include "drivers/vtx_common.h" #include "drivers/vtx_common.h"
#include "fc/config.h" #include "fc/config.h"
#include "fc/core.h"
#include "fc/rc_controls.h" #include "fc/rc_controls.h"
#include "fc/rc_modes.h" #include "fc/rc_modes.h"
#include "fc/runtime_config.h" #include "fc/runtime_config.h"
@ -548,7 +549,7 @@ static void applyLedWarningLayer(bool updateNow, timeUs_t *timer)
if (!ARMING_FLAG(ARMED) && isArmingDisabled()) { if (!ARMING_FLAG(ARMED) && isArmingDisabled()) {
warningFlags |= 1 << WARNING_ARMING_DISABLED; warningFlags |= 1 << WARNING_ARMING_DISABLED;
} }
if (IS_RC_MODE_ACTIVE(BOXFLIPOVERAFTERCRASH)) { if (isFlipOverAfterCrashWarningActive()) {
warningFlags |= 1 << WARNING_CRASH_FLIP_ACTIVE; warningFlags |= 1 << WARNING_CRASH_FLIP_ACTIVE;
} }
} }

View File

@ -483,7 +483,7 @@ static bool osdDrawSingleElement(uint8_t item)
{ {
const int angleR = attitude.values.roll / 10; const int angleR = attitude.values.roll / 10;
const int angleP = attitude.values.pitch / 10; // still gotta update all angleR and angleP pointers. const int angleP = attitude.values.pitch / 10; // still gotta update all angleR and angleP pointers.
if (IS_RC_MODE_ACTIVE(BOXFLIPOVERAFTERCRASH)) { if (isFlipOverAfterCrashMode()) {
if (angleP > 0 && ((angleR > 175 && angleR < 180) || (angleR > -180 && angleR < -175))) { if (angleP > 0 && ((angleR > 175 && angleR < 180) || (angleR > -180 && angleR < -175))) {
buff[0] = SYM_ARROW_SOUTH; buff[0] = SYM_ARROW_SOUTH;
} else if (angleP > 0 && angleR > 0 && angleR < 175) { } else if (angleP > 0 && angleR > 0 && angleR < 175) {
@ -946,7 +946,7 @@ static bool osdDrawSingleElement(uint8_t item)
#endif #endif
// Warn when in flip over after crash mode // Warn when in flip over after crash mode
if (osdWarnGetState(OSD_WARNING_CRASH_FLIP) && IS_RC_MODE_ACTIVE(BOXFLIPOVERAFTERCRASH)) { if (osdWarnGetState(OSD_WARNING_CRASH_FLIP) && isFlipOverAfterCrashWarningActive()) {
osdFormatMessage(buff, OSD_FORMAT_MESSAGE_BUFFER_SIZE, "CRASH FLIP"); osdFormatMessage(buff, OSD_FORMAT_MESSAGE_BUFFER_SIZE, "CRASH FLIP");
break; break;
} }

View File

@ -388,4 +388,6 @@ bool isArmingDisabled(void) { return false; }
uint8_t getRssiPercent(void) { return 0; } uint8_t getRssiPercent(void) { return 0; }
bool isFlipOverAfterCrashWarningActive(void) { return false; }
} }

View File

@ -1055,9 +1055,8 @@ extern "C" {
uint16_t getCoreTemperatureCelsius(void) { return simulationCoreTemperature; } uint16_t getCoreTemperatureCelsius(void) { return simulationCoreTemperature; }
bool isFlipOverAfterCrashMode(void) { bool isFlipOverAfterCrashMode(void) { return false; }
return false; bool isFlipOverAfterCrashWarningActive(void) { return false; }
}
float pidItermAccelerator(void) { return 1.0; } float pidItermAccelerator(void) { return 1.0; }
uint8_t getMotorCount(void){ return 4; } uint8_t getMotorCount(void){ return 4; }