1
0
Fork 0
mirror of https://github.com/iNavFlight/inav.git synced 2025-07-20 06:45:14 +03:00

Add a new field to each navigation state with its public ID

This ID will be permanent from now on, so we cahn freely change
navigationFSMState_t without having to adjust external logs
dealing with blackbox logs.
This commit is contained in:
Alberto García Hierro 2018-05-25 14:13:40 +01:00
parent 603dba3f85
commit 48a05476a8
2 changed files with 100 additions and 32 deletions

View file

@ -212,6 +212,7 @@ static navigationFSMEvent_t navOnEnteringState_NAV_STATE_LAUNCH_IN_PROGRESS(navi
static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
/** Idle state ******************************************************/
[NAV_STATE_IDLE] = {
.publicState = NAV_PUBLIC_STATE_IDLE,
.onEntry = navOnEnteringState_NAV_STATE_IDLE,
.timeoutMs = 0,
.stateFlags = 0,
@ -230,6 +231,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
/** ALTHOLD mode ***************************************************/
[NAV_STATE_ALTHOLD_INITIALIZE] = {
.publicState = NAV_PUBLIC_STATE_ALTHOLD_INITIALIZE,
.onEntry = navOnEnteringState_NAV_STATE_ALTHOLD_INITIALIZE,
.timeoutMs = 0,
.stateFlags = NAV_CTL_ALT | NAV_REQUIRE_ANGLE_FW | NAV_REQUIRE_THRTILT,
@ -244,6 +246,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_ALTHOLD_IN_PROGRESS] = {
.publicState = NAV_PUBLIC_STATE_ALTHOLD_IN_PROGRESS,
.onEntry = navOnEnteringState_NAV_STATE_ALTHOLD_IN_PROGRESS,
.timeoutMs = 10,
.stateFlags = NAV_CTL_ALT | NAV_REQUIRE_ANGLE_FW | NAV_REQUIRE_THRTILT | NAV_RC_ALT,
@ -262,6 +265,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
/** POSHOLD_3D mode ************************************************/
[NAV_STATE_POSHOLD_3D_INITIALIZE] = {
.publicState = NAV_PUBLIC_STATE_POSHOLD_3D_INITIALIZE,
.onEntry = navOnEnteringState_NAV_STATE_POSHOLD_3D_INITIALIZE,
.timeoutMs = 0,
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_REQUIRE_ANGLE | NAV_REQUIRE_THRTILT,
@ -276,6 +280,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_POSHOLD_3D_IN_PROGRESS] = {
.publicState = NAV_PUBLIC_STATE_POSHOLD_3D_IN_PROGRESS,
.onEntry = navOnEnteringState_NAV_STATE_POSHOLD_3D_IN_PROGRESS,
.timeoutMs = 10,
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_THRTILT | NAV_RC_ALT | NAV_RC_POS | NAV_RC_YAW,
@ -294,6 +299,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
/** RTH_3D mode ************************************************/
[NAV_STATE_RTH_INITIALIZE] = {
.publicState = NAV_PUBLIC_STATE_RTH_INITIALIZE,
.onEntry = navOnEnteringState_NAV_STATE_RTH_INITIALIZE,
.timeoutMs = 10,
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH,
@ -310,6 +316,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_RTH_CLIMB_TO_SAFE_ALT] = {
.publicState = NAV_PUBLIC_STATE_RTH_CLIMB_TO_SAFE_ALT,
.onEntry = navOnEnteringState_NAV_STATE_RTH_CLIMB_TO_SAFE_ALT,
.timeoutMs = 10,
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH | NAV_RC_POS | NAV_RC_YAW, // allow pos adjustment while climbind to safe alt
@ -326,6 +333,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_RTH_HEAD_HOME] = {
.publicState = NAV_PUBLIC_STATE_RTH_HEAD_HOME,
.onEntry = navOnEnteringState_NAV_STATE_RTH_HEAD_HOME,
.timeoutMs = 10,
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH | NAV_RC_POS | NAV_RC_YAW,
@ -343,6 +351,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_RTH_HOVER_PRIOR_TO_LANDING] = {
.publicState = NAV_PUBLIC_STATE_RTH_HOVER_PRIOR_TO_LANDING,
.onEntry = navOnEnteringState_NAV_STATE_RTH_HOVER_PRIOR_TO_LANDING,
.timeoutMs = 500,
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH | NAV_RC_POS | NAV_RC_YAW,
@ -360,6 +369,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_RTH_LANDING] = {
.publicState = NAV_PUBLIC_STATE_RTH_LANDING,
.onEntry = navOnEnteringState_NAV_STATE_RTH_LANDING,
.timeoutMs = 10,
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_CTL_LAND | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH | NAV_RC_POS | NAV_RC_YAW,
@ -377,6 +387,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_RTH_FINISHING] = {
.publicState = NAV_PUBLIC_STATE_RTH_FINISHING,
.onEntry = navOnEnteringState_NAV_STATE_RTH_FINISHING,
.timeoutMs = 0,
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH,
@ -390,6 +401,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_RTH_FINISHED] = {
.publicState = NAV_PUBLIC_STATE_RTH_FINISHED,
.onEntry = navOnEnteringState_NAV_STATE_RTH_FINISHED,
.timeoutMs = 10,
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_RTH,
@ -407,6 +419,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
/** WAYPOINT mode ************************************************/
[NAV_STATE_WAYPOINT_INITIALIZE] = {
.publicState = NAV_PUBLIC_STATE_WAYPOINT_INITIALIZE,
.onEntry = navOnEnteringState_NAV_STATE_WAYPOINT_INITIALIZE,
.timeoutMs = 0,
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_WP,
@ -422,6 +435,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_WAYPOINT_PRE_ACTION] = {
.publicState = NAV_PUBLIC_STATE_WAYPOINT_PRE_ACTION,
.onEntry = navOnEnteringState_NAV_STATE_WAYPOINT_PRE_ACTION,
.timeoutMs = 0,
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_WP,
@ -437,6 +451,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_WAYPOINT_IN_PROGRESS] = {
.publicState = NAV_PUBLIC_STATE_WAYPOINT_IN_PROGRESS,
.onEntry = navOnEnteringState_NAV_STATE_WAYPOINT_IN_PROGRESS,
.timeoutMs = 10,
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_WP,
@ -455,6 +470,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_WAYPOINT_REACHED] = {
.publicState = NAV_PUBLIC_STATE_WAYPOINT_REACHED,
.onEntry = navOnEnteringState_NAV_STATE_WAYPOINT_REACHED,
.timeoutMs = 10,
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_WP,
@ -475,6 +491,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_WAYPOINT_RTH_LAND] = {
.publicState = NAV_PUBLIC_STATE_WAYPOINT_RTH_LAND,
.onEntry = navOnEnteringState_NAV_STATE_WAYPOINT_RTH_LAND,
.timeoutMs = 10,
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_CTL_LAND | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_WP,
@ -493,6 +510,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_WAYPOINT_NEXT] = {
.publicState = NAV_PUBLIC_STATE_WAYPOINT_NEXT,
.onEntry = navOnEnteringState_NAV_STATE_WAYPOINT_NEXT,
.timeoutMs = 0,
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_WP,
@ -506,6 +524,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_WAYPOINT_FINISHED] = {
.publicState = NAV_PUBLIC_STATE_WAYPOINT_FINISHED,
.onEntry = navOnEnteringState_NAV_STATE_WAYPOINT_FINISHED,
.timeoutMs = 0,
.stateFlags = NAV_CTL_ALT | NAV_CTL_POS | NAV_CTL_YAW | NAV_REQUIRE_ANGLE | NAV_REQUIRE_MAGHOLD | NAV_REQUIRE_THRTILT | NAV_AUTO_WP,
@ -523,6 +542,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
/** EMERGENCY LANDING ************************************************/
[NAV_STATE_EMERGENCY_LANDING_INITIALIZE] = {
.publicState = NAV_PUBLIC_STATE_EMERGENCY_LANDING_INITIALIZE,
.onEntry = navOnEnteringState_NAV_STATE_EMERGENCY_LANDING_INITIALIZE,
.timeoutMs = 0,
.stateFlags = NAV_CTL_EMERG | NAV_REQUIRE_ANGLE,
@ -538,6 +558,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_EMERGENCY_LANDING_IN_PROGRESS] = {
.publicState = NAV_PUBLIC_STATE_EMERGENCY_LANDING_IN_PROGRESS,
.onEntry = navOnEnteringState_NAV_STATE_EMERGENCY_LANDING_IN_PROGRESS,
.timeoutMs = 10,
.stateFlags = NAV_CTL_EMERG | NAV_REQUIRE_ANGLE,
@ -553,6 +574,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_EMERGENCY_LANDING_FINISHED] = {
.publicState = NAV_PUBLIC_STATE_EMERGENCY_LANDING_FINISHED,
.onEntry = navOnEnteringState_NAV_STATE_EMERGENCY_LANDING_FINISHED,
.timeoutMs = 10,
.stateFlags = NAV_CTL_EMERG | NAV_REQUIRE_ANGLE,
@ -566,6 +588,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_LAUNCH_INITIALIZE] = {
.publicState = NAV_PUBLIC_STATE_LAUNCH_INITIALIZE,
.onEntry = navOnEnteringState_NAV_STATE_LAUNCH_INITIALIZE,
.timeoutMs = 0,
.stateFlags = NAV_REQUIRE_ANGLE,
@ -580,6 +603,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_LAUNCH_WAIT] = {
.publicState = NAV_PUBLIC_STATE_LAUNCH_WAIT,
.onEntry = navOnEnteringState_NAV_STATE_LAUNCH_WAIT,
.timeoutMs = 10,
.stateFlags = NAV_CTL_LAUNCH | NAV_REQUIRE_ANGLE,
@ -595,6 +619,7 @@ static const navigationFSMStateDescriptor_t navFSM[NAV_STATE_COUNT] = {
},
[NAV_STATE_LAUNCH_IN_PROGRESS] = {
.publicState = NAV_PUBLIC_STATE_LAUNCH_IN_PROGRESS,
.onEntry = navOnEnteringState_NAV_STATE_LAUNCH_IN_PROGRESS,
.timeoutMs = 10,
.stateFlags = NAV_CTL_LAUNCH | NAV_REQUIRE_ANGLE,
@ -1166,7 +1191,7 @@ static navigationFSMEvent_t navOnEnteringState_NAV_STATE_LAUNCH_WAIT(navigationF
if (isFixedWingLaunchDetected()) {
enableFixedWingLaunchController(currentTimeUs);
return NAV_FSM_EVENT_SUCCESS; // NAV_STATE_LAUNCH_MOTOR_DELAY
return NAV_FSM_EVENT_SUCCESS; // NAV_STATE_LAUNCH_IN_PROGRESS
}
//allow to leave NAV_LAUNCH_MODE if it has being enabled as feature by moving sticks with low throttle.
@ -1196,7 +1221,10 @@ static navigationFSMState_t navSetNewFSMState(navigationFSMState_t newState)
navigationFSMState_t previousState;
previousState = posControl.navState;
posControl.navState = newState;
if (posControl.navState != newState) {
posControl.navState = newState;
posControl.navPublicState = navFSM[newState].publicState;
}
return previousState;
}
@ -2524,7 +2552,7 @@ void updateWaypointsAndNavigationMode(void)
switchNavigationFlightModes();
#if defined(NAV_BLACKBOX)
navCurrentState = (int16_t)posControl.navState;
navCurrentState = (int16_t)posControl.navPublicState;
#endif
}

View file

@ -176,44 +176,82 @@ typedef enum {
NAV_FSM_EVENT_COUNT,
} navigationFSMEvent_t;
// This enum is used to keep values in blackbox logs stable, so we can
// freely change navigationFSMState_t.
typedef enum {
NAV_STATE_UNDEFINED = 0, // 0
NAV_PUBLIC_STATE_UNDEFINED = 0, // 0
NAV_STATE_IDLE, // 1
NAV_PUBLIC_STATE_IDLE, // 1
NAV_STATE_ALTHOLD_INITIALIZE, // 2
NAV_STATE_ALTHOLD_IN_PROGRESS, // 3
NAV_PUBLIC_STATE_ALTHOLD_INITIALIZE, // 2
NAV_PUBLIC_STATE_ALTHOLD_IN_PROGRESS, // 3
NAV_STATE_UNUSED_1, // 4, was NAV_STATE_POSHOLD_2D_INITIALIZE
NAV_STATE_UNUSED_2, // 5, was NAV_STATE_POSHOLD_2D_IN_PROGRESS
NAV_PUBLIC_STATE_UNUSED_1, // 4, was NAV_STATE_POSHOLD_2D_INITIALIZE
NAV_PUBLIC_STATE_UNUSED_2, // 5, was NAV_STATE_POSHOLD_2D_IN_PROGRESS
NAV_STATE_POSHOLD_3D_INITIALIZE, // 6
NAV_STATE_POSHOLD_3D_IN_PROGRESS, // 7
NAV_PUBLIC_STATE_POSHOLD_3D_INITIALIZE, // 6
NAV_PUBLIC_STATE_POSHOLD_3D_IN_PROGRESS, // 7
NAV_STATE_RTH_INITIALIZE, // 8
NAV_STATE_RTH_CLIMB_TO_SAFE_ALT, // 9
NAV_STATE_RTH_HEAD_HOME, // 10
NAV_STATE_RTH_HOVER_PRIOR_TO_LANDING, // 11
NAV_STATE_RTH_LANDING, // 12
NAV_STATE_RTH_FINISHING, // 13
NAV_STATE_RTH_FINISHED, // 14
NAV_PUBLIC_STATE_RTH_INITIALIZE, // 8
NAV_PUBLIC_STATE_RTH_CLIMB_TO_SAFE_ALT, // 9
NAV_PUBLIC_STATE_RTH_HEAD_HOME, // 10
NAV_PUBLIC_STATE_RTH_HOVER_PRIOR_TO_LANDING, // 11
NAV_PUBLIC_STATE_RTH_LANDING, // 12
NAV_PUBLIC_STATE_RTH_FINISHING, // 13
NAV_PUBLIC_STATE_RTH_FINISHED, // 14
NAV_STATE_WAYPOINT_INITIALIZE, // 15
NAV_STATE_WAYPOINT_PRE_ACTION, // 16
NAV_STATE_WAYPOINT_IN_PROGRESS, // 17
NAV_STATE_WAYPOINT_REACHED, // 18
NAV_STATE_WAYPOINT_NEXT, // 19
NAV_STATE_WAYPOINT_FINISHED, // 20
NAV_STATE_WAYPOINT_RTH_LAND, // 21
NAV_PUBLIC_STATE_WAYPOINT_INITIALIZE, // 15
NAV_PUBLIC_STATE_WAYPOINT_PRE_ACTION, // 16
NAV_PUBLIC_STATE_WAYPOINT_IN_PROGRESS, // 17
NAV_PUBLIC_STATE_WAYPOINT_REACHED, // 18
NAV_PUBLIC_STATE_WAYPOINT_NEXT, // 19
NAV_PUBLIC_STATE_WAYPOINT_FINISHED, // 20
NAV_PUBLIC_STATE_WAYPOINT_RTH_LAND, // 21
NAV_STATE_EMERGENCY_LANDING_INITIALIZE, // 22
NAV_STATE_EMERGENCY_LANDING_IN_PROGRESS, // 23
NAV_STATE_EMERGENCY_LANDING_FINISHED, // 24
NAV_PUBLIC_STATE_EMERGENCY_LANDING_INITIALIZE, // 22
NAV_PUBLIC_STATE_EMERGENCY_LANDING_IN_PROGRESS, // 23
NAV_PUBLIC_STATE_EMERGENCY_LANDING_FINISHED, // 24
NAV_STATE_LAUNCH_INITIALIZE, // 25
NAV_STATE_LAUNCH_WAIT, // 26
NAV_STATE_LAUNCH_MOTOR_DELAY, // 27
NAV_STATE_LAUNCH_IN_PROGRESS, // 28
NAV_PUBLIC_STATE_LAUNCH_INITIALIZE, // 25
NAV_PUBLIC_STATE_LAUNCH_WAIT, // 26
NAV_PUBLIC_STATE_UNUSED_3, // 27, was NAV_STATE_LAUNCH_MOTOR_DELAY
NAV_PUBLIC_STATE_LAUNCH_IN_PROGRESS, // 28
} navigationPublicState_t;
typedef enum {
NAV_STATE_UNDEFINED = 0,
NAV_STATE_IDLE,
NAV_STATE_ALTHOLD_INITIALIZE,
NAV_STATE_ALTHOLD_IN_PROGRESS,
NAV_STATE_POSHOLD_3D_INITIALIZE,
NAV_STATE_POSHOLD_3D_IN_PROGRESS,
NAV_STATE_RTH_INITIALIZE,
NAV_STATE_RTH_CLIMB_TO_SAFE_ALT,
NAV_STATE_RTH_HEAD_HOME,
NAV_STATE_RTH_HOVER_PRIOR_TO_LANDING,
NAV_STATE_RTH_LANDING,
NAV_STATE_RTH_FINISHING,
NAV_STATE_RTH_FINISHED,
NAV_STATE_WAYPOINT_INITIALIZE,
NAV_STATE_WAYPOINT_PRE_ACTION,
NAV_STATE_WAYPOINT_IN_PROGRESS,
NAV_STATE_WAYPOINT_REACHED,
NAV_STATE_WAYPOINT_NEXT,
NAV_STATE_WAYPOINT_FINISHED,
NAV_STATE_WAYPOINT_RTH_LAND,
NAV_STATE_EMERGENCY_LANDING_INITIALIZE,
NAV_STATE_EMERGENCY_LANDING_IN_PROGRESS,
NAV_STATE_EMERGENCY_LANDING_FINISHED,
NAV_STATE_LAUNCH_INITIALIZE,
NAV_STATE_LAUNCH_WAIT,
NAV_STATE_LAUNCH_IN_PROGRESS,
NAV_STATE_COUNT,
} navigationFSMState_t;
@ -246,6 +284,7 @@ typedef enum {
} navigationFSMStateFlags_t;
typedef struct {
navigationPublicState_t publicState;
navigationFSMEvent_t (*onEntry)(navigationFSMState_t previousState);
uint32_t timeoutMs;
navSystemStatus_State_e mwState;
@ -264,6 +303,7 @@ typedef struct {
typedef struct {
/* Flags and navigation system state */
navigationFSMState_t navState;
navigationPublicState_t navPublicState;
navigationFlags_t flags;