LibItsCam_Templates.ttcn 32.7 KB
Newer Older
garciay's avatar
garciay committed
 *    @author   ETSI / STF405 / STF449 / STF484 / STF517
 *    @version  $URL$
 *              $Id$
 *    @desc     Module containing base template definitions for CAM
garciay's avatar
garciay committed
 *    @copyright   ETSI Copyright Notification
 *                 No part may be reproduced except as authorized by written permission.
 *                 The copyright and the foregoing restriction extend to reproduction in all media.
 *                 All rights reserved.
module LibItsCam_Templates {
    // LibCommon
    import from LibCommon_BasicTypesAndValues all;
    import from LibCommon_DataStrings all;
    import from ITS_Container language "ASN.1:1997" all;
    import from CAM_PDU_Descriptions language "ASN.1:1997" all;
filatov's avatar
filatov committed
//    import from DENM_PDU_Descriptions language "ASN.1:1997" all;
    import from LibItsCommon_Functions all;
    import from LibItsCommon_TypesAndValues all;
    import from LibItsCommon_ASN1_NamedNumbers all;
reinaortega's avatar
reinaortega committed
    import from LibItsCam_TestSystem all;
    import from LibItsCam_TypesAndValues all;
fischer's avatar
fischer committed
    
    group camPrimitives {
berge's avatar
berge committed
        
        /**
         * @desc    Receive template for CAM Message (CamPort Primitive)
         * @param   p_camMsg    Expected CAM Message
berge's avatar
berge committed
         */
        template CamInd mw_camInd (
            in template (present) CAM p_camMsg
berge's avatar
berge committed
        ) := { 
            msgIn               := p_camMsg,
            gnNextHeader        := *,
            gnHeaderType        := *,
            gnHeaderSubtype     := *,
            gnLifetime          := *,
            gnTrafficClass      := *,
            btpDestinationPort  := *,
            btpInfo             := *,
            ssp                 := *,
            its_aid             := *
        };
        
        /**
         * @desc    Receive template for CAM Message (CamPort Primitive)
         * @param   p_camMsg            Expected CAM 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 CamInd mw_camIndWithGnParameters (
            in template (present) CAM p_camMsg,
            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_camInd := { 
            gnNextHeader := p_gnNextHeader,
            gnHeaderType := p_gnHeaderType,
            gnHeaderSubtype := p_gnHeaderSubtype,
            gnLifetime := p_gnLifetime,
            gnTrafficClass := p_gnTrafficClass    
        };
        
        /**
         * @desc    Receive template for CA Message (DenmPort Primitive)
         * @param   p_caMsg     The expected CA Message
         * @param   p_ssp       SSP security parameter
         * @param   p_its_aid   ITS-AID value
         */
        template CamInd mw_camIndWithSecurityParameters(
                                                          template (present) CAM p_camMsg,
                                                          template Bit256 p_ssp := *,
                                                          template UInt32 p_its_aid := c_its_aid_CAM
        ) modifies mw_camInd := { 
            ssp             := p_ssp,
            its_aid         := p_its_aid
        };
        
        /**
         * @desc    Receive template for CAM Message (CamPort Primitive)
         * @param   p_camMsg                Expected CAM 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 CamInd mw_camIndWithBtpParameters (
            in template (present) CAM p_camMsg,
            in template UInt16 p_btpDestinationPort := *,
            in template UInt16 p_btpInfo := *
        ) modifies mw_camInd := { 
            btpDestinationPort := p_btpDestinationPort,
            btpInfo := p_btpInfo     
berge's avatar
berge committed
        };

        /**
         * @desc    Send template for CAM Message (CamPort Primitive)
berge's avatar
berge committed
         * @param   p_camMsg CAM Message to be received
berge's avatar
berge committed
         */    
        template (value) CamReq m_camReq (
            in template (value) CAM p_camMsg
berge's avatar
berge committed
        ) := { 
            msgOut := p_camMsg 
        };
        group camUtPrimitives {
            /**
             * @desc Initializes the CAM IUT. 
             */
            template (value) UtInitialize m_camInitialize := {
garciay's avatar
garciay committed
                hashedId8 := '0000000000000000'O
            /**
             * @desc Change the curvature
             * @param p_offset The curvature value offset
            template (value) UtCamTrigger m_changeCurvature(CurvatureValue p_changeCurvature) := {
                changeCurvature := p_changeCurvature
             * @desc Change the speed
             * @param p_offset The speed value offset
            template (value) UtCamTrigger m_changeSpeed(Int16 p_changeSpeed) := {
                changeSpeed := p_changeSpeed
             * @desc Set the acceleration control status
             * @param p_status The status to set
             */
            template (value) UtCamTrigger m_setAccelerationControlStatus(AccelerationControl p_status) := {
                setAccelerationControlStatus := p_status
             * @desc Set the exterior lights status
             * @param p_status The status to set
             */
            template (value) UtCamTrigger m_setExteriorLightsStatus(ExteriorLights p_status) := {
                setExteriorLightsStatus := p_status
             * @desc Change the heading
             * @param p_offset The heading value offset
            template (value) UtCamTrigger m_changeHeading(HeadingValue p_changeHeading) := {
                changeHeading := p_changeHeading
             * @desc Set the drive direction
             * @param p_driveDirection The drive direction
            template (value) UtCamTrigger m_setDriveDirection(DriveDirection p_driveDirection) := {
                setDriveDirection := p_driveDirection
             * @desc Change the yaw rate
             * @param p_offset The yaw rate value offset
            template (value) UtCamTrigger m_changeYawRate(YawRateValue p_changeYawRate) := {
                changeYawRate := p_changeYawRate
garciay's avatar
garciay committed
            /**
             * @desc Set the vehicle role
             * @param p_vehicleRole The vehicle role
             */
            template (value) UtCamTrigger m_setVehicleRole(VehicleRole p_vehicleRole) := {
                setVehicleRole := p_vehicleRole
            }
            
garciay's avatar
garciay committed
            /**
             * @desc Set the dangerous good description
             * @param p_dangerousGoods The dangerous good description
             */
            template (value) UtCamTrigger m_setDangerousGoods(DangerousGoodsBasic p_dangerousGoods) := {
                setDangerousGoods := p_dangerousGoods
            }
            
        } // end utPrimitives
        
    } // end group Primitives

    group positionTemplates {
        
        /**
         * @desc The test system reference position.
        template (value) ReferencePosition m_tsPosition := {
berge's avatar
berge committed
            latitude := f_integer2Latitude(f_getTsLatitude()),
            longitude := f_integer2Longitude(f_getTsLongitude()),
            positionConfidenceEllipse := {
                semiMajorConfidence   := SemiAxisLength_oneCentimeter_,
                semiMinorConfidence   := SemiAxisLength_oneCentimeter_,
                semiMajorOrientation  := HeadingValue_wgs84North_
            altitude := {
                altitudeValue := AltitudeValue_referenceEllipsoidSurface_,
                altitudeConfidence := unavailable
        }
        
    } // end positionTemplates
    /**
     * @desc    Default Receive template for CAM PDU
berge's avatar
berge committed
     */
    template (present) CAM mw_camMsg_any := {
            protocolVersion := ItsPduHeader_protocolVersion_currentVersion_, 
            messageID := ItsPduHeader_messageID_cam_, 
            generationDeltaTime := ?,
            camParameters := ?
berge's avatar
berge committed
    
berge's avatar
berge committed
        /**
         * @desc
         *     Receive template for CAM PDU including basic container with 
         *     given reference position
         * @param p_referencePosition The reference position
         */
        template (present) CAM mw_camMsg_BC_refPos(
            in template(present) ReferencePosition p_referencePosition
        ) modifies mw_camMsg_any := {
            cam := {
                camParameters := {
                    basicContainer := {
                        stationType := ?,
                        referencePosition := p_referencePosition
berge's avatar
berge committed
                    },
                    highFrequencyContainer := ?,
                    lowFrequencyContainer := *,
                    specialVehicleContainer := *
                }
berge's avatar
berge committed
            }
        }
        
    } // end group camBasicContainer
berge's avatar
berge committed
    
    group camHighFrequencyContainer {
berge's avatar
berge committed
        
         * @desc
         *     Receive template for CAM PDU including specific basic vehicle container
         * @param p_basicVehicleContainer The including basic vehicle container
berge's avatar
berge committed
         */
        template (present) CAM mw_camMsg_HF_BV(
            in template(present) BasicVehicleContainerHighFrequency p_basicVehicleContainer
        ) modifies mw_camMsg_any := {
berge's avatar
berge committed
            cam := {
                camParameters := {
                    basicContainer := ?,
                    highFrequencyContainer := {
                        basicVehicleContainerHighFrequency := p_basicVehicleContainer
berge's avatar
berge committed
                    },
                    lowFrequencyContainer := *,
                    specialVehicleContainer := *
        /**
         * @desc    Default Receive template for basic vehicle container in 
         *          the high frequency container
         */
        template (present) BasicVehicleContainerHighFrequency mw_HF_BV_any := {
            heading := ?,
            speed := ?,
            driveDirection := ?,
            vehicleLength := ?,
            vehicleWidth := ?,
            longitudinalAcceleration := ?,
            curvature := ?,
            curvatureCalculationMode := ?,
            yawRate := ?,
            accelerationControl := *,
            lanePosition := *,
            steeringWheelAngle := *,
            lateralAcceleration := *,
            verticalAcceleration := *,
            performanceClass := *,
            cenDsrcTollingZone := *
berge's avatar
berge committed
        
        /**
         * @desc
         *     Receive template for CAM PDU including specific basic vehicle container
         * @param p_curvatureValue The curvature
         */
        template(present) BasicVehicleContainerHighFrequency mw_HF_BV_curvature(
            in template(present) CurvatureValue p_curvatureValue
        ) modifies mw_HF_BV_any := 
        {
            curvature := {
                curvatureValue := p_curvatureValue,
                curvatureConfidence := ?
berge's avatar
berge committed
            }
berge's avatar
berge committed
        
        /**
         * @desc
         *     Receive template for CAM PDU including specific basic vehicle container
         * @param p_accCtrl The acceleration control
         */
        template(present) BasicVehicleContainerHighFrequency mw_HF_BV_accCtrl(
            in template AccelerationControl p_accCtrl
        ) modifies mw_HF_BV_any := 
        {
            accelerationControl := p_accCtrl
        }
berge's avatar
berge committed
        
        /**
         * @desc
         *     Receive template for CAM PDU including specific basic vehicle container
         * @param p_headingValue The heading
         */
        template(present) BasicVehicleContainerHighFrequency mw_HF_BV_heading(
            in template(present) HeadingValue p_headingValue
        ) modifies mw_HF_BV_any := 
        {
            heading := {
                headingValue := p_headingValue,
                headingConfidence := ?
berge's avatar
berge committed
            }
berge's avatar
berge committed
        
        /**
         * @desc
         *     Receive template for CAM PDU including specific basic vehicle container
         * @param p_speedValue The speed
         */
        template(present) BasicVehicleContainerHighFrequency mw_HF_BV_speed(
            in template(present) SpeedValue p_speedValue
        ) modifies mw_HF_BV_any := 
        {
            speed := {
                speedValue := p_speedValue,
                speedConfidence := ?
berge's avatar
berge committed
            }
berge's avatar
berge committed
        
        /**
         * @desc
         *     Receive template for CAM PDU including specific basic vehicle container
         * @param p_driveDirection The drive direction
         */
        template(present) BasicVehicleContainerHighFrequency mw_HF_BV_driveDirection(
            in template(present) DriveDirection p_driveDirection
        ) modifies mw_HF_BV_any := 
        {
            driveDirection := p_driveDirection
        }
berge's avatar
berge committed
        
        /**
         * @desc
         *     Receive template for CAM PDU including specific basic vehicle container
         * @param p_yawRateValue The yaw rate
         */
        template(present) BasicVehicleContainerHighFrequency mw_HF_BV_yawRate(
            in template(present) YawRateValue p_yawRateValue
        ) modifies mw_HF_BV_any := 
        {
            yawRate := {
                yawRateValue := p_yawRateValue,
                yawRateConfidence := ?
berge's avatar
berge committed
            }
berge's avatar
berge committed
        
    } // end group camHighFrequencyContainer
    
    group camLowFrequencyContainer {
berge's avatar
berge committed
        
        /**
         * @desc Default Receive template for CAM PDU including 
         *       optional lowFrequencyContainer
         */
        template (present) CAM mw_camMsg_LF_any modifies mw_camMsg_any := {
berge's avatar
berge committed
            cam := {
                camParameters := {
                    basicContainer := ?,
                    highFrequencyContainer := ?,
                    lowFrequencyContainer := ?,
                    specialVehicleContainer := *
berge's avatar
berge committed
                }
            }
berge's avatar
berge committed
        
        /**
         * @desc
         *     Receive template for CAM PDU including specific basic vehicle container
         * @param p_basicVehicleContainer The including basic vehicle container
         */
        template (present) CAM mw_camMsg_LF_BV(
            in template(present) BasicVehicleContainerLowFrequency p_basicVehicleContainer := ?
        ) modifies mw_camMsg_any := {
berge's avatar
berge committed
            cam := {
                camParameters := {
                    basicContainer := ?,
                    highFrequencyContainer := ?,
                    lowFrequencyContainer := {
                        basicVehicleContainerLowFrequency := p_basicVehicleContainer
berge's avatar
berge committed
                }
            }
berge's avatar
berge committed
        
         * @desc    Default Receive template for basic vehicle container in 
         *          the low frequency container
berge's avatar
berge committed
         */
        template (present) BasicVehicleContainerLowFrequency mw_LF_BV_any := {
            vehicleRole := ?,
            exteriorLights := ?,
            pathHistory := ?
berge's avatar
berge committed
        }
        /**
         * @desc
         *     Receive template for CAM PDU including specific basic vehicle container
         * @param p_extLights The exterior lights
         */
        template(present) BasicVehicleContainerLowFrequency mw_LF_BV_extLights(
                                                                               in template (present) ExteriorLights p_extLights
        ) modifies mw_LF_BV_any := 
        {
            exteriorLights := p_extLights
        
    } // end group camLowFrequencyContainer
berge's avatar
berge committed
    
    group camSpecialVehicleContainer {
berge's avatar
berge committed
        
         * @desc Default Receive template for CAM PDU including 
         *       optional specialVehicleContainer
berge's avatar
berge committed
         */
        template (present) CAM mw_camMsg_SVC_any modifies mw_camMsg_any := {
berge's avatar
berge committed
            cam := {
                camParameters := {
                    basicContainer := ?,
                    highFrequencyContainer := ?,
                    lowFrequencyContainer := *,
                    specialVehicleContainer := ?
        
        /**
         * @desc Receive template for CAM PDU including optional specialVehicleContainer
         * @param p_specialVehicleContainer The expected specialVehicleContainer
         */
        template (present) CAM mw_camMsg_SVC(
            in template (present) SpecialVehicleContainer p_specialVehicleContainer
        ) modifies mw_camMsg_SVC_any := {
berge's avatar
berge committed
            cam := {
                camParameters := {
                    specialVehicleContainer := p_specialVehicleContainer
berge's avatar
berge committed
        
        /**
         * @desc Receive template for specialVehicleContainer public transport
         */
        template (present) SpecialVehicleContainer mw_publicTransport_any := {
            publicTransportContainer := ?
        }
        
        /**
         * @desc Receive template for specialVehicleContainer special transport
         */
        template (present) SpecialVehicleContainer mw_specialTransport_any := {
            specialTransportContainer := ?
        }
        
        /**
         * @desc Receive template for specialVehicleContainer dangerous goods
         */
        template (present) SpecialVehicleContainer mw_dangerousGoods_any := {
            dangerousGoodsContainer := ?
        }
        
        /**
         * @desc Receive template for specialVehicleContainer road works
         */
        template (present) SpecialVehicleContainer mw_roadWorks_any := {
            roadWorksContainerBasic := ?
        }
        
        /**
         * @desc Receive template for specialVehicleContainer rescue
         */
        template (present) SpecialVehicleContainer mw_rescue_any := {
            rescueContainer := ?
        }
        
        /**
         * @desc Receive template for specialVehicleContainer emergency
         */
        template (present) SpecialVehicleContainer mw_emergency_any := {
            emergencyContainer := ?
        }
        
        /**
         * @desc Receive template for specialVehicleContainer safety car
         */
        template (present) SpecialVehicleContainer mw_safetyCar_any := {
            safetyCarContainer := ?
        }
        
    } //end group camSpecialVehicleContainer
berge's avatar
berge committed
    
         * @desc    Send template for Vehicle CAM PDU
         * @param   p_stationId Station ID of the source
         * @param   p_generationTime Timestamp of the generated message
         * @param   p_referencePosition Position of the sending station
berge's avatar
berge committed
         */
        template (value) CAM m_camMsg_vehicle_HF_BV(
            StationID p_stationId,
            GenerationDeltaTime p_generationTime,
            template (value) ReferencePosition p_referencePosition
        ) := {
            header := {
                protocolVersion := ItsPduHeader_protocolVersion_currentVersion_,
                messageID := ItsPduHeader_messageID_cam_,
berge's avatar
berge committed
            cam := {
                generationDeltaTime := p_generationTime,
berge's avatar
berge committed
                camParameters := {
                        stationType := StationType_passengerCar_,
                        referencePosition := p_referencePosition
                    },
                    highFrequencyContainer := {
                        basicVehicleContainerHighFrequency := {
                            heading := {
                                headingValue := HeadingValue_wgs84North_, //0
                                headingConfidence := 10
                            },
                            speed := {
                                speedValue := 45,
                                speedConfidence := 5
                            },
                            driveDirection := forward,
                            vehicleLength := {
                                vehicleLengthValue := 50,
                                vehicleLengthConfidenceIndication := noTrailerPresent
                            },
                            vehicleWidth := 21,
                            longitudinalAcceleration := {
                                longitudinalAccelerationValue := LongitudinalAccelerationValue_unavailable_,
                                longitudinalAccelerationConfidence := AccelerationConfidence_unavailable_
                                curvatureValue := CurvatureValue_straight_,
                                curvatureConfidence := unavailable
                            },
                            curvatureCalculationMode := yawRateUsed,
                            yawRate := {
                                yawRateValue := YawRateValue_straight_,
                                yawRateConfidence := unavailable
                            },
                            accelerationControl := omit,
                            lanePosition := omit,
                            steeringWheelAngle := omit,
                            lateralAcceleration := omit,
                            verticalAcceleration := omit, 
                            performanceClass := omit,
                            cenDsrcTollingZone := omit
berge's avatar
berge committed
                        }
                    lowFrequencyContainer := omit,
                    specialVehicleContainer := omit
                }
            }
        }; // End of template m_camMsg_vehicle_HF_BV
        
        /**
         * @desc    Send template for Vehicle CAM PDU
         * @param   p_stationId Station ID of the source
         * @param   p_generationTime Timestamp of the generated message
         * @param   p_referencePosition Position of the sending station
         */
        template (value) CAM m_camMsg_vehicle(
            StationID p_stationId,
            GenerationDeltaTime p_generationTime,
            template (value) ReferencePosition p_referencePosition
        ) modifies m_camMsg_vehicle_HF_BV := {
            cam := {
                camParameters := {
                    lowFrequencyContainer := {
                        basicVehicleContainerLowFrequency := {
                            vehicleRole := default_,
                            exteriorLights := ExteriorLights_daytimeRunningLightsOn_,
berge's avatar
berge committed
                        }
        template (value) CAM m_camMsg_publicTransport(
            StationID p_stationId,
            GenerationDeltaTime p_generationTime,
            template (value) ReferencePosition p_referencePosition
        ) modifies m_camMsg_vehicle := {
            cam := {
                camParameters := {
                    lowFrequencyContainer := {
                        basicVehicleContainerLowFrequency := {
                            vehicleRole := publicTransport
                        }
                    },
                    specialVehicleContainer := {
			            publicTransportContainer := {
							embarkationStatus := true,
							ptActivation := omit
            			}
                    }
                }
            }
        };

        template (value) CAM m_camMsg_specialTransport(
            StationID p_stationId,
            GenerationDeltaTime p_generationTime,
            template (value) ReferencePosition p_referencePosition
        ) modifies m_camMsg_vehicle := {
            cam := {
                camParameters := {
                    lowFrequencyContainer := {
                        basicVehicleContainerLowFrequency := {
                            vehicleRole := specialTransport
                        }
                    },
                    specialVehicleContainer := {
						specialTransportContainer := {
							specialTransportType := '1000'B/* length(4)*/, // heavyLoad
							lightBarSirenInUse := '11'B/* length(2)*/ // siren and lightBar
    } // end camAnyVehicle
    
    group camAccelerationControlTemplates {
berge's avatar
berge committed
        
        /**
         * @desc  Receive template for acceleration control with brake padel active on
         */
        template AccelerationControl mw_brakePedalActive_On         := '1*'B length(7);
berge's avatar
berge committed
        
        /**
         * @desc  Receive template for acceleration control with brake padel active off
         */
        template AccelerationControl mw_brakePedalActive_Off        := '0*'B length(7);
berge's avatar
berge committed
        
        /**
         * @desc  Receive template for acceleration control with gas padel active on
         */
        template AccelerationControl mw_gasPedalActive_On           := '?1*'B length(7);
        
        /**
         * @desc  Receive template for acceleration control with gas padel active off
         */
        template AccelerationControl mw_gasPedalActive_Off          := '?0*'B length(7);
        
        /**
         * @desc  Receive template for acceleration control with emergency brake active on
         */
        template AccelerationControl mw_emergencyBrakeActive_On     := '??1*'B length(7);
        
        /**
         * @desc  Receive template for acceleration control with emergency brake active off
         */
        template AccelerationControl mw_emergencyBrakeActive_Off    := '??0*'B length(7);
        
        /**
         * @desc  Receive template for acceleration control with collision warning active on
         */
        template AccelerationControl mw_collisionWarningActive_On   := '???1*'B length(7);
        
        /**
         * @desc  Receive template for acceleration control with collision warning active off
         */
        template AccelerationControl mw_collisionWarningActive_Off  := '???0*'B length(7);
        
        /**
         * @desc  Receive template for acceleration control with adaptive cruise control active on
         */
        template AccelerationControl mw_accActive_On                := '????1*'B length(7);
        
        /**
         * @desc  Receive template for acceleration control with adaptive cruise control active off
         */
        template AccelerationControl mw_accActive_Off               := '????0*'B length(7);
        
        /**
         * @desc  Receive template for acceleration control with cruise control active on
         */
        template AccelerationControl mw_cruiseControl_On            := '?????1*'B length(7);
        
        /**
         * @desc  Receive template for acceleration control with cruise control active off
         */
        template AccelerationControl mw_cruiseControl_Off           := '?????0*'B length(7);
        
        /**
         * @desc  Receive template for acceleration control with speed limiter active on
         */
        template AccelerationControl mw_speedLimiterActive_On       := '*1'B length(7);
        
        /**
         * @desc  Receive template for acceleration control with speed limiter active off
         */
        template AccelerationControl mw_speedLimiterActive_Off      := '*0'B length(7);
        
    } // end group camAccelerationControlTemplates
    
berge's avatar
berge committed
    group camExteriorLightsTemplates {
        /**
         * @desc  Receive template for exterior lights with low beam lights off  
berge's avatar
berge committed
         */
        template ExteriorLights mw_lowBeamLightsOff := '0*'B length (8);
        /**
         * @desc  Receive template for exterior lights with low beam lights on 
berge's avatar
berge committed
         */
        template ExteriorLights mw_lowBeamLightsOn          := '1*'B length(8);
        /**
         * @desc  Receive template for exterior lights with high beam lights off 
berge's avatar
berge committed
         */
        template ExteriorLights mw_highBeamLightsOff        := '?0*'B length(8);
        /**
         * @desc  Receive template for exterior lights with high beam lights on 
berge's avatar
berge committed
         */
        template ExteriorLights mw_highBeamLightsOn         := '?1*'B length(8);
berge's avatar
berge committed
        
        /**
         * @desc  Receive template for exterior lights with left turn signal off 
berge's avatar
berge committed
         */
        template ExteriorLights mw_leftTurnSignalOff        := '??0*'B length(8);
        /**
         * @desc  Receive template for exterior lights with left turn signal on 
berge's avatar
berge committed
         */
        template ExteriorLights mw_leftTurnSignalOn         := '??1*'B length(8);
berge's avatar
berge committed
        
        /**
         * @desc  Receive template for exterior lights with right turn signal off 
berge's avatar
berge committed
         */
        template ExteriorLights mw_rightTurnSignalOff       := '???0*'B length(8);
        /**
         * @desc  Receive template for exterior lights with right turn signal on 
berge's avatar
berge committed
         */
        template ExteriorLights mw_rightTurnSignalOn        := '???1*'B length(8); 
berge's avatar
berge committed
        
         * @desc  Receive template for exterior lights with day time running lights off 
berge's avatar
berge committed
         */
        template ExteriorLights mw_daytimeRunningLightsOff  := '????0*'B length(8);
         * @desc  Receive template for exterior lights with day time running lights on 
berge's avatar
berge committed
         */
        template ExteriorLights mw_daytimeRunningLightsOn   := '????1*'B length(8);
berge's avatar
berge committed
        
         * @desc  Receive template for exterior lights with reverse light off 
berge's avatar
berge committed
         */
        template ExteriorLights mw_reverseLightOff          := '?????0*'B length(8);
berge's avatar
berge committed
        
         * @desc  Receive template for exterior lights with reverse light on 
berge's avatar
berge committed
         */
        template ExteriorLights mw_reverseLightOn           := '?????1*'B length(8);
berge's avatar
berge committed
        
         * @desc  Receive template for exterior lights with fog light off 
berge's avatar
berge committed
         */
        template ExteriorLights mw_fogLightOff              := '??????0*'B length(8);
berge's avatar
berge committed
        
         * @desc  Receive template for exterior lights with fog light on 
berge's avatar
berge committed
         */
        template ExteriorLights mw_fogLightOn               := '??????1*'B length(8);
berge's avatar
berge committed
        
        /**
         * @desc  Receive template for exterior lights with parking lights off 
berge's avatar
berge committed
         */
        template ExteriorLights mw_parkingLightsOff         := '*0'B length(8);
berge's avatar
berge committed
         
        /**
         * @desc  Receive template for exterior lights with parking lights on 
berge's avatar
berge committed
         */
        template ExteriorLights mw_parkingLightsOn          := '*1'B length(8);
berge's avatar
berge committed
        
        /**
         * @desc  Receive template for exterior lights with hazard lights on 
berge's avatar
berge committed
         */
        template ExteriorLights mw_hazardConditionOn        := '??11*'B length(8);
berge's avatar
berge committed
        
    } // end group exteriorLights
        /**
         * @desc Converts an integer to Longitude
         * @param p_longitude The integer value
         * @return The longitude value
berge's avatar
berge committed
        function f_integer2Longitude(in integer p_longitude) return Longitude {
            
            var Longitude v_longitude := f_abs(p_longitude);
berge's avatar
berge committed
            
            return v_longitude;
        }
        
        /**
         * @desc Converts an integer to Latitude
         * @param p_latitude The integer value
         * @return The latitude value
         */
berge's avatar
berge committed
        function f_integer2Latitude(in integer p_latitude) return Latitude {
            
            var Latitude v_latitude := f_abs(p_latitude);
berge's avatar
berge committed
            
            return v_latitude;
        }
        
    } // end camTemplateFunctions
} // end LibItsCam_Templates