ItsRSUsSimulator_Templates.ttcn 15.4 KB
Newer Older
garciay's avatar
garciay committed
module ItsRSUsSimulator_Templates {
    
    // LibCommon
    import from LibCommon_BasicTypesAndValues all;
    
    // LibIts
    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 IVI language "ASN.1:1997" all;
garciay's avatar
garciay committed
    import from SSEM_PDU_Descriptions language "ASN.1:1997" all;
    import from DSRC language "ASN.1:1997" all;
    
    // LibItsCommon
    import from LibItsCommon_Functions all;
    
    // LibItsGeoNetworking
    import from LibItsGeoNetworking_TestSystem all;
    import from LibItsGeoNetworking_Functions all;
    import from LibItsGeoNetworking_Templates all;
    import from LibItsGeoNetworking_TypesAndValues all;
    
    // LibItsBtp
    import from LibItsBtp_TypesAndValues all;
    import from LibItsBtp_Templates all;
    
    // LibItsCam
    import from LibItsCam_Templates all;
    
    // LibItsDenm
    import from LibItsDenm_Templates all;
    
    // LibItsMapemSpatem
    import from LibItsMapemSpatem_Templates all;
    
    // LibItsIvim
    import from LibItsIvim_Templates all;
    
    // AtsRSUsSimulator
    import from ItsRSUsSimulator_TypesAndValues all;
    import from ItsRSUsSimulator_Functions all;
    import from ItsRSUsSimulator_Pics all;
    
    template (omit) RsuMessagesValue m_rsuProfile(
                                                  in template (omit) octetstring p_beacon := omit,
                                                  in template (omit) CAM p_cam := omit,
                                                  in template (omit) DENMs p_denms := omit,
garciay's avatar
garciay committed
                                                  in template (omit) MAPEM p_mapem := omit,
                                                  in template (omit) SPATEMs p_spatems := omit,
                                                  in template (omit) IVIM p_ivim := omit,
                                                  in template (omit) SSEM p_ssem := omit
garciay's avatar
garciay committed
    ) := {
        beacon     := p_beacon,
        cam        := p_cam,
        denms      := p_denms,
        mapem      := p_mapem,
        spatems    := p_spatems,
        ivim       := p_ivim
garciay's avatar
garciay committed
    } // End of template RsuMessagesValue

    group geoNetworkingTemplates {
        
        template (value) GnNonSecuredPacket m_geoNwBroadcastPacket_payload(
                                                                           in template (value) LongPosVector p_sourceLongPosVec,
                                                                           in template (value) UInt16 p_seqNumber,
                                                                           in template (value) GeoBroadcastArea p_broadcastArea,
                                                                           in template (value) UInt8 p_hopLimit := c_defaultHopLimit,
                                                                           in template (value) TrafficClass p_trafficClass := m_trafficClass,
                                                                           in template (value) Payload p_payload
        ) modifies m_geoNwBroadcastPacket := {
            payload := p_payload
        } // End of template m_geoNwBroadcastPacket_payload
        
        /**
         * @desc    Receive template for GeoNetworking Unicast 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_geoNwBroadcastPacketWithNextHeader_srem(
                                                                                         in template (present) LongPosVector p_sourceLongPosVec := ?,
                                                                                         in template (present) UInt16 p_seqNumber := ?,
                                                                                         in template (present) NextHeader p_nextHeader := ?
        ) modifies mw_geoNwBroadcastPacketWithNextHeader := {
garciay's avatar
garciay committed
            payload := { 
                decodedPayload := { 
                    btpPacket := mw_btpB(
                        PICS_SREM_BTP_DESTINATION_PORT, 
                        PICS_SREM_BTP_SOURCE_PORT, 
garciay's avatar
garciay committed
                        ?
                    )
                }, 
                rawPayload := ?
            }
        }
        
garciay's avatar
garciay committed
         * @desc    Receive template for GeoNetworking SREM 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_srem(
                                                                                   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_SREM_BTP_DESTINATION_PORT, 
                        PICS_SREM_BTP_SOURCE_PORT, 
                        ?
                    )
                }, 
                rawPayload := ?
            }
        }
        /**
         * @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 := ?
            }
        }
        
garciay's avatar
garciay committed
    } // End of group geoNetworkingTemplates 
    
    group positionTemplates {
        
        /**
         * @desc The test system reference position.
         */
        template (value) ReferencePosition m_rsuPosition(
                                                         in template (value) Latitude p_latitude,
                                                         in template (value) Longitude p_longitude
        ) := {
            latitude := f_integer2Latitude(valueof(p_latitude)),
            longitude := f_integer2Latitude(valueof(p_longitude)),
            positionConfidenceEllipse := {
                semiMajorConfidence   := SemiAxisLength_oneCentimeter_,
                semiMinorConfidence   := SemiAxisLength_oneCentimeter_,
                semiMajorOrientation  := HeadingValue_wgs84North_
            },
            altitude := {
                altitudeValue := AltitudeValue_referenceEllipsoidSurface_,
                altitudeConfidence := unavailable
            }
        } // End of template m_rsuPosition
        
    } // End of group positionTemplates
    
