From 4da49c9941a5361d3d7a5cba284a0a40dd83ee18 Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 24 Nov 2016 10:07:39 +0000 Subject: [PATCH] Plugtest settings --- .../ItsRSUsSimulator_Functions.ttcn | 92 ++++++++++--- .../ItsRSUsSimulator_Pics.ttcn | 123 +++++++++++++++--- .../ItsRSUsSimulator_Pixits.ttcn | 20 +-- .../ItsRSUsSimulator_Templates.ttcn | 53 +++++++- .../ItsRSUsSimulator_TestCases.ttcn | 77 +++++++---- .../ItsRSUsSimulator_TestSystem.ttcn | 2 + .../ItsRSUsSimulator_TypesAndValues.ttcn | 19 +++ 7 files changed, 319 insertions(+), 67 deletions(-) diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn index d8a7f99e7..022f119dd 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn @@ -14,6 +14,7 @@ module ItsRSUsSimulator_Functions { import from MAPEM_PDU_Descriptions language "ASN.1:1997" all; import from SPATEM_PDU_Descriptions language "ASN.1:1997" all; import from IVIM_PDU_Descriptions language "ASN.1:1997" all; + import from EVCSN_PDU_Descriptions language "ASN.1:1997" all; import from SREM_PDU_Descriptions language "ASN.1:1997" all; import from SSEM_PDU_Descriptions language "ASN.1:1997" all; import from DSRC language "ASN.1:1997" all; @@ -185,6 +186,7 @@ module ItsRSUsSimulator_Functions { var template (omit) MAPEM v_mapem := omit; var template (omit) SPATEMs v_spatems := omit; var template (omit) IVIM v_ivim := omit; + var template (omit) EvcsnPdu v_evcsn := omit; var template (omit) SSEM v_ssem := omit; var integer v_counter; @@ -250,6 +252,27 @@ module ItsRSUsSimulator_Functions { } else { vc_ivim := false; } + // EVCSN, only if PX_ETSI_USE_CASE_ID is set to 8 + if ((vc_evcsn == true) and (PX_ETSI_USE_CASE_ID == 8)) { + // Build the list of the EVCSN events + v_evcsn := + m_evcsnParm( + PICS_RSU_PARAMS[p_rsu_id].stationID, + m_evcsn( + m_itsPOIHeader( + -, + 0, // To be updated at run time + - + ), + m_itsEVCSNData( + -, + { PICS_ITS_CHARGING } + ) + )); + // Update poi status + } else { + vc_evcsn := false; + } // DENM, only if PX_ETSI_USE_CASE_ID is set to 1 if ((vc_denm == true) and (PX_ETSI_USE_CASE_ID == 1)) { // Build the list of the DENM events for the specified RSU (PX_RSU_ID) and the given zone (PX_ETSI_ZONE_ID) @@ -364,6 +387,7 @@ module ItsRSUsSimulator_Functions { v_mapem, v_spatems, v_ivim, + v_evcsn, v_ssem ); if (PICS_RSU_PARAMS[p_rsu_id].geoShape == e_geoCircle) { @@ -520,10 +544,14 @@ module ItsRSUsSimulator_Functions { } } // End of 'select' statement } - if (v_currentTimeMark >= vc_endPhaseStartTime) { // Change state - vc_spatemStatesId := (vc_spatemStatesId + 1) mod vc_spatemStatesNum; - vc_currentPhaseStartTime := v_currentTimeMark; - vc_endPhaseStartTime := f_computeEndPhaseStartTime(vc_currentPhaseStartTime, PICS_SPATEM_REPITITION_DURATION_STATE_30); + if (v_currentTimeMark >= vc_endPhaseStartTime) { + var float t := (int2float(v_currentTimeMark - vc_endPhaseStartTime) / int2float(v_currentTimeMark)); + log("t = ", t); + if (t < 1.0) { // Change state + vc_spatemStatesId := (vc_spatemStatesId + 1) mod vc_spatemStatesNum; + vc_currentPhaseStartTime := v_currentTimeMark; + vc_endPhaseStartTime := f_computeEndPhaseStartTime(vc_currentPhaseStartTime, PICS_SPATEM_REPITITION_DURATION_STATE_30); + } } log("vc_currentPhaseStartTime = ", vc_currentPhaseStartTime); log("v_currentTimeMark = ", v_currentTimeMark); @@ -535,25 +563,26 @@ module ItsRSUsSimulator_Functions { v_spatem.spat.intersections[v_intersection].states := { v_states[vc_spatemStatesId] }; v_spatem.spat.intersections[v_intersection].moy := f_getMinuteOfTheYear(); v_spatem.spat.intersections[v_intersection].timeStamp := f_getDSecond(); + v_spatem.spat.intersections[v_intersection].revision := (valueof(v_spatem.spat.intersections[v_intersection].revision) + 1) mod 128; select (vc_spatemStatesId) { - case (0) { - v_spatem.spat.intersections[v_intersection].states[1] := v_states[1]; + case (0) { // permissive_Movement_Allowed + v_spatem.spat.intersections[v_intersection].states[1] := v_states[1]; // permissive-clearance //v_spatem.spat.intersections[v_intersection].states[2] := v_states[2]; // Update startTime & minEndTime v_spatem.spat.intersections[v_intersection].states[0].state_time_speed[0].timing.minEndTime := f_computeEndPhaseStartTime(vc_currentPhaseStartTime, PICS_SPATEM_REPITITION_DURATION_STATE_30); v_spatem.spat.intersections[v_intersection].states[1].state_time_speed[0].timing.startTime := f_computeEndPhaseStartTime(vc_currentPhaseStartTime, PICS_SPATEM_REPITITION_DURATION_STATE_30); v_spatem.spat.intersections[v_intersection].states[1].state_time_speed[0].timing.minEndTime := f_computeEndPhaseStartTime(vc_currentPhaseStartTime, PICS_SPATEM_REPITITION_DURATION_STATE_40); } - case (1) { - v_spatem.spat.intersections[v_intersection].states[1] := v_states[2]; + case (1) { // permissive-clearance + v_spatem.spat.intersections[v_intersection].states[1] := v_states[2]; // stop-And-Remain //v_spatem.spat.intersections[v_intersection].states[2] := v_states[0]; // Update startTime & minEndTime v_spatem.spat.intersections[v_intersection].states[0].state_time_speed[0].timing.minEndTime := f_computeEndPhaseStartTime(v_currentTimeMark, PICS_SPATEM_REPITITION_DURATION_STATE_10); v_spatem.spat.intersections[v_intersection].states[1].state_time_speed[0].timing.startTime := f_computeEndPhaseStartTime(vc_currentPhaseStartTime, PICS_SPATEM_REPITITION_DURATION_STATE_10); v_spatem.spat.intersections[v_intersection].states[1].state_time_speed[0].timing.minEndTime := f_computeEndPhaseStartTime(vc_currentPhaseStartTime, PICS_SPATEM_REPITITION_DURATION_STATE_30); } - case (2) { - v_spatem.spat.intersections[v_intersection].states[1] := v_states[0]; + case (2) { // stop-And-Remain + v_spatem.spat.intersections[v_intersection].states[1] := v_states[0]; // permissive_Movement_Allowed //v_spatem.spat.intersections[v_intersection].states[2] := v_states[1]; // Update startTime & minEndTime v_spatem.spat.intersections[v_intersection].states[0].state_time_speed[0].timing.minEndTime := f_computeEndPhaseStartTime(vc_currentPhaseStartTime, PICS_SPATEM_REPITITION_DURATION_STATE_20); @@ -597,6 +626,25 @@ module ItsRSUsSimulator_Functions { ); } // End of function f_prepare_ivim + function f_prepare_evcsn( + out template (value) Payload p_payload + ) runs on ItsRSUsSimulator { + + vc_rsuMessagesValueList[vc_rsu_id].evcsn.evcsn.poiHeader.timeStamp := f_getCurrentTime(); // Check if it is ITS or UTC time + log("vc_rsuMessagesValueList[vc_rsu_id].evcsn", valueof(vc_rsuMessagesValueList[vc_rsu_id].evcsn)); + p_payload := valueof( + f_adaptPayload( + bit2oct( + encvalue( + valueof( + vc_rsuMessagesValueList[vc_rsu_id].evcsn + ))), + PICS_EVCSN_BTP_DESTINATION_PORT, + PICS_EVCSN_BTP_SOURCE_PORT + ) + ); + } // End of function f_prepare_evcsn + function f_adaptPayload( in template (value) octetstring p_finalPayload, in template (value) BtpPortId p_destPort, @@ -652,7 +700,17 @@ module ItsRSUsSimulator_Functions { return v_payload; } // End of function f_adaptPayload - + + function f_isInApproach( + in ThreeDLocation p_detectionPoint, + in ThreeDLocation p_location, + in float p_dist := 150.0 + ) return boolean { + var float v_dist := fx_computeDistance(p_detectionPoint.latitude, p_detectionPoint.longitude, p_location.latitude, p_location.longitude); + log("v_dist = ", v_dist); + return v_dist <= p_dist; + } + function f_mirror_and_send_vehicle_cam( in template (value) CAM p_camSimu, in CAM p_camVehicle, @@ -663,12 +721,12 @@ module ItsRSUsSimulator_Functions { var template (value) Payload v_payload; // Apply 90° rotation - if (PICS_USE_SPV == true) { + if (PICS_USE_LPV == true) { fx_computePositionFromRotation( p_location.latitude, p_location.longitude, - PICS_UC6_COLLISION_POINT.latitude, - PICS_UC6_COLLISION_POINT.longitude, + PICS_UC6_COLLISION_POINT_Z2.latitude, // Z1 + PICS_UC6_COLLISION_POINT_Z2.longitude, // Z1 900, v_newPosition.latitude, v_newPosition.longitude @@ -678,9 +736,9 @@ module ItsRSUsSimulator_Functions { fx_computePositionFromRotation( p_camVehicle.cam.camParameters.basicContainer.referencePosition.latitude, p_camVehicle.cam.camParameters.basicContainer.referencePosition.longitude, - PICS_UC6_COLLISION_POINT.latitude, - PICS_UC6_COLLISION_POINT.longitude, - 900, + PICS_UC6_COLLISION_POINT_Z2.latitude, // Z1 + PICS_UC6_COLLISION_POINT_Z2.longitude, // Z1 + 2450, v_newPosition.latitude, v_newPosition.longitude ); diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn index c998fe87f..63f8bf7ea 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn @@ -11,6 +11,7 @@ module ItsRSUsSimulator_Pics { import from SPATEM_PDU_Descriptions language "ASN.1:1997" all; import from IVIM_PDU_Descriptions language "ASN.1:1997" all; import from IVI language "ASN.1:1997" all; + import from EVCSN_PDU_Descriptions language "ASN.1:1997" all; import from SREM_PDU_Descriptions language "ASN.1:1997" all; import from SSEM_PDU_Descriptions language "ASN.1:1997" all; import from DSRC language "ASN.1:1997" all; @@ -457,7 +458,7 @@ module ItsRSUsSimulator_Pics { } } // End of PICS_UC6_VEHICLE_GEOAREA - modulepar boolean PICS_USE_SPV := true; + modulepar boolean PICS_USE_LPV := true; } // End of group camUseCase6VehicleTemplateDescription @@ -468,16 +469,25 @@ module ItsRSUsSimulator_Pics { /** * @desc Coordinates of the collision point */ - modulepar ThreeDLocation PICS_UC6_COLLISION_POINT := { + modulepar ThreeDLocation PICS_UC6_COLLISION_POINT_Z1 := { latitude := 435522970, longitude := 103000170, elevation := '0000'O } // End of PICS_UC6_COLLISION_POINT + /** + * @desc Coordinates of the collision point + */ + modulepar ThreeDLocation PICS_UC6_COLLISION_POINT_Z2 := { + latitude := 435512220, + longitude := 103000290, + elevation := '0000'O + } // End of PICS_UC6_COLLISION_POINT_Z2 + /** * @desc Vehicle detection area */ - modulepar RectangularRegion PICS_UC6_CAM_DETECTION_AREA := { + modulepar RectangularRegion PICS_UC6_CAM_DETECTION_AREA_Z1 := { northwest := { latitude := 435529170, longitude := 102998330 @@ -486,7 +496,27 @@ module ItsRSUsSimulator_Pics { latitude := 435522420, longitude := 103011400 } - } // End of PICS_UC6_CAM_DETECTION_AREA + } // End of PICS_UC6_CAM_DETECTION_AREA_Z1 + + /** + * @desc Vehicle detection area + */ + modulepar RectangularRegion PICS_UC6_CAM_DETECTION_AREA_Z2 := { + northwest := { + latitude := 435530140, + longitude := 102984290 + }, + southeast := { + latitude := 435501600, + longitude := 103012880 + } + } // End of PICS_UC6_CAM_DETECTION_AREA_Z2 + + modulepar ThreeDLocation PX_UC6_APPROACH_POINT_Z2 := { + latitude := 435511100, + longitude := 102988040, + elevation := '0000'O + }; } // End of group camUseCase6SyncLocation @@ -2644,7 +2674,7 @@ module ItsRSUsSimulator_Pics { group mapemZone1 { modulepar IntersectionReferenceID PICS_Z1_M1_SL_IDX := { - region := 1, + region := 3, id := 13001 } // End of PICS_Z1_M1_SL_IDX @@ -2800,7 +2830,7 @@ module ItsRSUsSimulator_Pics { group mapemZone2 { modulepar IntersectionReferenceID PICS_Z2_M1_SL_IDX := { - region := 1, + region := 3, id := 23001 } // End of PICS_Z2_M1_SL_IDX @@ -2956,7 +2986,7 @@ module ItsRSUsSimulator_Pics { group mapemZone3 { modulepar IntersectionReferenceID PICS_Z3_M1_SL_IDX := { - region := 1, + region := 3, id := 33001 } // End of PICS_Z3_M1_SL_IDX @@ -3112,7 +3142,7 @@ module ItsRSUsSimulator_Pics { group mapemZone4 { modulepar IntersectionReferenceID PICS_Z4_M1_SL_IDX := { - region := 1, + region := 3, id := 43001 } // End of PICS_Z4_M1_SL_IDX @@ -3268,7 +3298,7 @@ module ItsRSUsSimulator_Pics { group mapemZone5 { modulepar IntersectionReferenceID PICS_Z5_M1_SL_IDX := { - region := 1, + region := 3, id := 53001 } // End of PICS_Z5_M1_SL_IDX @@ -3424,7 +3454,7 @@ module ItsRSUsSimulator_Pics { group mapemZone6 { modulepar IntersectionReferenceID PICS_Z6_M1_SL_IDX := { - region := 1, + region := 3, id := 63001 } // End of PICS_Z6_M1_SL_IDX @@ -4182,14 +4212,14 @@ module ItsRSUsSimulator_Pics { modulepar UInt32 PICS_IVIM_ITS_AID := 139; modulepar PosConfidenceEllipse PICS_IVIM_POSITION_CONFIDENCE_ELLIPSE := { - semiMajorConfidence := SemiAxisLength_oneCentimeter_, - semiMinorConfidence := SemiAxisLength_oneCentimeter_, - semiMajorOrientation := HeadingValue_wgs84North_ + semiMajorConfidence := 100, + semiMinorConfidence := 100, + semiMajorOrientation := 0 } // End of PICS_DENM_POSITION_CONFIDENCE_ELLIPSE modulepar Altitude PICS_IVIM_ALTITUDE := { altitudeValue := AltitudeValue_referenceEllipsoidSurface_, - altitudeConfidence := unavailable + altitudeConfidence := alt_000_01 } // End of PICS_DENM_ALTITUDE } // End of group ivimCommonParams @@ -4277,7 +4307,7 @@ module ItsRSUsSimulator_Pics { modulepar IvimParm PICS_Z1_I1_POS1 := { provider := { - countryCode := '0000000001'B, + countryCode := '1100000001'B, providerIdentifier := 13 }, iviIdentificationNumber := 12, @@ -5616,6 +5646,64 @@ module ItsRSUsSimulator_Pics { } // End of group ivimEvents + group poimEvents { + + group poimCommonParams { + + modulepar BtpPortId PICS_EVCSN_BTP_DESTINATION_PORT := 2010; + + modulepar BtpPortId PICS_EVCSN_BTP_SOURCE_PORT := 0; + + modulepar UInt32 PICS_EVCSN_ITS_AID := 100; // FIXME Find the correct value + + modulepar ItsChargingSpotDataElements PICS_CHARGING_SPOT_DATA_01 := { + type_ := ChargingSpotType_standardOrFastChargeMode3_, + evEquipmentID := omit, + typeOfReceptacle := '000'B, + energyAvailability := "all", + parkingPlacesData := omit + } // End of PICS_CHARGING_SPOT_DATA_01 + + } // End of group poimCommonParams + + group poimZone1 { + + modulepar ReferencePosition PICS_POI_LOCATION_01 := { + latitude := 435582150, + longitude := 103065170, + positionConfidenceEllipse := { + semiMajorConfidence := 100, + semiMinorConfidence := 100, + semiMajorOrientation := 0 + }, + altitude := { + altitudeValue := AltitudeValue_referenceEllipsoidSurface_, + altitudeConfidence := alt_000_01 + } + } // End of PICS_POI_LOCATION_01 + + modulepar ItsChargingStationData PICS_ITS_CHARGING := { + chargingStationID := 9876, + utilityDistributorId := omit, + providerID := omit, + chargingStationLocation := PICS_POI_LOCATION_01, + address_ := omit, + phoneNumber := omit, + accessibility := "open", + digitalMap := omit, + openingDaysHours := "full", + pricing := "2.00", + bookingContactInfo := omit, + payment := omit, + chargingSpotsAvailable := { PICS_CHARGING_SPOT_DATA_01 } + } + } + modulepar PoimParmListRsu PICS_EVCSN_PARMS_RSUs := { + PICS_ITS_CHARGING // RSU #1 + } + + } // End of group poimEvents + group ssemEvents { group ssemCommonParams { @@ -5676,6 +5764,11 @@ module ItsRSUsSimulator_Pics { */ modulepar float PICS_IVIM_FREQUENCY := 1.0; + /** + * @desc EVCSN frequency timer + */ + modulepar float PICS_EVCSN_FREQUENCY := 1.0; + } // End of group generationFrequencies } // End of module ItsRSUsSimulator_Pics \ No newline at end of file diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pixits.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pixits.ttcn index 462a687f4..9ab30ebd9 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pixits.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pixits.ttcn @@ -27,18 +27,18 @@ module ItsRSUsSimulator_Pixits { /** * @desc Indicate which Use Case to simulate * @remark UC1 (DENM only): PX_ETSI_USE_CASE_ID := 1 - * UC3 (TLM MAPEM/SPATEM): PX_ETSI_USE_CASE_ID := 3 !! PX_RSU_ID 2 - * UC5 (IVIM only): PX_ETSI_USE_CASE_ID := 5 !! PX_RSU_ID 2 - * UC6 (CAM only): PX_ETSI_USE_CASE_ID := 6 !! PX_RSU_ID 2 - * UC7 (CAM only): PX_ETSI_USE_CASE_ID := 7 !! PX_RSU_ID 2 - * UC9 (CAM only): PX_ETSI_USE_CASE_ID := 9 !! PX_RSU_ID 5 + * UC3 (TLM MAPEM/SPATEM): PX_ETSI_USE_CASE_ID := 3 + * UC5 (IVIM only): PX_ETSI_USE_CASE_ID := 5 + * UC6 (CAM only): PX_ETSI_USE_CASE_ID := 6 + * UC7 (CAM only): PX_ETSI_USE_CASE_ID := 7 + * UC8 (EVCSN only): PX_ETSI_USE_CASE_ID := 8 + * UC9 (CAM only): PX_ETSI_USE_CASE_ID := 9 * @remark LibItsGeoNetworking_Pixits.PX_GN_UPPER_LAYER := e_btpB */ - modulepar integer PX_ETSI_USE_CASE_ID := 1; + modulepar integer PX_ETSI_USE_CASE_ID := 6; /** * @desc Indicate which zone to simulate - * @remark Used only for DENM */ modulepar integer PX_ETSI_ZONE_ID := 1; @@ -46,7 +46,7 @@ module ItsRSUsSimulator_Pixits { modulepar boolean PICS_GENERATE_CAM := true; - modulepar boolean PICS_GENERATE_DENM := true; + modulepar boolean PICS_GENERATE_DENM := false; modulepar boolean PICS_GENERATE_IVIM := false; @@ -54,6 +54,8 @@ module ItsRSUsSimulator_Pixits { modulepar boolean PICS_GENERATE_SPATEM := false; - modulepar boolean PICS_GENERATE_SSEM := true; + modulepar boolean PICS_GENERATE_SSEM := false; + + modulepar boolean PICS_GENERATE_EVCSN := false; } // End of module ItsRSUsSimulator_Pixits diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn index b04315dd2..b05dbaca7 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn @@ -11,6 +11,7 @@ module ItsRSUsSimulator_Templates { import from SPATEM_PDU_Descriptions language "ASN.1:1997" all; import from IVIM_PDU_Descriptions language "ASN.1:1997" all; import from IVI language "ASN.1:1997" all; + import from EVCSN_PDU_Descriptions language "ASN.1:1997" all; import from SSEM_PDU_Descriptions language "ASN.1:1997" all; import from DSRC language "ASN.1:1997" all; @@ -52,6 +53,7 @@ module ItsRSUsSimulator_Templates { in template (omit) MAPEM p_mapem := omit, in template (omit) SPATEMs p_spatems := omit, in template (omit) IVIM p_ivim := omit, + in template (omit) EvcsnPdu p_evcsn := omit, in template (omit) SSEM p_ssem := omit ) := { beacon := p_beacon, @@ -59,7 +61,9 @@ module ItsRSUsSimulator_Templates { denms := p_denms, mapem := p_mapem, spatems := p_spatems, - ivim := p_ivim + ivim := p_ivim, + evcsn := p_evcsn, + ssem := p_ssem } // End of template RsuMessagesValue group geoNetworkingTemplates { @@ -190,7 +194,7 @@ module ItsRSUsSimulator_Templates { template (present) GnNonSecuredPacket mw_geoNwShbPacketWithNextHeader_cam( in template (present) LongPosVector p_sourceLongPosVec := ?, in template (present) UInt8 p_hopLimit := ?, - in template (value) NextHeader p_nextHeader, + in template (present) NextHeader p_nextHeader, in template (present) CAM p_cam := ? ) modifies mw_geoNwShbPacket := { payload := { @@ -371,7 +375,49 @@ module ItsRSUsSimulator_Templates { ivi := p_ivi } - } // End of group ivimTemplates + } // End of ivimTemplates + + group evcsnTemplates { + + template (value) EvcsnPdu m_evcsnParm( + in template (value) StationID p_stationID, + in template (value) EVChargingSpotNotificationPOIMessage p_evcsn + ) := { + header := { + protocolVersion := ItsPduHeader_protocolVersion_currentVersion_, + messageID := 7, //ItsPduHeader_messageID_evcsn_, + stationID := p_stationID + }, + evcsn := p_evcsn + } + + template (value) EVChargingSpotNotificationPOIMessage m_evcsn( + in template (value) ItsPOIHeader p_poiHeader, + in template (value) ItsEVCSNData p_evcsnData + ) := { + poiHeader := p_poiHeader, + evcsnData := p_evcsnData + } + + template (value) ItsPOIHeader m_itsPOIHeader( + in template (value) POIType p_poiType := 1, + in template (value) TimestampIts p_timeStamp, + in template (value) boolean p_relayCapable := true + ) := { + poiType := p_poiType, + timeStamp := p_timeStamp, + relayCapable := p_relayCapable + } + + template (value) ItsEVCSNData m_itsEVCSNData( + in template (value) NumberStations p_totalNumberOfStations := 1, + in template (value) ItsChargingStationDatas p_itsChargingStationDatas + ) := { + totalNumberOfStations := p_totalNumberOfStations, + chargingStationsData := p_itsChargingStationDatas + } + + } // End of group evcsnTemplates group denmTemplates { @@ -444,6 +490,7 @@ module ItsRSUsSimulator_Templates { roadType := omit } // End of field locationContainer } // End of template m_denmParm + } // End of group denmTemplates } // End of module ItsRSUsSimulator_Templates \ No newline at end of file diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn index dd306e777..2f467d91d 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn @@ -66,9 +66,13 @@ module ItsRSUsSimulator_TestCases { if (ispresent(vc_rsuMessagesValueList[vc_rsu_id].ivim)) { tc_ivim.start; } + if (ispresent(vc_rsuMessagesValueList[vc_rsu_id].evcsn)) { + tc_evcsn.start; + } + geoNetworkingPort.clear; alt { - [] geoNetworkingPort.receive( + /*[] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacketWithNextHeader_srem( @@ -80,7 +84,7 @@ module ItsRSUsSimulator_TestCases { f_processSrem(v_gnInd.msgIn); repeat; } - /*[] geoNetworkingPort.receive( + [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacketWithNextHeader_denm( @@ -91,12 +95,12 @@ 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 repeat; - } + }*/ /*[] cfPort.receive(CfEvent:?) -> value v_cfEvent { //log("*** " & testcasename() & ": DEBUG: Configuration port command:", v_cfEvent, " ***"); if (f_process_cf_event(v_cfEvent) == true) { @@ -149,6 +153,13 @@ module ItsRSUsSimulator_TestCases { tc_ivim.start; repeat; } + [vc_evcsn == true] tc_evcsn.timeout { + //log("*** " & testcasename() & ": DEBUG: Processing EVCSN ***"); + f_prepare_evcsn(v_payload); + f_send(v_payload, PICS_EVCSN_ITS_AID); + tc_evcsn.start; + repeat; + } } // End of 'alt' statement f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); @@ -169,7 +180,7 @@ module ItsRSUsSimulator_TestCases { */ testcase TC_RSUSIMU_BV_02() runs on ItsRSUsSimulator system ItsRSUsSimulatorSystem { // Local variables - const RectangularRegions c_detectionArea := { PICS_UC6_CAM_DETECTION_AREA }; + const RectangularRegions c_detectionArea := { PICS_UC6_CAM_DETECTION_AREA_Z2 }; // PICS_UC6_CAM_DETECTION_AREA_Z1 var VehiclesSimulator v_vehicles := {}; var integer v_stationID; var boolean v_isInDetectionZone; @@ -180,7 +191,8 @@ module ItsRSUsSimulator_TestCases { var CfEvent v_cfEvent; // Test control - if (f_isLocationInsideRectangularRegion(c_detectionArea, PICS_UC6_COLLISION_POINT) == false) { + if (f_isLocationInsideRectangularRegion(c_detectionArea, PICS_UC6_COLLISION_POINT_Z2) == false) { //PICS_UC6_COLLISION_POINT_Z1 + log("Collision location is outside of the area"); stop; } @@ -210,7 +222,8 @@ module ItsRSUsSimulator_TestCases { e_btpB )))) -> value v_gnInd { // Receive a CAM message tc_ac.stop; - if (PICS_USE_SPV == true) { + //log("v_gnInd = ", v_gnInd); + if (PICS_USE_LPV == true) { v_location := { v_gnInd.msgIn.gnPacket.packet.extendedHeader.shbHeader.srcPosVector.latitude, v_gnInd.msgIn.gnPacket.packet.extendedHeader.shbHeader.srcPosVector.longitude, @@ -239,24 +252,25 @@ module ItsRSUsSimulator_TestCases { log("*** " & testcasename() & ": ERROR: Increase the size of the file ***"); stop; } - v_isInDetectionZone := f_isLocationInsideRectangularRegion(c_detectionArea, v_location); + //v_isInDetectionZone := f_isLocationInsideRectangularRegion(c_detectionArea, v_location); + v_isInDetectionZone := f_isInApproach(PX_UC6_APPROACH_POINT_Z2, v_location, 100.0); log("v_idx: ", v_idx); log("v_vehicles[v_idx]: ", v_vehicles[v_idx]); log("v_notProcessed: ", v_notProcessed); log("v_isInDetectionZone: ", v_isInDetectionZone); if (v_notProcessed == true) { // Vehicle not processed yet if (v_isInDetectionZone == true) { // Check if it entered into the rectangular area - if (v_vehicles[v_idx].detectionCounter == 0) { // First detection, wait one CAM to confrm detection + /*if (v_vehicles[v_idx].detectionCounter == 0) { // First detection, wait one CAM to confrm detection // Prepare component - v_vehicles[v_idx].detectionCounter := v_vehicles[v_idx].detectionCounter + 1; + v_vehicles[v_idx].detectionCounter := v_vehicles[v_idx].detectionCounter + 1;*/ v_vehicles[v_idx].component_ := ItsRSUsSimulator.create("Node" & int2char(v_idx + 65)) alive; // Wait next message in detection area - } else { + /*} else {*/ log("*** " & testcasename() & ": DEBUG: StationID: " & int2str(v_stationID) & " is entering in area ***"); - v_vehicles[v_idx].detectionCounter := 0; + v_vehicles[v_idx].detectionCounter := 1;/*0;*/ v_vehicles[v_idx].detected := true; v_vehicles[v_idx].component_.start(f_startVehicleSimulator(v_vehicles[v_idx].component_, v_idx, v_gnInd.msgIn.gnPacket.packet.payload.decodedPayload.btpPacket.payload.decodedPayload.camPacket)); - } + /*}*/ } else { // Nothing to do // log("*** " & testcasename() & ": DEBUG: StationID: " & int2str(v_stationID) & " is outside of area ***"); @@ -278,25 +292,39 @@ module ItsRSUsSimulator_TestCases { } } else { // Nothing to do -// log("*** " & testcasename() & ": DEBUG: StationID: " & int2str(v_stationID) & " already processed ***"); + log("*** " & testcasename() & ": DEBUG: StationID: " & int2str(v_stationID) & " already processed ***"); } tc_ac.start; repeat; } + [] geoNetworkingPort.receive( + mw_geoNwInd( + mw_geoNwPdu( + ? + ))) -> value v_gnInd { // Receive a CAM message + tc_ac.stop; +// log("v_gnInd = ", v_gnInd); + tc_ac.start; + repeat; + } /*[] cfPort.receive { tc_cam.stop; all component.stop; }*/ [] tc_ac.timeout { log("*** " & testcasename() & ": DEBUG: No CAM message received ***"); - all component.stop; + //all component.stop; + tc_ac.start; + repeat; } } // End of 'alt' statement f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble for (v_idx := 0; v_idx < lengthof(v_vehicles); v_idx := v_idx + 1) { - v_vehicles[v_idx].component_.kill; + if (isbound(v_vehicles[v_idx].component_)) { + v_vehicles[v_idx].component_.kill; + } } // End of 'for' statement ItsRSUsSimulator_Functions.f_cf01Down(); @@ -311,7 +339,7 @@ module ItsRSUsSimulator_TestCases { ) runs on ItsRSUsSimulator { // Local variables - const RectangularRegions c_detectionArea := { PICS_UC6_CAM_DETECTION_AREA }; + const RectangularRegions c_detectionArea := { PICS_UC6_CAM_DETECTION_AREA_Z2 }; // PICS_UC6_CAM_DETECTION_AREA_Z1 var GeoNetworkingInd v_gnInd; var template (value) CAM v_camSimu; var ThreeDLocation v_location; @@ -319,7 +347,7 @@ module ItsRSUsSimulator_TestCases { f_initialiseVehicleSimulatorComponent(p_component, p_vehicleIndex, v_camSimu); - tc_wait.start; + tc_ac.start; geoNetworkingPort.clear; alt { [] geoNetworkingPort.receive( @@ -333,9 +361,9 @@ module ItsRSUsSimulator_TestCases { -, p_camVehicle.header.stationID ))))) -> value v_gnInd { // Receive a CAM message from the processed vehicle - tc_wait.stop; + tc_ac.stop; // log("*** " & testcasename() & ": DEBUG: Processing CAM #" & int2str(p_camVehicle.header.stationID) & " ***"); - if (PICS_USE_SPV == true) { + if (PICS_USE_LPV == true) { v_location := { v_gnInd.msgIn.gnPacket.packet.extendedHeader.shbHeader.srcPosVector.latitude, v_gnInd.msgIn.gnPacket.packet.extendedHeader.shbHeader.srcPosVector.longitude, @@ -350,10 +378,12 @@ module ItsRSUsSimulator_TestCases { } f_mirror_and_send_vehicle_cam(v_camSimu, v_gnInd.msgIn.gnPacket.packet.payload.decodedPayload.btpPacket.payload.decodedPayload.camPacket, v_location/*To ne removed*/); // Check if the behicule leave the area - v_inArea := f_isLocationInsideRectangularRegion(c_detectionArea, v_location); + //v_inArea := f_isLocationInsideRectangularRegion(c_detectionArea, v_location); + v_inArea := f_isInApproach(PX_UC6_APPROACH_POINT_Z2, v_location, 100.0); + log("*** " & testcasename() & ": DEBUG: In area: ", v_inArea, " ***"); if (v_inArea == true) { - tc_wait.start; + tc_ac.start; repeat; } else { log("*** " & testcasename() & ": PASS: Terminate component for #" & int2str(p_camVehicle.header.stationID) & " ***"); @@ -364,12 +394,13 @@ module ItsRSUsSimulator_TestCases { tc_wait.stop; repeat; }*/ - [] tc_wait.timeout { + [] tc_ac.timeout { log("*** " & testcasename() & ": DEBUG: No CAM message received ***"); } } // End of 'altstep' statement f_uninitialiseVehicleSimulatorComponent(p_component); + log("*** " & testcasename() & ": DEBUG: Exit ***"); } // End of f_startVehicleSimulator diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestSystem.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestSystem.ttcn index c1eb494a3..5e523db24 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestSystem.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestSystem.ttcn @@ -88,12 +88,14 @@ module ItsRSUsSimulator_TestSystem { var boolean vc_ivim := PICS_GENERATE_IVIM; var boolean vc_mapem := PICS_GENERATE_MAPEM; var boolean vc_spatem := PICS_GENERATE_SPATEM; + var boolean vc_evcsn := PICS_GENERATE_EVCSN; timer tc_beacon := PICS_BEACON_FREQUENCY; timer tc_cam := PICS_CAM_FREQUENCY; timer tc_denm := PICS_DENM_FREQUENCY; timer tc_mapem := PICS_MAPEM_FREQUENCY; timer tc_spatem := PICS_SPATEM_FREQUENCY; timer tc_ivim := PICS_IVIM_FREQUENCY; + timer tc_evcsn := PICS_EVCSN_FREQUENCY; } // End of component ItsRSUsSimulator diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TypesAndValues.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TypesAndValues.ttcn index 3b0ccdb7e..09deadf1b 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TypesAndValues.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TypesAndValues.ttcn @@ -11,6 +11,7 @@ module ItsRSUsSimulator_TypesAndValues { import from SPATEM_PDU_Descriptions language "ASN.1:1997" all; import from IVIM_PDU_Descriptions language "ASN.1:1997" all; import from IVI language "ASN.1:1997" all; + import from EVCSN_PDU_Descriptions language "ASN.1:1997" all; import from SSEM_PDU_Descriptions language "ASN.1:1997" all; import from DSRC language "ASN.1:1997" all; import from EfcDsrcApplication language "ASN.1:1997" all; @@ -50,6 +51,7 @@ module ItsRSUsSimulator_TypesAndValues { MAPEM mapem optional, SPATEMs spatems optional, IVIM ivim optional, + EvcsnPdu evcsn optional, SSEM ssem optional } // End of type RsuMessagesValue @@ -199,6 +201,23 @@ module ItsRSUsSimulator_TypesAndValues { } // End of group ivimDataStructures + /** + * @desc evcsn setup + */ + group evcsnDataStructures { + + type record length (1 .. 256) of ItsChargingStationData ItsChargingStationDatas; + + /** + * @desc List of evcsn parms per RSU + *
+             *     v_provider := PICS_evcsn_PARMS_RSUs[PX_RSU_ID - 1].povider;
+             * 
+ */ + type record of ItsChargingStationData PoimParmListRsu; + + } // End of group evcsnDataStructures + /** * @desc DENM setup */ -- GitLab