LibItsCommon_Functions.ttcn 6.62 KB
Newer Older
/**
 *    @author     ETSI / STF405
 *    @version    $URL$
 *                $Id$
 *    @desc       Module containing common functions for ITS
module LibItsCommon_Functions {

    // LibCommon
    import from LibCommon_Sync all;
    import from LibCommon_VerdictControl all;
    
    // LibIts
    import from DENM_PDU_Descriptions language "ASN.1:1997" all; 
    import from LibItsCommon_Pixits all;
    import from LibIts_Interface all;
    import from LibItsCommon_TypesAndValues all;
    group upperTester {
        
        /**
         * @desc    Requests to bring the IUT in an initial state
         * @param   p_init The initialisation to trigger.
         */
        function f_utInitializeIut(template (value) UtInitialize p_init) runs on ItsAdapterComponent {
            
            utPort.send(p_init);
            tc_wait.start;
            alt {
                [] utPort.receive(UtResult:true) {
                    tc_wait.stop;
                    log("*** f_utInitializeIut: INFO: IUT initialized ***");
                }
                [] utPort.receive {
                    tc_wait.stop;
                    f_selfOrClientSyncAndVerdict("error", e_error, "*** IUT could not be initialized ***");
                }
                [] tc_wait.timeout {
                    f_selfOrClientSyncAndVerdict("error", e_timeout, "*** IUT could not be initialized in time ***");
                }
            }
            
        }
        
        /**
         * @desc    Triggers event from the application layer
         * @param   p_event The event to trigger.
         * @return 
         */
        function f_utTriggerEvent(template (value) UtEvent p_event) runs on ItsAdapterComponent {
            var template (value) UtTrigger v_utMsg := { p_event };
            
            utPort.send(v_utMsg);
        }
        
        /**
         * @desc Checks that the event was indicated at the application layer
         * @param p_event The event to check.
         * @param   p_discard The event should not appear. Default value: FALSE.
         * @return 
         */
        function f_utCheckEvent(template (value) UtEvent p_event, boolean p_discard := false) runs on ItsAdapterComponent {
            var template (value) UtCheck v_utMsg := { p_event };
            
            utPort.send(v_utMsg);
            tc_wait.start;
            alt {
                [] utPort.receive(UtResult:true) {
                    tc_wait.stop;
                    if (p_discard == false) {
                        log("*** f_utCheckEvent: Event correctly indicated at application layer ***");
                    }
                    else {
                        f_selfOrClientSyncAndVerdict("error", e_error, "*** f_utCheckEvent: Event indicated at application layer where it should be discarded ***");
                    }
                }
                [] utPort.receive {
                    tc_wait.stop;
                    if (p_discard == false) {
                        f_selfOrClientSyncAndVerdict("error", e_error, "*** f_utCheckEvent: Event not correctly indicated at application layer ***");
                    }
                    else {
                        log("*** f_utCheckEvent: Another event indicated at application layer, repeating check ***");
                        repeat;
                    }
                }
                [] tc_wait.timeout {
                    if (p_discard == false) {
                        f_selfOrClientSyncAndVerdict("error", e_timeout, "*** f_utCheckEvent: Timeout while waiting for event check result ***");
                    }
                    else {
                        log("*** f_utCheckEvent: Event not indicated at application layer ***");
                    }
                }
            }
        }
        
    } // end of group upper tester    
    
        /** 
         * @desc    function to generate integer random values
         *            
         * @see        ttcn-3 - rnd()
         * @param     p_lowerbound lowest number in range
         * @param     p_upperbound highest number in range
         * @return     random integer
         *
        */
        function f_random(    in integer p_lowerbound,
                            in integer p_upperbound )
        return integer {
            //Variables
            var integer v_random := 0;
            v_random := float2int(int2float(p_upperbound - p_lowerbound +1)*rnd()) + p_lowerbound;
    
            log("*** f_random: INFO: OK - random value = " & int2str(v_random) & " ***");
        } // end function f_random
    
        /**
         * @desc    Gets the current time
         * @return  Timestamp - current time in Epoch format
         */
        function f_getCurrentTime() return TimeStamp {
            var TimeStamp v_timeStamp := 0;
            
            v_timeStamp := fx_getCurrentTime();
            
            return v_timeStamp;
        }
           
    } // end generalFunctions  
       
    group itsFunctions { 

        /** 
         * @desc    Gets the station identifier of test system
         * @return  Test system's station ID
         * @see     PX_TESTER_STATION_ID
         */
        function f_getTsStationId()
        return StationID {
            
            return PX_TESTER_STATION_ID;
                
        } // end f_getTsStationId
        
        /**
         * @desc    Gets the current position of test system
         * @return  Test system's position
         */
        function f_getTsCurrentPosition() return ReferencePosition {
            
            // TODO: correct values required
            var ReferencePosition v_referencePosition := {
                longitude := {hemisphere := east, degree := 0},
                latitude := {hemisphere := north, degree := 0},
                elevation := 0,
                heading := omit,
                streetName := omit,
                positionConfidence := omit,
                elevationConfidence := omit,
                roadSegmentID :=0
            }
            
            return v_referencePosition;
            
        } // end f_getTsCurrentPosition
                
    } // end itsFunctions       
  
    group externalFunctions {
        
        /**
         * @desc    Gets the current time    
         * @return  Timestamp - current time in Epoch format
         */
        external function fx_getCurrentTime() return TimeStamp;
        
    } // end externalFunctions


} // end of module