mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-25 17:25:20 +03:00
merge upstream into sirinfpv branch
This commit is contained in:
commit
a1a71d68ac
82 changed files with 5241 additions and 1372 deletions
|
@ -308,7 +308,7 @@ typedef struct blackboxGpsState_s {
|
|||
|
||||
// This data is updated really infrequently:
|
||||
typedef struct blackboxSlowState_s {
|
||||
uint16_t flightModeFlags;
|
||||
uint32_t flightModeFlags; // extend this data size (from uint16_t)
|
||||
uint8_t stateFlags;
|
||||
uint8_t failsafePhase;
|
||||
bool rxSignalReceived;
|
||||
|
@ -324,9 +324,17 @@ extern uint32_t currentTime;
|
|||
//From rx.c:
|
||||
extern uint16_t rssi;
|
||||
|
||||
//From gyro.c
|
||||
extern uint32_t targetLooptime;
|
||||
|
||||
//From rc_controls.c
|
||||
extern uint32_t rcModeActivationMask;
|
||||
|
||||
static BlackboxState blackboxState = BLACKBOX_STATE_DISABLED;
|
||||
|
||||
static uint32_t blackboxLastArmingBeep = 0;
|
||||
static uint32_t blackboxLastFlightModeFlags = 0; // New event tracking of flight modes
|
||||
|
||||
|
||||
static struct {
|
||||
uint32_t headerIndex;
|
||||
|
@ -402,11 +410,7 @@ static bool testBlackboxConditionUncached(FlightLogFieldCondition condition)
|
|||
case FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_0:
|
||||
case FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_1:
|
||||
case FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_2:
|
||||
if (IS_PID_CONTROLLER_FP_BASED(currentProfile->pidProfile.pidController)) {
|
||||
return currentProfile->pidProfile.D_f[condition - FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_0] != 0;
|
||||
} else {
|
||||
return currentProfile->pidProfile.D8[condition - FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_0] != 0;
|
||||
}
|
||||
return currentProfile->pidProfile.D8[condition - FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_0] != 0;
|
||||
|
||||
case FLIGHT_LOG_FIELD_CONDITION_MAG:
|
||||
#ifdef MAG
|
||||
|
@ -739,7 +743,7 @@ static void writeSlowFrame(void)
|
|||
*/
|
||||
static void loadSlowState(blackboxSlowState_t *slow)
|
||||
{
|
||||
slow->flightModeFlags = flightModeFlags;
|
||||
slow->flightModeFlags = rcModeActivationMask; //was flightModeFlags;
|
||||
slow->stateFlags = stateFlags;
|
||||
slow->failsafePhase = failsafePhase();
|
||||
slow->rxSignalReceived = rxIsReceivingSignal();
|
||||
|
@ -862,6 +866,8 @@ void startBlackbox(void)
|
|||
* it finally plays the beep for this arming event.
|
||||
*/
|
||||
blackboxLastArmingBeep = getArmingBeepTimeMicros();
|
||||
blackboxLastFlightModeFlags = rcModeActivationMask; // record startup status
|
||||
|
||||
|
||||
blackboxSetState(BLACKBOX_STATE_PREPARE_LOG_FILE);
|
||||
}
|
||||
|
@ -1128,7 +1134,7 @@ static bool blackboxWriteSysinfo()
|
|||
blackboxPrintfHeaderLine("Firmware type:Cleanflight");
|
||||
break;
|
||||
case 1:
|
||||
blackboxPrintfHeaderLine("Firmware revision:%s", shortGitRevision);
|
||||
blackboxPrintfHeaderLine("Firmware revision:Betaflight %s (%s)", FC_VERSION_STRING, shortGitRevision);
|
||||
break;
|
||||
case 2:
|
||||
blackboxPrintfHeaderLine("Firmware date:%s %s", buildDate, buildTime);
|
||||
|
@ -1171,6 +1177,165 @@ static bool blackboxWriteSysinfo()
|
|||
blackboxPrintfHeaderLine("currentMeter:%d,%d", masterConfig.batteryConfig.currentMeterOffset, masterConfig.batteryConfig.currentMeterScale);
|
||||
}
|
||||
break;
|
||||
case 13:
|
||||
blackboxPrintfHeaderLine("rcExpo:%d", masterConfig.profile[masterConfig.current_profile_index].controlRateProfile[masterConfig.profile[masterConfig.current_profile_index].activeRateProfile].rcExpo8);
|
||||
break;
|
||||
case 14:
|
||||
blackboxPrintfHeaderLine("rcYawExpo:%d", masterConfig.profile[masterConfig.current_profile_index].controlRateProfile[masterConfig.profile[masterConfig.current_profile_index].activeRateProfile].rcYawExpo8);
|
||||
break;
|
||||
case 15:
|
||||
blackboxPrintfHeaderLine("thrMid:%d", masterConfig.profile[masterConfig.current_profile_index].controlRateProfile[masterConfig.profile[masterConfig.current_profile_index].activeRateProfile].thrMid8);
|
||||
break;
|
||||
case 16:
|
||||
blackboxPrintfHeaderLine("thrExpo:%d", masterConfig.profile[masterConfig.current_profile_index].controlRateProfile[masterConfig.profile[masterConfig.current_profile_index].activeRateProfile].thrExpo8);
|
||||
break;
|
||||
case 17:
|
||||
blackboxPrintfHeaderLine("dynThrPID:%d", masterConfig.profile[masterConfig.current_profile_index].controlRateProfile[masterConfig.profile[masterConfig.current_profile_index].activeRateProfile].dynThrPID);
|
||||
break;
|
||||
case 18:
|
||||
blackboxPrintfHeaderLine("tpa_breakpoint:%d", masterConfig.profile[masterConfig.current_profile_index].controlRateProfile[masterConfig.profile[masterConfig.current_profile_index].activeRateProfile].tpa_breakpoint);
|
||||
break;
|
||||
case 19:
|
||||
blackboxPrintfHeaderLine("superExpoFactor:%d", masterConfig.rxConfig.superExpoFactor);
|
||||
break;
|
||||
case 20:
|
||||
blackboxPrintfHeaderLine("rates:%d,%d,%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].controlRateProfile[masterConfig.profile[masterConfig.current_profile_index].activeRateProfile].rates[ROLL],
|
||||
masterConfig.profile[masterConfig.current_profile_index].controlRateProfile[masterConfig.profile[masterConfig.current_profile_index].activeRateProfile].rates[PITCH],
|
||||
masterConfig.profile[masterConfig.current_profile_index].controlRateProfile[masterConfig.profile[masterConfig.current_profile_index].activeRateProfile].rates[YAW]);
|
||||
break;
|
||||
case 21:
|
||||
blackboxPrintfHeaderLine("looptime:%d", targetLooptime);
|
||||
break;
|
||||
case 22:
|
||||
blackboxPrintfHeaderLine("pidController:%d", masterConfig.profile[masterConfig.current_profile_index].pidProfile.pidController);
|
||||
break;
|
||||
case 23:
|
||||
blackboxPrintfHeaderLine("rollPID:%d,%d,%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.P8[ROLL],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.I8[ROLL],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.D8[ROLL]);
|
||||
break;
|
||||
case 24:
|
||||
blackboxPrintfHeaderLine("pitchPID:%d,%d,%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.P8[PITCH],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.I8[PITCH],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.D8[PITCH]);
|
||||
break;
|
||||
case 25:
|
||||
blackboxPrintfHeaderLine("yawPID:%d,%d,%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.P8[YAW],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.I8[YAW],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.D8[YAW]);
|
||||
break;
|
||||
case 26:
|
||||
blackboxPrintfHeaderLine("altPID:%d,%d,%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.P8[PIDALT],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.I8[PIDALT],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.D8[PIDALT]);
|
||||
break;
|
||||
case 27:
|
||||
blackboxPrintfHeaderLine("posPID:%d,%d,%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.P8[PIDPOS],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.I8[PIDPOS],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.D8[PIDPOS]);
|
||||
break;
|
||||
case 28:
|
||||
blackboxPrintfHeaderLine("posrPID:%d,%d,%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.P8[PIDPOSR],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.I8[PIDPOSR],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.D8[PIDPOSR]);
|
||||
break;
|
||||
case 29:
|
||||
blackboxPrintfHeaderLine("navrPID:%d,%d,%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.P8[PIDNAVR],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.I8[PIDNAVR],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.D8[PIDNAVR]);
|
||||
break;
|
||||
case 30:
|
||||
blackboxPrintfHeaderLine("levelPID:%d,%d,%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.P8[PIDLEVEL],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.I8[PIDLEVEL],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.D8[PIDLEVEL]);
|
||||
break;
|
||||
case 31:
|
||||
blackboxPrintfHeaderLine("magPID:%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.P8[PIDMAG]);
|
||||
break;
|
||||
case 32:
|
||||
blackboxPrintfHeaderLine("velPID:%d,%d,%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.P8[PIDVEL],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.I8[PIDVEL],
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.D8[PIDVEL]);
|
||||
break;
|
||||
case 33:
|
||||
blackboxPrintfHeaderLine("yaw_p_limit:%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.yaw_p_limit);
|
||||
break;
|
||||
case 34:
|
||||
blackboxPrintfHeaderLine("yaw_lpf_hz:%d",
|
||||
(int)(masterConfig.profile[masterConfig.current_profile_index].pidProfile.yaw_lpf_hz * 100.0f));
|
||||
break;
|
||||
case 35:
|
||||
blackboxPrintfHeaderLine("dterm_average_count:%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.dterm_average_count);
|
||||
break;
|
||||
case 36:
|
||||
blackboxPrintfHeaderLine("dterm_differentiator:%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.dterm_differentiator);
|
||||
break;
|
||||
case 37:
|
||||
blackboxPrintfHeaderLine("rollPitchItermResetRate:%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.rollPitchItermResetRate);
|
||||
break;
|
||||
case 38:
|
||||
blackboxPrintfHeaderLine("yawItermResetRate:%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.yawItermResetRate);
|
||||
break;
|
||||
case 39:
|
||||
blackboxPrintfHeaderLine("dterm_lpf_hz:%d",
|
||||
(int)(masterConfig.profile[masterConfig.current_profile_index].pidProfile.dterm_lpf_hz * 100.0f));
|
||||
break;
|
||||
case 40:
|
||||
blackboxPrintfHeaderLine("H_sensitivity:%d",
|
||||
masterConfig.profile[masterConfig.current_profile_index].pidProfile.H_sensitivity);
|
||||
break;
|
||||
case 41:
|
||||
blackboxPrintfHeaderLine("deadband:%d", masterConfig.rcControlsConfig.deadband);
|
||||
break;
|
||||
case 42:
|
||||
blackboxPrintfHeaderLine("yaw_deadband:%d", masterConfig.rcControlsConfig.yaw_deadband);
|
||||
break;
|
||||
case 43:
|
||||
blackboxPrintfHeaderLine("gyro_lpf:%d", masterConfig.gyro_lpf);
|
||||
break;
|
||||
case 44:
|
||||
blackboxPrintfHeaderLine("gyro_lowpass_hz:%d", (int)(masterConfig.gyro_soft_lpf_hz * 100.0f));
|
||||
break;
|
||||
case 45:
|
||||
blackboxPrintfHeaderLine("acc_lpf_hz:%d", (int)(masterConfig.acc_lpf_hz * 100.0f));
|
||||
break;
|
||||
case 46:
|
||||
blackboxPrintfHeaderLine("acc_hardware:%d", masterConfig.acc_hardware);
|
||||
break;
|
||||
case 47:
|
||||
blackboxPrintfHeaderLine("baro_hardware:%d", masterConfig.baro_hardware);
|
||||
break;
|
||||
case 48:
|
||||
blackboxPrintfHeaderLine("mag_hardware:%d", masterConfig.mag_hardware);
|
||||
break;
|
||||
case 49:
|
||||
blackboxPrintfHeaderLine("gyro_cal_on_first_arm:%d", masterConfig.gyro_cal_on_first_arm);
|
||||
break;
|
||||
case 50:
|
||||
blackboxPrintfHeaderLine("vbat_pid_compensation:%d", masterConfig.batteryConfig.vbatPidCompensation);
|
||||
break;
|
||||
case 51:
|
||||
blackboxPrintfHeaderLine("rc_smoothing:%d", masterConfig.rxConfig.rcSmoothing);
|
||||
break;
|
||||
case 52:
|
||||
blackboxPrintfHeaderLine("features:%d", masterConfig.enabledFeatures);
|
||||
break;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
|
@ -1198,6 +1363,10 @@ void blackboxLogEvent(FlightLogEvent event, flightLogEventData_t *data)
|
|||
case FLIGHT_LOG_EVENT_SYNC_BEEP:
|
||||
blackboxWriteUnsignedVB(data->syncBeep.time);
|
||||
break;
|
||||
case FLIGHT_LOG_EVENT_FLIGHTMODE: // New flightmode flags write
|
||||
blackboxWriteUnsignedVB(data->flightMode.flags);
|
||||
blackboxWriteUnsignedVB(data->flightMode.lastFlags);
|
||||
break;
|
||||
case FLIGHT_LOG_EVENT_INFLIGHT_ADJUSTMENT:
|
||||
if (data->inflightAdjustment.floatFlag) {
|
||||
blackboxWrite(data->inflightAdjustment.adjustmentFunction + FLIGHT_LOG_EVENT_INFLIGHT_ADJUSTMENT_FUNCTION_FLOAT_VALUE_FLAG);
|
||||
|
@ -1238,6 +1407,21 @@ static void blackboxCheckAndLogArmingBeep()
|
|||
}
|
||||
}
|
||||
|
||||
/* monitor the flight mode event status and trigger an event record if the state changes */
|
||||
static void blackboxCheckAndLogFlightMode()
|
||||
{
|
||||
flightLogEvent_flightMode_t eventData; // Add new data for current flight mode flags
|
||||
|
||||
// Use != so that we can still detect a change if the counter wraps
|
||||
if (rcModeActivationMask != blackboxLastFlightModeFlags) {
|
||||
eventData.lastFlags = blackboxLastFlightModeFlags;
|
||||
blackboxLastFlightModeFlags = rcModeActivationMask;
|
||||
eventData.flags = rcModeActivationMask;
|
||||
|
||||
blackboxLogEvent(FLIGHT_LOG_EVENT_FLIGHTMODE, (flightLogEventData_t *) &eventData);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Use the user's num/denom settings to decide if the P-frame of the given index should be logged, allowing the user to control
|
||||
* the portion of logged loop iterations.
|
||||
|
@ -1282,6 +1466,7 @@ static void blackboxLogIteration()
|
|||
writeIntraframe();
|
||||
} else {
|
||||
blackboxCheckAndLogArmingBeep();
|
||||
blackboxCheckAndLogFlightMode(); // Check for FlightMode status change event
|
||||
|
||||
if (blackboxShouldLogPFrame(blackboxPFrameIndex)) {
|
||||
/*
|
||||
|
@ -1476,5 +1661,5 @@ void initBlackbox(void)
|
|||
blackboxSetState(BLACKBOX_STATE_DISABLED);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue