LibItsMapemSpatem_Templates.ttcn 20.2 KB
Newer Older
/**
 *    @author   ETSI / STF484
 *    @version  $URL$
 *              $Id$
 *    @desc     Module containing base template definitions for MAPEM SPATEM
 *
 */
module LibItsMapemSpatem_Templates {

    // LibCommon
    import from LibCommon_BasicTypesAndValues all;
    import from LibCommon_DataStrings all;
    
    // LibIts
    import from ITS_Container 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 DSRC language "ASN.1:1997" all;
    
    // LibItsCommon
    import from LibItsCommon_Functions all;
    import from LibItsCommon_TypesAndValues all;
    
    // LibItsMapemSpatem
    import from LibItsMapemSpatem_TestSystem all;
    import from LibItsMapemSpatem_TypesAndValues all;
    import from LibItsMapemSpatem_Pixits all;

    group primitivesTemplates {
        
        /**
         * @desc    Send template for MAPEM Message (MapemSpatemPort Primitive)
         * @param   p_mapemMsg    The MAPEM Message to be sent
         */
        template (value) MapemReq m_mapemReq(
                                             in template (value) MAPEM p_mapemMsg
        ) := {
            msgOut := p_mapemMsg
        }
        
        /**
         * @desc    Receive template for MAPEM Message (MapemSpatemPort Primitive)
         * @param   p_mapemMsg    The expected MAPEM Message
         */
        template (present) MapemInd mw_mapemInd(
                                                template (present) MAPEM p_mapemMsg
        ) := {
garciay's avatar
garciay committed
            msgIn               := p_mapemMsg,
            gnNextHeader        := *,
            gnHeaderType        := *,
            gnHeaderSubtype     := *,
            gnLifetime          := *,
            gnTrafficClass      := *,
            btpDestinationPort  := *,
            btpInfo             := *,
            ssp                 := *,
            its_aid             := * 
        }
        
        /**
         * @desc    Receive template for MAPEM Message (MapemSpatemPort Primitive)
         * @param   p_mapemMsg          The expected MAPEM Message
         * @param   p_gnNextHeader      GN next header value
         * @param   p_gnHeaderType      GN header type value
         * @param   p_gnHeaderSubtype   GN header subtype value
         * @param   p_gnLifetime        GN packet lifetime value (ms)
         * @param   p_gnTrafficClass    GN traffic class value
         */
        template (present) MapemInd mw_mapemIndWithGnParameters(
                                                                template (present) MAPEM p_mapemMsg,
                                                                in template UInt8 p_gnNextHeader := *,
                                                                in template UInt8 p_gnHeaderType := *,
                                                                in template UInt8 p_gnHeaderSubtype := *,
                                                                in template UInt32 p_gnLifetime := *,
                                                                in template UInt8 p_gnTrafficClass := *
        ) modifies mw_mapemInd := { 
garciay's avatar
garciay committed
            gnNextHeader    := p_gnNextHeader,
            gnHeaderType    := p_gnHeaderType,
            gnHeaderSubtype := p_gnHeaderSubtype,
garciay's avatar
garciay committed
            gnLifetime      := p_gnLifetime,
            gnTrafficClass  := p_gnTrafficClass
        }
        
        /**
         * @desc    Receive template for MAPEM Message (MapemSpatemPort Primitive)
         * @param   p_mapemMsg              Expected MAPEM Message
         * @param   p_btpDestinationPort    BTP destination port value
         * @param   p_btpInfo               BTP destination port info value (if BTP-B) or BTP source port value (if BTP-A)
         */
        template MapemInd mw_mapemIndWithBtpParameters(
                                                       template (present) MAPEM p_mapemMsg,
                                                       in template UInt16 p_btpDestinationPort := *,
                                                       in template UInt16 p_btpInfo := *
        ) modifies mw_mapemInd := { 
garciay's avatar
garciay committed
            btpDestinationPort  := p_btpDestinationPort,
            btpInfo             := p_btpInfo     
        };
        
        /**
         * @desc    Receive template for MAPEM Message (MapemSpatemPort Primitive)
         * @param   p_mapemMsg  The expected MAPEM Message
         * @param   p_ssp       SSP value
         * @param   p_its_aid   ITS-AID value
         */
        template (present) MapemInd mw_mapemIndWithSecurityParameters(
                                                                      template (present) MAPEM p_mapemMsg,
                                                                      template Bit128 p_ssp := *,
                                                                      template UInt32 p_its_aid := *
        ) modifies mw_mapemInd := { 
            ssp     := p_ssp,
            its_aid := p_its_aid
        }
        
        /**
         * @desc    Send template for SPATEM Message (MapemSpatemPort Primitive)
         * @param   p_spatemMsg    The SPATEM Message to be sent
         */
        template (value) SpatemReq m_spatemReq(
                                               in template (value) SPATEM p_spatemMsg
        ) := {
            msgOut := p_spatemMsg
        }
        
        /**
         * @desc    Receive template for SPATEM Message (MapemSpatemPort Primitive)
         * @param   p_spatemMsg    The expected SPATEM Message
         */
        template (present) SpatemInd mw_spatemInd(
                                                  template (present) SPATEM p_spatemMsg
        ) := {
garciay's avatar
garciay committed
            msgIn               := p_spatemMsg,
            gnNextHeader        := *,
            gnHeaderType        := *,
            gnHeaderSubtype     := *,
            gnLifetime          := *,
            gnTrafficClass      := *,
            btpDestinationPort  := *,
            btpInfo             := *,
            ssp                 := *,
            its_aid             := * 
        };

        /**
         * @desc    Receive template for SPATEM Message (MapemSpatemPort Primitive)
         * @param   p_spatemMsg         The expected SPATEM Message
         * @param   p_gnNextHeader      GN next header value
         * @param   p_gnHeaderType      GN header type value
         * @param   p_gnHeaderSubtype   GN header subtype value
         * @param   p_gnLifetime        GN packet lifetime value (ms)
         * @param   p_gnTrafficClass    GN traffic class value
         */
        template (present) SpatemInd mw_spatemIndWithGnParameters(
                                                                  template (present) SPATEM p_spatemMsg,
                                                                  in template UInt8 p_gnNextHeader := *,
                                                                  in template UInt8 p_gnHeaderType := *,
                                                                  in template UInt8 p_gnHeaderSubtype := *,
                                                                  in template UInt32 p_gnLifetime := *,
                                                                  in template UInt8 p_gnTrafficClass := *
        ) modifies mw_spatemInd := { 
garciay's avatar
garciay committed
            gnNextHeader    := p_gnNextHeader,
            gnHeaderType    := p_gnHeaderType,
            gnHeaderSubtype := p_gnHeaderSubtype,
garciay's avatar
garciay committed
            gnLifetime      := p_gnLifetime,
            gnTrafficClass  := p_gnTrafficClass
        }
        
        /**
         * @desc    Receive template for SPATEM Message (MapemSpatemPort Primitive)
         * @param   p_spatemMsg             Expected MAPEM Message
         * @param   p_btpDestinationPort    BTP destination port value
         * @param   p_btpInfo               BTP destination port info value (if BTP-B) or BTP source port value (if BTP-A)
         */
        template SpatemInd mw_spatemIndWithBtpParameters(
                                                         template (present) SPATEM p_spatemMsg,
                                                         template UInt16 p_btpDestinationPort := *,
                                                         template UInt16 p_btpInfo := *
        ) modifies mw_spatemInd := { 
garciay's avatar
garciay committed
            btpDestinationPort  := p_btpDestinationPort,
            btpInfo             := p_btpInfo
        };

        /**
         * @desc    Receive template for SPATEM Message (MapemSpatemPort Primitive)
         * @param   p_spatemMsg  The expected SPATEM Message
         * @param   p_ssp        SSP value
         * @param   p_its_aid    ITS-AID value
         */
        template (present) SpatemInd mw_spatemIndWithSecurityParameters(
garciay's avatar
garciay committed
                                                                        template (present) SPATEM p_spatemMsg,
                                                                        template Bit128 p_ssp := *,
                                                                        template UInt32 p_its_aid := *
        ) modifies mw_spatemInd := { 
            ssp     := p_ssp,
            its_aid := p_its_aid
        }
        
    }

    group utPrimitives {
            
        /**
         * @desc    Send template for Upper Tester event initialization
         * @member hashedId8 In case of secured mode set, hashedId8 indicate which certificate the IUT shall use
        */
        template (value) UtInitialize m_mapemSpatemInitialize := {
            hashedId8 := '0000000000000000'O
        }

        /**
        * @desc    Send template for Upper Tester Trigger event
        */
            template (value) UtMapemSpatemTrigger m_utTriggerEvent ( Event p_event ) := {
                event    := p_event
        }
    }

    group mapSpatPduTemplates {
        
        /**
         * @desc    Send template for MAPEM PDU
         * @param   p_map  The MAPEM Message
         */
        template (value) MAPEM m_mapemPdu(
                                          in template (value) MapData p_map
        ) := {
garciay's avatar
garciay committed
            header  := m_itsPduHeader( - , - ,ItsPduHeader_messageID_mapem_ ),
            map_    := p_map
        }
        
        /**
         * @desc    Receive template for MAPEM PDU
         * @param   p_map  The MAPEM Message
         */
        template (present) MAPEM mw_mapemPdu(
                                             template (present) MapData p_map := ?
        ) := {
garciay's avatar
garciay committed
            header  := mw_itsPduHeaderMapem,
            map_    := p_map
        }
        
        /**
         * @desc    Send template for SPATEM PDU
         * @param   p_spat  The SPATEM Message
         */
        template (value) SPATEM m_spatemPdu(
                                            in template (value) SPAT p_spat
        ) := {
garciay's avatar
garciay committed
            header  := m_itsPduHeader( - , - , ItsPduHeader_messageID_spatem_ ),
            spat    := p_spat
        }
        
        /**
         * @desc    Receive template for SPATEM PDU
         * @param   p_spat  The SPATEM Message
         */
        template (present) SPATEM mw_spatemPdu(
                                               template (present) SPAT p_spat := ?
        ) := {
garciay's avatar
garciay committed
            header  := mw_itsPduHeaderSpatem,
            spat    := p_spat
        }
        
    } // End of group mapSpatPduTemplates
    
