Skip to content
LibItsGeoNetworking_Functions.ttcn 50.5 KiB
Newer Older
        /**
         * @desc Gets the value of the lifetime in seconds.
         * @return 
         */
        function f_getLifetimeValue(in Lifetime p_lifetime) runs on ItsNt return float {
            var float v_lifetime := 0.0;
          
            select (p_lifetime.ltBase) {
                case (e_50ms) {
                    v_lifetime := int2float(p_lifetime.multiplier) * 0.5;
                }
                case (e_1s) {
                    v_lifetime := int2float(p_lifetime.multiplier) * 1.0;
                }
                case (e_10s) {
                    v_lifetime := int2float(p_lifetime.multiplier) * 10.0;
                }
                case (e_100s) {
                    v_lifetime := int2float(p_lifetime.multiplier) * 100.0;
                }
            }
          
            return v_lifetime;
        }
      
    } // end commonFunctions
    
berge's avatar
berge committed
    group testerFunctions {
berge's avatar
berge committed
        
berge's avatar
berge committed
        /**
tepelmann's avatar
tepelmann committed
         * @desc Sends a GeoNetworking message and in case of an included sequence number in the message the 
berge's avatar
berge committed
         *       local sequence number will be increased by one.
         * @param p_geoNetReq The message to sent.
tepelmann's avatar
tepelmann committed
         */
        function f_sendGeoNetMessage(in template (value) GeoNetworkingReq p_geoNetReq) runs on ItsNt {
            geoNetworkingPort.send(p_geoNetReq);
            if (not (ischosen(p_geoNetReq.msgOut.header.shbHeader) or ischosen(p_geoNetReq.msgOut.header.beaconHeader))) {
                f_setLocalSequenceNumber();
            }
berge's avatar
berge committed
        }
      
        /**
         * @desc Sets the value of the sequence number for the next event.
         * @return 
         */
        function f_setLocalSequenceNumber() runs on ItsNt {
            vc_localSeqNumber := (vc_localSeqNumber + 1) mod c_uInt16Max; //TODO check if c_uInt16Max should be replaced by module parameter
        }
        
    } // end testerFunctions
    
    group iutFunctions {
        
berge's avatar
berge committed
        function f_getIutGnLocalAddress() return GN_Address {
            
            return PICS_GN_LOCAL_GN_ADDR;   
fischer's avatar
fischer committed
         * @desc Gets the LS retransmission timer.. Valid for NetRepInterval = default (cong. ctrl).
         * @return 
         */
        function f_getLSRetransmitTimer() return float {
            var float v_itsGnLocationServiceRetransmitTimer := int2float(PICS_GN_LOCATION_SERVICE_TIMER/1000);
            
            return v_itsGnLocationServiceRetransmitTimer;
        }
        
fischer's avatar
fischer committed
        /**
fischer's avatar
fischer committed
         * @desc Gets the LS retransmission timer for NetRepInterval = medium (cong. ctrl).
fischer's avatar
fischer committed
         * @return 
         */
        function f_getLSRetransmitTimerMedium() return float {
            var float v_itsGnLocationServiceRetransmitTimer := 2.0;
            
            //TODO get the value from PIXIT or MIB
            
            return v_itsGnLocationServiceRetransmitTimer;
        }
        
        /**
fischer's avatar
fischer committed
         * @desc Gets the LS retransmission timer for NetRepInterval = maximum (cong. ctrl).
fischer's avatar
fischer committed
         * @return 
         */
        function f_getLSRetransmitTimerMaximum() return float {
            var float v_itsGnLocationServiceRetransmitTimer := 3.0;
            
            //TODO get the value from PIXIT or MIB
            
            return v_itsGnLocationServiceRetransmitTimer;
        }
fischer's avatar
fischer committed

        /**
         * @desc Gets the App retransmission timer. Valid for AppRepInterval = default (cong. ctrl).
         * @return 
         */
        function f_getAppRetransmitTimer() return float {
            var float v_itsGnLocationServiceRetransmitTimer := 1.0;
            
            //TODO get the value from PIXIT or MIB
            
            return v_itsGnLocationServiceRetransmitTimer;
        }
        
        /**
         * @desc Gets the App retransmission timer for AppRepInterval = medium (cong. ctrl).
         * @return 
         */
        function f_getAppRetransmitTimerMedium() return float {
            var float v_itsGnLocationServiceRetransmitTimer := 2.0;
            
            //TODO get the value from PIXIT or MIB
            
            return v_itsGnLocationServiceRetransmitTimer;
        }
        
        /**
         * @desc Gets the App retransmission timer for AppRepInterval = maximum (cong. ctrl).
         * @return 
         */
        function f_getAppRetransmitTimerMaximum() return float {
            var float v_itsGnLocationServiceRetransmitTimer := 3.0;
            
            //TODO get the value from PIXIT or MIB
            
            return v_itsGnLocationServiceRetransmitTimer;
        }
fischer's avatar
fischer committed
        
        /**
         * @desc Gets the LS maximum retransmission number.
         * @return 
         */
        function f_getLSMaxRetrans() return integer {
            var integer v_itsGnLocationServiceMaxRetrans := PICS_GN_LOCATION_SERVICE_MAX_RETRANS;
            
            return v_itsGnLocationServiceMaxRetrans;
        }
fischer's avatar
fischer committed

        /**
         * @desc Gets the Application maximum retransmission number.
         * @return 
         */
        function f_getAppMaxRetrans() return integer {
            var integer v_itsGnLocationServiceMaxRetrans := 10;
            
            //TODO get the value from PIXIT or MIB
            
            return v_itsGnLocationServiceMaxRetrans;
        }
tepelmann's avatar
tepelmann committed
        /**
         * @desc Gets the Location Service packet buffer size.
         * @return 
         */        
        function f_getLSPacketBufferSize() return integer {
            var integer v_itsGnLocationServicePacketBufferSize := PICS_GN_LOCATION_SERVICE_PACKET_BUFFER_SIZE;
tepelmann's avatar
tepelmann committed
            
            return v_itsGnLocationServicePacketBufferSize;
        } // end f_getLSPacketBufferSize
        
berge's avatar
berge committed
        /**
         * @desc Gets the UC forwarding packet buffer size.
         * @return 
         */        
        function f_getUcForwardingPacketBufferSize() return integer {
            var integer v_itsGnUcForwardingPacketBufferSize := PICS_GN_UC_FORWARDING_PACKET_BUFFER_SIZE;
berge's avatar
berge committed
            
            return v_itsGnUcForwardingPacketBufferSize;
        } // end f_getUcForwardingPacketBufferSize
        
berge's avatar
berge committed
        /**
         * @desc Gets the BC forwarding packet buffer size.
         * @return 
         */        
        function f_getBcForwardingPacketBufferSize() return integer {
            var integer v_itsGnBcForwardingPacketBufferSize := PICS_GN_BC_FORWARDING_PACKET_BUFFER_SIZE;
berge's avatar
berge committed
            
            return v_itsGnBcForwardingPacketBufferSize;
        } // end f_getBcForwardingPacketBufferSize        
        
        /**
         * @desc Gets the upper limit of the maximum lifetime.
         * @return 
         */
        function f_getMaxPacketLifeTime() return float {
            var float v_itsGnMaxPacketLifetime := int2float(PICS_GN_MAX_PACKET_LIFETIME);
            
            return v_itsGnMaxPacketLifetime;
        }
        
        /**
         * @desc Gets delta for timers.
         * @return 
         */
        function f_getDeltaTimer() return float {
            var float v_deltaTimer := 0.1;
            
            //TODO get the value from PIXIT
            
            return v_deltaTimer;
        }
        
        /**
         * @desc Gets the beacon service retransmit timer.
         * @return 
         */
        function f_getBSRetransmitTimer() return float {
            var float v_itsGnBeaconServiceRetransmitTimer;
            v_itsGnBeaconServiceRetransmitTimer := int2float(
                (PICS_GN_BEACON_SERVICE_TIMER+float2int((f_getBSMaxJitter() - 0.0 +1.0)*rnd()) + 0)/1000);
fischer's avatar
fischer committed
        /**
         * @desc Gets the beacon service retransmit timer for NetBeaconInterval = medium (cong. ctrl).
         * @return 
         */
        function f_getBSRetransmitTimerMedium() return float {
            var float v_itsGnBeaconServiceRetransmitTimer := 5.0; // timer value increased (medium)
            
            //TODO get the value from PIXIT
            
            return v_itsGnBeaconServiceRetransmitTimer;
        }
        
        /**
         * @desc Gets the beacon service retransmit timer for NetBeaconInterval = maximum (cong. ctrl).
         * @return 
         */
        function f_getBSRetransmitTimerMaximum() return float {
            var float v_itsGnBeaconServiceRetransmitTimer := 8.0; // timer value increased (maximum)
            
            //TODO get the value from PIXIT
            
            return v_itsGnBeaconServiceRetransmitTimer;
        }
        
        /**
         * @desc Gets the maximum beacon service jitter.
         * @return 
         */
        function f_getBSMaxJitter() return float {
            var float v_itsGnBeaconServiceMaxJitter := (f_getMaxPacketLifeTime()*1000.0)/4.0;

        /**
         * @desc Gets the Lifetime of a Location Table Entry.
         * @return 
         */        
        function f_getLifetimeLocTE() return float {
            var float v_itsGnLifetimeLocTE := int2float(PICS_GN_LIFETIME_LOC_TE);
            
            return v_itsGnLifetimeLocTE;
        } // end f_getLifetimeLocTE
        /**
         * @desc Set the number of neighbour in the Location Table.
         * @return 
         */        
fischer's avatar
fischer committed
        function f_setNrNeighbourLocTableDefault() {
            var integer v_nrNeighbour := f_random (0, PX_MIN_NR_NEIGHBOUR);
            //TODO set the number of Neighbour in the IUT Location Table to v_nrNeighbour
            
        } // end f_setNrNeighbourLT
        
        /**
         * @desc Set the number of neighbour in the Location Table.
         * @return 
         */        
        function f_setNrNeighbourLocTableMedium() {
            var integer v_nrNeighbour := f_random (PX_MIN_NR_NEIGHBOUR, PX_MAX_NR_NEIGHBOUR);
            //TODO set the number of Neighbour in the IUT Location Table to v_nrNeighbour
            
        } // end f_setNrNeighbourLT
        
        /**
         * @desc Set the number of neighbour in the Location Table.
         * @return 
         */        
        function f_setNrNeighbourLocTableMaximum() {
            var integer v_nrNeighbour := f_random (PX_MAX_NR_NEIGHBOUR, (2*PX_MIN_NR_NEIGHBOUR));
            //TODO set the number of Neighbour in the IUT Location Table to v_nrNeighbour
            
        } // end f_setNrNeighbourLT
        
berge's avatar
berge committed
    group posVectorFunctions {
        
berge's avatar
berge committed
        function f_longPosVector2ShortPosVector(in LongPosVector p_longPosVector) return ShortPosVector {
            var ShortPosVector v_shortPosVector;
            
            v_shortPosVector := {
                gnAddr := p_longPosVector.gnAddr, 
                timestamp := p_longPosVector.timestamp, 
                latitude := p_longPosVector.latitude, 
                longitude := p_longPosVector.longitude
            };
            
berge's avatar
berge committed
            return v_shortPosVector; 
        }
        
        function f_getIutLongPosVector() return LongPosVector {
berge's avatar
berge committed
            var LongPosVector v_longPosVector := valueof(m_dummyLongPosVector);
            return v_longPosVector; 
        }
        
        function f_getIutShortPosVector() return ShortPosVector {
            return f_longPosVector2ShortPosVector(f_getIutLongPosVector()); 
berge's avatar
berge committed
    } // end posVectorFunctions
    
    group externalFunctions {
        
        external function fx_computeDistance(
            in UInt32 p_latitudeA, in UInt32 p_longitudeA, 
            in UInt32 p_latitudeB, in UInt32 p_longitudeB
        ) return float;
               
    }
    
berge's avatar
berge committed
} // end LibItsGeoNetworking_Functions