Commit 9609e003 authored by garciay's avatar garciay
Browse files

Review first MFW TCs

parent a34fdda1
Loading
Loading
Loading
Loading
+26 −300
Original line number Diff line number Diff line
@@ -17,7 +17,9 @@ module ItsAutoInterop_Functions {
    import from LibItsGeoNetworking_TypesAndValues all;
    import from LibItsGeoNetworking_Templates all;
    import from LibItsGeoNetworking_Pics all;
    import from LibItsGeoNetworking_Functions all;
    import from LibItsGeoNetworking_TestSystem all;
    
    // LibItsSecurity
    import from LibItsSecurity_TypesAndValues all;
    import from LibItsSecurity_Templates all;
@@ -31,54 +33,18 @@ module ItsAutoInterop_Functions {
    
    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 {
        function f_utTriggerEvent(template (value) UtAutoInteropTrigger p_event) runs on ItsBaseGeoNetworking {
           
            //deactivate autoInteropPort default alts
            vc_autoInteropDefaultActive := false;
            vc_gnDefaultActive := 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(UtAutoInteropTriggerResult:true) {
                    tc_wait.stop;
                }
@@ -90,7 +56,7 @@ module ItsAutoInterop_Functions {
            }
            
            //activate autoInteropPort default alts
            vc_autoInteropDefaultActive := true;
            vc_gnDefaultActive := true;
            
        }
    } // End of group utFunctions
@@ -104,7 +70,7 @@ module ItsAutoInterop_Functions {
        function f_hmiInitializeIut(template (value) HmiInitialize p_init) runs on ItsAutoInteropGeonetworking {
            
            //deactivate autoInteropPort default alts
            vc_autoInteropDefaultActive := false;
            vc_gnDefaultActive := false;
            
            hmiPort.send(p_init);
            tc_wait.start;
@@ -127,7 +93,7 @@ module ItsAutoInterop_Functions {
            }
            
            //activate autoInteropPort default alts
            vc_autoInteropDefaultActive := true;
            vc_gnDefaultActive := true;
            
        }
        
@@ -143,7 +109,7 @@ module ItsAutoInterop_Functions {
        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 */ {
        ) runs on ItsAutoInteropGeonetworking /* TITAN TODO: mtc ItsMtc system ItsAutoInteropGeoNetworkingSystem */ {
            
            // EUT
            //map(p_eut:acPort, system:acPort); Not used
@@ -155,7 +121,7 @@ module ItsAutoInterop_Functions {
            //activate(a_cfPtcDown()); // FIXME To be done
            
            //Initialze the IUT
            f_initialiseSecuredMode();
            LibItsGeoNetworking_Functions.f_initialiseSecuredMode();
            
            // MTC intializes IUT
            f_initialState(p_scenario);
@@ -175,7 +141,7 @@ module ItsAutoInterop_Functions {
                             inout ItsAutoInteropGeonetworking p_eut2,
                             inout ItsAutoInteropGeonetworking p_eut3,
                             inout ItsAutoInteropGeonetworking p_eut4
        ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ {
        ) runs on ItsMtc /* TITAN TODO: mtc ItsMtc system ItsAutoInteropGeoNetworkingSystem */ {
          
            // Create components
            p_eut1 := ItsAutoInteropGeonetworking.create(c_compNodeB); 
@@ -208,7 +174,7 @@ module ItsAutoInterop_Functions {
        function f_mtcCf02Up(
                             inout ItsAutoInteropGeonetworking p_eut1, 
                             inout ItsAutoInteropGeonetworking p_eut2
        ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ {
        ) runs on ItsMtc /* TITAN TODO: mtc ItsMtc system ItsAutoInteropGeoNetworkingSystem */ {
            
            // Create components
            p_eut1 := ItsAutoInteropGeonetworking.create(c_compNodeB); 
@@ -237,7 +203,7 @@ module ItsAutoInterop_Functions {
                             inout ItsAutoInteropGeonetworking p_eut1,
                             inout ItsAutoInteropGeonetworking p_eut2,
                             inout ItsAutoInteropGeonetworking p_eut3
        ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ {
        ) runs on ItsMtc /* TITAN TODO: mtc ItsMtc system ItsAutoInteropGeoNetworkingSystem */ {
          
            // Create components
            p_eut1 := ItsAutoInteropGeonetworking.create(c_compNodeB); 
@@ -263,8 +229,9 @@ module ItsAutoInterop_Functions {
         * @desc The default preamble.
         */
        function f_prDefault() runs on ItsAutoInteropGeonetworking {
            activate(a_default());
            activate(a_utDefault());
            activate(ItsAutoInterop_Functions.a_default());
            activate(LibItsGeoNetworking_Functions.a_default());
            activate(LibItsGeoNetworking_Functions.a_utDefault());
            activate(a_hmiDefault());
        }
        
@@ -278,7 +245,7 @@ module ItsAutoInterop_Functions {
         */
        function f_cfPtcDown(
                            inout ItsAutoInteropGeonetworking p_eut
        ) runs on ItsAutoInteropGeonetworking /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ {
        ) runs on ItsAutoInteropGeonetworking /* TITAN TODO: mtc ItsMtc system ItsAutoInteropGeoNetworkingSystem */ {
            
            // Wait components done
            p_eut.done;
@@ -307,7 +274,7 @@ module ItsAutoInterop_Functions {
                               inout ItsAutoInteropGeonetworking p_eut2,
                               inout ItsAutoInteropGeonetworking p_eut3,
                               inout ItsAutoInteropGeonetworking p_eut4
        ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ {
        ) runs on ItsMtc /* TITAN TODO: mtc ItsMtc system ItsAutoInteropGeoNetworkingSystem */ {
            
            // Wait components done
            p_eut1.done; 
@@ -340,7 +307,7 @@ module ItsAutoInterop_Functions {
        function f_mtcCf02Down(
                               inout ItsAutoInteropGeonetworking p_eut1,
                               inout ItsAutoInteropGeonetworking p_eut2
        ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ {
        ) runs on ItsMtc /* TITAN TODO: mtc ItsMtc system ItsAutoInteropGeoNetworkingSystem */ {
            
            // Wait components done
            p_eut1.done; 
@@ -365,7 +332,7 @@ module ItsAutoInterop_Functions {
                            inout ItsAutoInteropGeonetworking p_eut1,
                            inout ItsAutoInteropGeonetworking p_eut2,
                            inout ItsAutoInteropGeonetworking p_eut3
        ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ {
        ) runs on ItsMtc /* TITAN TODO: mtc ItsMtc system ItsAutoInteropGeoNetworkingSystem */ {
            
            // Wait components done
            p_eut1.done; 
@@ -391,7 +358,7 @@ module ItsAutoInterop_Functions {
         */
        function f_poDefault() runs on ItsAutoInteropGeonetworking {
          deactivate;
          f_acStopScenario();
          LibItsGeoNetworking_Functions.f_acStopScenario();
        }
        
    } // End of group postambles
@@ -416,183 +383,6 @@ module ItsAutoInterop_Functions {
        
    } // 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 {
        
        /**
@@ -602,47 +392,7 @@ module ItsAutoInterop_Functions {
            // Local variables
            var GeoNetworkingInd v_gnInd;
            
            [vc_autoInteropDefaultActive] geoNetworkingPort.receive( // Filtering LSRequest
                mw_geoNwInd(
                    mw_geoNwPdu(
                        mw_geoNwLsRequestPacket(
                            ?,
                            ?
            )))) {
                // Skip LS messages
                repeat;
            }
            [vc_autoInteropDefaultActive] geoNetworkingPort.receive( // Filtering LSReply
                mw_geoNwInd(
                    mw_geoNwPdu(
                        mw_geoNwLsReplyPacket(
                            ?,
                            ?
            )))) {
                // Skip LS messages
                repeat;
            }
            [vc_autoInteropDefaultActive] geoNetworkingPort.receive( // Filtering Secured CA messages
                mw_geoNwInd(
                    mw_geoNwSecPdu(
                        mdw_securedMessage_CAMs,
                        ?
            ))) {
                // Skip CA messages
                log("*** a_default: WARNING: Skip secured CA messages ***");
                repeat;
            }
            [vc_autoInteropDefaultActive] geoNetworkingPort.receive( // Filtering Secured DEN messages
                mw_geoNwInd(
                    mw_geoNwSecPdu(
                        mdw_securedMessage_DENMs,
                        ?
            ))) {
                // Skip DEN messages
                log("*** a_default: WARNING: Skip secured DEN messages ***");
                repeat;
            }
            [vc_autoInteropDefaultActive] geoNetworkingPort.receive(
            [vc_gnDefaultActive] geoNetworkingPort.receive(
                mw_geoNwInd(
                    ?
            )) -> value v_gnInd { // Unexpected GeoNetworking message ==> require refine filtering above
@@ -652,40 +402,16 @@ module ItsAutoInterop_Functions {
                                              v_gnInd
                ));
            }
            [vc_autoInteropDefaultActive] eutGeoNetworkingPort.receive { // Unexpected EutGeoNetworking message ==> require refine filtering above
            [vc_gnDefaultActive] eutGeoNetworkingPort.receive { // Unexpected EutGeoNetworking message ==> require refine filtering above
                log("*** a_default: ERROR: Received an unexpected message ***");
                f_selfOrClientSyncAndVerdict("error", e_error);
            }
            [] 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.
         */
@@ -720,7 +446,7 @@ module ItsAutoInterop_Functions {
                              inout ItsAutoInteropGeonetworking p_eut2,
                              inout ItsAutoInteropGeonetworking p_eut3,
                              inout ItsAutoInteropGeonetworking p_eut4*/
        ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ {
        ) runs on ItsMtc /* TITAN TODO: mtc ItsMtc system ItsAutoInteropGeoNetworkingSystem */ {
            [] a_shutdown() {
//                f_mtcCf01Down(p_eut1, p_eut2, p_eut3, p_eut4);
                log("*** a_mtcCf01Down: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***");
@@ -734,7 +460,7 @@ module ItsAutoInterop_Functions {
        altstep a_mtcCf02Down(
                              /*inout ItsAutoInteropGeonetworking p_eut1,
                              inout ItsAutoInteropGeonetworking p_eut2*/
        ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ {
        ) runs on ItsMtc /* TITAN TODO: mtc ItsMtc system ItsAutoInteropGeoNetworkingSystem */ {
            [] a_shutdown() {
//                f_mtcCf02Down(p_eut1, p_eut2);
                log("*** a_mtcCf02Down: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***");
@@ -749,7 +475,7 @@ module ItsAutoInterop_Functions {
                              /*inout ItsAutoInteropGeonetworking p_eut1,
                              inout ItsAutoInteropGeonetworking p_eut2,
                              inout ItsAutoInteropGeonetworking p_eut3*/
        ) runs on ItsAutoInteropGeoNetworkingMtc /* TITAN TODO: mtc ItsAutoInteropGeoNetworkingMtc system ItsAutoInteropGeoNetworkingSystem */ {
        ) runs on ItsMtc /* TITAN TODO: mtc ItsMtc system ItsAutoInteropGeoNetworkingSystem */ {
            [] a_shutdown() {
//                f_mtcCf03Down(p_eut1, p_eut2, p_eut3);
                log("*** a_mtcCf03Down: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***");
+11 −10
Original line number Diff line number Diff line
@@ -3,24 +3,15 @@ module ItsAutoInterop_Pics {
    // LibCommon
    import from LibCommon_BasicTypesAndValues all;
    
    // LibIts
    import from ITS_Container language "ASN.1:1997" all;
    import from CAM_PDU_Descriptions language "ASN.1:1997" all;
    import from DENM_PDU_Descriptions language "ASN.1:1997" all;
    
    // LibItsBtp
    import from LibItsBtp_TypesAndValues all;
    import from LibItsBtp_Templates all;
    
    // LibItsGeoNetworking
    import from LibItsGeoNetworking_TypesAndValues all;
    
    // LibItsSecurity
    import from LibItsSecurity_TypesAndValues all;
    
    /**
     * @desc BTP destination port identifier for CAM protocol 
     * @see  TODO
     * @see  ETSI DTS/ITS0144 Table 
     */
    modulepar BtpPortId PICS_CAM_BTP_DESTINATION_PORT  := 2001;
    
@@ -104,4 +95,14 @@ module ItsAutoInterop_Pics {
        elevation                                       := '0000'O
    }
    
    /**
     * @desc Absolute coordinate for TARGET_GEOAREA 
     * @see  TODO
     */
    modulepar ThreeDLocation PICS_TARGET_GEOAREA := {
        latitude                                        := 435522970,
        longitude                                       := 103000170,
        elevation                                       := '0000'O
    }
    
} // End of module ItsAutoInterop_Pics 
+3 −3
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ module ItsAutoInterop_Pixits {
    modulepar charstring PX_PCAP_MIDs_FILTER := "00:00:00:00:00:01;00:00:00:00:00:02";
    
    /**
     * @desc PCAP frame offsets to skip when starting to play the PCAP file 
     * @desc The PCAP frame offsets to skip when starting to play the PCAP file 
     */
    modulepar UInt32 PX_PCAP_START_OFFSET := 0;
    
@@ -74,9 +74,9 @@ module ItsAutoInterop_Pixits {
    modulepar integer PX_EUT4_ID := 3;
    
    /**
     * @desc Epsilon distance between the vehicule and a position
     * @desc Pre-defined security distance
     */
    modulepar float PX_EPSILON_DISTANCE := 1.0;
    modulepar float PX_PRE_DEFINED_SECURITY_DISTANCE := 0.0;
    
    /**
     * @desc Pre-defined security distance for forward collision risk condition
+13 −0
Original line number Diff line number Diff line
@@ -89,6 +89,19 @@ module ItsAutoInterop_Templates {
            longitude   := valueof(p_position.longitude)
        } // End of template mw_denm_stationId
        
        /**
         * @desc    Receive template for the destinationArea which indicates the TARGET_GEOAREA

         * @param   p_gnAddress GN_Address to be contained in the long position vector
         */
        template (present) LongPosVector mw_longPosVector_targetArea( 
                                                                     template (present) Int32 p_latitude := ?,
                                                                     template (present) Int32 p_longitude := ?
        ) := {
            latitude    := p_latitude,
            longitude   := p_longitude
        } // End of template mw_longPosVector_targetArea
        
        /**
         * @desc    Receive template for GeoNetworking DENM Packet
         * @param   p_sourceLongPosVec    Source position vector of destination
+1004 −179

File changed.

Preview size limit exceeded, changes collapsed.

Loading