X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FInstrumentation%2Ftacan.cxx;h=7d372b4d2366140c6baaefc8ddd9fa3daac23636;hb=c1d06064c8eec5f058f031031cde944489a31b40;hp=895874f1ed8eecd45ac192daa6c4a016148419e2;hpb=dab5434edba73bae96cbf953d5ff24a71f748534;p=flightgear.git diff --git a/src/Instrumentation/tacan.cxx b/src/Instrumentation/tacan.cxx index 895874f1e..7d372b4d2 100755 --- a/src/Instrumentation/tacan.cxx +++ b/src/Instrumentation/tacan.cxx @@ -51,10 +51,9 @@ TACAN::TACAN ( SGPropertyNode *node ) _time_before_search_sec(0), _mobile_valid(false), _transmitter_valid(false), - _transmitter_elevation_ft(0), + _transmitter_pos(SGGeod::fromDeg(0, 0)), _transmitter_range_nm(0), _transmitter_bias(0.0), - name("tacan"), num(0) { @@ -83,7 +82,7 @@ TACAN::TACAN () _time_before_search_sec(0), _mobile_valid(false), _transmitter_valid(false), - _transmitter_elevation_ft(0), + _transmitter_pos(SGGeod::fromDeg(0, 0)), _transmitter_range_nm(0), _transmitter_bearing_deg(0), _transmitter_bias(0.0), @@ -111,6 +110,7 @@ TACAN::init () _yaw_node = fgGetNode("/orientation/side-slip-deg", true); _serviceable_node = node->getChild("serviceable", 0, true); _electrical_node = fgGetNode("/systems/electrical/outputs/tacan", true); + _ident_node = node->getChild("ident", 0, true); SGPropertyNode *fnode = node->getChild("frequencies", 0, true); _source_node = fnode->getChild("source", 0, true); _frequency_node = fnode->getChild("selected-mhz", 0, true); @@ -226,11 +226,8 @@ TACAN::update (double delta_time_sec) &mobile_bearing, &mobile_az2, &mobile_distance); //calculate the bearing and range of the station from the aircraft - geo_inverse_wgs_84(altitude_m, - latitude_deg, - longitude_deg, - _transmitter_lat, - _transmitter_lon, + SGGeod pos = SGGeod::fromDegM(longitude_deg, latitude_deg, altitude_m); + geo_inverse_wgs_84(pos, _transmitter_pos, &bearing, &az2, &distance); @@ -240,11 +237,13 @@ TACAN::update (double delta_time_sec) SG_LOG( SG_INSTR, SG_DEBUG, "distance_m " << distance); bearing = mobile_bearing; distance = mobile_distance; - _transmitter_elevation_ft = _mobile_elevation_ft; + _transmitter_pos.setElevationFt(_mobile_elevation_ft); _transmitter_range_nm = _mobile_range_nm; _transmitter_bias = _mobile_bias; _transmitter_name = _mobile_name; _name_node->setStringValue(_transmitter_name.c_str()); + _transmitter_ident = _mobile_ident; + _ident_node->setStringValue(_transmitter_ident.c_str()); _channel_node->setStringValue(_channel.c_str()); } @@ -275,11 +274,7 @@ TACAN::update (double delta_time_sec) double rotation = 0; - /*Point3D location = - sgGeodToCart(Point3D(longitude_rad, latitude_rad, altitude_m)); - double distance_nm = _transmitter.distance3D(location) * SG_METER_TO_NM;*/ - - double range_nm = adjust_range(_transmitter_elevation_ft, + double range_nm = adjust_range(_transmitter_pos.getElevationFt(), altitude_m * SG_METER_TO_FEET, _transmitter_range_nm); @@ -324,6 +319,8 @@ TACAN::update (double delta_time_sec) _rotation_node->setDoubleValue(0); _transmitter_name = ""; _name_node->setStringValue(_transmitter_name.c_str()); + _transmitter_ident = ""; + _ident_node->setStringValue(_transmitter_ident.c_str()); _channel_node->setStringValue(_channel.c_str()); return; } @@ -372,6 +369,7 @@ TACAN::search (double frequency_mhz, double longitude_rad, _mobile_range_nm = mobile_tacan->get_range(); _mobile_bias = mobile_tacan->get_multiuse(); _mobile_name = mobile_tacan->get_name(); + _mobile_ident = mobile_tacan->get_trans_ident(); _mobile_valid = true; SG_LOG( SG_INSTR, SG_DEBUG, " carrier transmitter valid " << _mobile_valid ); break; @@ -411,6 +409,7 @@ TACAN::search (double frequency_mhz, double longitude_rad, _mobile_range_nm = mobile_tacan->get_range(); _mobile_bias = mobile_tacan->get_multiuse(); _mobile_name = mobile_tacan->get_name(); + _mobile_ident = mobile_tacan->get_trans_ident(); _mobile_valid = true; SG_LOG( SG_INSTR, SG_DEBUG, " tanker transmitter valid " << _mobile_valid ); break; @@ -452,6 +451,7 @@ TACAN::search (double frequency_mhz, double longitude_rad, _mobile_range_nm = mobile_tacan->get_range(); _mobile_bias = mobile_tacan->get_multiuse(); _mobile_name = mobile_tacan->get_name(); + _mobile_ident = mobile_tacan->get_trans_ident(); _mobile_valid = true; SG_LOG( SG_INSTR, SG_DEBUG, " mp tanker transmitter valid " << _mobile_valid ); @@ -481,17 +481,16 @@ TACAN::search (double frequency_mhz, double longitude_rad, if ( _transmitter_valid ) { SG_LOG( SG_INSTR, SG_DEBUG, "transmitter valid " << _transmitter_valid ); - _transmitter_lat = tacan->get_lat(); - _transmitter_lon = tacan->get_lon(); - _transmitter_elevation_ft = tacan->get_elev_ft(); + _transmitter_pos = tacan->get_pos(); _transmitter_range_nm = tacan->get_range(); _transmitter_bias = tacan->get_multiuse(); _transmitter_name = tacan->get_name(); _name_node->setStringValue(_transmitter_name.c_str()); + _transmitter_ident = tacan->get_trans_ident(); + _ident_node->setStringValue(_transmitter_ident.c_str()); SG_LOG( SG_INSTR, SG_DEBUG, "name " << _transmitter_name); - SG_LOG( SG_INSTR, SG_DEBUG, "lat " << _transmitter_lat << "lon " << _transmitter_lon); - SG_LOG( SG_INSTR, SG_DEBUG, "elev " << _transmitter_elevation_ft); + SG_LOG( SG_INSTR, SG_DEBUG, _transmitter_pos); } else { SG_LOG( SG_INSTR, SG_DEBUG, "transmitter invalid " << _transmitter_valid ); @@ -511,7 +510,7 @@ TACAN::searchChannel (const string& _channel){ frequency_khz = freq->get_freq(); SG_LOG( SG_INSTR, SG_DEBUG, "freq output " << frequency_khz ); //check sanity - if (frequency_khz >=9620 && frequency_khz <= 12130) + if (frequency_khz >=9620 && frequency_khz <= 121300) return frequency_khz/100; } return frequency_khz = 0;