LibItsGeoNetworking_Functions.ttcn 89.9 KB
Newer Older
         * @desc    Gets delta for timers.
         * @return  Delta for timers in seconds
         * @see     PX_T_DELTA
         */
        function f_getDeltaTimer() return float {
tepelmann's avatar
tepelmann committed
            var float v_deltaTimer := PX_T_DELTA;
        /**
         * @desc Gets the beacon service retransmit timer.
tepelmann's avatar
tepelmann committed
         * @return  Beacon service retransmit timer
        function f_getBsRetransmitTimer() return float {
            var float v_itsGnBeaconServiceRetransmitTimer;
            v_itsGnBeaconServiceRetransmitTimer := int2float(
                (PICS_GN_BEACON_SERVICE_RETRANSMIT_TIMER/1000));
         * @desc    Gets the beacon service retransmit timer for NetBeaconInterval = medium (cong. ctrl).
         * @return  Beacon service retransmit timer (medium)
        function f_getBsRetransmitTimerMedium() return float {
tepelmann's avatar
tepelmann committed
            var float v_itsGnBeaconServiceRetransmitTimerMedium; // timer value increased (medium)
tepelmann's avatar
tepelmann committed
            v_itsGnBeaconServiceRetransmitTimerMedium := int2float(
                (PX_GN_BEACON_SERVICE_TIMER_MEDIUM+float2int((f_getBsMaxJitter() - 0.0 +1.0)*rnd()) + 0)/1000);
tepelmann's avatar
tepelmann committed
            return v_itsGnBeaconServiceRetransmitTimerMedium;
         * @desc    Gets the beacon service retransmit timer for NetBeaconInterval = maximum (cong. ctrl).
         * @return  Beacon service retransmit timer (maximum)
        function f_getBsRetransmitTimerMaximum() return float {
tepelmann's avatar
tepelmann committed
            var float v_itsGnBeaconServiceRetransmitTimerMaximum; // timer value increased (maximum)
tepelmann's avatar
tepelmann committed
            v_itsGnBeaconServiceRetransmitTimerMaximum := int2float(
                (PX_GN_BEACON_SERVICE_TIMER_MAXIMUM+float2int((f_getBsMaxJitter() - 0.0 +1.0)*rnd()) + 0)/1000);
tepelmann's avatar
tepelmann committed
            return v_itsGnBeaconServiceRetransmitTimerMaximum;
         * @desc    Gets the maximum beacon service jitter.
         * @return  Maximum beacon service jitter
        function f_getBsMaxJitter() return float {
            var float v_itsGnBeaconServiceMaxJitter := int2float(PICS_GN_BEACON_SERVICE_MAX_JITTER)/1000.0;
         * @desc    Gets the Lifetime of a Location Table Entry.
         * @return  Lifetime of a Location Table Entry in seconds
         * @see     PICS_GN_LIFETIME_LOC_TE
tepelmann's avatar
tepelmann committed
         */
        function f_getLifetimeLocTableEntry() return float {
            var float v_itsGnLifetimeLocTableEntry := int2float(PICS_GN_LIFETIME_LOC_TE);
            return v_itsGnLifetimeLocTableEntry;
        } // end f_getLifetimeLocTableEntry
berge's avatar
berge committed
        /**
         * @desc    Gets the maximum communication range for CBF algorithm
         * @return  Maximum communication range for CBF algorithm in meters
         * @see     PICS_GN_DEFAULT_MAX_COMMUNICATION_RANGE
berge's avatar
berge committed
         */
        function f_getCbfMaxCommunicationRange() return integer {
            var integer v_maxCommunicationRange := PICS_GN_DEFAULT_MAX_COMMUNICATION_RANGE;
            
            return v_maxCommunicationRange;
        } // end f_getCbfMaxCommunicationRange
        
        function f_getGeoUnicastCbfMaxTime() return integer {
            var integer v_cbfMaxTime := PICS_GN_GEOUNICAST_CBF_MAX_TIME;
            
tepelmann's avatar
tepelmann committed
            return v_cbfMaxTime;
berge's avatar
berge committed
        } // end f_getGeoUnicastCbfMaxTime
berge's avatar
berge committed
        function f_getGeoUnicastCbfMinTime() return integer {
            var integer v_cbfMinTime := PICS_GN_GEOUNICAST_CBF_MIN_TIME;
            
            return v_cbfMinTime;
        } // end f_getGeoUnicastCbfMinTime
        
        function f_getGeoBroadcastCbfMaxTime() return integer {
            var integer v_cbfMaxTime := PICS_GN_GEOBROADCAST_CBF_MAX_TIME;
            
            return v_cbfMaxTime;
        } // end f_getGeoBroadcastCbfMaxTime
        
        function f_getGeoBroadcastCbfMinTime() return integer {
            var integer v_cbfMinTime := PICS_GN_GEOBROADCAST_CBF_MIN_TIME;
            
            return v_cbfMinTime;
        } // end f_getGeoBroadcastCbfMinTime
        
tepelmann's avatar
tepelmann committed
        function f_getGnMaxAreaSize() return float {
            var float v_maxAreaSize := PICS_GN_MAX_GEO_AREA_SIZE;
            
            return v_maxAreaSize;
        } // end f_getGnMaxAreaSize
        
berge's avatar
berge committed
        function f_getAdvancedGbcForwardingMaxCounter() return integer {        
            var integer v_maxCounter := PICS_GN_ADVANCED_BC_FORWARDING_MAX_COUNTER;
            
            return v_maxCounter;  
        }
        
         * @desc    Set the number of neighbour in the Location Table.
         * @see     PX_MIN_NR_NEIGHBOUR
tepelmann's avatar
tepelmann committed
         */
reinaortega's avatar
reinaortega committed
        function f_setNrNeighbourLocTableDefault() runs on ItsGeoNetworking {
fischer's avatar
fischer committed
            var integer v_nrNeighbour := f_random (0, PX_MIN_NR_NEIGHBOUR);
            f_acStartBeaconingMultipleNeighbour(v_nrNeighbour);
            
        } // end f_setNrNeighbourLocTableDefault
         * @desc    Set the number of neighbour in the Location Table (medium).
         * @see     PX_MIN_NR_NEIGHBOUR
         * @see     PX_MAX_NR_NEIGHBOUR
tepelmann's avatar
tepelmann committed
         */
reinaortega's avatar
reinaortega committed
        function f_setNrNeighbourLocTableMedium() runs on ItsGeoNetworking {
            var integer v_nrNeighbour := f_random (PX_MIN_NR_NEIGHBOUR, PX_MAX_NR_NEIGHBOUR);
            
            f_acStartBeaconingMultipleNeighbour(v_nrNeighbour);
            
        } // end f_setNrNeighbourLocTableMedium
         * @desc    Set the number of neighbour in the Location Table (maximum).
         * @see     PX_MAX_NR_NEIGHBOUR
         * @see     PX_MIN_NR_NEIGHBOUR
tepelmann's avatar
tepelmann committed
         */
reinaortega's avatar
reinaortega committed
        function f_setNrNeighbourLocTableMaximum() runs on ItsGeoNetworking {
            var integer v_nrNeighbour := f_random (PX_MAX_NR_NEIGHBOUR, (2*PX_MIN_NR_NEIGHBOUR));
            
            f_acStartBeaconingMultipleNeighbour(v_nrNeighbour);
            
        } // end f_setNrNeighbourLocTableMaximum
berge's avatar
berge committed
    group posVectorFunctions {
        
tepelmann's avatar
tepelmann committed
         * @desc    Convert long position vector to short position vector
         * @param   p_longPosVector Long position vector to be converted
         * @return  Short position vector
berge's avatar
berge committed
        function f_longPosVector2ShortPosVector(in LongPosVector p_longPosVector) return ShortPosVector {
            var ShortPosVector v_shortPosVector;
            
tepelmann's avatar
tepelmann committed
                gnAddr := p_longPosVector.gnAddr,
                timestamp := p_longPosVector.timestamp,
                latitude := p_longPosVector.latitude,
                longitude := p_longPosVector.longitude
            };
            
tepelmann's avatar
tepelmann committed
            return v_shortPosVector;
        /**
         * @desc    Get IUT's long position vector
         * @return  IUT's long position vector
reinaortega's avatar
reinaortega committed
        function f_getIutLongPosVector() runs on ItsBaseGeoNetworking return LongPosVector {
tepelmann's avatar
tepelmann committed
            return f_acGetLongPosVector(f_getIutGnLocalAddress());
        /**
         * @desc    Get IUT's short position vector
         * @return  IUT's short position vector
        function f_getIutShortPosVector() runs on ItsGeoNetworking return ShortPosVector {
            var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut);
            
            if (v_longPosVectorIut == null) {
                v_longPosVectorIut := f_getIutLongPosVector();
            }
tepelmann's avatar
tepelmann committed
            return f_longPosVector2ShortPosVector(v_longPosVectorIut);
berge's avatar
berge committed
        /**
tepelmann's avatar
tepelmann committed
         * @desc    Compute a position using a reference position, a distance and an orientation
berge's avatar
berge committed
         * @param   p_iutLongPosVector Reference position
         * @param   p_distance Distance to the reference position (in meter)
         * @param   p_orientation direction of the computed position (0 to 359; 0 means North)
         * @return  LongPosVector
tepelmann's avatar
tepelmann committed
         */
tepelmann's avatar
tepelmann committed
        function f_computePositionUsingDistance(in LongPosVector p_iutLongPosVector, in integer p_distance, in integer p_orientation)
berge's avatar
berge committed
        return LongPosVector {
            var LongPosVector v_result := p_iutLongPosVector;
            
            log("*** f_computePositionUsingDistance: INFO: calling fx_computePositionUsingDistance() ***");
            fx_computePositionUsingDistance(p_iutLongPosVector.latitude, p_iutLongPosVector.longitude, p_distance, p_orientation, v_result.latitude, v_result.longitude);
berge's avatar
berge committed
            return v_result;
        }
        
berge's avatar
berge committed
    } // end posVectorFunctions
    
    group externalFunctions {
        /**
         * @desc    External function to compute timestamp based on current time
         * @return  Unix-Epoch-Time mod 2^32
tepelmann's avatar
tepelmann committed
        external function fx_computeGnTimestamp() return UInt32;
berge's avatar
berge committed
} // end LibItsGeoNetworking_Functions