gps_cdi_deflection_node(NULL),
gps_to_flag_node(NULL),
gps_from_flag_node(NULL),
+ gps_has_gs_node(NULL),
last_nav_id(""),
last_nav_vor(false),
play_count(0),
gps_cdi_deflection_node = fgGetNode("/instrumentation/gps/cdi-deflection", true);
gps_to_flag_node = fgGetNode("/instrumentation/gps/to-flag", true);
gps_from_flag_node = fgGetNode("/instrumentation/gps/from-flag", true);
+ gps_has_gs_node = fgGetNode("/instrumentation/gps/has-gs", true);
std::ostringstream temp;
temp << _name << "nav-ident" << _num;
bool nav_serviceable = nav_serviceable_node->getBoolValue();
bool cdi_serviceable = cdi_serviceable_node->getBoolValue();
bool tofrom_serviceable = tofrom_serviceable_node->getBoolValue();
- bool inrange = inrange_node->getBoolValue();
- bool has_gs = has_gs_node->getBoolValue();
+ bool inrange = false;
+ bool has_gs = false;
+ if ( nav_slaved_to_gps_node->getBoolValue() ) {
+ has_gs = gps_has_gs_node->getBoolValue();
+ has_gs_node->setBoolValue( has_gs );
+ inrange = gps_to_flag_node->getBoolValue()
+ || gps_from_flag_node->getBoolValue();
+ } else {
+ has_gs = has_gs_node->getBoolValue();
+ inrange = inrange_node->getBoolValue();
+ }
bool is_loc = loc_node->getBoolValue();
double loc_dist = loc_dist_node->getDoubleValue();
double effective_range_m;
signal_quality_norm, dt );
}
signal_quality_norm_node->setDoubleValue( signal_quality_norm );
- inrange = signal_quality_norm > 0.2;
+ if ( ! nav_slaved_to_gps_node->getBoolValue() ) {
+ /* not slaved to gps */
+ inrange = signal_quality_norm > 0.2;
+ }
inrange_node->setBoolValue( inrange );
if ( !is_loc ) {
// compute the time to intercept selected radial (based on
// current and last cross track errors and dt
//////////////////////////////////////////////////////////
- double t = 0.0;
- if ( inrange && cdi_serviceable ) {
- double xrate_ms = (last_xtrack_error - xtrack_error) / dt;
- if ( fabs(xrate_ms) > 0.00001 ) {
- t = xtrack_error / xrate_ms;
- } else {
- t = 9999.9;
+ if (dt > 0) { // Are we paused?
+ double t = 0.0;
+ if ( inrange && cdi_serviceable ) {
+ double xrate_ms = (last_xtrack_error - xtrack_error) / dt;
+ if ( fabs(xrate_ms) > 0.00001 ) {
+ t = xtrack_error / xrate_ms;
+ } else {
+ t = 9999.9;
+ }
}
+ time_to_intercept->setDoubleValue( t );
}
- time_to_intercept->setDoubleValue( t );
//////////////////////////////////////////////////////////
// compute the amount of glide slope needle deflection