ItsAutoInterop_Functions.ttcn 10 KB
Newer Older
module ItsAutoInterop_Functions { 
    
    // LibItsCommon
    import from LibItsCommon_TypesAndValues all;
    
    // LibItsGeoNetworking
    import from LibItsGeoNetworking_TypesAndValues all;
    import from LibItsGeoNetworking_Functions all;
    import from LibItsGeoNetworking_TestSystem all;
    
    // ItsInterop
    import from ItsAutoInterop_TestSystem all;
    
    /**
     * @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 ItsMtc system ItsGeoNetworkingSystem */ {
        
        // 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(
                         out ItsAutoInteropGeonetworking p_eut1,
                         out ItsAutoInteropGeonetworking p_eut2,
                         out ItsAutoInteropGeonetworking p_eut3,
                         out ItsAutoInteropGeonetworking p_eut4
    ) runs on ItsMtc /* TITAN TODO: mtc ItsMtc system ItsGeoNetworkingSystem */ {
        // 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_cf04Down());
    } // 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(
                         out ItsAutoInteropGeonetworking p_eut1, 
                         out ItsAutoInteropGeonetworking p_eut2
    ) runs on ItsMtc /* TITAN TODO: mtc ItsMtc system ItsGeoNetworkingSystem */ {
        // 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_cf02Down());
    } // 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(
                         out ItsAutoInteropGeonetworking p_eut1,
                         out ItsAutoInteropGeonetworking p_eut2,
                         out ItsAutoInteropGeonetworking p_eut3
    ) runs on ItsMtc /* TITAN TODO: mtc ItsMtc system ItsGeoNetworkingSystem */ {
      
        // 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_cf03Down());
    } // End of function f_mtcCf03Up
    /**
     * @desc Shutdown an EUT component
     * @param p_eut The component reference
     */
    function f_cfPtcDown(
                        inout ItsAutoInteropGeonetworking p_eut
    ) runs on ItsAutoInteropGeonetworking /* TITAN TODO: mtc ItsMtc system ItsGeoNetworkingSystem */ {
        
        // Wait components done
        p_eut.done;
        
        deactivate;
        
        // EUT
        //unmap(p_eut:acPort, system:acPort); Not used 
        //unmap(p_eut:utPort, system:utPort); Not used 
        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 ItsMtc /* TITAN TODO: mtc ItsMtc system ItsGeoNetworkingSystem */ {
        
        // 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 ItsMtc /* TITAN TODO: mtc ItsMtc system ItsGeoNetworkingSystem */ {
        
        // 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 ItsMtc /* TITAN TODO: mtc ItsMtc system ItsGeoNetworkingSystem */ {
        
        // 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
    
} // End of module ItsAutoInterop_Functions