//#define OFF_OVERRIDE //used to override game_paused commands from OC during testing /**************************************************************************** Module ChkEvents.c Description This is the Event Checking Module for our robot ****************************************************************************/ /*----------------------------- Include Files -----------------------------*/ #include "GlobalHeader.h" #include "ChkEvents.h" #include "SMMaster.h" #include "TOMDebug.h" /*------------------------------ Module Code ------------------------------*/ /**************************************************************************** Function CheckEvents Parameters none Returns Event_t - the current, or most recent, event happening ****************************************************************************/ Event_t CheckEvents(void) { Event_t CurrentEvent = EV_NO_EVENT; //allow manual event creation for debugging Event_t Event; Event = DebugEvent(); if (Event != EV_NO_EVENT) return Event; //OC EVENTS if (QueryOCNewResponseFlag()) return(EV_OC_NewResponse); if (QueryOCReadFlag()) return(EV_OC_NewRead); if (QueryOCTimerFlag()) { switch (QueryOCCommandCounter()) { case 0: // printf (" ok\r\n"); return(EV_OC_TimerExpired); break; case 1: printf (" oveflow\r\n"); return(EV_OC_CounterExpired); break; } } if ((QueryOffensiveCoordinatorSM() == OC_Ready) && (QueryOCQueueLength() > 0)) return(EV_OC_NewCommand); //DRIVE EVENTS if (QueryDriveTransitionFlag()) return(EV_Drive_Transition); if (QueryDriveTimerFlag()) return(EV_Drive_TimerExpired); if (QueryDriveBeaconFound()) return(EV_Drive_BeaconFound); if (QueryDriveBeaconLost()) return(EV_Drive_BeaconLost); if (QueryDriveAimed()) return(EV_Drive_Aimed); //SENSOR EVENTS if (CheckBumpSensors()) return(EV_Sensor_Bump); if (CheckFrontTapeCache()) return(EV_Sensor_TapeFront); if (CheckBackTapeCache()) return(EV_Sensor_TapeBack); //GAMESTATE EVENTS if (QueryGameStartFlag()) return(EV_Game_On); #ifndef OFF_OVERRIDE if (QueryGamePauseFlag()) return(EV_Game_Pause); #endif if (QueryGameSM() == Game_On) { if (QueryGameTime() > 12000) //12000 for 2min return(EV_Game_Pause); //GAMEPLAY EVENTS if (QueryGameTime() > 11500) //If game is almost over { if (QueryDispenserNearHoop() == 0) return EV_Play_Timeout; //choose new dispenser if not near hoop } else //if game is not almost over, { if (QueryToDispenserFlag()) //allow changing of dispenser when empty return EV_Play_ToDispenser; if (QueryPlayTimeout()) return EV_Play_Timeout; //allow timeouts } if (QueryAtDispenserFlag()) return EV_Play_AtDispenser; if (CheckForBall() && (QueryPlaySM() == Play_AtDispenser) && (QueryShootSM() == Shoot_Waiting)) //check for ball first for continuous debounce return EV_Shoot_BallAtGate; if ((QueryPlaySM() == Play_AtDispenser) && QueryShootTimer()) return EV_Shoot_TimerExpired; if ((QueryPlaySM()==Play_AtDispenser) && QueryRequestTimeout()) return EV_Request_Timeout; } return(CurrentEvent); }