    group camTemplates {
        
        template (value) CAM m_camParm(
                                       in template (value) StationID p_stationID,
                                       in template (value) ReferencePosition p_rsuPosition,
                                       in template (value) PathHistory p_pathHistory
        ) := {
            header := {
                protocolVersion := ItsPduHeader_protocolVersion_currentVersion_,
                messageID := ItsPduHeader_messageID_cam_,
                stationID := p_stationID
            },
            cam := {
                generationDeltaTime := 0, // Dynamic parameter
                camParameters := {
                    basicContainer := {
                        stationType := StationType_roadSideUnit_,
                        referencePosition := p_rsuPosition
                    },
                    highFrequencyContainer := {
                        rsuContainerHighFrequency := {
                            protectedCommunicationZonesRSU := omit/*{
                            }*/
                        }
                    },
                    lowFrequencyContainer := omit,/*{
                        basicVehicleContainerLowFrequency := {
                            vehicleRole := roadOperator,
                            exteriorLights := ExteriorLights_daytimeRunningLightsOn_,
                            pathHistory := p_pathHistory
                        }
                    }*/
                    specialVehicleContainer := omit
                }
            }
        } // End of template m_camParm
        
    } // End of group camTemplates
    
    group mapemTemplates {
        
garciay's avatar
garciay committed
        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
        }
        
garciay's avatar
garciay committed
    } // 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
    
garciay's avatar
garciay committed
    group ivimTemplates {
        
        template (value) IVIM m_ivimParm(
                                         in template (value) StationID p_stationID,
                                         in template (value) IviStructure p_ivi
        ) := {
            header := {
                protocolVersion := ItsPduHeader_protocolVersion_currentVersion_,
                messageID := ItsPduHeader_messageID_ivim_,
                stationID := p_stationID
            },
            ivi := p_ivi
        }
        
garciay's avatar
garciay committed
    } // End of group ivimTemplates
    
    group denmTemplates {
        
        /**
         * @desc    Send template for DENM PDU
         * @param   p_denm  The DEN Message
         */
        template (value) DENM m_denmPdu_rsu(
                                            in template (value) StationID p_stationID,
                                            in template (value) DecentralizedEnvironmentalNotificationMessage p_denm
        ) := {
            header := LibItsDenm_Templates.m_itsPduHeader(p_stationID),
            denm := p_denm
        }
        
        /**
         * @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
        }
garciay's avatar
garciay committed
        template (value) DenmParmContainers m_denmParmContainers(
                                                                 in template (value) StationID p_originatingStationID,
                                                                 in template (value) SequenceNumber p_sequenceNumber,
                                                                 in template (value) TransmissionInterval p_repetitionInterval,
garciay's avatar
garciay committed
                                                                 in template (value) ReferencePosition p_eventPosition,
                                                                 in template (value) CauseCodeType p_causeCodeType,
                                                                 in template (value) EventHistory p_eventHistory,
garciay's avatar
garciay committed
                                                                 in template (value) ValidityDuration p_validityDuration := 86400,
                                                                 in template (value) RelevanceDistance p_relevanceDistance := lessThan100m,
                                                                 in template (value) RelevanceTrafficDirection p_relevanceTrafficDirection := upstreamTraffic
garciay's avatar
garciay committed
        ) := {
            managementContainer := {
                actionID := {
                    originatingStationID    := p_originatingStationID,
                    sequenceNumber          := p_sequenceNumber
                },
                detectionTime               := f_getCurrentTime(),
                referenceTime               := f_getCurrentTime(), // FIXME To be checked
garciay's avatar
garciay committed
                termination                 := omit,
                eventPosition               := p_eventPosition,
                relevanceDistance           := p_relevanceDistance,
                relevanceTrafficDirection   := omit,
                validityDuration            := p_validityDuration,
                transmissionInterval        := p_repetitionInterval,
garciay's avatar
garciay committed
                stationType                 := StationType_roadSideUnit_
            }, // End of field managementContainer
            situationContainer := {
                informationQuality          := 0,
                eventType := {
                    causeCode               := p_causeCodeType,
                    subCauseCode            := 0
                },
                linkedCause                 := omit,
                eventHistory                := p_eventHistory
            }, // End of field situationContainer
            locationContainer := {
                eventSpeed := omit,
                eventPositionHeading := omit,
garciay's avatar
garciay committed
                roadType := omit 
            } // End of field locationContainer
        } // End of template m_denmParm
    } // End of group denmTemplates
    
} // End of module ItsRSUsSimulator_Templates