Message MODULE PSEUDOCODE
Message Module
static local currentState stores MessageState_t
//Possible states include: MSG_INIT, IDLE, WAIT_EVENT_CONF, WAIT_DATA_CONF, WAIT_NCHUNKS, WAIT_DATA
static local eventToSend, paramToSend, eventReceived, paramReceived, nChunks, dataReceived, dataRec
initMessage receives nothing, returns true
set currentState to MSG_INIT
initialize deferral queue
End of initMessage
runMessage
If currentState is MSG_INIT
Initialize module variables to zero, go to IDLE.
Else if currentState is IDLE
If EventType is MSG0 - MSG7 (defined in Message.h)
save message number in eventToSend, parameter in paramToSend;
If paramToSend nonzero, set nChunks to 6;
post eventToSend to Communication module, go to WAIT_EVENT_CONF
End if
Else if EventType is ES_NEW_DATA
store parameter in eventReceived, set paramReceived, datarec to 0;
go to WAIT_NCHUNKS
End if
Else if currentState is WAIT_EVENT_CONF
If EventType is ES_SEND_CONF
post nChunks to Communication module
increment dataSent
go to WAIT_DATA_CONF
Else if EventType is ES_TIMEOUT
go to IDLE
Else
defer event
End if
Else if currentState is WAIT_DATA_CONF
If EventType is ES_SEND_CONF
If dataSent > nChunks
go to IDLE
Else
post next chunk to Communication module
increment dataSent
go to WAIT_DATA_CONF
Else if EventType is ES_TIMEOUT
go to IDLE
Else
defer event
End if
Else if currentState is WAIT_NCHUNKS
If EventType is ES_NEW_DATA
If event parameter is zero
post message corresponding to saved eventReceived to distribution list.
go to IDLE
Else
save event param to nChunks
increment dataRec
go to WAIT_DATA
Else if EventType is ES_TIMEOUT
go to IDLE
Else
defer event
End if
End if
Else if currentState is WAIT_DATA
If EventType is ES_NEW_DATA
shift in parameter to paramReceived
If dataRec > nChunks
post message corresponding to saved eventReceived, paramReceived to distribution list.
go to IDLE
increment dataRec
Else if EventType is ES_TIMEOUT
go to IDLE
Else
defer event
End if
End if
End if
If next state is IDLE,
Recall event
End of runMessage
static local currentState stores MessageState_t
//Possible states include: MSG_INIT, IDLE, WAIT_EVENT_CONF, WAIT_DATA_CONF, WAIT_NCHUNKS, WAIT_DATA
static local eventToSend, paramToSend, eventReceived, paramReceived, nChunks, dataReceived, dataRec
initMessage receives nothing, returns true
set currentState to MSG_INIT
initialize deferral queue
End of initMessage
runMessage
If currentState is MSG_INIT
Initialize module variables to zero, go to IDLE.
Else if currentState is IDLE
If EventType is MSG0 - MSG7 (defined in Message.h)
save message number in eventToSend, parameter in paramToSend;
If paramToSend nonzero, set nChunks to 6;
post eventToSend to Communication module, go to WAIT_EVENT_CONF
End if
Else if EventType is ES_NEW_DATA
store parameter in eventReceived, set paramReceived, datarec to 0;
go to WAIT_NCHUNKS
End if
Else if currentState is WAIT_EVENT_CONF
If EventType is ES_SEND_CONF
post nChunks to Communication module
increment dataSent
go to WAIT_DATA_CONF
Else if EventType is ES_TIMEOUT
go to IDLE
Else
defer event
End if
Else if currentState is WAIT_DATA_CONF
If EventType is ES_SEND_CONF
If dataSent > nChunks
go to IDLE
Else
post next chunk to Communication module
increment dataSent
go to WAIT_DATA_CONF
Else if EventType is ES_TIMEOUT
go to IDLE
Else
defer event
End if
Else if currentState is WAIT_NCHUNKS
If EventType is ES_NEW_DATA
If event parameter is zero
post message corresponding to saved eventReceived to distribution list.
go to IDLE
Else
save event param to nChunks
increment dataRec
go to WAIT_DATA
Else if EventType is ES_TIMEOUT
go to IDLE
Else
defer event
End if
End if
Else if currentState is WAIT_DATA
If EventType is ES_NEW_DATA
shift in parameter to paramReceived
If dataRec > nChunks
post message corresponding to saved eventReceived, paramReceived to distribution list.
go to IDLE
increment dataRec
Else if EventType is ES_TIMEOUT
go to IDLE
Else
defer event
End if
End if
End if
If next state is IDLE,
Recall event
End of runMessage