From 28b03d5f1e3e825be84fc3c5b82683b8ec6982f9 Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 4 Aug 2016 06:48:41 +0000 Subject: [PATCH] Add MAPEM support --- .../ItsRSUsSimulator_Functions.ttcn | 90 +++++++--- .../ItsRSUsSimulator_Pics.ttcn | 167 +++++++++++++++--- .../ItsRSUsSimulator_Templates.ttcn | 12 ++ .../ItsRSUsSimulator_TestCases.ttcn | 44 ++--- .../ItsRSUsSimulator_TestSystem.ttcn | 6 + .../ItsRSUsSimulator_TypesAndValues.ttcn | 20 ++- 6 files changed, 275 insertions(+), 64 deletions(-) diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn index 89e2a9aeb..052f4f42e 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn @@ -16,6 +16,7 @@ module ItsRSUsSimulator_Functions { 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; // LibItsCommon import from LibItsCommon_Functions all; @@ -27,6 +28,9 @@ module ItsRSUsSimulator_Functions { // LibItsDenm import from LibItsDenm_Templates all; + // LibItsMapemSpatemm + import from LibItsMapemSpatem_Templates all; + // LibItsGeoNetworking import from LibItsGeoNetworking_TestSystem all; import from LibItsGeoNetworking_Functions all; @@ -80,43 +84,66 @@ module ItsRSUsSimulator_Functions { // Initialisations vc_longPosVectorRsu := PICS_RSU_PARAMS[PX_RSU_ID - 1].longPosVector; - // TODO MAPEM - // TODO IVIM + // MAPEM + if (PICS_GENERATE_MAPEM) { + // Build the list of the MAPEM events + v_mapem := + m_mapemParm( + PICS_RSU_PARAMS[PX_RSU_ID - 1].stationID, + m_mapem( + f_getMsgIssueRevision(), + PICS_MAPEM_PARMS_RSUs[PX_RSU_ID - 1].intersections, + PICS_MAPEM_PARMS_RSUs[PX_RSU_ID - 1].roadSegments + )); + // Update revision fields + v_mapem.map_.intersections[0].revision := f_incMsgIssueRevision(); + // TODO Add more? + } + // SPATEM + if (PICS_GENERATE_SPATEM) { + // TODO + } + // IVIM + if (PICS_GENERATE_IVIM) { + // TODO + } + // DENM 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(), + f_incDenmSequenceNumber(), 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 ); v_denms[v_counter] := valueof( - m_denmPdu( - m_denm( - v_denmParmContainers.managementContainer, - v_denmParmContainers.situationContainer, - v_denmParmContainers.locationContainer - ))); + m_denmPdu( + m_denm( + v_denmParmContainers.managementContainer, + 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 } + // CAM if (PICS_GENERATE_CAM) { // Build the list of the CAM events v_cam := valueof( - m_camParm( - PICS_RSU_PARAMS[PX_RSU_ID - 1].stationID, - m_rsuPosition( - vc_longPosVectorRsu.latitude, - vc_longPosVectorRsu.longitude - ), - PICS_RSU_PARAMS[PX_RSU_ID - 1].pathHistory - ) + m_camParm( + PICS_RSU_PARAMS[PX_RSU_ID - 1].stationID, + m_rsuPosition( + vc_longPosVectorRsu.latitude, + vc_longPosVectorRsu.longitude + ), + PICS_RSU_PARAMS[PX_RSU_ID - 1].pathHistory + ) ); } // Build the messages value list for this RSU @@ -197,8 +224,17 @@ module ItsRSUsSimulator_Functions { out template (value) Payload p_payload ) runs on ItsRSUsSimulator { - p_payload := {}; // FIXME To be developped - + p_payload := valueof( + f_adaptPayload( + bit2oct( + encvalue( + valueof( + vc_rsuMessagesValueList[PX_RSU_ID - 1].mapem + ))), + PICS_MAPEM_BTP_DESTINATION_PORT, + PICS_MAPEM_BTP_SOURCE_PORT + ) + ); } function f_prepare_spatem( @@ -304,8 +340,22 @@ module ItsRSUsSimulator_Functions { return vc_localSeqNumber; } + function f_incMsgIssueRevision() runs on ItsRSUsSimulator return MsgCount { + vc_msgIssueRevision := (vc_msgIssueRevision + 1) mod 128; // See MsgCount declaration + return vc_msgIssueRevision; + } + + function f_getMsgIssueRevision() runs on ItsRSUsSimulator return MsgCount { + return vc_msgIssueRevision; + } + + function f_incDenmSequenceNumber() runs on ItsRSUsSimulator return SequenceNumber { + vc_sequenceNumber := (vc_sequenceNumber + 1) mod 65536; // See SequenceNumber declaration + return vc_sequenceNumber; + } + function f_getDenmSequenceNumber() runs on ItsRSUsSimulator return SequenceNumber { - return 12345; // FIXME To be refined + return vc_sequenceNumber; } } // End of module ItsRSUsSimulator_Functions \ No newline at end of file diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn index 9ce4a737c..7687844aa 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn @@ -80,7 +80,7 @@ module ItsRSUsSimulator_Pics { modulepar BtpPortId PICS_CAM_BTP_DESTINATION_PORT := 2001; - modulepar BtpPortId PICS_CAM_BTP_SOURCE_PORT := 0; + modulepar BtpPortId PICS_CAM_BTP_SOURCE_PORT := 0; } // End of group camCommonParams @@ -92,7 +92,7 @@ module ItsRSUsSimulator_Pics { modulepar BtpPortId PICS_DENM_BTP_DESTINATION_PORT := 2002; - modulepar BtpPortId PICS_DENM_BTP_SOURCE_PORT := 0; + modulepar BtpPortId PICS_DENM_BTP_SOURCE_PORT := 0; modulepar PosConfidenceEllipse PICS_DENM_POSITION_CONFIDENCE_ELLIPSE := { semiMajorConfidence := SemiAxisLength_oneCentimeter_, @@ -116,10 +116,10 @@ module ItsRSUsSimulator_Pics { modulepar DenmParm PICS_Z1_D1_EP := { eventPosition := { - latitude := 435517392, - longitude := 103018217, - positionConfidenceEllipse := PICS_DENM_POSITION_CONFIDENCE_ELLIPSE, - altitude := PICS_DENM_ALTITUDE + latitude := 435517392, + longitude := 103018217, + positionConfidenceEllipse := PICS_DENM_POSITION_CONFIDENCE_ELLIPSE, + altitude := PICS_DENM_ALTITUDE }, causeCodeType := CauseCodeType_roadworks_, eventHistory := { @@ -208,6 +208,7 @@ module ItsRSUsSimulator_Pics { trafficFlowRule := passToRight, referenceDenms := omit } + } // End of PICS_Z1_D2_EP modulepar DenmParm PICS_Z1_D3_EP := { @@ -256,6 +257,7 @@ module ItsRSUsSimulator_Pics { trafficFlowRule := passToRight, referenceDenms := omit } + } // End of PICS_Z1_D3_EP } // End of group denmZone1 @@ -288,32 +290,149 @@ module ItsRSUsSimulator_Pics { group mapemCommonParams { - modulepar BtpPortId PICS_MAPEM_BTP_DESTINATION_PORT := 2003; + modulepar BtpPortId PICS_MAPEM_BTP_DESTINATION_PORT := 2003; - modulepar BtpPortId PICS_MAPEM_BTP_SOURCE_PORT := 0; + modulepar BtpPortId PICS_MAPEM_BTP_SOURCE_PORT := 0; modulepar BtpPortId PICS_SPATEM_BTP_DESTINATION_PORT := 2004; - modulepar BtpPortId PICS_SPATEM_BTP_SOURCE_PORT := 0; + modulepar BtpPortId PICS_SPATEM_BTP_SOURCE_PORT := 0; } // End of group mapemCommonParams group mapemZone1 { - // TODO To be done + + modulepar MapemParm PICS_MAPEM_PARMS_RSU_1 := { + intersections := { + { // Start of intersection #0 + name := "PICS_MAPEM_PARMS_RSU_1", + id := { + region := 0, + id := 0 + }, + revision := 0, + refPoint := { + lat := 435517392, + long := 103018217, + elevation := omit, + regional := omit + }, + laneWidth := omit, + speedLimits := omit, + laneSet := { + { // Start of Lane #1 + laneID := 1, + name := omit, + ingressApproach := 1, + egressApproach := 1, + laneAttributes := { + directionalUse := '10'B, + sharedWith := '0000000000'B, + laneType := { + vehicle := '00000000'B + }, + regional := omit + }, + maneuvers := omit, + nodeList := { + nodes := { + { + delta := { + node_XY1 := { + x := -10, + y := 10 + } + }, + attributes := omit + }, + { + delta := { + node_XY1 := { + x := -10, + y := 10 + } + }, + attributes := omit + } + } + }, + connectsTo := { + { + connectingLane := { + lane := 1, + maneuver := omit + }, + remoteIntersection := omit, + signalGroup := 1, + userClass := omit, + connectionID := omit + } + }, + overlays := omit, + regional := omit + }, // End of Lane #1 + { // Start of Lane #2 + laneID := 1, + name := omit, + ingressApproach := 1, + egressApproach := 2, + laneAttributes := { + directionalUse := '01'B, + sharedWith := '0000000000'B, + laneType := { + vehicle := '00000000'B + }, + regional := omit + }, + maneuvers := omit, + nodeList := { + nodes := { + { + delta := { + node_XY1 := { + x := -10, + y := 10 + } + }, + attributes := omit + }, + { + delta := { + node_XY1 := { + x := -10, + y := 10 + } + }, + attributes := omit + } + } + }, + connectsTo := omit, + overlays := omit, + regional := omit + } // End of Lane #1 + }, // End of LaneSet + preemptPriorityData := omit, + regional := omit + } // End of intersection #0 + }, // End of field intersections + roadSegments := omit + } + } // End of group mapemZone1 group mapemZone2 { - // TODO To be done + + modulepar MapemParm PICS_MAPEM_PARMS_RSU_2 := { + } + } // End of group mapemZone2 - group mapemUseCase1 { - // TODO To be done - } // End of group mapemUseCase1 + modulepar MapemParmList PICS_MAPEM_PARMS_RSUs := { + PICS_MAPEM_PARMS_RSU_1, + PICS_MAPEM_PARMS_RSU_2 + } // End of PICS_MAPEM_PARMS_RSU - group mapemUseCase2 { - // TODO To be done - } // End of group mapemUseCase2 - } // End of group mapemEvents group ivimEvents { @@ -322,7 +441,7 @@ module ItsRSUsSimulator_Pics { modulepar BtpPortId PICS_IVIM_BTP_DESTINATION_PORT := 2005; - modulepar BtpPortId PICS_IVIM_BTP_SOURCE_PORT := 0; + modulepar BtpPortId PICS_IVIM_BTP_SOURCE_PORT := 0; } // End of group ivimCommonParams @@ -352,7 +471,9 @@ module ItsRSUsSimulator_Pics { modulepar boolean PICS_GENERATE_IVIM := true; - modulepar boolean PICS_GENERATE_MAPEM_SPATEM := true; + modulepar boolean PICS_GENERATE_MAPEM := true; + + modulepar boolean PICS_GENERATE_SPATEM := true; modulepar boolean PICS_GENERATE_SSEM := true; @@ -369,17 +490,17 @@ module ItsRSUsSimulator_Pics { /** * @desc MAPEM frequency timer */ - modulepar float PICS_MAPEM_FREQUENY := 0.1; + modulepar float PICS_MAPEM_FREQUENY := 2.0; /** * @desc SPATEMM frequency timer */ - modulepar float PICS_SPATEM_FREQUENY := 5.0; + modulepar float PICS_SPATEM_FREQUENY := 2.0; /** * @desc IVIM frequency timer */ - modulepar float PICS_IVIM_FREQUENY := 1.0; + modulepar float PICS_IVIM_FREQUENY := 2.0; } // End of group generationFrequencies diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn index 199d1fdb0..36972ef8a 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn @@ -162,6 +162,18 @@ module ItsRSUsSimulator_Templates { group mapemTemplates { + template (value) MAPEM m_mapemParm( + in template (value) StationID p_stationID, + in template (value) MapData p_map + ) := { + header := { + protocolVersion := ItsPduHeader_protocolVersion_currentVersion_, + messageID := ItsPduHeader_messageID_mapem_, + stationID := p_stationID + }, + map_ := p_map + } + } // End of group mapemTemplates group ivimTemplates { diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn index 0aabbf4e7..dfc662e7d 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn @@ -20,6 +20,7 @@ module ItsRSUsSimulator_TestCases { 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 ItsGeoNetworkingSystem { @@ -69,38 +70,41 @@ module ItsRSUsSimulator_TestCases { // Nothing to do, just for logging purposes repeat; } - [] tc_cam.timeout { + [PICS_GENERATE_CAM] tc_cam.timeout { log("*** " & testcasename() & ": DEBUG: Processing CAM ***"); f_prepare_cam(v_payload); f_send(v_payload); tc_cam.start; repeat; } - [] tc_denm.timeout { + [PICS_GENERATE_DENM] tc_denm.timeout { log("*** " & testcasename() & ": DEBUG: Processing DENM ***"); f_prepare_denm(v_payload); f_send(v_payload); tc_denm.start; repeat; } -// [] tc_spatem.timeout { -// f_prepare_spatem(v_payload); -// f_send(v_payload); -// tc_spatem.start; -// repeat; -// } -// [] tc_mapem.timeout { -// f_prepare_spatem(v_payload); -// f_send(v_payload); -// tc_mapem.start; -// repeat; -// } -// [] tc_ivim.timeout { -// f_prepare_ivim(v_payload); -// f_send(v_payload); -// tc_ivim.start; -// repeat; -// } + [PICS_GENERATE_MAPEM] tc_mapem.timeout { + log("*** " & testcasename() & ": DEBUG: Processing MAPEM ***"); + f_prepare_mapem(v_payload); + f_send(v_payload); + tc_mapem.start; + repeat; + } + [PICS_GENERATE_SPATEM] tc_spatem.timeout { + log("*** " & testcasename() & ": DEBUG: Processing SPATEM ***"); + f_prepare_spatem(v_payload); + f_send(v_payload); + tc_spatem.start; + repeat; + } + [PICS_GENERATE_IVIM] tc_ivim.timeout { + log("*** " & testcasename() & ": DEBUG: Processing IVIM ***"); + f_prepare_ivim(v_payload); + f_send(v_payload); + tc_ivim.start; + repeat; + } } // End of 'alt' statement f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestSystem.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestSystem.ttcn index 869e729d0..9db782425 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestSystem.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestSystem.ttcn @@ -1,5 +1,9 @@ module ItsRSUsSimulator_TestSystem { + // LibIts + import from ITS_Container language "ASN.1:1997" all; + import from DSRC language "ASN.1:1997" all; + // LibItsGeoNetworking import from LibItsGeoNetworking_TestSystem all; import from LibItsGeoNetworking_TypesAndValues all; @@ -17,6 +21,8 @@ module ItsRSUsSimulator_TestSystem { var GeoArea vc_geoArea := {}; var template (value) RsuMessagesValueList vc_rsuMessagesValueList := {}; var integer vc_denmEventCounter := 0; + var SequenceNumber vc_sequenceNumber := 0; + var MsgCount vc_msgIssueRevision := 0; timer tc_cam := PICS_CAM_FREQUENY; timer tc_denm := PICS_DENM_FREQUENY; diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TypesAndValues.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TypesAndValues.ttcn index 9ca48a5af..9372c6a87 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 SSEM_PDU_Descriptions language "ASN.1:1997" all; + import from DSRC language "ASN.1:1997" all; // LibItsGeoNetworking import from LibItsGeoNetworking_TypesAndValues all; @@ -106,7 +107,24 @@ module ItsRSUsSimulator_TypesAndValues { * @desc MAPEM setup */ group mapemDataStructures { - // TODO To be done + + /** + * @desc Describe the parameter for each MAPEM event + */ + type record MapemParm { + IntersectionGeometryList intersections, + RoadSegmentList roadSegments optional + } // End of type MapemParm + + /** + * + * @desc List of MAPEM parms per RSU + *
+             *     v_intersection := PICS_MAPEM_PARMS_RSUs[PX_RSU_ID - 1].intersections[v_idx];
+             * 
+ */ + type record of MapemParm MapemParmList; + } // End of group mapemDataStructures /** -- GitLab