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

Log disarm reason.

This commit is contained in:
Dominic Clifton 2019-12-26 15:02:48 +01:00
parent 6433aaa688
commit 2fead0aedf
16 changed files with 60 additions and 23 deletions

View file

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

View file

@ -40,8 +40,12 @@ typedef enum BlackboxMode {
typedef enum FlightLogEvent {
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_LOGGING_RESUME = 14,
FLIGHT_LOG_EVENT_DISARM = 15,
FLIGHT_LOG_EVENT_FLIGHTMODE = 30, // Add new event type for flight mode status.
FLIGHT_LOG_EVENT_LOG_END = 255
} FlightLogEvent;

View file

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

View file

@ -28,6 +28,7 @@
#include "build/debug.h"
#include "blackbox/blackbox.h"
#include "blackbox/blackbox_fielddefs.h"
#include "cli/cli.h"
@ -422,7 +423,7 @@ void updateArmingStatus(void)
}
}
void disarm(void)
void disarm(flightLogDisarmReason_e reason)
{
if (ARMING_FLAG(ARMED)) {
ENABLE_ARMING_FLAG(WAS_EVER_ARMED);
@ -436,6 +437,10 @@ void disarm(void)
#endif
#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
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
if (featureIsEnabled(FEATURE_3D)) {
if (!IS_RC_MODE_ACTIVE(BOXARM))
disarm();
disarm(DISARM_REASON_SWITCH);
}
updateRSSI(currentTimeUs);
@ -881,7 +886,7 @@ bool processRx(timeUs_t currentTimeUs)
if (throttleStatus == THROTTLE_LOW) {
if ((autoDisarmDelayUs > 0) && (currentTimeUs > disarmAt)) {
// auto-disarm configured and delay is over
disarm();
disarm(DISARM_REASON_THROTTLE_TIMEOUT);
armedBeeperOn = false;
} else {
// 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;
} else if (currentTimeUs > runawayTakeoffTriggerUs) {
setArmingDisabled(ARMING_DISABLED_RUNAWAY_TAKEOFF);
disarm();
disarm(DISARM_REASON_RUNAWAY_TAKEOFF);
}
} else {
runawayTakeoffTriggerUs = 0;

View file

@ -47,6 +47,21 @@ typedef enum {
LAUNCH_CONTROL_MODE_COUNT // must be the last element
} 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
#define LAUNCH_CONTROL_THROTTLE_TRIGGER_MAX 90
extern const char * const osdLaunchControlModeNames[LAUNCH_CONTROL_MODE_COUNT];
@ -59,7 +74,7 @@ void handleInflightCalibrationStickPosition(void);
void resetArmingDisabled(void);
void disarm(void);
void disarm(flightLogDisarmReason_e reason);
void tryArm(void);
bool processRx(timeUs_t currentTimeUs);

View file

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

View file

@ -320,7 +320,7 @@ void failsafeUpdateState(void)
#endif
case FAILSAFE_LANDED:
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.phase = FAILSAFE_RX_LOSS_MONITORING;
reprocessState = true;

View file

@ -578,7 +578,7 @@ void updateGPSRescueState(void)
if (!STATE(GPS_FIX_HOME)) {
setArmingDisabled(ARMING_DISABLED_ARM_SWITCH);
disarm();
disarm(DISARM_REASON_GPS_RESCUE);
}
// Minimum distance detection.
@ -588,7 +588,7 @@ void updateGPSRescueState(void)
// Never allow rescue mode to engage as a failsafe when too close.
if (rescueState.isFailsafe) {
setArmingDisabled(ARMING_DISABLED_ARM_SWITCH);
disarm();
disarm(DISARM_REASON_GPS_RESCUE);
}
// 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) {
setArmingDisabled(ARMING_DISABLED_ARM_SWITCH);
disarm();
disarm(DISARM_REASON_GPS_RESCUE);
rescueState.phase = RESCUE_COMPLETE;
}
@ -692,7 +692,7 @@ void updateGPSRescueState(void)
break;
case RESCUE_ABORT:
setArmingDisabled(ARMING_DISABLED_ARM_SWITCH);
disarm();
disarm(DISARM_REASON_GPS_RESCUE);
rescueStop();
break;
default:

View file

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

View file

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

View file

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

View file

@ -676,7 +676,7 @@ TEST(ArmingPreventionTest, GPSRescueWithoutFixPreventsArm)
rcData[AUX1] = 1000;
// when
disarm();
disarm(DISARM_REASON_SYSTEM);
updateActivatedModes();
updateArmingStatus();
@ -720,7 +720,7 @@ TEST(ArmingPreventionTest, GPSRescueWithoutFixPreventsArm)
rcData[AUX1] = 1000;
// when
disarm();
disarm(DISARM_REASON_SYSTEM);
updateActivatedModes();
updateArmingStatus();
@ -790,7 +790,7 @@ TEST(ArmingPreventionTest, GPSRescueSwitchPreventsArm)
rcData[AUX1] = 1000;
// when
disarm();
disarm(DISARM_REASON_SYSTEM);
updateActivatedModes();
updateArmingStatus();
@ -834,7 +834,7 @@ TEST(ArmingPreventionTest, GPSRescueSwitchPreventsArm)
rcData[AUX1] = 1000;
// when
disarm();
disarm(DISARM_REASON_SYSTEM);
updateActivatedModes();
updateArmingStatus();
@ -951,7 +951,7 @@ TEST(ArmingPreventionTest, Paralyze)
rcData[AUX1] = 1000;
// when
disarm();
disarm(DISARM_REASON_SYSTEM);
updateActivatedModes();
updateArmingStatus();
@ -1098,4 +1098,5 @@ extern "C" {
void compassStartCalibration(void) {}
bool compassIsCalibrationComplete(void) { return true; }
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/rc_modes.h"
#include "fc/rc_controls.h"
#include "fc/core.h"
#include "flight/failsafe.h"
@ -571,7 +572,7 @@ bool featureIsEnabled(uint32_t mask) {
return (mask & testFeatureMask);
}
void disarm(void) {
void disarm(flightLogDisarmReason_e) {
callCounts[COUNTER_MW_DISARM]++;
}

View file

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

View file

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

View file

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