Commit 679bb02b authored by garciay's avatar garciay
Browse files

Add a configuration port to the RSUsimulator

parent 01fb72fc
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
<plugin id="org.etsi.ttcn.codec.MainCodec" name="Main Codec" provider-name="STF462" version="1.0.0.0">
  <runtime>
    <library name="MainCodec.jar"/>
    <library name="../build"/>
    <library name="../../build"/>
  </runtime>
  <dependency>
    <reference id="com.testingtech.ttworkbench.sa"/>
+172 −128
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ module ItsRSUsSimulator_Functions {
    import from ItsRSUsSimulator_Pics all;
    import from ItsRSUsSimulator_Pixits all;
    
    group geoConfigurationFunctions {
    group rsuConfigurationFunctions {
        
        /**
         * @desc This configuration features:
@@ -64,18 +64,11 @@ module ItsRSUsSimulator_Functions {
        function f_cf01Up() runs on ItsRSUsSimulator {
            
            // Local variables
            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) IVIM v_ivim := omit;
            var template (omit) SSEM v_ssem := omit;
            var integer v_counter;
            
            // Map
            map(self:acPort, system:acPort);
            map(self:utPort, system:utPort);
            map(self:cfPort, system:cfPort);
            map(self:geoNetworkingPort, system:geoNetworkingPort);
            
            // Connect
@@ -85,11 +78,48 @@ module ItsRSUsSimulator_Functions {
            // Initialise secured mode
            f_initialiseSecuredMode();
            
            //Initialze the IUT
//            f_initialState();
            //Initialze the Config module
            cfPort.send(CfInitialize:{});
            
            // Initialisations
            vc_longPosVectorRsu := PICS_RSU_PARAMS[PX_RSU_ID - 1].longPosVector;
            f_setup_rsu(vc_rsu_id);
             
        } // End of function f_cf01Up
        
        function f_cf01Down() runs on ItsRSUsSimulator {
            
            vc_rsuMessagesValueList := {};
            
            f_uninitialiseSecuredMode();
            
            // Unmap
            unmap(self:acPort, system:acPort);
            unmap(self:utPort, system:utPort);
            unmap(self:cfPort, system:cfPort);
            unmap(self:geoNetworkingPort, system:geoNetworkingPort);
            
            // Disconnect
            f_disconnect4SelfOrClientSync();
            
        } // End of function f_cf01Down
        
    } // End of group rsuConfigurationFunctions
    
    function f_setup_rsu(
                         in integer p_rsu_id
    ) runs on ItsRSUsSimulator { 
        
        // Local variables
        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) IVIM v_ivim := omit;
        var template (omit) SSEM v_ssem := omit;
        var integer v_counter;
        
        vc_longPosVectorRsu := PICS_RSU_PARAMS[p_rsu_id].longPosVector;
        // MAPEM
        if (PICS_GENERATE_MAPEM) {
            // Build the list of the MAPEM events
@@ -98,8 +128,8 @@ module ItsRSUsSimulator_Functions {
                    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
                        PICS_MAPEM_PARMS_RSUs[p_rsu_id].intersections,
                        PICS_MAPEM_PARMS_RSUs[p_rsu_id].roadSegments
            ));
            // Update revision fields
            v_mapem.map_.intersections[0].revision := f_incMsgIssueRevision();
@@ -108,13 +138,13 @@ module ItsRSUsSimulator_Functions {
        // SPATEM
        if (PICS_GENERATE_SPATEM) {
            // 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) {
            for (v_counter := 0; v_counter < lengthof(PICS_SPATEM_PARMS_RSUs[p_rsu_id]); v_counter := v_counter + 1) {
                v_spatems[v_counter] := 
                    m_spatemParm(
                            PICS_RSU_PARAMS[PX_RSU_ID - 1].stationID,
                        PICS_RSU_PARAMS[p_rsu_id].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)
                            PICS_SPATEM_PARMS_RSUs[p_rsu_id][v_counter].intersections,
                            "SignalGroupID #" & int2str(PICS_SPATEM_PARMS_RSUs[p_rsu_id][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;
@@ -128,25 +158,26 @@ module ItsRSUsSimulator_Functions {
            // Build the list of the MAPEM events
            v_ivim := 
                m_ivimParm(
                        PICS_RSU_PARAMS[PX_RSU_ID - 1].stationID,
                    PICS_RSU_PARAMS[p_rsu_id].stationID,
                    m_ivimStructure(
                        m_iviManagementContainer(
                                PICS_IVIM_PARMS_RSUs[PX_RSU_ID - 1].provider,
                                PICS_IVIM_PARMS_RSUs[PX_RSU_ID - 1].iviIdentificationNumber,
                            PICS_IVIM_PARMS_RSUs[p_rsu_id].provider,
                            PICS_IVIM_PARMS_RSUs[p_rsu_id].iviIdentificationNumber,
                            0//IviStatus_new_
                )));
                        ),
                        { PICS_IVIM_PARMS_RSUs[p_rsu_id].iviContainer }
            ));
            // Update ivi status
            v_ivim.ivi.mandatory.validFrom := f_getCurrentTime();
                // TODO Add more?
        }
        // 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][PX_ETSI_ZONE_ID]); v_counter := v_counter + 1) {
                    var DenmEventsParmsPerZone v_denmEventsParmsPerZone := PICS_DENM_EVENTS_RSU[PX_RSU_ID - 1][PX_ETSI_ZONE_ID];
            // Build the list of the DENM events for the specified RSU (PX_RSU_ID) and the given zone (PX_ETSI_ZONE_ID)
            for (v_counter := 0; v_counter < lengthof(PICS_DENM_EVENTS_RSU[p_rsu_id][PX_ETSI_ZONE_ID - 1]); v_counter := v_counter + 1) {
                var DenmEventsParmsPerZone v_denmEventsParmsPerZone := PICS_DENM_EVENTS_RSU[p_rsu_id][PX_ETSI_ZONE_ID - 1];
                
                v_denmParmContainers := m_denmParmContainers(
                        PICS_RSU_PARAMS[PX_RSU_ID - 1].stationID,
                    PICS_RSU_PARAMS[p_rsu_id].stationID,
                    f_incDenmSequenceNumber(),
                    PICS_DENM_REPETITION_INTERVAL,
                    v_denmEventsParmsPerZone[v_counter].eventPosition,
@@ -171,16 +202,16 @@ module ItsRSUsSimulator_Functions {
            // Build the list of the CAM events
            v_cam := 
                m_camParm(
                        PICS_RSU_PARAMS[PX_RSU_ID - 1].stationID,
                    PICS_RSU_PARAMS[p_rsu_id].stationID,
                    m_rsuPosition(
                        vc_longPosVectorRsu.latitude,
                        vc_longPosVectorRsu.longitude
                    ), 
                        PICS_RSU_PARAMS[PX_RSU_ID - 1].pathHistory
                    PICS_RSU_PARAMS[p_rsu_id].pathHistory
            );
        } 
        // Build the messages value list for this RSU
            vc_rsuMessagesValueList[PX_RSU_ID - 1] := 
        vc_rsuMessagesValueList[p_rsu_id] := 
            m_rsuProfile(
                v_cam, 
                v_denms,
@@ -189,33 +220,46 @@ module ItsRSUsSimulator_Functions {
                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);
        if (PICS_RSU_PARAMS[p_rsu_id].geoShape == e_geoCircle) {
            vc_geoArea := f_computeCircularArea(vc_longPosVectorRsu, PICS_RSU_PARAMS[p_rsu_id].geoParms.radius);
        } else {
            log("*** " & testcasename() & ": INCONC: Wrong PICS_RSU_GEOAREA_FORM event initialisation ***");
            setverdict(inconc);
            stop;
        }
        
        } // End of function f_cf01Up
        
        function f_cf01Down() runs on ItsRSUsSimulator {
            
            vc_rsuMessagesValueList := {};
    } // End of function f_setup_rsu
    
            f_uninitialiseSecuredMode();
    function f_process_cf_event(
                                in CfEvent p_cfEvent
    ) runs on ItsRSUsSimulator return boolean {
        var template (value) CfResult v_result := true;
        
            // Unmap
            unmap(self:acPort, system:acPort);
            unmap(self:utPort, system:utPort);
            unmap(self:geoNetworkingPort, system:geoNetworkingPort);
        // Terminate simulation
        if (p_cfEvent == "stop") {
            if (ispresent(vc_rsuMessagesValueList[PX_RSU_ID - 1].cam)) {
                tc_cam.stop;
            }
            if (ispresent(vc_rsuMessagesValueList[PX_RSU_ID - 1].denms)) {
                tc_denm.stop;
            }
            if (ispresent(vc_rsuMessagesValueList[PX_RSU_ID - 1].mapem)) {
                tc_mapem.stop;
            }
            if (ispresent(vc_rsuMessagesValueList[PX_RSU_ID - 1].spatems)) {
                tc_spatem.stop;
            }
            if (ispresent(vc_rsuMessagesValueList[PX_RSU_ID - 1].ivim)) {
                tc_ivim.stop;
            }
        } else {
            v_result := false;
        }
        
            // Disconnect
            f_disconnect4SelfOrClientSync();
        cfPort.send(v_result);
        
        } // End of function f_cf01Down
        
    } // End of group geoConfigurationFunctions
        return false;
    } // End of function f_process_cf_event
    
    function f_prepare_cam(
                           out template (value) Payload p_payload
@@ -233,7 +277,7 @@ module ItsRSUsSimulator_Functions {
                PICS_CAM_BTP_SOURCE_PORT
            )
        );
    }
    } // End of function f_prepare_cam
    
    function f_prepare_denm(
                            out template (value) Payload p_payload
@@ -252,7 +296,7 @@ module ItsRSUsSimulator_Functions {
            )
        ); 
        vc_denmEventCounter := (vc_denmEventCounter + 1) mod lengthof(vc_rsuMessagesValueList[PX_RSU_ID - 1].denms);
    }
    } // End of function f_prepare_denm
    
    function f_prepare_mapem(
                             out template (value) Payload p_payload
@@ -269,7 +313,7 @@ module ItsRSUsSimulator_Functions {
                PICS_MAPEM_BTP_SOURCE_PORT
            )
        );
    }
    } // End of function f_prepare_mapem
    
    function f_prepare_spatem(
                              in template (value) SPATEM p_spatem,
@@ -314,7 +358,7 @@ module ItsRSUsSimulator_Functions {
            )
        );
        
    }
    } // End of function f_prepare_spatem
    
    function f_prepare_ivim(
                            out template (value) Payload p_payload
@@ -331,7 +375,7 @@ module ItsRSUsSimulator_Functions {
                PICS_IVIM_BTP_SOURCE_PORT
            )
        );
    }
    } // End of function f_prepare_ivim
    
    function f_adaptPayload(
                            in template (value) octetstring p_finalPayload,
@@ -386,7 +430,7 @@ module ItsRSUsSimulator_Functions {
        }
        
        return v_payload;
    }
    } // End of function f_adaptPayload
    
    function f_send(
                    in template (value) Payload p_payload,
@@ -407,7 +451,7 @@ module ItsRSUsSimulator_Functions {
            c_defaultHopLimit
        ));
        f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_geoNetworkingPdu, p_its_aid)));
    }
    } // End of function f_send
    
    function f_processSrem(
                           in GeoNetworkingPdu p_geoNetworkingPdu
@@ -439,7 +483,7 @@ module ItsRSUsSimulator_Functions {
                } // else, ignore message
            } // else, ignore message
        } // else, ignore message
    }
    } // End of function f_processSrem
    
    function f_incLocalSeqNumber() runs on ItsRSUsSimulator return UInt16 {
        vc_localSeqNumber := (vc_localSeqNumber + 1) mod 65536;
+111 −9
Original line number Diff line number Diff line
@@ -691,10 +691,10 @@ module ItsRSUsSimulator_Pics {
                        eventHistory                                := PICS_Z1_D1_Hx,
                        traces                                      := PICS_Z1_D1_Tx,
                        roadWorksContainerExtended := {
                            lightBarSirenInUse                      := omit,
                            lightBarSirenInUse                      := LightBarSirenInUse_sirenActivated_,
                            closedLanes := {
                                hardShoulderStatus                  := availableForDriving,
                                drivingLaneStatus                   := '0001'B
                                drivingLaneStatus                   := '10'B
                            },
                            restriction                             := omit,
                            speedLimit                              := 30,
@@ -802,10 +802,10 @@ module ItsRSUsSimulator_Pics {
                        eventHistory                                := PICS_Z1_D2_Hx,
                        traces                                      := PICS_Z1_D2_Tx,
                        roadWorksContainerExtended := {
                            lightBarSirenInUse                      := omit,
                            lightBarSirenInUse                      := LightBarSirenInUse_lightBarActivated_,
                            closedLanes := {
                                hardShoulderStatus                  := availableForDriving,
                                drivingLaneStatus                   := '0011'B
                                drivingLaneStatus                   := '1100'B
                            },
                            restriction                             := omit,
                            speedLimit                              := 30,
@@ -909,7 +909,7 @@ module ItsRSUsSimulator_Pics {
                            lightBarSirenInUse                      := omit,
                            closedLanes := {
                                hardShoulderStatus                  := closed,
                                drivingLaneStatus                   := '01'B
                                drivingLaneStatus                   := '11001'B
                            },
                            restriction                             := omit,
                            speedLimit                              := 30,
@@ -3040,7 +3040,109 @@ module ItsRSUsSimulator_Pics {
                    countryCode                                := '0000000001'B,
                    providerIdentifier                         := 13
                },
                iviIdentificationNumber                        := 12
                iviIdentificationNumber                        := 12,
                iviContainer := { // FIXME To be enhanced to support different values
                    giv := {
                        {
  	                        detectionZoneIds := {
                                  1
                            },
                            its_Rrid := omit,
	                        relevanceZoneIds := {
                                2
                            }, 
	                        direction := 0, //Direction_sameDirection_,
                            driverAwarenessZoneIds := omit, 
	                        minimumAwarenessTime := omit,
	                        applicableLanes := {
                                1, // LanePosition_outermostDrivingLane_, 
                                2  // LanePosition_secondLaneFromOutside_
                            },
	                        iviType:= 1, //IviType_regulatoryMessages_,
	                        iviPurpose := omit,
	                        laneStatus := omit,	
	                        vehicleCharacteristics := omit,
	                        driverCharacteristics := omit,
	                        layoutId := omit,
	                        preStoredlayoutId := omit,
	                        roadSignCodes := {
                                {
	                                layoutComponentId := omit,
	                                code := {
		                                iso14823 := {
                                            pictogramCode := {  
		                                        countryCode := omit, 
                                                serviceCategoryCode := { 
			                                        trafficSignPictogram := regulatory
                                                },
                                                pictogramCategoryCode := {
                                                    nature := 5,
                                                    serialNumber := 57
                                                
                                                }
                                            },
                                            attributes := {
                                                {
                                                    spe := {
	                                                    spm := 100,
	                                                    mns := omit,
	                                                    unit := 0
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            },
	                        extraText := omit
                        },
                        {
  	                        detectionZoneIds := {
                                  1
                            },
                            its_Rrid := omit,
	                        relevanceZoneIds := {
                                2
                            }, 
	                        direction := 0, //Direction_sameDirection_,
                            driverAwarenessZoneIds := omit, 
	                        minimumAwarenessTime := omit,
	                        applicableLanes := {
                                1, // LanePosition_outermostDrivingLane_, 
                                2  // LanePosition_secondLaneFromOutside_
                            },
	                        iviType:= 1, //IviType_regulatoryMessages_,
	                        iviPurpose := omit,
	                        laneStatus := omit,	
	                        vehicleCharacteristics := omit,
	                        driverCharacteristics := omit,
	                        layoutId := omit,
	                        preStoredlayoutId := omit,
	                        roadSignCodes := {
                                {
	                                layoutComponentId := omit,
	                                code := {
		                                iso14823 := {
                                            pictogramCode := {  
		                                        countryCode := omit, 
                                                serviceCategoryCode := { 
			                                        trafficSignPictogram := regulatory
                                                },
                                                pictogramCategoryCode := {
                                                    nature := 5,
                                                    serialNumber := 44
                                                
                                                }
                                            },
                                            attributes := omit
                                        }
                                    }
                                }
                            },
	                        extraText := omit
                        }
                    }
                }
            } // End of PICS_IVIM_PARMS_RSU_1
            
        } // End of group ivimZone1 
@@ -3085,15 +3187,15 @@ module ItsRSUsSimulator_Pics {
    
    group generationFrequencies {
        
        modulepar boolean PICS_GENERATE_CAM := true;
        modulepar boolean PICS_GENERATE_CAM := false;
        
        modulepar boolean PICS_GENERATE_DENM := true;
        
        modulepar boolean PICS_GENERATE_IVIM := true;
        
        modulepar boolean PICS_GENERATE_MAPEM := true;
        modulepar boolean PICS_GENERATE_MAPEM := false;
        
        modulepar boolean PICS_GENERATE_SPATEM := true;
        modulepar boolean PICS_GENERATE_SPATEM := false;
        
        modulepar boolean PICS_GENERATE_SSEM := true;
        
+23 −0
Original line number Diff line number Diff line
@@ -118,6 +118,29 @@ module ItsRSUsSimulator_Templates {
            }
        }
        
        /**
         * @desc    Receive template for GeoNetworking DENM Packet
         * @param   p_destinationShortPosVec    Short position vector of destination
         * @param   p_seqNumber                 Sequence number of GeoUnicast packet
         * @param   p_nextHeader                Id of next header
         */
        template (present) GnNonSecuredPacket mw_geoNwTsbPacketWithNextHeader_denm(
                                                                                   in template (present) UInt16 p_seqNumber := ?,
                                                                                   in template (present) LongPosVector p_sourceLongPosVec := ?,
                                                                                   in template (value) NextHeader p_nextHeader
        ) modifies mw_geoNwTsbPacketWithNextHeader := {
            payload := { 
                decodedPayload := { 
                    btpPacket := mw_btpB(
                        PICS_DENM_BTP_DESTINATION_PORT, 
                        PICS_DENM_BTP_SOURCE_PORT, 
                        ?
                    )
                }, 
                rawPayload := ?
            }
        }
        
    } // End of group geoNetworkingTemplates 
    
    group positionTemplates {
+25 −7

File changed.

Preview size limit exceeded, changes collapsed.

Loading