- Add an "is-valid" property node so other modules can do a quick check if
anything in the nav tree is valid or not. - Fix an order problem between caching data values and searching for a new station that could cause odd and unexpected and hard to reproduce results.
This commit is contained in:
parent
713ddd05dd
commit
a24ebc6958
2 changed files with 15 additions and 7 deletions
src/Instrumentation
|
@ -48,6 +48,7 @@ FGNavRadio::FGNavRadio(SGPropertyNode *node) :
|
||||||
lon_node(fgGetNode("/position/longitude-deg", true)),
|
lon_node(fgGetNode("/position/longitude-deg", true)),
|
||||||
lat_node(fgGetNode("/position/latitude-deg", true)),
|
lat_node(fgGetNode("/position/latitude-deg", true)),
|
||||||
alt_node(fgGetNode("/position/altitude-ft", true)),
|
alt_node(fgGetNode("/position/altitude-ft", true)),
|
||||||
|
is_valid_node(NULL),
|
||||||
power_btn_node(NULL),
|
power_btn_node(NULL),
|
||||||
freq_node(NULL),
|
freq_node(NULL),
|
||||||
alt_freq_node(NULL),
|
alt_freq_node(NULL),
|
||||||
|
@ -158,6 +159,7 @@ FGNavRadio::init ()
|
||||||
fgGetNode(("/systems/electrical/outputs/" + name).c_str(), true);
|
fgGetNode(("/systems/electrical/outputs/" + name).c_str(), true);
|
||||||
|
|
||||||
// inputs
|
// inputs
|
||||||
|
is_valid_node = node->getChild("data-is-valid", 0, true);
|
||||||
power_btn_node = node->getChild("power-btn", 0, true);
|
power_btn_node = node->getChild("power-btn", 0, true);
|
||||||
power_btn_node->setBoolValue( true );
|
power_btn_node->setBoolValue( true );
|
||||||
vol_btn_node = node->getChild("volume", 0, true);
|
vol_btn_node = node->getChild("volume", 0, true);
|
||||||
|
@ -312,6 +314,14 @@ double FGNavRadio::adjustILSRange( double stationElev, double aircraftElev,
|
||||||
void
|
void
|
||||||
FGNavRadio::update(double dt)
|
FGNavRadio::update(double dt)
|
||||||
{
|
{
|
||||||
|
// Do a nav station search only once a second to reduce
|
||||||
|
// unnecessary work. (Also, make sure to do this before caching
|
||||||
|
// any values!)
|
||||||
|
_time_before_search_sec -= dt;
|
||||||
|
if ( _time_before_search_sec < 0 ) {
|
||||||
|
search();
|
||||||
|
}
|
||||||
|
|
||||||
// cache a few strategic values locally for speed
|
// cache a few strategic values locally for speed
|
||||||
double lon = lon_node->getDoubleValue() * SGD_DEGREES_TO_RADIANS;
|
double lon = lon_node->getDoubleValue() * SGD_DEGREES_TO_RADIANS;
|
||||||
double lat = lat_node->getDoubleValue() * SGD_DEGREES_TO_RADIANS;
|
double lat = lat_node->getDoubleValue() * SGD_DEGREES_TO_RADIANS;
|
||||||
|
@ -337,13 +347,6 @@ FGNavRadio::update(double dt)
|
||||||
sprintf( tmp, "%.2f", alt_freq_node->getDoubleValue() );
|
sprintf( tmp, "%.2f", alt_freq_node->getDoubleValue() );
|
||||||
fmt_alt_freq_node->setStringValue(tmp);
|
fmt_alt_freq_node->setStringValue(tmp);
|
||||||
|
|
||||||
// Do a nav station search only once a second to reduce
|
|
||||||
// unnecessary work.
|
|
||||||
_time_before_search_sec -= dt;
|
|
||||||
if ( _time_before_search_sec < 0 ) {
|
|
||||||
search();
|
|
||||||
}
|
|
||||||
|
|
||||||
// cout << "is_valid = " << is_valid
|
// cout << "is_valid = " << is_valid
|
||||||
// << " power_btn = " << power_btn
|
// << " power_btn = " << power_btn
|
||||||
// << " bus_power = " << bus_power_node->getDoubleValue()
|
// << " bus_power = " << bus_power_node->getDoubleValue()
|
||||||
|
@ -942,6 +945,8 @@ void FGNavRadio::search()
|
||||||
// cout << "not picking up vor1. :-(" << endl;
|
// cout << "not picking up vor1. :-(" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_valid_node->setBoolValue( is_valid );
|
||||||
|
|
||||||
char tmpid[5];
|
char tmpid[5];
|
||||||
strncpy( tmpid, nav_id.c_str(), 5 );
|
strncpy( tmpid, nav_id.c_str(), 5 );
|
||||||
id_c1_node->setIntValue( (int)tmpid[0] );
|
id_c1_node->setIntValue( (int)tmpid[0] );
|
||||||
|
|
|
@ -49,6 +49,8 @@ class FGNavRadio : public SGSubsystem
|
||||||
SGPropertyNode *bus_power_node;
|
SGPropertyNode *bus_power_node;
|
||||||
|
|
||||||
// property inputs
|
// property inputs
|
||||||
|
SGPropertyNode *is_valid_node; // is station data valid (may be way out
|
||||||
|
// of range.)
|
||||||
SGPropertyNode *power_btn_node;
|
SGPropertyNode *power_btn_node;
|
||||||
SGPropertyNode *freq_node; // primary freq
|
SGPropertyNode *freq_node; // primary freq
|
||||||
SGPropertyNode *alt_freq_node; // standby freq
|
SGPropertyNode *alt_freq_node; // standby freq
|
||||||
|
@ -105,6 +107,7 @@ class FGNavRadio : public SGSubsystem
|
||||||
|
|
||||||
// internal (private) values
|
// internal (private) values
|
||||||
|
|
||||||
|
string nav_id;
|
||||||
string last_nav_id;
|
string last_nav_id;
|
||||||
bool last_nav_vor;
|
bool last_nav_vor;
|
||||||
int play_count;
|
int play_count;
|
||||||
|
|
Loading…
Add table
Reference in a new issue