/** * @author ETSI / STF484 * @version $URL$ * $Id$ * @desc Module containing common functions for ITS SREMM SSEM * */ module LibItsSremSsem_Functions { // LibCommon import from LibCommon_Sync all; import from LibCommon_Time all; import from LibCommon_VerdictControl all; // LibIts import from ITS_Container language "ASN.1:1997" all; import from DSRC language "ASN.1:1997" all; // LibItsCommon import from LibItsCommon_Functions all; import from LibItsCommon_TypesAndValues all; // LibItsSremSsem import from LibItsSremSsem_TestSystem all; import from LibItsSremSsem_TypesAndValues all; import from LibItsSremSsem_Templates all; group utFuntions { /** * @desc Requests to bring the IUT in an initial state * @param p_init The initialisation to trigger. */ function f_utInitializeIut(template (value) UtInitialize p_init) runs on ItsSremSsem { utPort.send(p_init); tc_wait.start; alt { [] utPort.receive(UtInitializeResult:true) { tc_wait.stop; log("*** " & testcasename() & ": INFO: IUT initialized ***"); } [] tc_wait.timeout { log("*** " & testcasename() & ": INFO: Could not receive expected UT message from IUT in time ***"); f_selfOrClientSyncAndVerdict("error", e_timeout); } [else] { // Shortcut defaults //f_sleep(0.050); // 50 ms repeat; } } } /** * @desc Triggers an event from the application layer * @param p_event The event to trigger. */ function f_utTriggerEvent( in template (value) UtSremSsemTrigger p_event ) runs on ItsSremSsem { var UtSremSsemTriggerResult v_result; utPort.send ( p_event ); tc_wait.start; alt { [] utPort.receive ( UtSremSsemTriggerResult:? ) -> value v_result { tc_wait.stop; if ( not v_result ) { f_selfOrClientSyncAndVerdict("MapSpat Trigger failed", e_error); } } [] tc_wait.timeout { log("*** " & testcasename() & ": INFO: Could not receive expected UT message from IUT in time ***"); f_selfOrClientSyncAndVerdict("error", e_timeout); } [else] { // Shortcut defaults //f_sleep(0.050); // 50 ms repeat; } } return; } } // End of group utFuntions group altsteps { /** * @desc Default handling cf01 de-initialisation. */ altstep a_cf01Down() runs on ItsSremSsem { [] a_shutdown() { f_poDefault(); f_cfDown(); log("*** a_cf01Down: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***"); stop; } } /** * @desc The base default. */ altstep a_default() runs on ItsSremSsem { [] sremSsemPort.receive(mw_sremInd(mw_sremPdu(mw_defaultSrem))) { log("*** " & testcasename() & ": INFO: SREMM received in default ***"); vc_sremReceived := true; repeat; } [] sremSsemPort.receive(mw_ssemInd(mw_ssemPdu(mw_defaultSsem))) { log("*** " & testcasename() & ": INFO: SREMM received in default ***"); vc_ssemReceived := true; repeat; } [] sremSsemPort.receive { log("*** " & testcasename() & ": ERROR: Received an unexpected message ***"); f_selfOrClientSyncAndVerdict("error", e_error); } [] any timer.timeout { log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message ***"); f_selfOrClientSyncAndVerdict("error", e_timeout); } [] a_shutdown() { f_poDefault(); f_cfDown(); log("*** " & testcasename() & ": INFO: TEST COMPONENT NOW STOPPING ITSELF! ***"); stop; } } /** * @desc The default for handling upper tester messages. */ altstep a_utDefault() runs on ItsSremSsem { var UtSremEventInd v_mapevent; var UtSsemEventInd v_spatevent; [] utPort.receive(UtSremEventInd:?) -> value v_mapevent { //store every upper tester indication received vc_utSremEvents[lengthof(vc_utSremEvents)] := v_mapevent; repeat; } [] utPort.receive(UtSsemEventInd:?) -> value v_spatevent { //store every upper tester indication received vc_utSsemEvents[lengthof(vc_utSsemEvents)] := v_spatevent; repeat; } [] utPort.receive { log("*** " & testcasename() & ": INFO: Received unhandled/unknown UT message from IUT ***"); repeat; } } } // End of group altsteps group mapSpatConfigurationFunctions { /** * @desc Setups default configuration */ function f_cfUp() runs on ItsSremSsem { map(self:utPort, system:utPort); map(self:sremSsemPort, system:sremSsemPort); // Connect f_connect4SelfOrClientSync(); activate(a_cf01Down()); //Initialze the IUT f_prInitialState(); } // End of f_cfUp /** * @desc Deletes default configuration */ function f_cfDown() runs on ItsSremSsem { unmap(self:utPort, system:utPort); unmap(self:sremSsemPort, system:sremSsemPort); f_disconnect4SelfOrClientSync(); } // End of f_cfDown } // End of of mapSpatConfigurationFunctions group preambles { /** * @desc The default preamble. */ function f_prDefault() runs on ItsSremSsem { vc_default := activate(a_default()); activate(a_utDefault()); } /** * @desc Brings the IUT into an initial state. * @return FncRetCode */ function f_prInitialState() runs on ItsSremSsem return FncRetCode { var FncRetCode v_ret := e_success; f_utInitializeIut(m_sremSsemInitialize); f_prDefault(); return v_ret; } } // End of group preambles group postambles { /** * @desc The default postamble. */ function f_poDefault() runs on ItsSremSsem { //empty } } // End of group postambles group receiveFunctions { /** * @desc Awaits a SPATE message and returns it * @param p_rcvMsg The expected message to be received. * @param p_rcvdMsg The received message - OUT. */ function f_awaitSpateMessage(in template (present) SsemInd p_rcvMsg, out SsemInd p_rcvdMsg) runs on ItsSremSsem { tc_ac.start; alt { [] sremSsemPort.receive(p_rcvMsg) -> value p_rcvdMsg { tc_ac.stop; } [] tc_ac.timeout { log("*** " & testcasename() & ": INFO: Timeout while awaiting the reception of a message ***"); f_selfOrClientSyncAndVerdict("error", e_timeout); } } } /** * @desc Awaits a SREM message and returns it * @param p_rcvMsg The expected message to be received. * @param p_rcvdMsg The received message - OUT. */ function f_awaitMapeMessage(in template (present) SremInd p_rcvMsg, out SremInd p_rcvdMsg) runs on ItsSremSsem { tc_ac.start; alt { [] sremSsemPort.receive(p_rcvMsg) -> value p_rcvdMsg { tc_ac.stop; } [] tc_ac.timeout { log("*** " & testcasename() & ": INFO: Timeout while awaiting the reception of a message ***"); f_selfOrClientSyncAndVerdict("error", e_timeout); } } } } // End of receiveFunctions } // End of module LibItsSremSsem_Functions