    group headerTemplates {
        
        /**
         * @desc    Default send template for ITS PDU header
         * @param   p_stationID         The source station ID (Default: test system station id)
         * @param   p_protocolVersion   The protocol version (Default: current MAPEM SPATEM protocol version)
garciay's avatar
garciay committed
         * @param   p_messageID         The message Id (Default: MAPEM SPATEM id)
         */
        template (value) ItsPduHeader m_itsPduHeader(
                                                     in template (value) StationID p_stationID := f_getTsStationId(),
                                                     in template (value) ItsPduHeader.protocolVersion p_protocolVersion := ItsPduHeader_protocolVersion_currentVersion_,
                                                     in template (value) ItsPduHeader.messageID p_messageID
        ) := {
            protocolVersion := p_protocolVersion,
garciay's avatar
garciay committed
            messageID       := p_messageID,
            stationID       := p_stationID
        }
        
        /**
         * @desc    Default receive template for ITS PDU header
         * @param   p_stationID         The expected station id (Default: any)
         * @param   p_protocolVersion   The expected protocol version (Default: current MAPEM SPATEM protocol version)
garciay's avatar
garciay committed
         * @param   p_messageID         The expected message id (Default: MAPEM SPATEM message id)
         */
        template ItsPduHeader mw_itsPduHeader(
                                              template (present) StationID p_stationID := ?,
                                              template (present) ItsPduHeader.protocolVersion p_protocolVersion := ItsPduHeader_protocolVersion_currentVersion_,
                                              template (present) ItsPduHeader.messageID p_messageID := ?
        ) := {
            protocolVersion := p_protocolVersion,
garciay's avatar
garciay committed
            messageID       := p_messageID,
            stationID       := p_stationID
        }
        
        /**
         * @desc    Default receive template for ITS PDU header
         * @param   p_stationID         The expected station id (Default: any)
         * @param   p_protocolVersion   The expected protocol version (Default: current MAPEM SPATEM protocol version)
garciay's avatar
garciay committed
         * @param   p_messageID         The expected message id (Default: MAPEM id)
         */
        template ItsPduHeader mw_itsPduHeaderMapem(
                                                   template (present) StationID p_stationID := ?,
                                                   template (present) ItsPduHeader.protocolVersion p_protocolVersion := ItsPduHeader_protocolVersion_currentVersion_,
                                                   template (present) ItsPduHeader.messageID p_messageID := ItsPduHeader_messageID_mapem_
        ) := {
            protocolVersion := p_protocolVersion,
garciay's avatar
garciay committed
            messageID       := p_messageID,
            stationID       := p_stationID
        }
        
        /**
         * @desc    Default receive template for ITS PDU header
         * @param   p_stationID         The expected station id (Default: any)
         * @param   p_protocolVersion   The expected protocol version (Default: current MAPEM SPATEM protocol version)
garciay's avatar
garciay committed
         * @param   p_messageID         The expected message id (Default: SPATEM id)
         */
        template ItsPduHeader mw_itsPduHeaderSpatem(
                                                    template (present) StationID p_stationID := ?,
                                                    template (present) ItsPduHeader.protocolVersion p_protocolVersion := ItsPduHeader_protocolVersion_currentVersion_,
                                                    template (present) ItsPduHeader.messageID p_messageID := ItsPduHeader_messageID_spatem_
        ) := {
            protocolVersion := p_protocolVersion,
            messageID := p_messageID,
            stationID := p_stationID
        }
        
        /**
         * @desc    Default receive template for the station id
         */
        template (present) StationID mw_anyStationId := ?;
        
    } // End of group headerTemplates

