module ItsRSUsSimulator_TestCases { // Libcommon 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; // LibItsGeoNetworking 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; // AtsRSUsSimulator import from ItsRSUsSimulator_TypesAndValues all; import from ItsRSUsSimulator_Templates all; import from ItsRSUsSimulator_TestSystem all; import from ItsRSUsSimulator_Functions all; import from ItsRSUsSimulator_Pics all; import from ItsRSUsSimulator_Pixits all; testcase TC_RSUSIMU_BV_01() runs on ItsRSUsSimulator system ItsRSUsSimulatorSystem { // Local variables var template (value) Payload v_payload; var GeoNetworkingInd v_gnInd; var CfEvent v_cfEvent; // Test control // Test component configuration ItsRSUsSimulator_Functions.f_cf01Up(); // Test adapter configuration // Preamble f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if (ispresent(vc_rsuMessagesValueList[vc_rsu_id].beacon)) { tc_beacon.start; } if (ispresent(vc_rsuMessagesValueList[vc_rsu_id].cam)) { tc_cam.start; } if (ispresent(vc_rsuMessagesValueList[vc_rsu_id].denms)) { tc_denm.start; } if (ispresent(vc_rsuMessagesValueList[vc_rsu_id].mapem)) { tc_mapem.start; } if (ispresent(vc_rsuMessagesValueList[vc_rsu_id].spatems)) { tc_spatem.start; } if (ispresent(vc_rsuMessagesValueList[vc_rsu_id].ivim)) { tc_ivim.start; } alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacketWithNextHeader_srem( ?, ?, e_btpB )))) -> value v_gnInd { // Receive a SREM message log("*** " & testcasename() & ": DEBUG: Processing SREM ***"); f_processSrem(v_gnInd.msgIn); repeat; } /*[] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacketWithNextHeader_denm( ?, ?, e_btpB // TODO Refined to exclude RSU StationID )))) -> value v_gnInd { // Receive a DENM message 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 repeat; } [] cfPort.receive(CfEvent:?) -> value v_cfEvent { log("*** " & testcasename() & ": DEBUG: Configuration port command:", v_cfEvent, " ***"); if (f_process_cf_event(v_cfEvent) == true) { repeat; } } [vc_beacon == true] tc_beacon.timeout { log("*** " & testcasename() & ": DEBUG: Processing BEACON ***"); f_prepare_beacon(v_payload); f_send(v_payload, PICS_CAM_ITS_AID); tc_beacon.start; repeat; } [vc_cam == true] tc_cam.timeout { log("*** " & testcasename() & ": DEBUG: Processing CAM ***"); f_prepare_cam(v_payload); f_send(v_payload, PICS_CAM_ITS_AID); tc_cam.start; repeat; } [vc_denm == true] tc_denm.timeout { log("*** " & testcasename() & ": DEBUG: Processing DENM ***"); for (var integer v_i := 0; v_i < lengthof(vc_rsuMessagesValueList[vc_rsu_id].denms); v_i := v_i + 1) { f_prepare_denm(v_payload); f_send(v_payload, PICS_DENM_ITS_AID); } // End of 'for' tc_denm.start; repeat; } [vc_mapem == true] tc_mapem.timeout { log("*** " & testcasename() & ": DEBUG: Processing MAPEM ***"); f_prepare_mapem(v_payload); f_send(v_payload, PICS_MAPEM_ITS_AID); tc_mapem.start; repeat; } [vc_spatem == true] tc_spatem.timeout { log("*** " & testcasename() & ": DEBUG: Processing SPATEM ***"); for (var integer v_counter := 0; v_counter < lengthof(vc_rsuMessagesValueList[PX_RSU_ID - 1].spatems); v_counter := v_counter + 1) { f_prepare_spatem(vc_rsuMessagesValueList[PX_RSU_ID - 1].spatems[v_counter], v_payload); f_send(v_payload, PICS_SPATEM_ITS_AID); } tc_spatem.start; repeat; } [vc_ivim == true] tc_ivim.timeout { log("*** " & testcasename() & ": DEBUG: Processing IVIM ***"); f_prepare_ivim(v_payload); f_send(v_payload, PICS_IVIM_ITS_AID); tc_ivim.start; repeat; } } // End of 'alt' statement f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble ItsRSUsSimulator_Functions.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 ItsRSUsSimulator_Functions.f_cf01Up(); // Test adapter configuration // Preamble f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; geoNetworkingPort.clear; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwShbPacketWithNextHeader_cam( mw_longPosVectorPosition_vendors( PICS_UC6_VEHICLE_POSITION.gnAddr.mid // Ignore RSUsimultor CAM messages ), -, e_btpB )))) { // Receive a owner CAM message repeat; } [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwShbPacketWithNextHeader_cam( -,/*mw_longPosVectorPosition_vendors( PICS_UC6_VEHICLE_POSITION.gnAddr.mid // Ignore RSUsimultor CAM messages ),*/ -, e_btpB )))) -> value v_gnInd { // Receive a CAM 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_stationIDs, charstring:"(" & v_stationID & ",)", 0) == "") { // Vehicle already processed? // Compute point intersection var float v_distance := LibItsGeoNetworking_Functions.f_distance( v_gnInd.msgIn.gnPacket.packet.extendedHeader.shbHeader.srcPosVector, PICS_UC6_DETECTION_POINT ); if (ff_abs(v_distance - PICS_UC6_DETECTION_DISTANCE) < PICS_UC6_DETECTION_EPSILLON) { log("*** " & testcasename() & ": DEBUG: StationID: " & v_stationID & " in of area (", ff_abs(v_distance - PICS_UC6_DETECTION_DISTANCE), ") ***"); 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 & ","; //log("*** " & testcasename() & ": DEBUG: New v_stationIDs: " & v_stationIDs & " ***"); } else { // Nothing to do log("*** " & testcasename() & ": DEBUG: StationID: " & v_stationID & " out of area (", ff_abs(v_distance - PICS_UC6_DETECTION_DISTANCE), ") ***"); } } else { // Nothing to do //log("*** " & testcasename() & ": DEBUG: StationID: " & v_stationID & " already processed ***"); } tc_ac.start; repeat; } [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( ? ))) { // Receive a CAM 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 ItsRSUsSimulator_Functions.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; //log("*** " & testcasename() & ": DEBUG: >>> f_startVehicleSimulator: " & int2str(p_idx) & " ***"); f_initialiseVehicleSimulatorComponent(p_component, v_cam); tc_ca_uc6.start; alt { /*[] cfPort.receive { repeat; }*/ [] tc_ca_uc6.timeout { log("*** " & testcasename() & ": DEBUG: Processing CAM #" & int2str(v_idx) & " ***"); tc_ca_uc6.stop; f_send_vehicle_cam(v_cam, v_idx); v_idx := v_idx + 1; if (v_idx < lengthof(PICS_USECASE6_VEHICLE_POSITIONS)) { tc_ca_uc6.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