module ItsAutoInterop_Functions { // LibCommon import from LibCommon_BasicTypesAndValues all; import from LibCommon_DataStrings all; import from LibCommon_VerdictControl all; import from LibCommon_Sync all; // LibItsCommon import from LibItsCommon_TypesAndValues all; import from LibItsCommon_Templates all; import from LibItsCommon_Functions all; import from LibItsCommon_Pixits all; import from LibItsCommon_TestSystem all; // LibItsGeoNetworking import from LibItsGeoNetworking_TypesAndValues all; import from LibItsGeoNetworking_Templates all; import from LibItsGeoNetworking_Pics all; // LibItsSecurity import from LibItsSecurity_TypesAndValues all; import from LibItsSecurity_Templates all; import from LibItsSecurity_Functions all; import from LibItsSecurity_Pixits all; // ItsInterop import from ItsAutoInterop_TypesAndValues all; import from ItsAutoInterop_Templates all; import from ItsAutoInterop_TestSystem all; group utFunctions { /** * @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 ItsAutoInteropGeonetworking { //deactivate autoInteropPort default alts vc_autoInteropDefaultActive := false; utPort.send(p_init); tc_wait.start; alt { //FIXME RGY As discussed, port in type is changed to a top-level union type // [] utPort.receive(UtInitializeResult:true) { [] utPort.receive(UtCommonResults:{utInitializeResult:=true}) { tc_wait.stop; log("*** f_utInitializeIut: INFO: IUT initialized ***"); } [] utPort.receive { tc_wait.stop; log("*** f_utInitializeIut: INFO: IUT could not be initialized ***"); f_selfOrClientSyncAndVerdict("error", e_error); } [] tc_wait.timeout { log("*** f_utInitializeIut: INFO: IUT could not be initialized in time ***"); f_selfOrClientSyncAndVerdict("error", e_timeout); } } //activate autoInteropPort default alts vc_autoInteropDefaultActive := true; } /** * @desc Triggers event from the application layer * @param p_event The event to trigger. */ function f_utTriggerEvent(template (value) UtAutoInteropTrigger p_event) runs on ItsAutoInteropGeonetworking { //deactivate autoInteropPort default alts vc_autoInteropDefaultActive := false; utPort.send(p_event); tc_wait.start; alt { //FIXME RGY As discussed, port in type is changed to a top-level union type // [] utPort.receive(UtAutoInteropTriggerResult:true) { [] utPort.receive(UpperTesterAutoInteropResults:{utInitializeResult:=true}) { tc_wait.stop; } [] utPort.receive { tc_wait.stop; } [] tc_wait.timeout { } } //activate autoInteropPort default alts vc_autoInteropDefaultActive := true; } } // End of group utFunctions group hmiFunctions { /** * @desc Requests to bring the HMI in an initial state * @param p_init The initialisation to trigger. */ function f_hmiInitializeIut(template (value) HmiInitialize p_init) runs on ItsAutoInteropGeonetworking { //deactivate autoInteropPort default alts vc_autoInteropDefaultActive := false; hmiPort.send(p_init); tc_wait.start; alt { //FIXME RGY As discussed, port in type is changed to a top-level union type // [] hmiPort.receive(HmiInitializeResult:true) { [] hmiPort.receive(HmiAutoInteropResults:{hmiInitializeResult:=true}) { tc_wait.stop; log("*** f_hmiInitializeIhmi: INFO: EUT's HMI initialized ***"); } [] hmiPort.receive { tc_wait.stop; log("*** f_hmiInitializeIhmi: INFO: EUT's HMI could not be initialized ***"); f_selfOrClientSyncAndVerdict("error", e_error); } [] tc_wait.timeout { log("*** f_hmiInitializeIhmi: INFO: EUT's HMI could not be initialized in time ***"); f_selfOrClientSyncAndVerdict("error", e_timeout); } } //activate autoInteropPort default alts vc_autoInteropDefaultActive := true; } } // End of group hmiFunctions group preambles { /** * @desc Set up an EUT component * @param p_eut The component reference * @param p_scenario The GNSS scenario. Default: e_staticPosition */ function f_cfPtcUp( in ItsAutoInteropGeonetworking p_eut, in Scenario p_scenario := e_staticPosition // TODO Not used ) runs on ItsAutoInteropGeonetworking /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ { // EUT //map(p_eut:acPort, system:acPort); Not used //map(p_eut:utPort, system:utPort); Not used map(p_eut:hmiPort, system:hmiPort); map(p_eut:geoNetworkingPort, system:geoNetworkingPort); connect(p_eut:syncPort, self:syncPort); //activate(a_cfPtcDown()); // FIXME To be done //Initialze the IUT f_initialiseSecuredMode(); // MTC intializes IUT f_initialState(p_scenario); } // End of function f_cfPtcUp /** * @desc Set up MTC for configuration #1 * @param p_eut1 The component reference for EUT1 * @param p_eut2 The component reference for EUT2 * @param p_eut3 The component reference for EUT3 * @param p_eut4 The component reference for EUT4 * @see Draft ETSI TS yyy xxx-2 V0.0.8 (2017-02) Clause 5.3.1 CF-01: Verify complete forwarding message scenario */ function f_mtcCf01Up( inout ItsAutoInteropGeonetworking p_eut1, inout ItsAutoInteropGeonetworking p_eut2, inout ItsAutoInteropGeonetworking p_eut3, inout ItsAutoInteropGeonetworking p_eut4 ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ { // Create components p_eut1 := ItsAutoInteropGeonetworking.create(c_compNodeB); p_eut2 := ItsAutoInteropGeonetworking.create(c_compNodeC); p_eut3 := ItsAutoInteropGeonetworking.create(c_compNodeD); p_eut4 := ItsAutoInteropGeonetworking.create(c_compNodeE); // Map & Connect map(self:acPort, system:acPort); map(self:utPort, system:utPort); connect(self:syncPort, mtc:syncPort); // EUT1/EUT2/EUT3/EUT4 disconnect(p_eut1:eutGeoNetworkingPort, p_eut2:eutGeoNetworkingPort); // EUT1 & EUT2 are on-link disconnect(p_eut1:eutGeoNetworkingPort, p_eut3:eutGeoNetworkingPort); // EUT1 & EUT3 are on-link disconnect(p_eut2:eutGeoNetworkingPort, p_eut3:eutGeoNetworkingPort); // EUT2 & EUT3 are on-link disconnect(p_eut2:eutGeoNetworkingPort, p_eut4:eutGeoNetworkingPort); // EUT2 & EUT4 are on-link disconnect(p_eut3:eutGeoNetworkingPort, p_eut3:eutGeoNetworkingPort); // EUT3 & EUT4 are on-link // EUT1 & EUT4 are of-link activate(a_mtcCf01Down(p_eut1, p_eut2, p_eut3, p_eut4)); } // End of function f_mtcCf01Up /** * @desc Set up MTC for configuration #2 * @param p_eut1 The component reference for EUT1 * @param p_eut2 The component reference for EUT2 * @see Draft ETSI TS yyy xxx-2 V0.0.8 (2017-02) Clause 5.3.2 CF-02: Road Works Warning configuration */ function f_mtcCf02Up( inout ItsAutoInteropGeonetworking p_eut1, inout ItsAutoInteropGeonetworking p_eut2 ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ { // Create components p_eut1 := ItsAutoInteropGeonetworking.create(c_compNodeB); p_eut2 := ItsAutoInteropGeonetworking.create(c_compNodeC); // Map & Connect map(self:acPort, system:acPort); map(self:utPort, system:utPort); connect(self:syncPort, mtc:syncPort); // EUT1/EUT2 connect(p_eut1:eutGeoNetworkingPort, p_eut2:eutGeoNetworkingPort); activate(a_mtcCf02Down(p_eut1, p_eut2)); } // End of function f_mtcCf02Up /** * @desc Set up MTC for configuration #3 * @param p_eut1 The component reference for EUT1 * @param p_eut2 The component reference for EUT2 * @param p_eut3 The component reference for EUT3 * @see Draft ETSI TS yyy xxx-2 V0.0.8 (2017-02) Clause 5.3.3 CF-03: CA messages */ function f_mtcCf03Up( inout ItsAutoInteropGeonetworking p_eut1, inout ItsAutoInteropGeonetworking p_eut2, inout ItsAutoInteropGeonetworking p_eut3 ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ { // Create components p_eut1 := ItsAutoInteropGeonetworking.create(c_compNodeB); p_eut2 := ItsAutoInteropGeonetworking.create(c_compNodeC); p_eut3 := ItsAutoInteropGeonetworking.create(c_compNodeD); // Map & Connect map(self:acPort, system:acPort); map(self:utPort, system:utPort); connect(self:syncPort, mtc:syncPort); // EUT1/EUT2/EUT3 connect(p_eut1:eutGeoNetworkingPort, p_eut2:eutGeoNetworkingPort); connect(p_eut1:eutGeoNetworkingPort, p_eut3:eutGeoNetworkingPort); connect(p_eut2:eutGeoNetworkingPort, p_eut3:eutGeoNetworkingPort); activate(a_mtcCf03Down(p_eut1, p_eut2, p_eut3)); } // End of function f_mtcCf03Up /** * @desc The default preamble. */ function f_prDefault() runs on ItsAutoInteropGeonetworking { activate(a_default()); activate(a_utDefault()); activate(a_hmiDefault()); } } // End of group preambles group postambles { /** * @desc Shutdown an EUT component * @param p_eut The component reference */ function f_cfPtcDown( inout ItsAutoInteropGeonetworking p_eut ) runs on ItsAutoInteropGeonetworking /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ { // Wait components done p_eut.done; deactivate; // EUT unmap(p_eut:acPort, system:acPort); unmap(p_eut:utPort, system:utPort); unmap(p_eut:hmiPort, system:hmiPort); unmap(p_eut:geoNetworkingPort, system:geoNetworkingPort); disconnect(p_eut:syncPort, self:syncPort); } // End of function f_cfPtcDown /** * @desc Shutdown MTC for configuration #1 * @param p_eut1 The component reference for EUT1 * @param p_eut2 The component reference for EUT2 * @param p_eut3 The component reference for EUT3 * @param p_eut4 The component reference for EUT4 * @see Draft ETSI TS yyy xxx-2 V0.0.8 (2017-02) Clause 5.3.1 CF-01: Verify complete forwarding message scenario */ function f_mtcCf01Down( inout ItsAutoInteropGeonetworking p_eut1, inout ItsAutoInteropGeonetworking p_eut2, inout ItsAutoInteropGeonetworking p_eut3, inout ItsAutoInteropGeonetworking p_eut4 ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ { // Wait components done p_eut1.done; p_eut2.done; p_eut3.done; p_eut4.done; deactivate; // Unmap & disconnect unmap(self:acPort, system:acPort); unmap(self:utPort, system:utPort); disconnect(self:syncPort, mtc:syncPort); // EUT1/EUT2/EUT3/EUT4 disconnect(p_eut1:eutGeoNetworkingPort, p_eut2:eutGeoNetworkingPort); disconnect(p_eut1:eutGeoNetworkingPort, p_eut3:eutGeoNetworkingPort); disconnect(p_eut2:eutGeoNetworkingPort, p_eut3:eutGeoNetworkingPort); disconnect(p_eut2:eutGeoNetworkingPort, p_eut4:eutGeoNetworkingPort); disconnect(p_eut3:eutGeoNetworkingPort, p_eut3:eutGeoNetworkingPort); } // End of function f_mtcCf01Down /** * @desc Shutdown MTC for configuration #2 * @param p_eut1 The component reference for EUT1 * @param p_eut2 The component reference for EUT2 * @see Draft ETSI TS yyy xxx-2 V0.0.8 (2017-02) Clause 5.3.2 CF-02: Road Works Warning configuration */ function f_mtcCf02Down( inout ItsAutoInteropGeonetworking p_eut1, inout ItsAutoInteropGeonetworking p_eut2 ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ { // Wait components done p_eut1.done; p_eut2.done; deactivate; // Unmap & disconnect unmap(self:acPort, system:acPort); unmap(self:utPort, system:utPort); disconnect(self:syncPort, mtc:syncPort); } // End of function f_mtcCf02Down /** * @desc Shutdown MTC with three components * @param p_eut1 The component reference for EUT1 * @param p_eut2 The component reference for EUT2 * @param p_eut3 The component reference for EUT3 */ function f_mtcCf03Down( inout ItsAutoInteropGeonetworking p_eut1, inout ItsAutoInteropGeonetworking p_eut2, inout ItsAutoInteropGeonetworking p_eut3 ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ { // Wait components done p_eut1.done; p_eut2.done; p_eut3.done; deactivate; // Unmap & disconnect unmap(self:acPort, system:acPort); unmap(self:utPort, system:utPort); disconnect(self:syncPort, mtc:syncPort); // EUT1/EUT2/EUT3 disconnect(p_eut1:eutGeoNetworkingPort, p_eut2:eutGeoNetworkingPort); disconnect(p_eut1:eutGeoNetworkingPort, p_eut3:eutGeoNetworkingPort); disconnect(p_eut3:eutGeoNetworkingPort, p_eut3:eutGeoNetworkingPort); } // End of function f_mtcCf03Down /** * @desc The default postamble. */ function f_poDefault() runs on ItsAutoInteropGeonetworking { deactivate; // deactivate(a_default()); // deactivate(a_utDefault()); // deactivate(a_hmiDefault()); // TODO f_acStopScenario(); } } // End of group postambles group autoInteropPosition { /** * @desc Compute distance between two points * @param p_pointA First point * @param p_pointB Second point * @return Computed distance in meters * @see fx_computeDistance */ function f_distance( in LongPosVector p_pointA, in LongPosVector p_pointB ) return float { // log("*** f_distance: INFO: calling fx_computeDistance() ***"); return fx_computeDistance(p_pointA.latitude, p_pointA.longitude, p_pointB.latitude, p_pointB.longitude); } } // End of group autoInteropPosition group autoInteropConfiguration { /** * @desc Brings the IUT into an initial state. * @remark Component variable vc_hashedId8ToBeUsed shall be set with the IUT certificate to be used */ function f_initialState(Scenario p_scenario := e_staticPosition) runs on ItsAutoInteropGeonetworking { if (PICS_GN_SECURITY) { var Oct8 v_hashedId8ToBeUsed := f_setupIutCertificate(vc_hashedId8ToBeUsed); if (oct2int(v_hashedId8ToBeUsed) == 0) { v_hashedId8ToBeUsed := 'FFFFFFFFFFFFFFFF'O; // Reset to unknown value, the IUT will use its own certificates } f_utInitializeIut(m_secGnInitialize(v_hashedId8ToBeUsed)); // TODO f_hmiInitializeIut(m_secGnInitialize(v_hashedId8ToBeUsed)); } // else, default behavior else { f_utInitializeIut(m_gnInitialize); f_hmiInitializeIut(m_hmiInitialize); } // TODO f_acLoadScenario(p_scenario); // TODO f_acStartScenario(); } /** * @desc Initialise secure mode if required */ function f_initialiseSecuredMode() runs on ItsAutoInteropGeonetworking { if ((PICS_GN_SECURITY == true) or (PICS_IS_IUT_SECURED == true)) { if(e_success != f_acEnableSecurity()){ log("*** INFO: TEST CASE NOW STOPPING ITSELF! ***"); stop; } } } // End of function f_initialiseSecuredMode() function f_uninitialiseSecuredMode() runs on ItsAutoInteropGeonetworking { if ((PICS_GN_SECURITY == true) or (PICS_IS_IUT_SECURED == true)) { f_acDisableSecurity(); } } // End of function f_initialiseSecuredMode() /** * @desc Triggers test adapter to enable security support * @return FncRetCode */ function f_acEnableSecurity() runs on ItsAutoInteropGeonetworking return FncRetCode { // Local variables // Load certificates if (PICS_GN_SECURITY) { if( not f_loadCertificates(PX_IUT_SEC_CONFIG_NAME) ) { return e_error; } // FIXME Useless??? // // Initialize vc_location // f_setGenerationLocation( // f_getTsLatitude(), // f_getTsLongitude() // ); return f_acTriggerSecEvent(m_acEnableSecurity(cc_taCert_A)); } return f_acTriggerSecEvent(m_acEnableSecurity(PX_CERT_FOR_TS)); } /** * @desc Triggers test adapter to disable security support * @return FncRetCode */ function f_acDisableSecurity() runs on ItsAutoInteropGeonetworking return FncRetCode { f_unloadCertificates(); return f_acTriggerSecEvent(m_acDisableSecurity); } /** * @desc Triggers event in the test system adaptation. * @param p_event The event to trigger * @return FncRetCode */ function f_acTriggerSecEvent( in template (value) AcSecPrimitive p_event ) runs on ItsAutoInteropGeonetworking return FncRetCode { var FncRetCode v_ret := e_success; acPort.send(p_event); tc_ac.start; alt { [] acPort.receive(m_acSecResponseSuccess) { tc_ac.stop; } [] acPort.receive { tc_ac.stop; log("*** " & __SCOPE__ & ": ERROR: Received unexpected message ***"); f_selfOrClientSyncAndVerdict("error", e_error); } [] tc_ac.timeout { log("*** " & __SCOPE__ & ": ERROR: Timeout while waiting for adapter control event result ***"); f_selfOrClientSyncAndVerdict("error", e_timeout); } } return v_ret; } } // End of group autoInteropConfiguration group adapterControl { /** * @desc Triggers event in the test system adaptation. * @param p_event The event to trigger * @return FncRetCode */ function f_acTriggerGnssEvent(template (value) AcGnssPrimitive p_event) runs on ItsAutoInteropGeonetworking return FncRetCode { var FncRetCode v_ret := e_success; acPort.send(p_event); tc_ac.start; alt { [] acPort.receive(m_acGnssResponseSuccess) { tc_ac.stop; } [] acPort.receive { tc_ac.stop; log("*** f_acTriggerEvent: ERROR: Received unexpected message ***"); f_selfOrClientSyncAndVerdict("error", e_error); } [] tc_ac.timeout { log("*** f_acTriggerEvent: ERROR: Timeout while waiting for adapter control event result ***"); f_selfOrClientSyncAndVerdict("error", e_timeout); } } return v_ret; } /** * @desc Loads the given scenario * @param p_scenario The scenario to load. */ function f_acLoadScenario(Scenario p_scenario) runs on ItsAutoInteropGeonetworking { if (PX_GNSS_SCENARIO_SUPPORT==true) { f_acTriggerGnssEvent(m_loadScenario(p_scenario)); } } // end f_acLoadScenario /** * @desc Starts a loaded scenario */ function f_acStartScenario() runs on ItsAutoInteropGeonetworking { if (PX_GNSS_SCENARIO_SUPPORT==true) { f_acTriggerGnssEvent(m_startScenario); vc_scenarioStarted := true; } } // end f_acStartScenario /** * @desc Stops a loaded scenario */ function f_acStopScenario() runs on ItsAutoInteropGeonetworking { if (PX_GNSS_SCENARIO_SUPPORT==true and vc_scenarioStarted==true) { f_acTriggerGnssEvent(m_stopScenario); vc_scenarioStarted := false; } } // end f_acStopScenario } // End of group adapterControl group autoInteropAltsteps { /** * @desc The base default. */ altstep a_default() runs on ItsAutoInteropGeonetworking { [vc_autoInteropDefaultActive] geoNetworkingPort.receive( // Filtering LSRequest mw_geoNwInd( mw_geoNwPdu( mw_geoNwLsRequestPacket( ?, ? )))) { // Nothing to do repeat; } [vc_autoInteropDefaultActive] geoNetworkingPort.receive( // Filtering LSReply mw_geoNwInd( mw_geoNwPdu( mw_geoNwLsReplyPacket( ?, ? )))) { // Nothing to do repeat; } [vc_autoInteropDefaultActive] geoNetworkingPort.receive( // Filtering Secured CA messages mw_geoNwInd( mw_geoNwSecPdu( mdw_securedMessage_CAMs, ? ))) { // Skip CAM messages log("*** a_default: WARNING: Skip secured CAM messages ***"); repeat; } [vc_autoInteropDefaultActive] geoNetworkingPort.receive( // Filtering Secured DEN messages mw_geoNwInd( mw_geoNwSecPdu( mdw_securedMessage_DENMs, ? ))) { // Skip DENM messages log("*** a_default: WARNING: Skip secured DENM messages ***"); repeat; } [vc_autoInteropDefaultActive] geoNetworkingPort.receive { // Unexpected GeoNetworking message ==> require refine filtering above log("*** a_default: ERROR: Received an unexpected message ***"); f_selfOrClientSyncAndVerdict("error", e_timeout); } [vc_autoInteropDefaultActive] eutGeoNetworkingPort.receive { // Unexpected EutGeoNetworking message ==> require refine filtering above log("*** a_default: ERROR: Received an unexpected message ***"); f_selfOrClientSyncAndVerdict("error", e_timeout); } [] tc_wait.timeout { log("*** a_default: ERROR: Timeout while awaiting reaction of the IUT prior to Upper Tester action ***"); f_selfOrClientSyncAndVerdict("error", e_timeout); } [] tc_ac.timeout { log("*** a_default: ERROR: Timeout while awaiting the reception of a message ***"); f_selfOrClientSyncAndVerdict("error", e_timeout); } [] a_shutdown() { log("*** a_default: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***"); stop; } } /** * @desc The default for handling upper tester messages. */ altstep a_utDefault() runs on ItsAutoInteropGeonetworking { var UtGnEventInd v_ind; [vc_utDefaultActive] utPort.receive(UtGnEventInd:?) -> value v_ind { //store every upper tester indication received vc_utInds[lengthof(vc_utInds)] := v_ind; repeat; } [vc_utDefaultActive] utPort.receive { log("*** " & testcasename() & ": INFO: Received unexpected UT message from IUT ***"); repeat; } } /** * @desc The default for handling HMI messages. */ altstep a_hmiDefault() runs on ItsAutoInteropGeonetworking { var HmiNeighborEventInds v_hmiNeighborEventInds; var HmiSignageEventInd v_hmiSignageEventInd; [vc_hmiDefaultActive] hmiPort.receive(HmiNeighborEventInds:?) -> value v_hmiNeighborEventInds { //store every upper tester indication received vc_hmiNeighborEventIndsList[lengthof(vc_hmiNeighborEventIndsList)] := v_hmiNeighborEventInds; repeat; } [vc_hmiDefaultActive] hmiPort.receive { log("*** " & testcasename() & ": INFO: Received unexpected UT message from IUT ***"); repeat; } [vc_hmiDefaultActive] hmiPort.receive(HmiSignageEventInd:?) -> value v_hmiSignageEventInd { //store every upper tester indication received vc_hmiSignageEventIndList[lengthof(vc_hmiSignageEventIndList)] := v_hmiSignageEventInd; repeat; } [vc_hmiDefaultActive] hmiPort.receive { log("*** " & testcasename() & ": INFO: Received unexpected UT message from IUT ***"); repeat; } } /** * @desc Default handling cf01 de-initialisation. */ altstep a_mtcCf01Down( inout ItsAutoInteropGeonetworking p_eut1, inout ItsAutoInteropGeonetworking p_eut2, inout ItsAutoInteropGeonetworking p_eut3, inout ItsAutoInteropGeonetworking p_eut4 ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ { [] a_shutdown() { f_mtcCf01Down(p_eut1, p_eut2, p_eut3, p_eut4); log("*** a_mtcCf01Down: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***"); stop; } } /** * @desc Default handling cf02 de-initialisation. */ altstep a_mtcCf02Down( inout ItsAutoInteropGeonetworking p_eut1, inout ItsAutoInteropGeonetworking p_eut2 ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ { [] a_shutdown() { f_mtcCf02Down(p_eut1, p_eut2); log("*** a_mtcCf02Down: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***"); stop; } } /** * @desc Default handling cf03 de-initialisation. */ altstep a_mtcCf03Down( inout ItsAutoInteropGeonetworking p_eut1, inout ItsAutoInteropGeonetworking p_eut2, inout ItsAutoInteropGeonetworking p_eut3 ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ { [] a_shutdown() { f_mtcCf03Down(p_eut1, p_eut2, p_eut3); log("*** a_mtcCf03Down: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***"); stop; } } } // End of group autoInteropAltsteps } // End of module ItsAutoInterop_Functions