/**************************************************************************** Module SMMaster.c Description Master State Machine. Starts Gamestate and OC SMs as concurrent children. ****************************************************************************/ /*----------------------------- Include Files -----------------------------*/ #include "GlobalHeader.h" #include "SMMaster.h" /*----------------------------- Module Defines ----------------------------*/ /*---------------------------- Module Functions ---------------------------*/ static Event_t DuringRunning( Event_t Event); /*---------------------------- Module Variables ---------------------------*/ static MasterState_t CurrentState; /*------------------------------ Module Code ------------------------------*/ /**************************************************************************** Function RunMasterSM Parameters Event_t Returns Event_t Description Runs master state machine ****************************************************************************/ Event_t RunMasterSM( Event_t CurrentEvent ) { unsigned char MakeTransition = FALSE;/* are we making a state transition? */ MasterState_t NextState = CurrentState; switch ( CurrentState ) { case Master_Running : CurrentEvent = DuringRunning(CurrentEvent); //process any events if ( CurrentEvent != EV_NO_EVENT ) //If an event is active { switch (CurrentEvent) { } } break; } // If we are making a state transition if (MakeTransition == TRUE) { // Execute exit function for current state (void)RunMasterSM(EV_EXIT); CurrentState = NextState; //Modify state variable // Execute entry function for new state (void)RunMasterSM(EV_ENTRY); } return(CurrentEvent); } /**************************************************************************** Function StartMasterSM Parameters Event_t Returns None Description Starts Master state machine ****************************************************************************/ void StartMasterSM ( Event_t CurrentEvent ) { CurrentState = Master_Running; // call the entry function (if any) for the ENTRY_STATE (void)RunMasterSM(EV_ENTRY); } /**************************************************************************** Function QueryMasterSM Parameters None Returns MasterState_t The current state of the state machine Description returns the current state of the state machine ****************************************************************************/ MasterState_t QueryMasterSM ( void ) { return(CurrentState); } /*************************************************************************** private functions ***************************************************************************/ /**************************************************************************** Function DuringRunning Parameters Event_t Returns Event_t Description Starts and Runs lower level SMs Gamestate and OC ****************************************************************************/ static Event_t DuringRunning( Event_t Event) { // process EV_ENTRY & EV_EXIT events if ( Event == EV_ENTRY) { StartGameSM(Event); StartOffensiveCoordinatorSM(Event); }else if ( Event == EV_EXIT) { (void)RunGameSM(Event); (void)RunOffensiveCoordinatorSM(Event); }else // do the 'during' function for this state { (void)RunGameSM(Event); (void)RunOffensiveCoordinatorSM(Event); } return(Event); }