    group mapemSpatemTemplates {
        
        group mapemTemplates {
            
            /**
             * @desc    Send template for MAPEM Message
             */
            template (value) MapData m_defaultMapem := {
                timeStamp         := omit,
                msgIssueRevision  := PX_MSG_ISSUE_REVISION,
                layerType         := omit,
                layerID           := omit,
                intersections     := omit,
                roadSegments      := omit,
                dataParameters    := omit,
                restrictionList   := omit,
                regional          := omit
            }
            
            /**
             * @desc    Receive template for MAPEM Message
             */
            template (present) MapData mw_defaultMapem := {
                timeStamp         := *,
                msgIssueRevision  := ?,
                layerType         := *,
                layerID           := *,
                intersections     := *,
                roadSegments      := *,
                dataParameters    := *,
                restrictionList   := *,
                regional          := *
            }
            
            /**
             * @desc    Receive template for MAPEM Message with no LayerType
             */
            template (present) MapData mw_mapemWellFormatted modifies mw_defaultMapem := {
                layerType         := omit,
                layerID           := omit
            }
            
            /**
             * @desc    Receive template for MAPEM Message with no LayerType
             */
garciay's avatar
garciay committed
            template (present) MapData mw_mapemLayerType(
                                                         in template (present) LayerID p_layerID := ?
            ) modifies mw_mapemWellFormatted := {
                layerType         := ?,
                layerID           := p_layerID
            }
            
        } // End of group mapemTemplates 
        
        group spatemTemplates {
            
            /**
             * @desc    Send template for SPAT Message
             */
            template (value) SPAT m_spat := {
                timeStamp      := omit,
                name           := omit, 
                intersections  := m_intersections,
                regional       := omit
            }
            
            template (value) IntersectionStateList m_intersections := { m_intersection };
            
            template (value) IntersectionState m_intersection := {
                name                := omit,
                id                  := m_intersectionReferenceID,
                revision            := PX_INTERSECTIONSTATE_REVISION,
                status              := PX_STATUS,
                moy                 := omit,
                timeStamp           := omit,
                enabledLanes        := omit,
                states              := m_movements,
                maneuverAssistList  := omit,
                regional            := omit
            }
            
            template (value) IntersectionReferenceID m_intersectionReferenceID := {
                region               := omit,
                id                    := PX_INTERSECTION_ID
            }
            
            template (value) MovementList m_movements := { m_movement };
            
            template (value) MovementState m_movement := {
                movementName           := omit,
                signalGroup            := PX_SIGNAL_GROUP_ID,    
                state_time_speed       := m_movementEventList,
                maneuverAssistList     := omit,
                regional               := omit
            }
            
            template (value) MovementEventList m_movementEventList := { m_movementEvent };
            
            template (value) MovementEvent m_movementEvent := {
                eventState      := stop_Then_Proceed,
                timing          := omit,
                speeds          := omit,
                regional        := omit 
            }
            
            /**
             * @desc    Receive template for SPATEM Message
             */
            template (present) SPAT mw_defaultSpatem := {
                timeStamp      := *,
                name           := *, 
                intersections  := ?,
                regional       := *
            }
            
            template (present) SPAT mw_spatemWellFormatted 
            modifies mw_defaultSpatem := {
            }
            
            template (present) SPAT mw_spatem_with_region_id(
                                                             template (present) SPAT.regional p_regional := ?
            ) modifies mw_defaultSpatem := {
                regional       := p_regional // TODO Try to refined it
            }
            
        } // End of group spatemTemplates
        
    } // End of group mapemSpatemTemplates

} // End of module LibItsMapemSpatem_Templates