Commit 03cf2f24 authored by garciay's avatar garciay
Browse files

Tart adding UC6 simulator

parent 5fadbdfe
Loading
Loading
Loading
Loading
+60 −5
Original line number Diff line number Diff line
@@ -25,6 +25,9 @@ module ItsRSUsSimulator_Functions {
    import from LibItsBtp_TypesAndValues all;
    import from LibItsBtp_Templates all;
    
    // LibItsCam
    import from LibItsCam_Templates all;
    
    // LibItsDenm
    import from LibItsDenm_Templates all;
    
@@ -103,6 +106,29 @@ module ItsRSUsSimulator_Functions {
        
    } // End of group rsuConfigurationFunctions
    
    function f_initialiseVehicleSimulatorComponent(
                                                   in ItsRSUsSimulator p_component,
                                                   out template (omit) CAM p_cam
    ) runs on ItsRSUsSimulator { 
        p_cam := 
            m_camMsg_vehicle(
                f_getTsStationId(),
                f_getCurrentTime() mod 65536,                        // Shall be updated in function f_prepare_vehicle_cam
                m_rsuPosition(
                    PICS_USECASE6_VEHICLE_POSITIONS[0].latitude,     // Shall be updated in function f_prepare_vehicle_cam
                    PICS_USECASE6_VEHICLE_POSITIONS[0].longitude     // Shall be updated in function f_prepare_vehicle_cam
                )
        );
        map(p_component:geoNetworkingPort, system:geoNetworkingPort);
    } // End of function f_initialiseVehicleSimulatorComponent
    
    function f_uninitialiseVehicleSimulatorComponent(
                                                     in ItsRSUsSimulator p_component
    ) runs on ItsRSUsSimulator { 
        p_component.done;
        unmap(p_component:geoNetworkingPort, system:geoNetworkingPort);
    } // End of function f_uninitialiseVehicleSimulatorComponent
    
    function f_setup_rsu(
                         in integer p_rsu_id
    ) runs on ItsRSUsSimulator { 
@@ -288,7 +314,7 @@ module ItsRSUsSimulator_Functions {
                e_any
            )
        );
    } // End of function f_prepare_cam
    } // End of function f_prepare_beacon
    
    function f_prepare_cam(
                           out template (value) Payload p_payload
@@ -487,6 +513,35 @@ module ItsRSUsSimulator_Functions {
        return v_payload;
    } // End of function f_adaptPayload
    
    function f_send_vehicle_cam(
                                in template (value) CAM p_cam,
                                in integer p_idx
    ) runs on ItsRSUsSimulator {
        // Local variables
        var template (value) Payload v_payload;
        
        p_cam.cam.generationDeltaTime := f_getCurrentTime() mod 65536; // See ETSI EN 302 637-2 V1.3.0 - Clause B.3 generationDelatTime
        p_cam.cam.camParameters.basicContainer.referencePosition := PICS_USECASE6_VEHICLE_POSITIONS[p_idx];
        v_payload := valueof(
            f_adaptPayload(
                bit2oct(
                    encvalue(
                        valueof(
                            p_cam
                ))),
                PICS_CAM_BTP_DESTINATION_PORT,
                PICS_CAM_BTP_SOURCE_PORT
            )
        );
        vc_longPosVectorRsu := PICS_UC6_VEHICLE_POSITION;
        vc_longPosVectorRsu.latitude := PICS_USECASE6_VEHICLE_POSITIONS[p_idx].latitude;
        vc_longPosVectorRsu.longitude := PICS_USECASE6_VEHICLE_POSITIONS[p_idx].longitude;
        vc_geoArea := PICS_UC6_VEHICLE_GEOAREA;
        vc_geoArea.area.geoAreaPosLatitude := PICS_USECASE6_VEHICLE_POSITIONS[p_idx].latitude;
        vc_geoArea.area.geoAreaPosLongitude := PICS_USECASE6_VEHICLE_POSITIONS[p_idx].longitude;
        f_send(v_payload, PICS_CAM_ITS_AID);
    } // End of function f_send_vehicle_cam
    
    function f_send(
                    in template (value) Payload p_payload,
                    in UInt32 p_its_aid
+90 −16
Original line number Diff line number Diff line
@@ -540,6 +540,22 @@ module ItsRSUsSimulator_Pics {
        
    } // End of group rsuParameters 
    
    /**
     * @desc This group describes the BEACON common settings for the RSUs CAM message broadcast
     */
    group beaconParams {
        
        /**
         * @desc Common settings
         */
        group beaconCommonSettings {
            
            modulepar UInt32 PICS_BEACON_ITS_AID                 := 38;
            
        } // End of group beaconCommonSettings
        
    } // End of group beaconParams
    
    /**
     * @desc This group describes the CAM common settings for the RSUs CAM message broadcast
     */
@@ -558,23 +574,81 @@ module ItsRSUsSimulator_Pics {
            
        } // End of group camCommonSettings
        
    } // End of group camParams 
        group camUseCase6 {
            
    /**
     * @desc This group describes the BEACON common settings for the RSUs CAM message broadcast
     */
    group beaconParams {
            group camUseCase6SyncLocation {
                
                modulepar LongPosVector PICS_UC6_DETECTION_POINT := {
                    gnAddr := {
                        typeOfAddress         := e_manual,
                        stationType           := e_unknown,
                        stationCountryCode    := 0,
                        mid                   := '000000000000'O
                    },
                    timestamp_                                    := 0,
                    latitude                                      := 1234,
                    longitude                                     := 1234,
                    pai                                           := '0'B,
                    speed                                         := 0,
                    heading                                       := 0
                }
                
                /**
         * @desc Common settings
                 * @desc Maximum synchronisation area to start sending CAM
                 */
        group beaconCommonSettings {
                modulepar float PICS_UC6_DETECTION_EPSILLON := 19.0;    // 2.0;
            
            modulepar UInt32 PICS_BEACON_ITS_AID                 := 38;
            } // End of group camUseCase6SyncLocation 
            
        } // End of group beaconCommonSettings
            group camUseCase6VehicleDescription {
                
    } // End of group rsuParameters 
                modulepar LongPosVector PICS_UC6_VEHICLE_POSITION := {
                    gnAddr := {
                        typeOfAddress         := e_manual,
                        stationType           := e_passengerCar,
                        stationCountryCode    := 33,
                        mid                   := 'AABBCCDDEEFF'O
                    },
                    timestamp_                                    := 0,
                    latitude                                      := 0,
                    longitude                                     := 0,
                    pai                                           := '0'B,
                    speed                                         := 30,
                    heading                                       := 0
                }
                
                modulepar GeoArea PICS_UC6_VEHICLE_GEOAREA := {
                    shape := e_geoElip,
                    area := {
                        geoAreaPosLatitude                        := 0,
                        geoAreaPosLongitude                       := 0,
                        distanceA                                 := 5,
                        distanceB                                 := 3,
                        angle                                     := 0
                    }
                }
                
            } // End of group camUseCase6VehicleDescription 
            
            modulepar Usecase6VehiclePositions PICS_USECASE6_VEHICLE_POSITIONS := {
                {
                    latitude                                    := 435525352,
                    longitude                                   := 103003415,
                    positionConfidenceEllipse                   := {
                        semiMajorConfidence   := SemiAxisLength_oneCentimeter_,
                        semiMinorConfidence   := SemiAxisLength_oneCentimeter_,
                        semiMajorOrientation  := HeadingValue_wgs84North_
                    },
                    altitude                                    := {
                        altitudeValue := AltitudeValue_referenceEllipsoidSurface_,
                        altitudeConfidence := unavailable
                    }
                }
            }
            
        } // End of group camUseCase6
        
    } // End of group camParams 
    
    /**
     * @desc This group describes the DENM common settings for the each use cases and for each RSU.
@@ -5532,9 +5606,9 @@ module ItsRSUsSimulator_Pics {
        
        modulepar boolean PICS_GENERATE_BEACON   := false;
        
        modulepar boolean PICS_GENERATE_CAM      := true;
        modulepar boolean PICS_GENERATE_CAM      := false;
        
        modulepar boolean PICS_GENERATE_DENM     := true;
        modulepar boolean PICS_GENERATE_DENM     := false;
        
        modulepar boolean PICS_GENERATE_IVIM     := false;
        
+1 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ module ItsRSUsSimulator_Pixits {
     * @desc Indicate which Use Case to simulate
     * @remark Used only for DENM
     */
    modulepar integer PX_ETSI_USE_CASE_ID := 1;
    modulepar integer PX_ETSI_USE_CASE_ID := 6;
    
    /**
     * @desc Indicate which zone to simulate
+51 −2
Original line number Diff line number Diff line
@@ -127,10 +127,15 @@ module ItsRSUsSimulator_Templates {
         * @param   p_nextHeader                Id of next header
         */
        template (present) GnNonSecuredPacket mw_geoNwTsbPacketWithNextHeader_denm(
                                                                                   in template (present) UInt16 p_seqNumber := ?,
                                                                                   in template (present) LongPosVector p_sourceLongPosVec := ?,
                                                                                   in template (present) UInt8 p_hopLimit := ?,
                                                                                   in template (value) NextHeader p_nextHeader
        ) modifies mw_geoNwTsbPacketWithNextHeader := {
        ) modifies mw_geoNwShbPacket := {
            commonHeader := mw_commonHeaderWithHopLimit(
                p_nextHeader,
                m_shbHeaderType,
                p_hopLimit
            ),
            payload := { 
                decodedPayload := { 
                    btpPacket := mw_btpB(
@@ -143,6 +148,29 @@ module ItsRSUsSimulator_Templates {
            }
        }
        
        /**
         * @desc    Receive template for GeoNetworking CAM Packet
         * @param   p_destinationShortPosVec    Short position vector of destination
         * @param   p_seqNumber                 Sequence number of GeoUnicast packet
         * @param   p_nextHeader                Id of next header
         */
        template (present) GnNonSecuredPacket mw_geoNwShbPacketWithNextHeader_cam(
                                                                                  in template (present) LongPosVector p_sourceLongPosVec := ?,
                                                                                  in template (present) UInt8 p_hopLimit := ?,
                                                                                  in template (value) NextHeader p_nextHeader
        ) modifies mw_geoNwShbPacket := {
            payload := { 
                decodedPayload := { 
                    btpPacket := mw_btpB(
                        PICS_CAM_BTP_DESTINATION_PORT, 
                        PICS_CAM_BTP_SOURCE_PORT, 
                        ?
                    )
                }, 
                rawPayload := ?
            }
        }
        
    } // End of group geoNetworkingTemplates 
    
    group positionTemplates {
@@ -167,6 +195,27 @@ module ItsRSUsSimulator_Templates {
            }
        } // End of template m_rsuPosition
        
        /**
         * @desc    Receive template for long position vector with strict position check
         * @param   p_longPosVector The base long position vector
         */
        template LongPosVector mw_longPosVectorPosition_vendors(
                                                                in template (value) LongPosVector p_longPosVector
        ) modifies mw_longPosVectorPosition := {
            gnAddr := {
                typeOfAddress := ?,
                stationType := ?,
                stationCountryCode := ?,
                mid := complement(p_longPosVector.gnAddr.mid)
            },
            timestamp_ := ?,
            latitude := ?,
            longitude := ?,
            //FIXME May the delta factor should be based on the actual speed value -> low speed=lower delta, high speed=higher delta
            speed := ?,
            heading := ?
        }
        
    } // End of group positionTemplates
    
    group camTemplates {
+129 −3
Original line number Diff line number Diff line
@@ -4,6 +4,10 @@ module ItsRSUsSimulator_TestCases {
    import from LibCommon_VerdictControl all;
    import from LibCommon_Sync all;
    
    // LibIts
    import from ITS_Container language "ASN.1:1997" all;
    import from CAM_PDU_Descriptions language "ASN.1:1997" all;
    
    // LibItsCommon
    import from LibItsCommon_Functions all;
    
@@ -11,6 +15,10 @@ module ItsRSUsSimulator_TestCases {
    import from LibItsGeoNetworking_TestSystem all;
    import from LibItsGeoNetworking_TypesAndValues all;
    import from LibItsGeoNetworking_Templates all;
    import from LibItsGeoNetworking_Functions {
        function
            f_distance
    };
    
    // LibItsDenm
    import from LibItsDenm_Templates all;
@@ -72,7 +80,7 @@ module ItsRSUsSimulator_TestCases {
                f_processSrem(v_gnInd.msgIn);
                repeat;
            }
            [] geoNetworkingPort.receive(
            /*[] geoNetworkingPort.receive(
                mw_geoNwInd(
                    mw_geoNwPdu(
                        mw_geoNwTsbPacketWithNextHeader_denm(
@@ -83,7 +91,7 @@ module ItsRSUsSimulator_TestCases {
                log("*** " & testcasename() & ": DEBUG: Processing DENM ***");
                // Nothing to do, just for logging purposes
                repeat;
            }
            }*/
            [] geoNetworkingPort.receive(mw_geoNwInd(?)) -> value v_gnInd { // Receive a message
                log("*** " & testcasename() & ": DEBUG: Recieving unsollicited message ***");
                // Nothing to do, just for logging purposes
@@ -147,6 +155,124 @@ module ItsRSUsSimulator_TestCases {
        // Postamble
        f_cf01Down();
        
    } // End of TC_RSUSIMU_BV_01
    
    /**
     * @remark: All PICS_GENERATE_xxx = false
     *          PICS_CAM_FREQUENCY = 0.1
     */
    testcase TC_RSUSIMU_BV_02() runs on ItsRSUsSimulator system ItsRSUsSimulatorSystem {
        // Local variables
        var VehiclesSimulator v_vehicles := {};
        var integer v_vehiclesIdx := 0;
        var charstring v_stationIDs := "";
        var charstring v_stationID;
        var GeoNetworkingInd v_gnInd;
        var CfEvent v_cfEvent;
        
        // Test control
        
        // Test component configuration
        f_cf01Up();
            
        // Test adapter configuration
        
        // Preamble
        f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
        
        // Test Body
        tc_ac.start;
        alt {
            [] geoNetworkingPort.receive(
                mw_geoNwInd(
                    mw_geoNwPdu(
                        mw_geoNwShbPacketWithNextHeader_cam(
                            mw_longPosVectorPosition_vendors(
                                PICS_UC6_VEHICLE_POSITION
                            ),
                            ?,
                            e_btpB
            )))) -> value v_gnInd { // Receive a DENM message
                tc_ac.stop;
                // Check if already processed
                v_stationID := int2str(v_gnInd.msgIn.gnPacket.packet.payload.decodedPayload.btpPacket.payload.decodedPayload.camPacket.header.stationID);
                if (regexp(v_stationID, charstring:"([1-9]#(1,6)),", 0) == "") { // Non simulated vehicle
                    // Compute point intersection
                    if (LibItsGeoNetworking_Functions.f_distance(
                        v_gnInd.msgIn.gnPacket.packet.extendedHeader.shbHeader.srcPosVector,
                        PICS_UC6_DETECTION_POINT
                        ) <= PICS_UC6_DETECTION_EPSILLON
                    ) {
                        v_vehicles[v_vehiclesIdx] := ItsRSUsSimulator.create("Node" & int2char(v_vehiclesIdx + 65)) alive;
                        v_vehicles[v_vehiclesIdx].start(f_startVehicleSimulator(v_vehicles[v_vehiclesIdx], v_vehiclesIdx));
                        v_vehiclesIdx := v_vehiclesIdx + 1;
                        v_stationIDs := v_stationIDs & v_stationID & ",";
                    }
                } else {
                    // Nothing to do
                }
                tc_ac.start;
                repeat;
            }
            [] geoNetworkingPort.receive { // Receive a message
                log("*** " & testcasename() & ": DEBUG: Recieving unsollicited message ***");
                // Nothing to do, just for logging purposes
                tc_ac.stop;
                tc_ac.start;
                repeat;
            }
            [] cfPort.receive(CfEvent:?) -> value v_cfEvent {
                log("*** " & testcasename() & ": DEBUG: Configuration port command:", v_cfEvent, " ***");
                if (f_process_cf_event(v_cfEvent) == true) {
                    repeat;
                }
                all component.stop;
            }
            [] tc_ac.timeout {
                log("*** " & testcasename() & ": DEBUG: No CAM message received ***");
                all component.stop;
            }
        } // End of 'alt' statement
        f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success);
        
        // Postamble
        for (var integer v_idx := 0; v_idx < lengthof(v_vehicles); v_idx := v_idx + 1) {
            v_vehicles[v_idx].done;
        } // End of 'for' statement
        f_cf01Down();
        
    } // End of TC_RSUSIMU_BV_02
    
    group tc_RSUSIMU_BV_02 {
        
        function f_startVehicleSimulator(
                                         in ItsRSUsSimulator p_component,
                                         in integer p_idx
        ) runs on ItsRSUsSimulator {
            
            // Local variables
            var integer v_idx := 0;
            var template (value) CAM v_cam;
            
            f_initialiseVehicleSimulatorComponent(p_component, v_cam);
            
            tc_cam.start;
            alt {
                [] tc_cam.timeout {
                    log("*** " & testcasename() & ": DEBUG: Processing CAM ***");
                    f_send_vehicle_cam(v_cam, v_idx);
                    v_idx := v_idx + 1;
                    if (v_idx < lengthof(PICS_USECASE6_VEHICLE_POSITIONS)) {
                        tc_cam.start;
                        repeat;
                    } // else, terminate
                }
            } // End of 'altstep' statement
            
            f_uninitialiseVehicleSimulatorComponent(p_component);
            
        } // End of f_startVehicleSimulator
        
    } // End of group tc_RSUSIMU_BV_02 
    
} // End of module ItsRSUsSimulator_TestCases
 No newline at end of file
Loading