Loading ttcn/GeoNetworking/LibItsGeoNetworking_Functions.ttcn +140 −37 Original line number Original line Diff line number Diff line Loading @@ -70,16 +70,27 @@ module LibItsGeoNetworking_Functions { // Variables // Variables var PositionTable v_positionTable := {}; var PositionTable v_positionTable := {}; var GeoAreaTable v_areaTable := {}; var LongPosVector v_iutLongPosVector := f_getIutLongPosVector(); var LongPosVector v_nodeALongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeA_longitudeFactor, c_compNodeA_latitudeFactor); var LongPosVector v_nodeBLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeB_longitudeFactor, c_compNodeB_latitudeFactor); var LongPosVector v_nodeDLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeD_longitudeFactor, c_compNodeD_latitudeFactor); // Map // Map map(self:geoNetworkingPort, system:geoNetworkingPort); map(self:geoNetworkingPort, system:geoNetworkingPort); // Position table // Position table f_addPosition(v_positionTable, c_compIut, f_getIutLongPosVector()); f_addPosition(v_positionTable, c_compIut, v_iutLongPosVector); f_addPosition(v_positionTable, c_compNodeA, f_computePosition()); f_addPosition(v_positionTable, c_compNodeA, v_nodeALongPosVector); f_addPosition(v_positionTable, c_compNodeB, f_computePosition()); f_addPosition(v_positionTable, c_compNodeB, v_nodeBLongPosVector); f_initialiseComponent(v_positionTable, c_compNodeB); // Area table f_addArea(v_areaTable, c_area1, f_computeSquareArea(v_nodeDLongPosVector, float2int(1.1 * f_distance(v_nodeBLongPosVector, v_nodeDLongPosVector)))); f_addArea(v_areaTable, c_area2, f_computeSquareArea(v_nodeBLongPosVector, float2int(1.1 * f_distance(v_nodeBLongPosVector, v_nodeDLongPosVector)))); f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeB); } // end f_cf01Up } // end f_cf01Up Loading Loading @@ -109,6 +120,11 @@ module LibItsGeoNetworking_Functions { // Variables // Variables var PositionTable v_positionTable := {}; var PositionTable v_positionTable := {}; var GeoAreaTable v_areaTable := {}; var LongPosVector v_iutLongPosVector := f_getIutLongPosVector(); var LongPosVector v_nodeBLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeB_longitudeFactor, c_compNodeB_latitudeFactor); var LongPosVector v_nodeCLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeC_longitudeFactor, c_compNodeC_latitudeFactor); var LongPosVector v_nodeDLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeD_longitudeFactor, c_compNodeD_latitudeFactor); // Create // Create p_nodeB := ItsNt.create(c_compNodeB) alive; p_nodeB := ItsNt.create(c_compNodeB) alive; Loading @@ -123,12 +139,18 @@ module LibItsGeoNetworking_Functions { connect(p_nodeD:syncPort, self:syncPort); connect(p_nodeD:syncPort, self:syncPort); // Position table // Position table f_addPosition(v_positionTable, c_compIut, f_getIutLongPosVector()); f_addPosition(v_positionTable, c_compIut, v_iutLongPosVector); f_addPosition(v_positionTable, c_compNodeB, f_computePosition()); f_addPosition(v_positionTable, c_compNodeB, v_nodeBLongPosVector); f_addPosition(v_positionTable, c_compNodeD, f_computePosition()); f_addPosition(v_positionTable, c_compNodeD, v_nodeDLongPosVector); p_nodeB.start(f_initialiseComponent(v_positionTable, c_compNodeB)); // Area table p_nodeD.start(f_initialiseComponent(v_positionTable, c_compNodeD)); f_addArea(v_areaTable, c_area1, f_computeSquareArea(v_nodeDLongPosVector, float2int(1.1 * f_distance(v_nodeBLongPosVector, v_nodeDLongPosVector)))); f_addArea(v_areaTable, c_area2, f_computeSquareArea(v_nodeBLongPosVector, float2int(1.1 * f_distance(v_nodeBLongPosVector, v_nodeDLongPosVector)))); p_nodeB.start(f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeB)); p_nodeD.start(f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeD)); p_nodeD.done; p_nodeD.done; p_nodeD.done; p_nodeD.done; Loading Loading @@ -165,6 +187,12 @@ module LibItsGeoNetworking_Functions { // Variables // Variables var PositionTable v_positionTable := {}; var PositionTable v_positionTable := {}; var GeoAreaTable v_areaTable := {}; var LongPosVector v_iutLongPosVector := f_getIutLongPosVector(); var LongPosVector v_nodeALongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeA_longitudeFactor, c_compNodeA_latitudeFactor); var LongPosVector v_nodeBLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeB_longitudeFactor, c_compNodeB_latitudeFactor); var LongPosVector v_nodeCLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeC_longitudeFactor, c_compNodeC_latitudeFactor); var LongPosVector v_nodeDLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeD_longitudeFactor, c_compNodeD_latitudeFactor); // Create // Create p_nodeB := ItsNt.create(c_compNodeB) alive; p_nodeB := ItsNt.create(c_compNodeB) alive; Loading @@ -179,13 +207,19 @@ module LibItsGeoNetworking_Functions { connect(p_nodeC:syncPort, self:syncPort); connect(p_nodeC:syncPort, self:syncPort); // Position table // Position table f_addPosition(v_positionTable, c_compIut, f_getIutLongPosVector()); f_addPosition(v_positionTable, c_compIut, v_iutLongPosVector); f_addPosition(v_positionTable, c_compNodeA, f_computePosition()); f_addPosition(v_positionTable, c_compNodeA, v_nodeALongPosVector); f_addPosition(v_positionTable, c_compNodeB, f_computePosition()); f_addPosition(v_positionTable, c_compNodeB, v_nodeBLongPosVector); f_addPosition(v_positionTable, c_compNodeC, f_computePosition()); f_addPosition(v_positionTable, c_compNodeC, v_nodeCLongPosVector); p_nodeB.start(f_initialiseComponent(v_positionTable, c_compNodeB)); // Area table p_nodeC.start(f_initialiseComponent(v_positionTable, c_compNodeC)); f_addArea(v_areaTable, c_area1, f_computeSquareArea(v_nodeDLongPosVector, float2int(1.1 * f_distance(v_nodeBLongPosVector, v_nodeDLongPosVector)))); f_addArea(v_areaTable, c_area2, f_computeSquareArea(v_nodeBLongPosVector, float2int(1.1 * f_distance(v_nodeBLongPosVector, v_nodeDLongPosVector)))); p_nodeB.start(f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeB)); p_nodeC.start(f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeC)); p_nodeB.done; p_nodeB.done; p_nodeC.done; p_nodeC.done; Loading Loading @@ -225,6 +259,12 @@ module LibItsGeoNetworking_Functions { // Variables // Variables var PositionTable v_positionTable := {}; var PositionTable v_positionTable := {}; var GeoAreaTable v_areaTable := {}; var LongPosVector v_iutLongPosVector := f_getIutLongPosVector(); var LongPosVector v_nodeALongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeA_longitudeFactor, c_compNodeA_latitudeFactor); var LongPosVector v_nodeBLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeB_longitudeFactor, c_compNodeB_latitudeFactor); var LongPosVector v_nodeCLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeC_longitudeFactor, c_compNodeC_latitudeFactor); var LongPosVector v_nodeDLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeD_longitudeFactor, c_compNodeD_latitudeFactor); // Create // Create p_nodeB := ItsNt.create(c_compNodeB) alive; p_nodeB := ItsNt.create(c_compNodeB) alive; Loading @@ -242,15 +282,21 @@ module LibItsGeoNetworking_Functions { connect(p_nodeD:syncPort, self:syncPort); connect(p_nodeD:syncPort, self:syncPort); // Position table // Position table f_addPosition(v_positionTable, c_compIut, f_getIutLongPosVector()); f_addPosition(v_positionTable, c_compIut, v_iutLongPosVector); f_addPosition(v_positionTable, c_compNodeA, f_computePosition()); f_addPosition(v_positionTable, c_compNodeA, v_nodeALongPosVector); f_addPosition(v_positionTable, c_compNodeB, f_computePosition()); f_addPosition(v_positionTable, c_compNodeB, v_nodeBLongPosVector); f_addPosition(v_positionTable, c_compNodeC, f_computePosition()); f_addPosition(v_positionTable, c_compNodeC, v_nodeCLongPosVector); f_addPosition(v_positionTable, c_compNodeD, f_computePosition()); f_addPosition(v_positionTable, c_compNodeD, v_nodeDLongPosVector); p_nodeB.start(f_initialiseComponent(v_positionTable, c_compNodeB)); // Area table p_nodeC.start(f_initialiseComponent(v_positionTable, c_compNodeC)); f_addArea(v_areaTable, c_area1, p_nodeD.start(f_initialiseComponent(v_positionTable, c_compNodeD)); f_computeSquareArea(v_nodeDLongPosVector, float2int(1.1 * f_distance(v_nodeBLongPosVector, v_nodeDLongPosVector)))); f_addArea(v_areaTable, c_area2, f_computeSquareArea(v_nodeBLongPosVector, float2int(1.1 * f_distance(v_nodeBLongPosVector, v_nodeDLongPosVector)))); p_nodeB.start(f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeB)); p_nodeC.start(f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeC)); p_nodeD.start(f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeD)); p_nodeB.done; p_nodeB.done; p_nodeC.done; p_nodeC.done; p_nodeD.done; p_nodeD.done; Loading Loading @@ -279,10 +325,12 @@ module LibItsGeoNetworking_Functions { function f_initialiseComponent( function f_initialiseComponent( in PositionTable p_positionTable, in PositionTable p_positionTable, in GeoAreaTable p_areaTable, in charstring p_componentName) in charstring p_componentName) runs on ItsNt { runs on ItsNt { vc_positionTable := p_positionTable; vc_positionTable := p_positionTable; vc_areaTable := p_areaTable; vc_componentName := p_componentName; vc_componentName := p_componentName; } // end f_initialiseComponent } // end f_initialiseComponent Loading Loading @@ -350,14 +398,31 @@ module LibItsGeoNetworking_Functions { return v_return; return v_return; } } function f_computePosition() return LongPosVector { function f_computePosition( in LongPosVector p_refPosition, in integer p_longitudeFactor, in integer p_latitudeFactor ) return LongPosVector { var LongPosVector v_return := valueof(m_dummyLongPosVector); var LongPosVector v_return := p_refPosition; // TODO v_return.latitude := v_return.latitude + p_latitudeFactor * PXT_DISTANCE_UNIT; v_return.longitude := v_return.longitude + p_longitudeFactor * PXT_DISTANCE_UNIT; return v_return; return v_return; } } function f_addArea( inout GeoAreaTable p_geoAreaTable, in charstring p_areaKey, in GeoArea p_geoArea ) { p_geoAreaTable[lengthof(p_geoAreaTable)] := { key := p_areaKey, geoArea := p_geoArea }; } function f_getArea(in GeoAreaTable p_areaTable, in charstring p_areaName) return GeoArea { function f_getArea(in GeoAreaTable p_areaTable, in charstring p_areaName) return GeoArea { var GeoArea v_return; var GeoArea v_return; var integer i := 0; var integer i := 0; Loading Loading @@ -425,6 +490,35 @@ module LibItsGeoNetworking_Functions { return v_anycastArea; return v_anycastArea; } } function f_computeSquareArea( in LongPosVector p_centerLongPosVector, in UInt16 p_distanceA ) return GeoArea { var GeoArea v_geoArea; v_geoArea := { shape := e_geoRect, area := { geoAreaPosLatitude := p_centerLongPosVector.latitude, geoAreaPosLongitude := p_centerLongPosVector.longitude, distanceA := p_distanceA, distanceB := p_distanceA, angle := 0 } } return v_geoArea; } function f_distance( in LongPosVector p_pointA, in LongPosVector p_pointB ) return float { return fx_computeDistance(p_pointA.latitude, p_pointA.longitude, p_pointB.latitude, p_pointB.longitude); } } // end geoPositionFunctions } // end geoPositionFunctions group geoAltsteps { group geoAltsteps { Loading Loading @@ -893,7 +987,7 @@ module LibItsGeoNetworking_Functions { * @param p_event The event to trigger * @param p_event The event to trigger * @return * @return */ */ function f_acTriggerEvent(template (value) AcGNEvent p_event) runs on ItsFa return FncRetCode { function f_acTriggerEvent(template (value) AcGNEvent p_event) runs on ItsNt return FncRetCode { var FncRetCode v_ret := e_success; var FncRetCode v_ret := e_success; acPort.send(p_event); acPort.send(p_event); Loading Loading @@ -1221,7 +1315,7 @@ module LibItsGeoNetworking_Functions { v_shortPosVector := { v_shortPosVector := { gnAddr := p_longPosVector.gnAddr, gnAddr := p_longPosVector.gnAddr, timestamp := p_longPosVector.timestamp, timestamp := p_longPosVector.timestamp, latitute := p_longPosVector.latitute, latitude := p_longPosVector.latitude, longitude := p_longPosVector.longitude longitude := p_longPosVector.longitude }; }; Loading @@ -1242,4 +1336,13 @@ module LibItsGeoNetworking_Functions { } // end posVectorFunctions } // 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; } } // end LibItsGeoNetworking_Functions } // end LibItsGeoNetworking_Functions No newline at end of file ttcn/GeoNetworking/LibItsGeoNetworking_Pixits.ttcn +9 −2 Original line number Original line Diff line number Diff line Loading @@ -24,6 +24,13 @@ module LibItsGeoNetworking_Pixits { */ */ modulepar integer PX_MAX_NR_NEIGHBOUR := 50; modulepar integer PX_MAX_NR_NEIGHBOUR := 50; /** * @desc Number of 1/10 micro degrees in one unit of distance * @remark This Pixit is used to position nodes relatively to each other. * It corresponds to the distance betwen 2 nodes (10000 ~ 100m). */ modulepar UInt32 PXT_DISTANCE_UNIT := 10000; } // end of group } // end of group } // end of group geoNetworkingPixits } // end of group geoNetworkingPixits Loading ttcn/GeoNetworking/LibItsGeoNetworking_Templates.ttcn +2 −2 Original line number Original line Diff line number Diff line Loading @@ -245,7 +245,7 @@ module LibItsGeoNetworking_Templates { ) := { ) := { gnAddr := p_gnAddress, gnAddr := p_gnAddress, timestamp := ?, timestamp := ?, latitute := ?, latitude := ?, longitude := ?, longitude := ?, speed := ?, speed := ?, heading := ?, heading := ?, Loading Loading @@ -1086,7 +1086,7 @@ module LibItsGeoNetworking_Templates { template (value) LongPosVector m_dummyLongPosVector := { template (value) LongPosVector m_dummyLongPosVector := { gnAddr := m_dummyGnAddr, gnAddr := m_dummyGnAddr, timestamp := c_uInt32Zero, timestamp := c_uInt32Zero, latitute := c_uInt32Zero, latitude := c_uInt32Zero, longitude := c_uInt32Zero, longitude := c_uInt32Zero, speed := c_uInt16Zero, speed := c_uInt16Zero, heading := c_uInt16Zero, heading := c_uInt16Zero, Loading ttcn/GeoNetworking/LibItsGeoNetworking_TypesAndValues.ttcn +13 −4 Original line number Original line Diff line number Diff line Loading @@ -25,6 +25,15 @@ module LibItsGeoNetworking_TypesAndValues { const charstring c_area1 := "AREA1"; const charstring c_area1 := "AREA1"; const charstring c_area2 := "AREA2"; const charstring c_area2 := "AREA2"; const integer c_compNodeA_latitudeFactor := 3; const integer c_compNodeB_latitudeFactor := 2; const integer c_compNodeC_latitudeFactor := -1; const integer c_compNodeD_latitudeFactor := 1; const integer c_compNodeA_longitudeFactor := 0; const integer c_compNodeB_longitudeFactor := 0; const integer c_compNodeC_longitudeFactor := 0; const integer c_compNodeD_longitudeFactor := 0; } // end geoConfigurationValues } // end geoConfigurationValues group geoSyncMessages { group geoSyncMessages { Loading Loading @@ -525,7 +534,7 @@ module LibItsGeoNetworking_TypesAndValues { * * * @member gnAddr * @member gnAddr * @member timestamp * @member timestamp * @member latitute * @member latitude * @member longitude * @member longitude * @member speed * @member speed * @member heading * @member heading Loading @@ -539,7 +548,7 @@ module LibItsGeoNetworking_TypesAndValues { type record LongPosVector { type record LongPosVector { GN_Address gnAddr, GN_Address gnAddr, UInt32 timestamp, UInt32 timestamp, UInt32 latitute, UInt32 latitude, UInt32 longitude, UInt32 longitude, UInt16 speed, UInt16 speed, UInt16 heading, UInt16 heading, Loading Loading @@ -604,13 +613,13 @@ module LibItsGeoNetworking_TypesAndValues { * * * @member gnAddr * @member gnAddr * @member timestamp * @member timestamp * @member latitute * @member latitude * @member longitude * @member longitude */ */ type record ShortPosVector { type record ShortPosVector { GN_Address gnAddr, GN_Address gnAddr, UInt32 timestamp, UInt32 timestamp, UInt32 latitute, UInt32 latitude, UInt32 longitude UInt32 longitude } } Loading Loading
ttcn/GeoNetworking/LibItsGeoNetworking_Functions.ttcn +140 −37 Original line number Original line Diff line number Diff line Loading @@ -70,16 +70,27 @@ module LibItsGeoNetworking_Functions { // Variables // Variables var PositionTable v_positionTable := {}; var PositionTable v_positionTable := {}; var GeoAreaTable v_areaTable := {}; var LongPosVector v_iutLongPosVector := f_getIutLongPosVector(); var LongPosVector v_nodeALongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeA_longitudeFactor, c_compNodeA_latitudeFactor); var LongPosVector v_nodeBLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeB_longitudeFactor, c_compNodeB_latitudeFactor); var LongPosVector v_nodeDLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeD_longitudeFactor, c_compNodeD_latitudeFactor); // Map // Map map(self:geoNetworkingPort, system:geoNetworkingPort); map(self:geoNetworkingPort, system:geoNetworkingPort); // Position table // Position table f_addPosition(v_positionTable, c_compIut, f_getIutLongPosVector()); f_addPosition(v_positionTable, c_compIut, v_iutLongPosVector); f_addPosition(v_positionTable, c_compNodeA, f_computePosition()); f_addPosition(v_positionTable, c_compNodeA, v_nodeALongPosVector); f_addPosition(v_positionTable, c_compNodeB, f_computePosition()); f_addPosition(v_positionTable, c_compNodeB, v_nodeBLongPosVector); f_initialiseComponent(v_positionTable, c_compNodeB); // Area table f_addArea(v_areaTable, c_area1, f_computeSquareArea(v_nodeDLongPosVector, float2int(1.1 * f_distance(v_nodeBLongPosVector, v_nodeDLongPosVector)))); f_addArea(v_areaTable, c_area2, f_computeSquareArea(v_nodeBLongPosVector, float2int(1.1 * f_distance(v_nodeBLongPosVector, v_nodeDLongPosVector)))); f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeB); } // end f_cf01Up } // end f_cf01Up Loading Loading @@ -109,6 +120,11 @@ module LibItsGeoNetworking_Functions { // Variables // Variables var PositionTable v_positionTable := {}; var PositionTable v_positionTable := {}; var GeoAreaTable v_areaTable := {}; var LongPosVector v_iutLongPosVector := f_getIutLongPosVector(); var LongPosVector v_nodeBLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeB_longitudeFactor, c_compNodeB_latitudeFactor); var LongPosVector v_nodeCLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeC_longitudeFactor, c_compNodeC_latitudeFactor); var LongPosVector v_nodeDLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeD_longitudeFactor, c_compNodeD_latitudeFactor); // Create // Create p_nodeB := ItsNt.create(c_compNodeB) alive; p_nodeB := ItsNt.create(c_compNodeB) alive; Loading @@ -123,12 +139,18 @@ module LibItsGeoNetworking_Functions { connect(p_nodeD:syncPort, self:syncPort); connect(p_nodeD:syncPort, self:syncPort); // Position table // Position table f_addPosition(v_positionTable, c_compIut, f_getIutLongPosVector()); f_addPosition(v_positionTable, c_compIut, v_iutLongPosVector); f_addPosition(v_positionTable, c_compNodeB, f_computePosition()); f_addPosition(v_positionTable, c_compNodeB, v_nodeBLongPosVector); f_addPosition(v_positionTable, c_compNodeD, f_computePosition()); f_addPosition(v_positionTable, c_compNodeD, v_nodeDLongPosVector); p_nodeB.start(f_initialiseComponent(v_positionTable, c_compNodeB)); // Area table p_nodeD.start(f_initialiseComponent(v_positionTable, c_compNodeD)); f_addArea(v_areaTable, c_area1, f_computeSquareArea(v_nodeDLongPosVector, float2int(1.1 * f_distance(v_nodeBLongPosVector, v_nodeDLongPosVector)))); f_addArea(v_areaTable, c_area2, f_computeSquareArea(v_nodeBLongPosVector, float2int(1.1 * f_distance(v_nodeBLongPosVector, v_nodeDLongPosVector)))); p_nodeB.start(f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeB)); p_nodeD.start(f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeD)); p_nodeD.done; p_nodeD.done; p_nodeD.done; p_nodeD.done; Loading Loading @@ -165,6 +187,12 @@ module LibItsGeoNetworking_Functions { // Variables // Variables var PositionTable v_positionTable := {}; var PositionTable v_positionTable := {}; var GeoAreaTable v_areaTable := {}; var LongPosVector v_iutLongPosVector := f_getIutLongPosVector(); var LongPosVector v_nodeALongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeA_longitudeFactor, c_compNodeA_latitudeFactor); var LongPosVector v_nodeBLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeB_longitudeFactor, c_compNodeB_latitudeFactor); var LongPosVector v_nodeCLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeC_longitudeFactor, c_compNodeC_latitudeFactor); var LongPosVector v_nodeDLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeD_longitudeFactor, c_compNodeD_latitudeFactor); // Create // Create p_nodeB := ItsNt.create(c_compNodeB) alive; p_nodeB := ItsNt.create(c_compNodeB) alive; Loading @@ -179,13 +207,19 @@ module LibItsGeoNetworking_Functions { connect(p_nodeC:syncPort, self:syncPort); connect(p_nodeC:syncPort, self:syncPort); // Position table // Position table f_addPosition(v_positionTable, c_compIut, f_getIutLongPosVector()); f_addPosition(v_positionTable, c_compIut, v_iutLongPosVector); f_addPosition(v_positionTable, c_compNodeA, f_computePosition()); f_addPosition(v_positionTable, c_compNodeA, v_nodeALongPosVector); f_addPosition(v_positionTable, c_compNodeB, f_computePosition()); f_addPosition(v_positionTable, c_compNodeB, v_nodeBLongPosVector); f_addPosition(v_positionTable, c_compNodeC, f_computePosition()); f_addPosition(v_positionTable, c_compNodeC, v_nodeCLongPosVector); p_nodeB.start(f_initialiseComponent(v_positionTable, c_compNodeB)); // Area table p_nodeC.start(f_initialiseComponent(v_positionTable, c_compNodeC)); f_addArea(v_areaTable, c_area1, f_computeSquareArea(v_nodeDLongPosVector, float2int(1.1 * f_distance(v_nodeBLongPosVector, v_nodeDLongPosVector)))); f_addArea(v_areaTable, c_area2, f_computeSquareArea(v_nodeBLongPosVector, float2int(1.1 * f_distance(v_nodeBLongPosVector, v_nodeDLongPosVector)))); p_nodeB.start(f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeB)); p_nodeC.start(f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeC)); p_nodeB.done; p_nodeB.done; p_nodeC.done; p_nodeC.done; Loading Loading @@ -225,6 +259,12 @@ module LibItsGeoNetworking_Functions { // Variables // Variables var PositionTable v_positionTable := {}; var PositionTable v_positionTable := {}; var GeoAreaTable v_areaTable := {}; var LongPosVector v_iutLongPosVector := f_getIutLongPosVector(); var LongPosVector v_nodeALongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeA_longitudeFactor, c_compNodeA_latitudeFactor); var LongPosVector v_nodeBLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeB_longitudeFactor, c_compNodeB_latitudeFactor); var LongPosVector v_nodeCLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeC_longitudeFactor, c_compNodeC_latitudeFactor); var LongPosVector v_nodeDLongPosVector := f_computePosition(v_iutLongPosVector, c_compNodeD_longitudeFactor, c_compNodeD_latitudeFactor); // Create // Create p_nodeB := ItsNt.create(c_compNodeB) alive; p_nodeB := ItsNt.create(c_compNodeB) alive; Loading @@ -242,15 +282,21 @@ module LibItsGeoNetworking_Functions { connect(p_nodeD:syncPort, self:syncPort); connect(p_nodeD:syncPort, self:syncPort); // Position table // Position table f_addPosition(v_positionTable, c_compIut, f_getIutLongPosVector()); f_addPosition(v_positionTable, c_compIut, v_iutLongPosVector); f_addPosition(v_positionTable, c_compNodeA, f_computePosition()); f_addPosition(v_positionTable, c_compNodeA, v_nodeALongPosVector); f_addPosition(v_positionTable, c_compNodeB, f_computePosition()); f_addPosition(v_positionTable, c_compNodeB, v_nodeBLongPosVector); f_addPosition(v_positionTable, c_compNodeC, f_computePosition()); f_addPosition(v_positionTable, c_compNodeC, v_nodeCLongPosVector); f_addPosition(v_positionTable, c_compNodeD, f_computePosition()); f_addPosition(v_positionTable, c_compNodeD, v_nodeDLongPosVector); p_nodeB.start(f_initialiseComponent(v_positionTable, c_compNodeB)); // Area table p_nodeC.start(f_initialiseComponent(v_positionTable, c_compNodeC)); f_addArea(v_areaTable, c_area1, p_nodeD.start(f_initialiseComponent(v_positionTable, c_compNodeD)); f_computeSquareArea(v_nodeDLongPosVector, float2int(1.1 * f_distance(v_nodeBLongPosVector, v_nodeDLongPosVector)))); f_addArea(v_areaTable, c_area2, f_computeSquareArea(v_nodeBLongPosVector, float2int(1.1 * f_distance(v_nodeBLongPosVector, v_nodeDLongPosVector)))); p_nodeB.start(f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeB)); p_nodeC.start(f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeC)); p_nodeD.start(f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeD)); p_nodeB.done; p_nodeB.done; p_nodeC.done; p_nodeC.done; p_nodeD.done; p_nodeD.done; Loading Loading @@ -279,10 +325,12 @@ module LibItsGeoNetworking_Functions { function f_initialiseComponent( function f_initialiseComponent( in PositionTable p_positionTable, in PositionTable p_positionTable, in GeoAreaTable p_areaTable, in charstring p_componentName) in charstring p_componentName) runs on ItsNt { runs on ItsNt { vc_positionTable := p_positionTable; vc_positionTable := p_positionTable; vc_areaTable := p_areaTable; vc_componentName := p_componentName; vc_componentName := p_componentName; } // end f_initialiseComponent } // end f_initialiseComponent Loading Loading @@ -350,14 +398,31 @@ module LibItsGeoNetworking_Functions { return v_return; return v_return; } } function f_computePosition() return LongPosVector { function f_computePosition( in LongPosVector p_refPosition, in integer p_longitudeFactor, in integer p_latitudeFactor ) return LongPosVector { var LongPosVector v_return := valueof(m_dummyLongPosVector); var LongPosVector v_return := p_refPosition; // TODO v_return.latitude := v_return.latitude + p_latitudeFactor * PXT_DISTANCE_UNIT; v_return.longitude := v_return.longitude + p_longitudeFactor * PXT_DISTANCE_UNIT; return v_return; return v_return; } } function f_addArea( inout GeoAreaTable p_geoAreaTable, in charstring p_areaKey, in GeoArea p_geoArea ) { p_geoAreaTable[lengthof(p_geoAreaTable)] := { key := p_areaKey, geoArea := p_geoArea }; } function f_getArea(in GeoAreaTable p_areaTable, in charstring p_areaName) return GeoArea { function f_getArea(in GeoAreaTable p_areaTable, in charstring p_areaName) return GeoArea { var GeoArea v_return; var GeoArea v_return; var integer i := 0; var integer i := 0; Loading Loading @@ -425,6 +490,35 @@ module LibItsGeoNetworking_Functions { return v_anycastArea; return v_anycastArea; } } function f_computeSquareArea( in LongPosVector p_centerLongPosVector, in UInt16 p_distanceA ) return GeoArea { var GeoArea v_geoArea; v_geoArea := { shape := e_geoRect, area := { geoAreaPosLatitude := p_centerLongPosVector.latitude, geoAreaPosLongitude := p_centerLongPosVector.longitude, distanceA := p_distanceA, distanceB := p_distanceA, angle := 0 } } return v_geoArea; } function f_distance( in LongPosVector p_pointA, in LongPosVector p_pointB ) return float { return fx_computeDistance(p_pointA.latitude, p_pointA.longitude, p_pointB.latitude, p_pointB.longitude); } } // end geoPositionFunctions } // end geoPositionFunctions group geoAltsteps { group geoAltsteps { Loading Loading @@ -893,7 +987,7 @@ module LibItsGeoNetworking_Functions { * @param p_event The event to trigger * @param p_event The event to trigger * @return * @return */ */ function f_acTriggerEvent(template (value) AcGNEvent p_event) runs on ItsFa return FncRetCode { function f_acTriggerEvent(template (value) AcGNEvent p_event) runs on ItsNt return FncRetCode { var FncRetCode v_ret := e_success; var FncRetCode v_ret := e_success; acPort.send(p_event); acPort.send(p_event); Loading Loading @@ -1221,7 +1315,7 @@ module LibItsGeoNetworking_Functions { v_shortPosVector := { v_shortPosVector := { gnAddr := p_longPosVector.gnAddr, gnAddr := p_longPosVector.gnAddr, timestamp := p_longPosVector.timestamp, timestamp := p_longPosVector.timestamp, latitute := p_longPosVector.latitute, latitude := p_longPosVector.latitude, longitude := p_longPosVector.longitude longitude := p_longPosVector.longitude }; }; Loading @@ -1242,4 +1336,13 @@ module LibItsGeoNetworking_Functions { } // end posVectorFunctions } // 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; } } // end LibItsGeoNetworking_Functions } // end LibItsGeoNetworking_Functions No newline at end of file
ttcn/GeoNetworking/LibItsGeoNetworking_Pixits.ttcn +9 −2 Original line number Original line Diff line number Diff line Loading @@ -24,6 +24,13 @@ module LibItsGeoNetworking_Pixits { */ */ modulepar integer PX_MAX_NR_NEIGHBOUR := 50; modulepar integer PX_MAX_NR_NEIGHBOUR := 50; /** * @desc Number of 1/10 micro degrees in one unit of distance * @remark This Pixit is used to position nodes relatively to each other. * It corresponds to the distance betwen 2 nodes (10000 ~ 100m). */ modulepar UInt32 PXT_DISTANCE_UNIT := 10000; } // end of group } // end of group } // end of group geoNetworkingPixits } // end of group geoNetworkingPixits Loading
ttcn/GeoNetworking/LibItsGeoNetworking_Templates.ttcn +2 −2 Original line number Original line Diff line number Diff line Loading @@ -245,7 +245,7 @@ module LibItsGeoNetworking_Templates { ) := { ) := { gnAddr := p_gnAddress, gnAddr := p_gnAddress, timestamp := ?, timestamp := ?, latitute := ?, latitude := ?, longitude := ?, longitude := ?, speed := ?, speed := ?, heading := ?, heading := ?, Loading Loading @@ -1086,7 +1086,7 @@ module LibItsGeoNetworking_Templates { template (value) LongPosVector m_dummyLongPosVector := { template (value) LongPosVector m_dummyLongPosVector := { gnAddr := m_dummyGnAddr, gnAddr := m_dummyGnAddr, timestamp := c_uInt32Zero, timestamp := c_uInt32Zero, latitute := c_uInt32Zero, latitude := c_uInt32Zero, longitude := c_uInt32Zero, longitude := c_uInt32Zero, speed := c_uInt16Zero, speed := c_uInt16Zero, heading := c_uInt16Zero, heading := c_uInt16Zero, Loading
ttcn/GeoNetworking/LibItsGeoNetworking_TypesAndValues.ttcn +13 −4 Original line number Original line Diff line number Diff line Loading @@ -25,6 +25,15 @@ module LibItsGeoNetworking_TypesAndValues { const charstring c_area1 := "AREA1"; const charstring c_area1 := "AREA1"; const charstring c_area2 := "AREA2"; const charstring c_area2 := "AREA2"; const integer c_compNodeA_latitudeFactor := 3; const integer c_compNodeB_latitudeFactor := 2; const integer c_compNodeC_latitudeFactor := -1; const integer c_compNodeD_latitudeFactor := 1; const integer c_compNodeA_longitudeFactor := 0; const integer c_compNodeB_longitudeFactor := 0; const integer c_compNodeC_longitudeFactor := 0; const integer c_compNodeD_longitudeFactor := 0; } // end geoConfigurationValues } // end geoConfigurationValues group geoSyncMessages { group geoSyncMessages { Loading Loading @@ -525,7 +534,7 @@ module LibItsGeoNetworking_TypesAndValues { * * * @member gnAddr * @member gnAddr * @member timestamp * @member timestamp * @member latitute * @member latitude * @member longitude * @member longitude * @member speed * @member speed * @member heading * @member heading Loading @@ -539,7 +548,7 @@ module LibItsGeoNetworking_TypesAndValues { type record LongPosVector { type record LongPosVector { GN_Address gnAddr, GN_Address gnAddr, UInt32 timestamp, UInt32 timestamp, UInt32 latitute, UInt32 latitude, UInt32 longitude, UInt32 longitude, UInt16 speed, UInt16 speed, UInt16 heading, UInt16 heading, Loading Loading @@ -604,13 +613,13 @@ module LibItsGeoNetworking_TypesAndValues { * * * @member gnAddr * @member gnAddr * @member timestamp * @member timestamp * @member latitute * @member latitude * @member longitude * @member longitude */ */ type record ShortPosVector { type record ShortPosVector { GN_Address gnAddr, GN_Address gnAddr, UInt32 timestamp, UInt32 timestamp, UInt32 latitute, UInt32 latitude, UInt32 longitude UInt32 longitude } } Loading