diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn index 1867ef62993aadc974529bffb1f57f9e603e57ec..89e2a9aeba3f2365083ac8b5e8352a5fb27f4b3d 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn @@ -11,6 +11,11 @@ module ItsRSUsSimulator_Functions { import from ITS_Container language "ASN.1:1997" all; import from CAM_PDU_Descriptions language "ASN.1:1997" all; import from DENM_PDU_Descriptions language "ASN.1:1997" all; + 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 SREM_PDU_Descriptions language "ASN.1:1997" all; + import from SSEM_PDU_Descriptions language "ASN.1:1997" all; // LibItsCommon import from LibItsCommon_Functions all; @@ -52,9 +57,10 @@ module ItsRSUsSimulator_Functions { var template (value) DenmParmContainers v_denmParmContainers; var template (omit) DENMs v_denms := omit; var template (omit) CAM v_cam := omit; -// var template (omit) MAPEM v_mapem := omit; -// var template (omit) SPATEMs v_spatems := omit; -// var template (omit) SSEM v_ssem := omit; + var template (omit) MAPEM v_mapem := omit; + var template (omit) SPATEMs v_spatems := omit; + var template (omit) IVIM v_ivim := omit; + var template (omit) SSEM v_ssem := omit; var integer v_counter; // Map @@ -79,9 +85,11 @@ module ItsRSUsSimulator_Functions { if (PICS_GENERATE_DENM) { // Build the list of the DENM events for (v_counter := 0; v_counter < lengthof(PICS_DENM_EVENTS_RSU[PX_RSU_ID - 1]); v_counter := v_counter + 1) { + // Build DENM with dynamic values v_denmParmContainers := m_denmParmContainers( PICS_RSU_PARAMS[PX_RSU_ID - 1].stationID, f_getDenmSequenceNumber(), + PICS_DENM_REPETITION_INTERVAL, PICS_DENM_EVENTS_RSU[PX_RSU_ID - 1][v_counter].eventPosition, PICS_DENM_EVENTS_RSU[PX_RSU_ID - 1][v_counter].causeCodeType, PICS_DENM_EVENTS_RSU[PX_RSU_ID - 1][v_counter].eventHistory @@ -93,6 +101,9 @@ module ItsRSUsSimulator_Functions { v_denmParmContainers.situationContainer, v_denmParmContainers.locationContainer ))); + if (ispresent(PICS_DENM_EVENTS_RSU[PX_RSU_ID - 1][v_counter].roadWorksContainerExtended)) { + v_denms[v_counter].denm.alacarte := m_alacarte(PICS_DENM_EVENTS_RSU[PX_RSU_ID - 1][v_counter].roadWorksContainerExtended); + } } // End of 'for' loop } if (PICS_GENERATE_CAM) { @@ -109,14 +120,15 @@ module ItsRSUsSimulator_Functions { ); } // Build the messages value list for this RSU - vc_rsuMessagesValueList[PX_RSU_ID - 1] := valueof( + vc_rsuMessagesValueList[PX_RSU_ID - 1] := m_rsuProfile( v_cam, - v_denms/*, + v_denms, v_mapem, - v_spatems - v_ssem*/ - )); + v_spatems, + v_ivim, + v_ssem + ); if (PICS_RSU_PARAMS[PX_RSU_ID - 1].geoShape == e_geoCircle) { vc_geoArea := f_computeCircularArea(vc_longPosVectorRsu, PICS_RSU_PARAMS[PX_RSU_ID - 1].geoParms.radius); } else { @@ -129,6 +141,8 @@ module ItsRSUsSimulator_Functions { function f_cf01Down() runs on ItsRSUsSimulator { + vc_rsuMessagesValueList := {}; + f_uninitialiseSecuredMode(); // Unmap diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn index 74d192a6d44b507e8e5b17e7231d6639ce95c796..9ce4a737c2981329624769904527f3d7b2d36539 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn @@ -105,6 +105,11 @@ module ItsRSUsSimulator_Pics { altitudeConfidence := unavailable } // End of PICS_DENM_ALTITUDE + /** + * @desc DENM repetition interval, in ms + */ + modulepar TransmissionInterval PICS_DENM_REPETITION_INTERVAL := 1000; + } // End of group denmCommonParams group denmZone1 { @@ -136,6 +141,24 @@ module ItsRSUsSimulator_Pics { eventDeltaTime := omit, informationQuality := 0 } + }, + roadWorksContainerExtended := { + lightBarSirenInUse := omit, + closedLanes := { + hardShoulderStatus := availableForDriving, + drivingLaneStatus := '0001'B + }, + restriction := omit, + speedLimit := 30, + incidentIndication := omit, + recommendedPath := omit, + startingPointSpeedLimit := { + deltaLatitude := 0, + deltaLongitude := 0, + deltaAltitude := 0 + }, + trafficFlowRule := passToRight, + referenceDenms := omit } } // End of PICS_Z1_D1_EP @@ -166,6 +189,24 @@ module ItsRSUsSimulator_Pics { eventDeltaTime := omit, informationQuality := 0 } + }, + roadWorksContainerExtended := { + lightBarSirenInUse := omit, + closedLanes := { + hardShoulderStatus := availableForDriving, + drivingLaneStatus := '0011'B + }, + restriction := omit, + speedLimit := 30, + incidentIndication := omit, + recommendedPath := omit, + startingPointSpeedLimit := { + deltaLatitude := 0, + deltaLongitude := 0, + deltaAltitude := 0 + }, + trafficFlowRule := passToRight, + referenceDenms := omit } } // End of PICS_Z1_D2_EP @@ -196,6 +237,24 @@ module ItsRSUsSimulator_Pics { eventDeltaTime := omit, informationQuality := 0 } + }, + roadWorksContainerExtended := { + lightBarSirenInUse := omit, + closedLanes := { + hardShoulderStatus := closed, + drivingLaneStatus := '01'B + }, + restriction := omit, + speedLimit := 30, + incidentIndication := omit, + recommendedPath := omit, + startingPointSpeedLimit := { + deltaLatitude := 0, + deltaLongitude := 0, + deltaAltitude := 0 + }, + trafficFlowRule := passToRight, + referenceDenms := omit } } // End of PICS_Z1_D3_EP @@ -305,7 +364,7 @@ module ItsRSUsSimulator_Pics { /** * @desc DENM frequency timer */ - modulepar float PICS_DENM_FREQUENY := 0.1; + modulepar float PICS_DENM_FREQUENY := int2float(PICS_DENM_REPETITION_INTERVAL) / 1000.0; /** * @desc MAPEM frequency timer diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn index 5451a24d99686172ad9ec811ce64c1645c644c8f..199d1fdb044892b7e656f547bbbcc2c687025fa4 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn @@ -10,7 +10,6 @@ module ItsRSUsSimulator_Templates { 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 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; @@ -45,17 +44,18 @@ module ItsRSUsSimulator_Templates { import from ItsRSUsSimulator_Pics all; template (omit) RsuMessagesValue m_rsuProfile( - in template (value) CAM p_cam, - in template (value) DENMs p_denms, + in template (omit) CAM p_cam := omit, + in template (omit) DENMs p_denms := omit, in template (omit) MAPEM p_mapem := omit, - in template (omit) SPATEM p_spatem := omit, - in template (omit) IVIM p_ivim := omit + in template (omit) SPATEMs p_spatems := omit, + in template (omit) IVIM p_ivim := omit, + in template (omit) SSEM p_ssem := omit ) := { - cam := p_cam, - denms := p_denms, - mapem := p_mapem, - spatem := p_spatem, - ivim := p_ivim + cam := p_cam, + denms := p_denms, + mapem := p_mapem, + spatems := p_spatems, + ivim := p_ivim } // End of template RsuMessagesValue group geoNetworkingTemplates { @@ -170,9 +170,24 @@ module ItsRSUsSimulator_Templates { group denmTemplates { + /** + * @desc Send template for Alacarte Container including lanePosition + */ + template (omit) AlacarteContainer m_alacarte( + in template (omit) RoadWorksContainerExtended p_roadWorksContainerExtended + ) := { + lanePosition := omit, + impactReduction := omit, + externalTemperature := omit, + roadWorks := p_roadWorksContainerExtended, + positioningSolution := omit, + stationaryVehicle := omit + } + template (value) DenmParmContainers m_denmParmContainers( in template (value) StationID p_originatingStationID, in template (value) SequenceNumber p_sequenceNumber, + in template (value) TransmissionInterval p_repetitionInterval, in template (value) ReferencePosition p_eventPosition, in template (value) CauseCodeType p_causeCodeType, in template (value) EventHistory p_eventHistory, @@ -184,14 +199,14 @@ module ItsRSUsSimulator_Templates { originatingStationID := p_originatingStationID, sequenceNumber := p_sequenceNumber }, - detectionTime := f_getCurrentTime(), - referenceTime := 0, + detectionTime := 0, + referenceTime := f_getCurrentTime(), // FIXME To be checked termination := omit, eventPosition := p_eventPosition, relevanceDistance := p_relevanceDistance, relevanceTrafficDirection := omit, validityDuration := p_validityDuration, - transmissionInterval := omit, + transmissionInterval := p_repetitionInterval, stationType := StationType_roadSideUnit_ }, // End of field managementContainer situationContainer := { @@ -220,7 +235,6 @@ module ItsRSUsSimulator_Templates { }, roadType := omit } // End of field locationContainer - } // End of template m_denmParm } // End of group denmTemplates diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn index dbe8af4455f3c591c2b33e354769e7df48ffde37..0aabbf4e706bfc87fc8348e37a080cb2d7626b18 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn @@ -38,19 +38,19 @@ module ItsRSUsSimulator_TestCases { f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body - if (isbound(vc_rsuMessagesValueList[PX_RSU_ID - 1].cam)) { + if (ispresent(vc_rsuMessagesValueList[PX_RSU_ID - 1].cam)) { tc_cam.start; } - if (isbound(vc_rsuMessagesValueList[PX_RSU_ID - 1].denms)) { + if (ispresent(vc_rsuMessagesValueList[PX_RSU_ID - 1].denms)) { tc_denm.start; } - if (isbound(vc_rsuMessagesValueList[PX_RSU_ID - 1].mapem)) { + if (ispresent(vc_rsuMessagesValueList[PX_RSU_ID - 1].mapem)) { tc_mapem.start; } - if (isbound(vc_rsuMessagesValueList[PX_RSU_ID - 1].spatem)) { + if (ispresent(vc_rsuMessagesValueList[PX_RSU_ID - 1].spatems)) { tc_spatem.start; } - if (isbound(vc_rsuMessagesValueList[PX_RSU_ID - 1].ivim)) { + if (ispresent(vc_rsuMessagesValueList[PX_RSU_ID - 1].ivim)) { tc_ivim.start; } alt { diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestControl.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestControl.ttcn index 066f7933717f3ae5eadadb57726af40a7f2922ca..82f10c178baa6c63435b1bb00fd5e17e92ace38c 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestControl.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestControl.ttcn @@ -2,6 +2,7 @@ module ItsRSUsSimulator_TestControl { // AtsRSUsSimulator import from ItsRSUsSimulator_TestCases all; + import from LibItsGeoNetworking_Templates all; control { diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestSystem.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestSystem.ttcn index 053771e519c7e58d26f50285fff0606b90fbf6f5..869e729d059dd2458a47d5f3aed451ec811cd576 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestSystem.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestSystem.ttcn @@ -15,7 +15,7 @@ module ItsRSUsSimulator_TestSystem { var LongPosVector vc_longPosVectorRsu := {}; var GeoArea vc_geoArea := {}; - var RsuMessagesValueList vc_rsuMessagesValueList := {}; + var template (value) RsuMessagesValueList vc_rsuMessagesValueList := {}; var integer vc_denmEventCounter := 0; timer tc_cam := PICS_CAM_FREQUENY; diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TypesAndValues.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TypesAndValues.ttcn index 307431e4f8429e8439d28352a0d5bb33e78b7b8e..9ca48a5af1483756d4039a60be98a2947cd32d41 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TypesAndValues.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TypesAndValues.ttcn @@ -10,7 +10,6 @@ module ItsRSUsSimulator_TypesAndValues { 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 SREM_PDU_Descriptions language "ASN.1:1997" all; import from SSEM_PDU_Descriptions language "ASN.1:1997" all; // LibItsGeoNetworking @@ -26,17 +25,23 @@ module ItsRSUsSimulator_TypesAndValues { */ type record of DENM DENMs; + /** + * @desc This is the list of SPATEM events hosted by a single RSU + */ + type record of SPATEM SPATEMs; + /** * @desc Defines the list of messages to be sent by a single RSU * @member cam CAM message that a RSU shall send * @member denms List of DENM events that a RSU shall send */ type record RsuMessagesValue { - CAM cam, - DENMs denms, + CAM cam optional, + DENMs denms optional, MAPEM mapem optional, - SPATEM spatem optional, - IVIM ivim optional + SPATEMs spatems optional, + IVIM ivim optional, + SSEM ssem optional } // End of type RsuMessagesValue /** @@ -48,7 +53,7 @@ module ItsRSUsSimulator_TypesAndValues { ManagementContainer managementContainer, SituationContainer situationContainer, LocationContainer locationContainer - } // End of type DenmParm + } // End of type DenmParmContainers /** * @desc This is the list of DENM dynamic parameters for the different events hosted by a single RSU @@ -120,9 +125,10 @@ module ItsRSUsSimulator_TypesAndValues { * @desc Describe the parameter for each DENM event */ type record DenmParm { - ReferencePosition eventPosition, - CauseCodeType causeCodeType, - EventHistory eventHistory + ReferencePosition eventPosition, + CauseCodeType causeCodeType, + EventHistory eventHistory, + RoadWorksContainerExtended roadWorksContainerExtended optional } // End of type DenmParm /**