1
0
Fork 0

Fix ADF bugs ... including still driving the needle when power off.

ADF bug fixes from John Denker.  Changes from current behaviour are:
* Include the power button in the electrical checks
* Raise the required input voltage from 1V to 8V
* Don't reset the heading to 90 degrees when out of range or no power
  (heading is now only reset to 90 in ANT or TEST mode)
This commit is contained in:
John Denker 2009-11-30 03:19:17 -07:00 committed by James Turner
parent 5ec5c34255
commit f025c65c60
2 changed files with 15 additions and 9 deletions

View file

@ -101,6 +101,10 @@ ADF::init ()
_bearing_node = node->getChild("indicated-bearing-deg", 0, true);
_ident_node = node->getChild("ident", 0, true);
_ident_audible_node = node->getChild("ident-audible", 0, true);
_power_btn_node = node->getChild("power-btn", 0, true);
if (_power_btn_node->getType() == simgear::props::NONE)
_power_btn_node->setBoolValue(true); // front end didn't implement a power button
SGSoundMgr *smgr = globals->get_soundmgr();
_sgr = smgr->find("avionics", true);
@ -117,13 +121,19 @@ void
ADF::update (double delta_time_sec)
{
// If it's off, don't waste any time.
if (_electrical_node->getDoubleValue() < 1.0
|| !_serviceable_node->getBoolValue()) {
set_bearing(delta_time_sec, 90);
if (_electrical_node->getDoubleValue() < 8.0
|| !_serviceable_node->getBoolValue()
|| !_power_btn_node->getBoolValue() ) {
_ident_node->setStringValue("");
return;
}
string mode = _mode_node->getStringValue();
if (mode == "ant" || mode == "test") set_bearing(delta_time_sec, 90);
if (mode != "bfo" && mode != "adf") {
_ident_node->setStringValue("");
return;
}
// Get the frequency
int frequency_khz = _frequency_node->getIntValue();
if (frequency_khz != _last_frequency_khz) {
@ -144,11 +154,7 @@ ADF::update (double delta_time_sec)
if (_time_before_search_sec < 0)
search(frequency_khz, longitude_rad, latitude_rad, altitude_m);
// If it's off, don't bother.
string mode = _mode_node->getStringValue();
if (!_transmitter_valid || (mode != "bfo" && mode != "adf"))
{
set_bearing(delta_time_sec, 90);
if (!_transmitter_valid) {
_ident_node->setStringValue("");
return;
}
@ -208,7 +214,6 @@ ADF::update (double delta_time_sec)
}
} else {
_in_range_node->setBoolValue(false);
set_bearing(delta_time_sec, 90);
_ident_node->setStringValue("");
_sgr->stop( _adf_ident );
}

View file

@ -82,6 +82,7 @@ private:
SGPropertyNode_ptr _ident_node;
SGPropertyNode_ptr _ident_audible_node;
SGPropertyNode_ptr _volume_node;
SGPropertyNode_ptr _power_btn_node;
double _time_before_search_sec;