You are on page 1of 4

Data private to the module: CurrentState, LastState, QueryingScore, Bytes

RunREFService(CurrentEvent)

Set MakeTransition to false


Set NextState to CurrentState
Set EventType of EntryEventKind to ES_ENTRY
Set ReturnEvent to CurrentEvent

Switch on CurrentState
Case WAITING:
Set ReturnEvent and CurrentEvent to return value of
DuringWaiting function with parameter CurrentEvent
If EventType of CurrentEvent is not ES_NO_EVENT
Switch on EventType of CurrentEvent
Case ES_TIMEOUT
If EventParam of CurrentEvent is REF_QUERY_TIMER
Put 4 state querying bytes into the transmit register
Enable transmit interrupt
Reset Byte variable
Clear QueryingScore bool
Set NextState to SENDING
Set MakeTransition to true
Endif
Break
Case EV_SCORE_UPDATE
Put 4 score querying bytes into the transmit register
Enable transmit interrupt
Reset Byte variable
Set QueryingScore bool
Set NextState to SENDING
Set MakeTransition to true
Endif
Break
Case EV_STATE_UPDATE
Put 4 state querying bytes into the transmit register
Enable transmit interrupt
Reset Byte variable
Set QueryingScore bool
Set NextState to SENDING
Set MakeTransition to true
Endif
Break
Endswitch
Endif
Break
Case SENDING:
Set ReturnEvent and CurrentEvent to return value of
DuringWaitingForBallWheel function with parameter CurrentEvent
If EventType of CurrentEvent is not ES_NO_EVENT
Switch on EventType of CurrentEvent
Case EV_EOM:
Set NextState to DELAY
Check Bytes for errors
If error free, store Bytes in message variables
If it was a state update, run Check4StateChange
Set MakeTransition to true
Set EventType of ReturnEvent to ES_NO_EVENT
Break
Endswitch
Endif
Break

Case DELAY:
Set ReturnEvent and CurrentEvent to return value of
DuringWaitingForShot function with parameter CurrentEvent
If EventType of CurrentEvent is not ES_NO_EVENT
Switch on EventType of CurrentEvent
Case ES_TIMEOUT
If EventParam of CurrentEvent is REF_WAIT_TIMER
Set NextState to WAITING
Set MakeTransition to true
Set EventType of ReturnEvent to ES_NO_EVENT
Endif
Break
Endswitch
Endif
Break
Endswitch

If MakeTransition is true
Set EventType of CurrentEvent to ES_EXIT
Call RunREFService function with parameter CurrentEvent
Set CurrentState to NextState
Call RunREFService with parameter EntryEventKind
Endif

Return ReturnEvent
End of function
StartREFService(CurrentEvent)

If EventType of CurrentEvent is not ES_ENTRY_HISTORY


Set CurrentState to ENTRY_STATE
Endif
Start REF_QUERY_TIMER with a REFQueryTime timeout
Call RunREFService function with parameter CurrentEvent

End of function

QueryREFService

Return CurrentState

End of function

EOT_ISR(void)

Disable transmit interrupt


Read 4 bytes from the receive register and save in Bytes variable
Post EV_EOM event

End of ISR

Check4StateChange(void)

Get the current game state


if current game state is not last game state
post EV_STATE_CHANGE event with parameter game state
set last state = current state
Endif

End of function
DuringWaiting(Event)

Set ReturnEvent to Event


If EventType of Event is ES_ENTRY or EventType of Event is ES_ENTRY_HISTORY
Elseif EventType of Event is ES_EXIT
Else
Endif

Return ReturnEvent
End of function

DuringSending(Event)

Set ReturnEvent to Event


If EventType of Event is ES_ENTRY or EventType of Event is ES_ENTRY_HISTORY
Elseif EventType of Event is ES_EXIT
Else
Endif

Return ReturnEvent
End of function

DuringDelay(Event)

Set ReturnEvent to Event


If EventType of Event is ES_ENTRY or EventType of Event is ES_ENTRY_HISTORY
Start REF_QUERY_TIMER with a REFQueryTime timeout
Elseif EventType of Event is ES_EXIT
Else
Endif

Return ReturnEvent
End of function

You might also like