1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-15 04:15:44 +03:00

Merge pull request #9315 from hydra/bf-log-disarm-reason

Log disarm reason.
This commit is contained in:
Michael Keller 2020-01-17 19:30:37 +13:00 committed by GitHub
commit 69a3a4ac08
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 60 additions and 23 deletions

View file

@ -1459,6 +1459,9 @@ void blackboxLogEvent(FlightLogEvent event, flightLogEventData_t *data)
blackboxWriteUnsignedVB(data->flightMode.flags); blackboxWriteUnsignedVB(data->flightMode.flags);
blackboxWriteUnsignedVB(data->flightMode.lastFlags); blackboxWriteUnsignedVB(data->flightMode.lastFlags);
break; break;
case FLIGHT_LOG_EVENT_DISARM:
blackboxWriteUnsignedVB(data->disarm.reason);
break;
case FLIGHT_LOG_EVENT_INFLIGHT_ADJUSTMENT: case FLIGHT_LOG_EVENT_INFLIGHT_ADJUSTMENT:
if (data->inflightAdjustment.floatFlag) { if (data->inflightAdjustment.floatFlag) {
blackboxWrite(data->inflightAdjustment.adjustmentFunction + FLIGHT_LOG_EVENT_INFLIGHT_ADJUSTMENT_FUNCTION_FLOAT_VALUE_FLAG); blackboxWrite(data->inflightAdjustment.adjustmentFunction + FLIGHT_LOG_EVENT_INFLIGHT_ADJUSTMENT_FUNCTION_FLOAT_VALUE_FLAG);
@ -1476,6 +1479,8 @@ void blackboxLogEvent(FlightLogEvent event, flightLogEventData_t *data)
blackboxWriteString("End of log"); blackboxWriteString("End of log");
blackboxWrite(0); blackboxWrite(0);
break; break;
default:
break;
} }
} }

View file

