mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-26 17:55:28 +03:00
Fixed autolaunch messages
This commit is contained in:
parent
169fe5feea
commit
ad1271a2dc
1 changed files with 42 additions and 18 deletions
|
@ -51,6 +51,18 @@
|
||||||
#define SWING_LAUNCH_MIN_ROTATION_RATE DEGREES_TO_RADIANS(100) // expect minimum 100dps rotation rate
|
#define SWING_LAUNCH_MIN_ROTATION_RATE DEGREES_TO_RADIANS(100) // expect minimum 100dps rotation rate
|
||||||
#define LAUNCH_MOTOR_IDLE_SPINUP_TIME 1500 // ms
|
#define LAUNCH_MOTOR_IDLE_SPINUP_TIME 1500 // ms
|
||||||
#define UNUSED(x) ((void)(x))
|
#define UNUSED(x) ((void)(x))
|
||||||
|
#define FW_LAUNCH_MESSAGE_TEXT_WAIT_THROTTLE "RAISE THE THROTTLE"
|
||||||
|
#define FW_LAUNCH_MESSAGE_TEXT_WAIT_DETECTION "READY"
|
||||||
|
#define FW_LAUNCH_MESSAGE_TEXT_IN_PROGRESS "MOVE THE STICKS TO ABORT"
|
||||||
|
#define FW_LAUNCH_MESSAGE_TEXT_FINISHING "FINISHING"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FW_LAUNCH_MESSAGE_TYPE_NONE = 0,
|
||||||
|
FW_LAUNCH_MESSAGE_TYPE_WAIT_THROTTLE,
|
||||||
|
FW_LAUNCH_MESSAGE_TYPE_WAIT_DETECTION,
|
||||||
|
FW_LAUNCH_MESSAGE_TYPE_IN_PROGRESS,
|
||||||
|
FW_LAUNCH_MESSAGE_TYPE_FINISHING
|
||||||
|
} fixedWingLaunchMessage_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FW_LAUNCH_EVENT_NONE = 0,
|
FW_LAUNCH_EVENT_NONE = 0,
|
||||||
|
@ -87,6 +99,7 @@ static fixedWingLaunchEvent_t fwLaunchState_FW_LAUNCH_STATE_FINISH(timeUs_t curr
|
||||||
typedef struct fixedWingLaunchStateDescriptor_s {
|
typedef struct fixedWingLaunchStateDescriptor_s {
|
||||||
fixedWingLaunchEvent_t (*onEntry)(timeUs_t currentTimeUs);
|
fixedWingLaunchEvent_t (*onEntry)(timeUs_t currentTimeUs);
|
||||||
fixedWingLaunchState_t onEvent[FW_LAUNCH_EVENT_COUNT];
|
fixedWingLaunchState_t onEvent[FW_LAUNCH_EVENT_COUNT];
|
||||||
|
fixedWingLaunchMessage_t messageType;
|
||||||
} fixedWingLaunchStateDescriptor_t;
|
} fixedWingLaunchStateDescriptor_t;
|
||||||
|
|
||||||
typedef struct fixedWingLaunchData_s {
|
typedef struct fixedWingLaunchData_s {
|
||||||
|
@ -103,60 +116,69 @@ static const fixedWingLaunchStateDescriptor_t launchStateMachine[FW_LAUNCH_STATE
|
||||||
.onEntry = fwLaunchState_FW_LAUNCH_STATE_IDLE,
|
.onEntry = fwLaunchState_FW_LAUNCH_STATE_IDLE,
|
||||||
.onEvent = {
|
.onEvent = {
|
||||||
|
|
||||||
}
|
},
|
||||||
|
.messageType = FW_LAUNCH_MESSAGE_TYPE_NONE
|
||||||
},
|
},
|
||||||
[FW_LAUNCH_STATE_WAIT_THROTTLE] = {
|
[FW_LAUNCH_STATE_WAIT_THROTTLE] = {
|
||||||
.onEntry = fwLaunchState_FW_LAUNCH_STATE_WAIT_THROTTLE,
|
.onEntry = fwLaunchState_FW_LAUNCH_STATE_WAIT_THROTTLE,
|
||||||
.onEvent = {
|
.onEvent = {
|
||||||
[FW_LAUNCH_EVENT_SUCCESS] = FW_LAUNCH_STATE_MOTOR_IDLE,
|
[FW_LAUNCH_EVENT_SUCCESS] = FW_LAUNCH_STATE_MOTOR_IDLE,
|
||||||
[FW_LAUNCH_EVENT_GOTO_DETECTION] = FW_LAUNCH_STATE_WAIT_DETECTION
|
[FW_LAUNCH_EVENT_GOTO_DETECTION] = FW_LAUNCH_STATE_WAIT_DETECTION
|
||||||
}
|
},
|
||||||
|
.messageType = FW_LAUNCH_MESSAGE_TYPE_WAIT_THROTTLE
|
||||||
},
|
},
|
||||||
[FW_LAUNCH_STATE_MOTOR_IDLE] = {
|
[FW_LAUNCH_STATE_MOTOR_IDLE] = {
|
||||||
.onEntry = fwLaunchState_FW_LAUNCH_STATE_MOTOR_IDLE,
|
.onEntry = fwLaunchState_FW_LAUNCH_STATE_MOTOR_IDLE,
|
||||||
.onEvent = {
|
.onEvent = {
|
||||||
[FW_LAUNCH_EVENT_SUCCESS] = FW_LAUNCH_STATE_WAIT_DETECTION,
|
[FW_LAUNCH_EVENT_SUCCESS] = FW_LAUNCH_STATE_WAIT_DETECTION,
|
||||||
[FW_LAUNCH_EVENT_THROTTLE_LOW] = FW_LAUNCH_STATE_WAIT_THROTTLE
|
[FW_LAUNCH_EVENT_THROTTLE_LOW] = FW_LAUNCH_STATE_WAIT_THROTTLE
|
||||||
}
|
},
|
||||||
|
.messageType = FW_LAUNCH_MESSAGE_TYPE_WAIT_THROTTLE
|
||||||
},
|
},
|
||||||
[FW_LAUNCH_STATE_WAIT_DETECTION] = {
|
[FW_LAUNCH_STATE_WAIT_DETECTION] = {
|
||||||
.onEntry = fwLaunchState_FW_LAUNCH_STATE_WAIT_DETECTION,
|
.onEntry = fwLaunchState_FW_LAUNCH_STATE_WAIT_DETECTION,
|
||||||
.onEvent = {
|
.onEvent = {
|
||||||
[FW_LAUNCH_EVENT_SUCCESS] = FW_LAUNCH_STATE_DETECTED,
|
[FW_LAUNCH_EVENT_SUCCESS] = FW_LAUNCH_STATE_DETECTED,
|
||||||
[FW_LAUNCH_EVENT_THROTTLE_LOW] = FW_LAUNCH_STATE_WAIT_THROTTLE
|
[FW_LAUNCH_EVENT_THROTTLE_LOW] = FW_LAUNCH_STATE_WAIT_THROTTLE
|
||||||
}
|
},
|
||||||
|
.messageType = FW_LAUNCH_MESSAGE_TYPE_WAIT_DETECTION
|
||||||
},
|
},
|
||||||
[FW_LAUNCH_STATE_DETECTED] = {
|
[FW_LAUNCH_STATE_DETECTED] = {
|
||||||
.onEntry = fwLaunchState_FW_LAUNCH_STATE_DETECTED,
|
.onEntry = fwLaunchState_FW_LAUNCH_STATE_DETECTED,
|
||||||
.onEvent = {
|
.onEvent = {
|
||||||
// waiting for the navigation to move on the next state FW_LAUNCH_STATE_MOTOR_DELAY
|
// waiting for the navigation to move on the next state FW_LAUNCH_STATE_MOTOR_DELAY
|
||||||
}
|
},
|
||||||
|
.messageType = FW_LAUNCH_MESSAGE_TYPE_WAIT_DETECTION
|
||||||
},
|
},
|
||||||
[FW_LAUNCH_STATE_MOTOR_DELAY] = {
|
[FW_LAUNCH_STATE_MOTOR_DELAY] = {
|
||||||
.onEntry = fwLaunchState_FW_LAUNCH_STATE_MOTOR_DELAY,
|
.onEntry = fwLaunchState_FW_LAUNCH_STATE_MOTOR_DELAY,
|
||||||
.onEvent = {
|
.onEvent = {
|
||||||
[FW_LAUNCH_EVENT_SUCCESS] = FW_LAUNCH_STATE_MOTOR_SPINUP,
|
[FW_LAUNCH_EVENT_SUCCESS] = FW_LAUNCH_STATE_MOTOR_SPINUP,
|
||||||
[FW_LAUNCH_EVENT_ABORT] = FW_LAUNCH_STATE_IDLE
|
[FW_LAUNCH_EVENT_ABORT] = FW_LAUNCH_STATE_IDLE
|
||||||
}
|
},
|
||||||
|
.messageType = FW_LAUNCH_MESSAGE_TYPE_IN_PROGRESS
|
||||||
},
|
},
|
||||||
[FW_LAUNCH_STATE_MOTOR_SPINUP] = {
|
[FW_LAUNCH_STATE_MOTOR_SPINUP] = {
|
||||||
.onEntry = fwLaunchState_FW_LAUNCH_STATE_MOTOR_SPINUP,
|
.onEntry = fwLaunchState_FW_LAUNCH_STATE_MOTOR_SPINUP,
|
||||||
.onEvent = {
|
.onEvent = {
|
||||||
[FW_LAUNCH_EVENT_SUCCESS] = FW_LAUNCH_STATE_IN_PROGRESS,
|
[FW_LAUNCH_EVENT_SUCCESS] = FW_LAUNCH_STATE_IN_PROGRESS,
|
||||||
[FW_LAUNCH_EVENT_ABORT] = FW_LAUNCH_STATE_IDLE
|
[FW_LAUNCH_EVENT_ABORT] = FW_LAUNCH_STATE_IDLE
|
||||||
}
|
},
|
||||||
|
.messageType = FW_LAUNCH_MESSAGE_TYPE_IN_PROGRESS
|
||||||
},
|
},
|
||||||
[FW_LAUNCH_STATE_IN_PROGRESS] = {
|
[FW_LAUNCH_STATE_IN_PROGRESS] = {
|
||||||
.onEntry = fwLaunchState_FW_LAUNCH_STATE_IN_PROGRESS,
|
.onEntry = fwLaunchState_FW_LAUNCH_STATE_IN_PROGRESS,
|
||||||
.onEvent = {
|
.onEvent = {
|
||||||
[FW_LAUNCH_EVENT_SUCCESS] = FW_LAUNCH_STATE_FINISH,
|
[FW_LAUNCH_EVENT_SUCCESS] = FW_LAUNCH_STATE_FINISH,
|
||||||
}
|
},
|
||||||
|
.messageType = FW_LAUNCH_MESSAGE_TYPE_IN_PROGRESS
|
||||||
},
|
},
|
||||||
[FW_LAUNCH_STATE_FINISH] = {
|
[FW_LAUNCH_STATE_FINISH] = {
|
||||||
.onEntry = fwLaunchState_FW_LAUNCH_STATE_FINISH,
|
.onEntry = fwLaunchState_FW_LAUNCH_STATE_FINISH,
|
||||||
.onEvent = {
|
.onEvent = {
|
||||||
[FW_LAUNCH_EVENT_SUCCESS] = FW_LAUNCH_STATE_IDLE
|
[FW_LAUNCH_EVENT_SUCCESS] = FW_LAUNCH_STATE_IDLE
|
||||||
}
|
},
|
||||||
|
.messageType = FW_LAUNCH_MESSAGE_TYPE_FINISHING
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -392,15 +414,17 @@ void abortFixedWingLaunch(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const char * fixedWingLaunchStateMessage(void) {
|
const char * fixedWingLaunchStateMessage(void) {
|
||||||
switch (fwLaunch.currentState) {
|
switch (launchStateMachine[fwLaunch.currentState].messageType) {
|
||||||
case FW_LAUNCH_STATE_WAIT_DETECTION:
|
case FW_LAUNCH_MESSAGE_TYPE_WAIT_THROTTLE:
|
||||||
return "READY";
|
return FW_LAUNCH_MESSAGE_TEXT_WAIT_THROTTLE;
|
||||||
case FW_LAUNCH_STATE_FINISH:
|
case FW_LAUNCH_MESSAGE_TYPE_WAIT_DETECTION:
|
||||||
return "FINISHING";
|
return FW_LAUNCH_MESSAGE_TEXT_WAIT_DETECTION;
|
||||||
case FW_LAUNCH_STATE_WAIT_THROTTLE:
|
case FW_LAUNCH_MESSAGE_TYPE_IN_PROGRESS:
|
||||||
return "RAISE THE THROTTLE";
|
return FW_LAUNCH_MESSAGE_TEXT_IN_PROGRESS;
|
||||||
|
case FW_LAUNCH_MESSAGE_TYPE_FINISHING:
|
||||||
|
return FW_LAUNCH_MESSAGE_TEXT_FINISHING;
|
||||||
default:
|
default:
|
||||||
return "MOVE THE STICKS TO ABORT"; // conforming to OSD_MESSAGE_LENGTH = 28 from osd.c
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue