Project 2 - Implement the Code for controlling the retraction and extension of Airplane’s landing gear
#include
#include
// Define states of the landing gear FSM
typedef enum {
GEAR_UP,
GEAR_DOWN,
GEAR_MOVING_UP,
GEAR_MOVING_DOWN,
NUM_STATES
} GearState;
// Define events that trigger state transitions
typedef enum {
EVENT_EXTEND,
EVENT_RETRACT,
EVENT_GEAR_UP,
EVENT_GEAR_DOWN,
NUM_EVENTS
} Event;
// Function prototypes
void handleEvent(Event event);
void transitionToState(GearState newState);
void runStateMachine(Event event);
// Global variable for current state
GearState currentState = GEAR_UP;
int main() {
// Simulate events triggering state transitions
handleEvent(EVENT_EXTEND); // Initial action: extend landing gear
handleEvent(EVENT_GEAR_UP); // Triggering gear up event
handleEvent(EVENT_GEAR_DOWN); // Triggering gear down event
return 0;
}
// Function to handle events and trigger state transitions
void handleEvent(Event event) {
printf("Handling event %d\n", event);
runStateMachine(event);
}
// Function to transition to a new state
void transitionToState(GearState newState) {
currentState = newState;
printf("Transitioned to state %d\n", currentState);
}
// Function to run the state machine based on the current state and event
void runStateMachine(Event event) {
switch(currentState) {
case GEAR_UP:
switch(event) {
case EVENT_EXTEND:
transitionToState(GEAR_MOVING_DOWN);
// Code to physically extend landing gear
printf("Extending landing gear...\n");
break;
default:
// Handle unexpected events for the current state
printf("Unexpected event %d in state GEAR_UP\n", event);
break;
}
break;
case GEAR_DOWN:
switch(event) {
case EVENT_RETRACT:
transitionToState(GEAR_MOVING_UP);
// Code to physically retract landing gear
printf("Retracting landing gear...\n");
break;
default:
// Handle unexpected events for the current state
printf("Unexpected event %d in state GEAR_DOWN\n", event);
break;
}
break;
case GEAR_MOVING_UP:
switch(event) {
case EVENT_GEAR_UP:
transitionToState(GEAR_UP);
// Code to stop gear movement and indicate gear is up
printf("Landing gear is up\n");
break;
default:
// Handle unexpected events for the current state
printf("Unexpected event %d in state GEAR_MOVING_UP\n", event);
break;
}
break;
case GEAR_MOVING_DOWN:
switch(event) {
case EVENT_GEAR_DOWN:
transitionToState(GEAR_DOWN);
// Code to stop gear movement and indicate gear is down
printf("Landing gear is down\n");
break;
default:
// Handle unexpected events for the current state
printf("Unexpected event %d in state GEAR_MOVING_DOWN\n", event);
break;
}
break;
default:
// Handle unexpected current state
printf("Unexpected state %d\n", currentState);
break;
}
}