Loading ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn +60 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 { Loading Loading @@ -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 Loading Loading @@ -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 Loading ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn +90 −16 Original line number Diff line number Diff line Loading @@ -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 */ Loading @@ -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. Loading Loading @@ -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; Loading ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pixits.ttcn +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn +51 −2 Original line number Diff line number Diff line Loading @@ -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( Loading @@ -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 { Loading @@ -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 { Loading ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn +129 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -72,7 +80,7 @@ module ItsRSUsSimulator_TestCases { f_processSrem(v_gnInd.msgIn); repeat; } [] geoNetworkingPort.receive( /*[] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacketWithNextHeader_denm( Loading @@ -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 Loading Loading @@ -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
ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn +60 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 { Loading Loading @@ -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 Loading Loading @@ -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 Loading
ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn +90 −16 Original line number Diff line number Diff line Loading @@ -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 */ Loading @@ -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. Loading Loading @@ -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; Loading
ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pixits.ttcn +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn +51 −2 Original line number Diff line number Diff line Loading @@ -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( Loading @@ -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 { Loading @@ -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 { Loading
ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn +129 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -72,7 +80,7 @@ module ItsRSUsSimulator_TestCases { f_processSrem(v_gnInd.msgIn); repeat; } [] geoNetworkingPort.receive( /*[] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacketWithNextHeader_denm( Loading @@ -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 Loading Loading @@ -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