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:
parent
c7b28a1960
commit
2f5df005df
2 changed files with 21 additions and 10 deletions
src/Instrumentation
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue