1
0
Fork 0

NavRadio updating via listener

- avoid updating the formatted frequencies each update()
- reset the station search timer when frequencies change

This should make the radio a bit more responsive (which aids testing
since we don’t need to wait for the search timeout when changing
frequencies)
This commit is contained in:
James Turner 2018-11-25 13:12:28 +00:00
parent c7b28a1960
commit 2f5df005df
2 changed files with 21 additions and 10 deletions
src/Instrumentation

View file

@ -201,10 +201,13 @@ FGNavRadio::init ()
SGPropertyNode *subnode = node->getChild("frequencies", 0, true);
freq_node = subnode->getChild("selected-mhz", 0, true);
alt_freq_node = subnode->getChild("standby-mhz", 0, true);
freq_node->addChangeListener(this);
alt_freq_node->addChangeListener(this);
fmt_freq_node = subnode->getChild("selected-mhz-fmt", 0, true);
fmt_alt_freq_node = subnode->getChild("standby-mhz-fmt", 0, true);
is_loc_freq_node = subnode->getChild("is-localizer-frequency", 0, true );
// radials
subnode = node->getChild("radials", 0, true);
sel_radial_node = subnode->getChild("selected-deg", 0, true);
@ -376,15 +379,6 @@ FGNavRadio::update(double dt)
return; // paused
}
// Create "formatted" versions of the nav frequencies for
// instrument displays.
char tmp[16];
sprintf( tmp, "%.2f", freq_node->getDoubleValue() );
fmt_freq_node->setStringValue(tmp);
sprintf( tmp, "%.2f", alt_freq_node->getDoubleValue() );
fmt_alt_freq_node->setStringValue(tmp);
is_loc_freq_node->setBoolValue( IsLocalizerFrequency( freq_node->getDoubleValue() ));
if (power_btn_node->getBoolValue()
&& (bus_power_node->getDoubleValue() > 1.0)
&& nav_serviceable_node->getBoolValue() )
@ -399,6 +393,18 @@ FGNavRadio::update(double dt)
updateAudio( dt );
}
void FGNavRadio::updateFormattedFrequencies()
{
// Create "formatted" versions of the nav frequencies for
// instrument displays.
char tmp[16];
sprintf( tmp, "%.2f", freq_node->getDoubleValue() );
fmt_freq_node->setStringValue(tmp);
sprintf( tmp, "%.2f", alt_freq_node->getDoubleValue() );
fmt_alt_freq_node->setStringValue(tmp);
is_loc_freq_node->setBoolValue( IsLocalizerFrequency( freq_node->getDoubleValue() ));
}
void FGNavRadio::clearOutputs()
{
inrange_node->setBoolValue( false );
@ -711,6 +717,10 @@ void FGNavRadio::valueChanged (SGPropertyNode* prop)
// slave-to-GPS enabled/disabled, resync NAV station (update all outputs)
_navaid = NULL;
_time_before_search_sec = 0;
} else if ((prop == freq_node) || (prop == alt_freq_node)) {
updateFormattedFrequencies();
// force a frequency update
_time_before_search_sec = 0.0;
}
}

View file

@ -164,6 +164,7 @@ class FGNavRadio : public SGSubsystem, public SGPropertyChangeListener
void updateGlideSlope(double dt, const SGVec3d& aircraft, double signal_quality_norm);
void updateGPSSlaved();
void updateCDI(double dt);
void updateFormattedFrequencies();
void clearOutputs();