From 47f4d24ebef4fb3f1a18ecffdbeccfc0b100c29a Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 12 Aug 2016 06:48:22 +0000 Subject: [PATCH] Update template names for MAPEM/SPATEM Enhance RSUsimulator --- .../AtsMapemSpatem/ItsSpatem_TpFunctions.ttcn | 2 +- .../ItsRSUsSimulator_Functions.ttcn | 108 ++++++- .../ItsRSUsSimulator_Pics.ttcn | 269 +++++++++++++++++- .../ItsRSUsSimulator_Templates.ttcn | 16 ++ .../ItsRSUsSimulator_TestCases.ttcn | 6 +- .../ItsRSUsSimulator_TestSystem.ttcn | 25 +- .../ItsRSUsSimulator_TypesAndValues.ttcn | 44 ++- 7 files changed, 441 insertions(+), 29 deletions(-) diff --git a/ttcn/AtsMapemSpatem/ItsSpatem_TpFunctions.ttcn b/ttcn/AtsMapemSpatem/ItsSpatem_TpFunctions.ttcn index 5736bbbb1..bd2a21d49 100644 --- a/ttcn/AtsMapemSpatem/ItsSpatem_TpFunctions.ttcn +++ b/ttcn/AtsMapemSpatem/ItsSpatem_TpFunctions.ttcn @@ -595,7 +595,7 @@ module ItsSpatem_TpFunctions { f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body - v_spatemReq := valueof(m_spatemReq(m_spatemPdu(m_spat))); + v_spatemReq := valueof(m_spatemReq(m_spatemPdu(m_defaultSpatem))); mapemSpatemPort.send(v_spatemReq) ; f_sleep(PX_TAC); diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn index 052f4f42e..ef164b4e6 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn @@ -31,6 +31,12 @@ module ItsRSUsSimulator_Functions { // LibItsMapemSpatemm import from LibItsMapemSpatem_Templates all; + // LibItsMapemSpatemm + import from LibItsIvim_Templates all; + + // LibItsMapemSpatemm + import from LibItsSremSsem_Templates all; + // LibItsGeoNetworking import from LibItsGeoNetworking_TestSystem all; import from LibItsGeoNetworking_Functions all; @@ -101,7 +107,21 @@ module ItsRSUsSimulator_Functions { } // SPATEM if (PICS_GENERATE_SPATEM) { - // TODO + // Build the list of the DENM events + for (v_counter := 0; v_counter < lengthof(PICS_SPATEM_PARMS_RSUs[PX_RSU_ID - 1]); v_counter := v_counter + 1) { + v_spatems[v_counter] := + m_spatemParm( + PICS_RSU_PARAMS[PX_RSU_ID - 1].stationID, + m_spatem( + PICS_SPATEM_PARMS_RSUs[PX_RSU_ID - 1][v_counter].intersections, + "SignalGroupID #" & int2str(PICS_SPATEM_PARMS_RSUs[PX_RSU_ID - 1][v_counter].signalGroupID) + )); + for (var integer v_intersection := 0; v_intersection < lengthof(v_spatems[v_counter].spat.intersections); v_intersection := v_intersection + 1) { + vc_states[v_counter][v_intersection] := v_spatems[v_counter].spat.intersections[v_intersection].states; + } // End of 'for' statement + // TODO Build SPATEM with dynamic values + } // End of 'for' statement + // TODO Build SPATEM with dynamic values } // IVIM if (PICS_GENERATE_IVIM) { @@ -130,20 +150,19 @@ module ItsRSUsSimulator_Functions { 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 + } // End of 'for' statement } // 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 - ) + v_cam := + 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 @@ -206,6 +225,7 @@ module ItsRSUsSimulator_Functions { out template (value) Payload p_payload ) runs on ItsRSUsSimulator { + // Update dynamic parms vc_rsuMessagesValueList[PX_RSU_ID - 1].denms[vc_denmEventCounter].denm.management.referenceTime := f_getCurrentTime(); p_payload := valueof( f_adaptPayload( @@ -238,10 +258,47 @@ module ItsRSUsSimulator_Functions { } function f_prepare_spatem( + in template (value) SPATEM p_spatem, out template (value) Payload p_payload ) runs on ItsRSUsSimulator { + var template (value) SPATEM v_spatem := p_spatem; // Make a copy - p_payload := {}; // FIXME To be developped + // Rebuild SPATEM message + for (var integer v_intersection := 0; v_intersection < lengthof(v_spatem.spat.intersections); v_intersection := v_intersection + 1) { + var template (value) MovementList v_states := vc_states[PX_RSU_ID - 1][v_intersection]; + select (vc_spatemStatesId) { + case (0) { + v_spatem.spat.intersections[v_intersection].states[0] := v_states[0]; + v_spatem.spat.intersections[v_intersection].states[1] := v_states[1]; + v_spatem.spat.intersections[v_intersection].states[2] := v_states[2]; + } + case (1) { + v_spatem.spat.intersections[v_intersection].states[0] := v_states[1]; + v_spatem.spat.intersections[v_intersection].states[1] := v_states[2]; + v_spatem.spat.intersections[v_intersection].states[2] := v_states[0]; + } + case (2) { + v_spatem.spat.intersections[v_intersection].states[0] := v_states[2]; + v_spatem.spat.intersections[v_intersection].states[1] := v_states[0]; + v_spatem.spat.intersections[v_intersection].states[2] := v_states[1]; + } + case else { + } + } // End of 'select' statement + } // End of 'for' statement + vc_spatemStatesId := (vc_spatemStatesId + 1) mod 4; // TODO To be refined + + p_payload := valueof( + f_adaptPayload( + bit2oct( + encvalue( + valueof( + v_spatem + ))), + PICS_MAPEM_BTP_DESTINATION_PORT, + PICS_MAPEM_BTP_SOURCE_PORT + ) + ); } @@ -331,7 +388,32 @@ module ItsRSUsSimulator_Functions { function f_processSrem( in GeoNetworkingPdu p_geoNetworkingPdu ) runs on ItsRSUsSimulator { - log("SREM=", p_geoNetworkingPdu) + log("SREM=", p_geoNetworkingPdu); + if (ispresent(p_geoNetworkingPdu.gnPacket.packet.payload.decodedPayload)) { + if (ispresent(p_geoNetworkingPdu.gnPacket.packet.payload.decodedPayload.btpPacket.payload.decodedPayload)) { + if (ischosen(p_geoNetworkingPdu.gnPacket.packet.payload.decodedPayload.btpPacket.payload.decodedPayload.sremPacket)) { + var SignalRequestMessage v_signalRequestMessage := p_geoNetworkingPdu.gnPacket.packet.payload.decodedPayload.btpPacket.payload.decodedPayload.sremPacket.srm; + var template (value) SSEM v_ssem := vc_rsuMessagesValueList[PX_RSU_ID - 1].ssem; + var template (value) Payload v_payload; + + log(v_signalRequestMessage); + // Build response + // TODO v_ssem.ssm.status + v_payload := valueof( + f_adaptPayload( + bit2oct( + encvalue( + valueof( + v_ssem + ))), + PICS_SSEM_BTP_DESTINATION_PORT, + PICS_SSEM_BTP_SOURCE_PORT + ) + ); + + } // else, ignore message + } // else, ignore message + } // else, ignore message // TODO Process message, and send SSEM } diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn index 7687844aa..0e414bdf5 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn @@ -294,10 +294,6 @@ module ItsRSUsSimulator_Pics { modulepar BtpPortId PICS_MAPEM_BTP_SOURCE_PORT := 0; - modulepar BtpPortId PICS_SPATEM_BTP_DESTINATION_PORT := 2004; - - modulepar BtpPortId PICS_SPATEM_BTP_SOURCE_PORT := 0; - } // End of group mapemCommonParams group mapemZone1 { @@ -417,24 +413,271 @@ module ItsRSUsSimulator_Pics { } // End of intersection #0 }, // End of field intersections roadSegments := omit - } + } // End of PICS_MAPEM_PARMS_RSU_1 } // End of group mapemZone1 group mapemZone2 { modulepar MapemParm PICS_MAPEM_PARMS_RSU_2 := { - } + 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 PICS_MAPEM_PARMS_RSU_2 } // End of group mapemZone2 - modulepar MapemParmList PICS_MAPEM_PARMS_RSUs := { + modulepar MapemParmListRsu PICS_MAPEM_PARMS_RSUs := { PICS_MAPEM_PARMS_RSU_1, PICS_MAPEM_PARMS_RSU_2 } // End of PICS_MAPEM_PARMS_RSU } // End of group mapemEvents + group spatemEvents { + + group spatemCommonParams { + + modulepar BtpPortId PICS_SPATEM_BTP_DESTINATION_PORT := 2004; + + modulepar BtpPortId PICS_SPATEM_BTP_SOURCE_PORT := 0; + + } // End of group spatemCommonParams + + group spatemZone1 { + + modulepar SignalGroupParm PICS_SPATEM_PARMS_SG_1_RS_1 := { + signalGroupID := 1, + intersections := { + { + name := "PICS_SPATEM_PARMS_SG_1_RS_1", + id := { + region := 0, + id := 0 + }, + revision := 0, + status := int2bit(0, 16), + moy := omit, + timeStamp := omit, + enabledLanes := omit, + states := { + { + movementName := "protected-Movement-Allowed", + signalGroup := 1, + state_time_speed:= { + { + eventState := protected_Movement_Allowed, + timing := omit, + speeds := omit, + regional := omit + } + }, + maneuverAssistList := omit, + regional := omit + }, + { + movementName := "protected-clearance", + signalGroup := 1, + state_time_speed:= { + { + eventState := protected_clearance, + timing := omit, + speeds := omit, + regional := omit + } + }, + maneuverAssistList := omit, + regional := omit + }, + { + movementName := "stop_Then_Proceed", + signalGroup := 1, + state_time_speed:= { + { + eventState := stop_Then_Proceed, + timing := omit, + speeds := omit, + regional := omit + } + }, + maneuverAssistList := omit, + regional := omit + } + }, + maneuverAssistList := omit, + regional := omit + } + } // End of field states + } // End of type PICS_SPATEM_PARMS_SG_1_RS_1 + + modulepar SignalGroupParmList PICS_SPATEM_PARMS_RSU_1 := { + PICS_SPATEM_PARMS_SG_1_RS_1 + } // End of type PICS_SPATEM_PARMS_RSU_1 + + } + + group spatemZone2 { + + modulepar SignalGroupParm PICS_SPATEM_PARMS_SG_1_RS_2 := { + signalGroupID := 1, + intersections := { + { + name := "PICS_SPATEM_PARMS_SG_1_RS_2", + id := { + region := 0, + id := 0 + }, + revision := 0, + status := int2bit(0, 16), + moy := omit, + timeStamp := omit, + enabledLanes := omit, + states := { + { + movementName := "stop_Then_Proceed", + signalGroup := 1, + state_time_speed:= { + { + eventState := stop_Then_Proceed, + timing := omit, + speeds := omit, + regional := omit + } + }, + maneuverAssistList := omit, + regional := omit + } + }, + maneuverAssistList := omit, + regional := omit + } + } // End of field states + } // End of type PICS_SPATEM_PARMS_SG_1_RS_2 + + modulepar SignalGroupParmList PICS_SPATEM_PARMS_RSU_2 := { + PICS_SPATEM_PARMS_SG_1_RS_2 + } // End of type PICS_SPATEM_PARMS_RSU_1_RS_2 + + } + + modulepar SpatemParmRsu PICS_SPATEM_PARMS_RSUs := { + PICS_SPATEM_PARMS_RSU_1, + PICS_SPATEM_PARMS_RSU_2 + } // End of PICS_SPATEM_PARMS_RSUs + + } // End of group spatemEvents + group ivimEvents { group ivimCommonParams { @@ -463,6 +706,18 @@ module ItsRSUsSimulator_Pics { } // End of group ivimEvents + group ssemEvents { + + group ssemCommonParams { + + modulepar BtpPortId PICS_SSEM_BTP_DESTINATION_PORT := 2005; + + modulepar BtpPortId PICS_SSEM_BTP_SOURCE_PORT := 0; + + } // End of group ssemCommonParams + + } // End of group ssemEvents + group generationFrequencies { modulepar boolean PICS_GENERATE_CAM := true; diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn index 36972ef8a..8e1e64eec 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn @@ -176,6 +176,22 @@ module ItsRSUsSimulator_Templates { } // End of group mapemTemplates + group spatemTemplates { + + template (value) SPATEM m_spatemParm( + in template (value) StationID p_stationID, + in template (value) SPAT p_spat + ) := { + header := { + protocolVersion := ItsPduHeader_protocolVersion_currentVersion_, + messageID := ItsPduHeader_messageID_spatem_, + stationID := p_stationID + }, + spat := p_spat + } + + } // End of group spatemTemplates + group ivimTemplates { } // End of group ivimTemplates diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn index dfc662e7d..efef878f4 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn @@ -93,8 +93,10 @@ module ItsRSUsSimulator_TestCases { } [PICS_GENERATE_SPATEM] tc_spatem.timeout { log("*** " & testcasename() & ": DEBUG: Processing SPATEM ***"); - f_prepare_spatem(v_payload); - f_send(v_payload); + 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); + } tc_spatem.start; repeat; } diff --git a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestSystem.ttcn b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestSystem.ttcn index 9db782425..a01c24782 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestSystem.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestSystem.ttcn @@ -16,13 +16,36 @@ module ItsRSUsSimulator_TestSystem { * @desc Test component for ITS Network and Transport layer */ type component ItsRSUsSimulator extends ItsGeoNetworking { - + /** + * @dec RSU position + */ var LongPosVector vc_longPosVectorRsu := {}; + /** + * @dec RSU Geonetworking area + */ var GeoArea vc_geoArea := {}; + /** + * @dec Supported sent messages templates: one or more from CAM, DENM, MAPEM, SPATEM, IVIM, SSEM + * @see PICS_GENERATE_xxx + */ var template (value) RsuMessagesValueList vc_rsuMessagesValueList := {}; + /** + * @dec DENM event counter: one RSU can send one or mode different DENM + */ var integer vc_denmEventCounter := 0; + /** + * @dec DENM sequence number index + */ var SequenceNumber vc_sequenceNumber := 0; var MsgCount vc_msgIssueRevision := 0; + /** + * @dec List of MovementState per intersection and per RSU + */ + var template (value) MovementListPerIntersectionRsu vc_states; + /** + * @dec Current SPATEM state + */ + var integer vc_spatemStatesId := 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 9372c6a87..01840dbad 100644 --- a/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TypesAndValues.ttcn +++ b/ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TypesAndValues.ttcn @@ -113,25 +113,59 @@ module ItsRSUsSimulator_TypesAndValues { */ type record MapemParm { IntersectionGeometryList intersections, - RoadSegmentList roadSegments optional + 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; + type record of MapemParm MapemParmListRsu; } // End of group mapemDataStructures + /** + * @desc SPATEM setup + */ + group spatemDataStructures { + /** + * @desc Describe the parameter for each SPATEM event + */ + type record SignalGroupParm { + SignalGroupID signalGroupID, + IntersectionStateList intersections + } // End of type SignalGroupParm + + /** + * @desc List of SignalGroup parms for one RSU + *
+             *     v_movementEvent := PICS_SPATEM_PARMS_RSU_1[v_signalGroupID].states[v_idx];
+             * 
+ */ + type record of SignalGroupParm SignalGroupParmList; + + /** + * @desc List of all RSUs SignalGroups parms + *
+             *     v_movementEvent := PICS_SPATEM_PARMS_RSU_1[PX_RSU_ID - 1].states[v_idx];
+             * 
+ */ + type record of SignalGroupParmList SpatemParmRsu; + + type record of MovementList MovementListPerIntersection; + + type record of MovementListPerIntersection MovementListPerIntersectionRsu; + + } // End of group spatemDataStructures + /** * @desc IVIM setup */ group ivimDataStructures { - // TODO To be done + // TODO + } // End of group ivimDataStructures /** -- GitLab