@ -40,8 +40,12 @@ typedef enum BlackboxMode {
typedef enum FlightLogEvent { typedef enum FlightLogEvent {
FLIGHT_LOG_EVENT_SYNC_BEEP = 0, FLIGHT_LOG_EVENT_SYNC_BEEP = 0,
FLIGHT_LOG_EVENT_AUTOTUNE_CYCLE_START = 10, // UNUSED
FLIGHT_LOG_EVENT_AUTOTUNE_CYCLE_RESULT = 11, // UNUSED
FLIGHT_LOG_EVENT_AUTOTUNE_TARGETS = 12, // UNUSED
FLIGHT_LOG_EVENT_INFLIGHT_ADJUSTMENT = 13, FLIGHT_LOG_EVENT_INFLIGHT_ADJUSTMENT = 13,
FLIGHT_LOG_EVENT_LOGGING_RESUME = 14, FLIGHT_LOG_EVENT_LOGGING_RESUME = 14,
FLIGHT_LOG_EVENT_DISARM = 15,
FLIGHT_LOG_EVENT_FLIGHTMODE = 30, // Add new event type for flight mode status. FLIGHT_LOG_EVENT_FLIGHTMODE = 30, // Add new event type for flight mode status.
FLIGHT_LOG_EVENT_LOG_END = 255 FLIGHT_LOG_EVENT_LOG_END = 255
} FlightLogEvent; } FlightLogEvent;

View file

@ -113,6 +113,10 @@ typedef struct flightLogEvent_syncBeep_s {
uint32_t time; uint32_t time;
} flightLogEvent_syncBeep_t; } flightLogEvent_syncBeep_t;
typedef struct flightLogEvent_disarm_s {
uint32_t reason;
} flightLogEvent_disarm_t;
typedef struct flightLogEvent_flightMode_s { // New Event Data type typedef struct flightLogEvent_flightMode_s { // New Event Data type
uint32_t flags; uint32_t flags;
uint32_t lastFlags; uint32_t lastFlags;
@ -135,6 +139,7 @@ typedef struct flightLogEvent_loggingResume_s {
typedef union flightLogEventData_u { typedef union flightLogEventData_u {
flightLogEvent_syncBeep_t syncBeep; flightLogEvent_syncBeep_t syncBeep;
flightLogEvent_flightMode_t flightMode; // New event data flightLogEvent_flightMode_t flightMode; // New event data
flightLogEvent_disarm_t disarm;
flightLogEvent_inflightAdjustment_t inflightAdjustment; flightLogEvent_inflightAdjustment_t inflightAdjustment;
flightLogEvent_loggingResume_t loggingResume; flightLogEvent_loggingResume_t loggingResume;
} flightLogEventData_t; } flightLogEventData_t;

View file

@ -28,6 +28,7 @@
#include "build/debug.h" #include "build/debug.h"
#include "blackbox/blackbox.h" #include "blackbox/blackbox.h"
#include "blackbox/blackbox_fielddefs.h"
#include "cli/cli.h" #include "cli/cli.h"
@ -422,7 +423,7 @@ void updateArmingStatus(void)
} }
} }
void disarm(void) void disarm(flightLogDisarmReason_e reason)
{ {
if (ARMING_FLAG(ARMED)) { if (ARMING_FLAG(ARMED)) {
ENABLE_ARMING_FLAG(WAS_EVER_ARMED); ENABLE_ARMING_FLAG(WAS_EVER_ARMED);
@ -436,6 +437,10 @@ void disarm(void)
#endif #endif
#ifdef USE_BLACKBOX #ifdef USE_BLACKBOX
flightLogEvent_disarm_t eventData;
eventData.reason = reason;
blackboxLogEvent(FLIGHT_LOG_EVENT_DISARM, (flightLogEventData_t*)&eventData);
if (blackboxConfig()->device && blackboxConfig()->mode != BLACKBOX_MODE_ALWAYS_ON) { // Close the log upon disarm except when logging mode is ALWAYS ON if (blackboxConfig()->device && blackboxConfig()->mode != BLACKBOX_MODE_ALWAYS_ON) { // Close the log upon disarm except when logging mode is ALWAYS ON
blackboxFinish(); blackboxFinish();
} }
@ -739,7 +744,7 @@ bool processRx(timeUs_t currentTimeUs)
// in 3D mode, we need to be able to disarm by switch at any time // in 3D mode, we need to be able to disarm by switch at any time
if (featureIsEnabled(FEATURE_3D)) { if (featureIsEnabled(FEATURE_3D)) {
if (!IS_RC_MODE_ACTIVE(BOXARM)) if (!IS_RC_MODE_ACTIVE(BOXARM))
disarm(); disarm(DISARM_REASON_SWITCH);
} }
updateRSSI(currentTimeUs); updateRSSI(currentTimeUs);
@ -881,7 +886,7 @@ bool processRx(timeUs_t currentTimeUs)
if (throttleStatus == THROTTLE_LOW) { if (throttleStatus == THROTTLE_LOW) {
if ((autoDisarmDelayUs > 0) && (currentTimeUs > disarmAt)) { if ((autoDisarmDelayUs > 0) && (currentTimeUs > disarmAt)) {
// auto-disarm configured and delay is over // auto-disarm configured and delay is over
disarm(); disarm(DISARM_REASON_THROTTLE_TIMEOUT);
armedBeeperOn = false; armedBeeperOn = false;
} else { } else {
// still armed; do warning beeps while armed // still armed; do warning beeps while armed
@ -1093,7 +1098,7 @@ static FAST_CODE void subTaskPidController(timeUs_t currentTimeUs)
runawayTakeoffTriggerUs = currentTimeUs + RUNAWAY_TAKEOFF_ACTIVATE_DELAY; runawayTakeoffTriggerUs = currentTimeUs + RUNAWAY_TAKEOFF_ACTIVATE_DELAY;
} else if (currentTimeUs > runawayTakeoffTriggerUs) { } else if (currentTimeUs > runawayTakeoffTriggerUs) {
setArmingDisabled(ARMING_DISABLED_RUNAWAY_TAKEOFF); setArmingDisabled(ARMING_DISABLED_RUNAWAY_TAKEOFF);
disarm(); disarm(DISARM_REASON_RUNAWAY_TAKEOFF);
} }
} else { } else {
runawayTakeoffTriggerUs = 0; runawayTakeoffTriggerUs = 0;

View file

@ -47,6 +47,21 @@ typedef enum {
LAUNCH_CONTROL_MODE_COUNT // must be the last element LAUNCH_CONTROL_MODE_COUNT // must be the last element
} launchControlMode_e; } launchControlMode_e;
typedef enum {
DISARM_REASON_ARMING_DISABLED = 0,
DISARM_REASON_FAILSAFE = 1,
DISARM_REASON_THROTTLE_TIMEOUT = 2,
DISARM_REASON_STICKS = 3,
DISARM_REASON_SWITCH = 4,
DISARM_REASON_CRASH_PROTECTION = 5,
DISARM_REASON_RUNAWAY_TAKEOFF = 6,
DISARM_REASON_GPS_RESCUE = 7,
DISARM_REASON_SERIAL_COMMAND = 8,
#ifdef UNIT_TEST
DISARM_REASON_SYSTEM = 255,
#endif
} flightLogDisarmReason_e;
#ifdef USE_LAUNCH_CONTROL #ifdef USE_LAUNCH_CONTROL
#define LAUNCH_CONTROL_THROTTLE_TRIGGER_MAX 90 #define LAUNCH_CONTROL_THROTTLE_TRIGGER_MAX 90
extern const char * const osdLaunchControlModeNames[LAUNCH_CONTROL_MODE_COUNT]; extern const char * const osdLaunchControlModeNames[LAUNCH_CONTROL_MODE_COUNT];
@ -59,7 +74,7 @@ void handleInflightCalibrationStickPosition(void);
void resetArmingDisabled(void); void resetArmingDisabled(void);
void disarm(void); void disarm(flightLogDisarmReason_e reason);
void tryArm(void); void tryArm(void);
bool processRx(timeUs_t currentTimeUs); bool processRx(timeUs_t currentTimeUs);

View file

@ -179,7 +179,7 @@ void processRcStickPositions()
if (ARMING_FLAG(ARMED) && rxIsReceivingSignal() && !failsafeIsActive() ) { if (ARMING_FLAG(ARMED) && rxIsReceivingSignal() && !failsafeIsActive() ) {
rcDisarmTicks++; rcDisarmTicks++;
if (rcDisarmTicks > 3) { if (rcDisarmTicks > 3) {
disarm(); disarm(DISARM_REASON_SWITCH);
} }
} }
} }
@ -189,7 +189,7 @@ void processRcStickPositions()
// Disarm on throttle down + yaw // Disarm on throttle down + yaw
resetTryingToArm(); resetTryingToArm();
if (ARMING_FLAG(ARMED)) if (ARMING_FLAG(ARMED))
disarm(); disarm(DISARM_REASON_STICKS);
else { else {
beeper(BEEPER_DISARM_REPEAT); // sound tone while stick held beeper(BEEPER_DISARM_REPEAT); // sound tone while stick held
repeatAfter(STICK_AUTOREPEAT_MS); // disarm tone will repeat repeatAfter(STICK_AUTOREPEAT_MS); // disarm tone will repeat

View file

@ -320,7 +320,7 @@ void failsafeUpdateState(void)
#endif #endif
case FAILSAFE_LANDED: case FAILSAFE_LANDED:
setArmingDisabled(ARMING_DISABLED_FAILSAFE); // To prevent accidently rearming by an intermittent rx link setArmingDisabled(ARMING_DISABLED_FAILSAFE); // To prevent accidently rearming by an intermittent rx link
disarm(); disarm(DISARM_REASON_FAILSAFE);
failsafeState.receivingRxDataPeriod = millis() + failsafeState.receivingRxDataPeriodPreset; // set required period of valid rxData failsafeState.receivingRxDataPeriod = millis() + failsafeState.receivingRxDataPeriodPreset; // set required period of valid rxData
failsafeState.phase = FAILSAFE_RX_LOSS_MONITORING; failsafeState.phase = FAILSAFE_RX_LOSS_MONITORING;
reprocessState = true; reprocessState = true;

View file

@ -578,7 +578,7 @@ void updateGPSRescueState(void)
if (!STATE(GPS_FIX_HOME)) { if (!STATE(GPS_FIX_HOME)) {
setArmingDisabled(ARMING_DISABLED_ARM_SWITCH); setArmingDisabled(ARMING_DISABLED_ARM_SWITCH);
disarm(); disarm(DISARM_REASON_GPS_RESCUE);
} }
// Minimum distance detection. // Minimum distance detection.
@ -588,7 +588,7 @@ void updateGPSRescueState(void)
// Never allow rescue mode to engage as a failsafe when too close. // Never allow rescue mode to engage as a failsafe when too close.
if (rescueState.isFailsafe) { if (rescueState.isFailsafe) {
setArmingDisabled(ARMING_DISABLED_ARM_SWITCH); setArmingDisabled(ARMING_DISABLED_ARM_SWITCH);
disarm(); disarm(DISARM_REASON_GPS_RESCUE);
} }
// When not in failsafe mode: leave it up to the sanity check setting. // When not in failsafe mode: leave it up to the sanity check setting.
@ -677,7 +677,7 @@ void updateGPSRescueState(void)
if (rescueState.sensor.accMagnitude > magnitudeTrigger) { if (rescueState.sensor.accMagnitude > magnitudeTrigger) {
setArmingDisabled(ARMING_DISABLED_ARM_SWITCH); setArmingDisabled(ARMING_DISABLED_ARM_SWITCH);
disarm(); disarm(DISARM_REASON_GPS_RESCUE);
rescueState.phase = RESCUE_COMPLETE; rescueState.phase = RESCUE_COMPLETE;
} }
@ -692,7 +692,7 @@ void updateGPSRescueState(void)
break; break;
case RESCUE_ABORT: case RESCUE_ABORT:
setArmingDisabled(ARMING_DISABLED_ARM_SWITCH); setArmingDisabled(ARMING_DISABLED_ARM_SWITCH);
disarm(); disarm(DISARM_REASON_GPS_RESCUE);
rescueStop(); rescueStop();
break; break;
default: default:

View file

@ -936,7 +936,7 @@ static void detectAndSetCrashRecovery(
&& fabsf(getSetpointRate(axis)) < crashSetpointThreshold) { && fabsf(getSetpointRate(axis)) < crashSetpointThreshold) {
if (crash_recovery == PID_CRASH_RECOVERY_DISARM) { if (crash_recovery == PID_CRASH_RECOVERY_DISARM) {
setArmingDisabled(ARMING_DISABLED_CRASH_DETECTED); setArmingDisabled(ARMING_DISABLED_CRASH_DETECTED);
disarm(); disarm(DISARM_REASON_CRASH_PROTECTION);
} else { } else {
inCrashRecoveryMode = true; inCrashRecoveryMode = true;
crashDetectedAtUs = currentTimeUs; crashDetectedAtUs = currentTimeUs;

View file

@ -2854,7 +2854,7 @@ static mspResult_e mspProcessInCommand(mspDescriptor_t srcDesc, uint8_t cmdMSP,
mspArmingDisableByDescriptor(srcDesc); mspArmingDisableByDescriptor(srcDesc);
setArmingDisabled(ARMING_DISABLED_MSP); setArmingDisabled(ARMING_DISABLED_MSP);
if (ARMING_FLAG(ARMED)) { if (ARMING_FLAG(ARMED)) {
disarm(); disarm(DISARM_REASON_ARMING_DISABLED);
} }
#ifdef USE_RUNAWAY_TAKEOFF #ifdef USE_RUNAWAY_TAKEOFF
runawayTakeoffTemporaryDisable(false); runawayTakeoffTemporaryDisable(false);

View file

@ -614,7 +614,7 @@ static bool bstSlaveProcessWriteCommand(uint8_t bstWriteCommand)
break; break;
case BST_DISARM: case BST_DISARM:
if (ARMING_FLAG(ARMED)) { if (ARMING_FLAG(ARMED)) {
disarm(); disarm(DISARM_REASON_SERIAL_COMMAND);
} }
setArmingDisabled(ARMING_DISABLED_BST); setArmingDisabled(ARMING_DISABLED_BST);
break; break;

View file

@ -676,7 +676,7 @@ TEST(ArmingPreventionTest, GPSRescueWithoutFixPreventsArm)
rcData[AUX1] = 1000; rcData[AUX1] = 1000;
// when // when
disarm(); disarm(DISARM_REASON_SYSTEM);
updateActivatedModes(); updateActivatedModes();
updateArmingStatus(); updateArmingStatus();
@ -720,7 +720,7 @@ TEST(ArmingPreventionTest, GPSRescueWithoutFixPreventsArm)
rcData[AUX1] = 1000; rcData[AUX1] = 1000;
// when // when
disarm(); disarm(DISARM_REASON_SYSTEM);
updateActivatedModes(); updateActivatedModes();
updateArmingStatus(); updateArmingStatus();
@ -790,7 +790,7 @@ TEST(ArmingPreventionTest, GPSRescueSwitchPreventsArm)
rcData[AUX1] = 1000; rcData[AUX1] = 1000;
// when // when
disarm(); disarm(DISARM_REASON_SYSTEM);
updateActivatedModes(); updateActivatedModes();
updateArmingStatus(); updateArmingStatus();
@ -834,7 +834,7 @@ TEST(ArmingPreventionTest, GPSRescueSwitchPreventsArm)
rcData[AUX1] = 1000; rcData[AUX1] = 1000;
// when // when
disarm(); disarm(DISARM_REASON_SYSTEM);
updateActivatedModes(); updateActivatedModes();
updateArmingStatus(); updateArmingStatus();
@ -951,7 +951,7 @@ TEST(ArmingPreventionTest, Paralyze)
rcData[AUX1] = 1000; rcData[AUX1] = 1000;
// when // when
disarm(); disarm(DISARM_REASON_SYSTEM);
updateActivatedModes(); updateActivatedModes();
updateArmingStatus(); updateArmingStatus();
@ -1098,4 +1098,5 @@ extern "C" {
void compassStartCalibration(void) {} void compassStartCalibration(void) {}
bool compassIsCalibrationComplete(void) { return true; } bool compassIsCalibrationComplete(void) { return true; }
bool isUpright(void) { return mockIsUpright; } bool isUpright(void) { return mockIsUpright; }
void blackboxLogEvent(FlightLogEvent, union flightLogEventData_u *) {};
} }

View file

@ -35,6 +35,7 @@ extern "C" {
#include "fc/runtime_config.h" #include "fc/runtime_config.h"
#include "fc/rc_modes.h" #include "fc/rc_modes.h"
#include "fc/rc_controls.h" #include "fc/rc_controls.h"
#include "fc/core.h"
#include "flight/failsafe.h" #include "flight/failsafe.h"
@ -571,7 +572,7 @@ bool featureIsEnabled(uint32_t mask) {
return (mask & testFeatureMask); return (mask & testFeatureMask);
} }
void disarm(void) { void disarm(flightLogDisarmReason_e) {
callCounts[COUNTER_MW_DISARM]++; callCounts[COUNTER_MW_DISARM]++;
} }

View file

@ -79,7 +79,7 @@ extern "C" {
float getRcDeflection(int axis) { return simulatedRcDeflection[axis]; } float getRcDeflection(int axis) { return simulatedRcDeflection[axis]; }
void beeperConfirmationBeeps(uint8_t) { } void beeperConfirmationBeeps(uint8_t) { }
bool isLaunchControlActive(void) {return unitLaunchControlActive; } bool isLaunchControlActive(void) {return unitLaunchControlActive; }
void disarm(void) { } void disarm(flightLogDisarmReason_e) { }
float applyFFLimit(int axis, float value, float Kp, float currentPidSetpoint) { float applyFFLimit(int axis, float value, float Kp, float currentPidSetpoint) {
UNUSED(axis); UNUSED(axis);
UNUSED(Kp); UNUSED(Kp);

View file

@ -620,7 +620,7 @@ void handleInflightCalibrationStickPosition(void) {}
bool featureIsEnabled(uint32_t) { return false;} bool featureIsEnabled(uint32_t) { return false;}
bool sensors(uint32_t) { return false;} bool sensors(uint32_t) { return false;}
void tryArm(void) {} void tryArm(void) {}
void disarm(void) {} void disarm(flightLogDisarmReason_e) {}
void dashboardDisablePageCycling() {} void dashboardDisablePageCycling() {}
void dashboardEnablePageCycling() {} void dashboardEnablePageCycling() {}

View file

@ -183,4 +183,5 @@ extern "C" {
void compassStartCalibration(void) {} void compassStartCalibration(void) {}
bool compassIsCalibrationComplete(void) { return true; } bool compassIsCalibrationComplete(void) { return true; }
bool isUpright(void) { return true; } bool isUpright(void) { return true; }
void blackboxLogEvent(FlightLogEvent, union flightLogEventData_u *) {};
} }