// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
-// $Id$
#ifdef HAVE_CONFIG_H
#include <simgear/math/sg_geodesy.hxx>
#include <simgear/timing/sg_time.hxx>
-#include <Aircraft/aircraft.hxx>
#include <Navaids/navlist.hxx>
#include "kr_87.hxx"
+#include <Sound/morse.hxx>
#include <string>
using std::string;
// Constructor
FGKR_87::FGKR_87( SGPropertyNode *node ) :
- lon_node(fgGetNode("/position/longitude-deg", true)),
- lat_node(fgGetNode("/position/latitude-deg", true)),
- alt_node(fgGetNode("/position/altitude-ft", true)),
bus_power(fgGetNode("/systems/electrical/outputs/adf", true)),
serviceable(fgGetNode("/instrumentation/adf/serviceable", true)),
need_update(true),
flight_timer(0.0),
elapsed_timer(0.0),
tmp_timer(0.0),
- _time_before_search_sec(0)
+ _time_before_search_sec(0),
+ _sgr(NULL)
{
}
void FGKR_87::init () {
- morse.init();
+ SGSoundMgr *smgr = globals->get_soundmgr();
+ _sgr = smgr->find("avionics", true);
+ _sgr->tie_to_listener();
}
// Update the various nav values based on position and valid tuned in navs
void FGKR_87::update( double dt_sec ) {
- SGGeod acft = SGGeod::fromDegFt(lon_node->getDoubleValue(),
- lat_node->getDoubleValue(),
- alt_node->getDoubleValue());
+ SGGeod acft = globals->get_aircraft_position();
need_update = false;
// otherwise turn it off
if ( vol_btn >= 0.01 && audio_btn ) {
SGSoundSample *sound;
- sound = globals->get_soundmgr()->find( "adf-ident" );
+ sound = _sgr->find( "adf-ident" );
if ( sound != NULL ) {
if ( !adf_btn ) {
sound->set_volume( vol_btn );
}
if ( play_count < 4 ) {
// play ADF ident
- if ( !globals->get_soundmgr()->is_playing("adf-ident") ) {
- globals->get_soundmgr()->play_once( "adf-ident" );
+ if ( !_sgr->is_playing("adf-ident") && (vol_btn > 0.05) ) {
+ _sgr->play_once( "adf-ident" );
++play_count;
}
}
} else {
- globals->get_soundmgr()->stop( "adf-ident" );
+ _sgr->stop( "adf-ident" );
}
}
}
// Update current nav/adf radio stations based on current postition
void FGKR_87::search() {
- double acft_lon = lon_node->getDoubleValue() * SGD_DEGREES_TO_RADIANS;
- double acft_lat = lat_node->getDoubleValue() * SGD_DEGREES_TO_RADIANS;
- double acft_elev = alt_node->getDoubleValue() * SG_FEET_TO_METER;
-
+ SGGeod pos = globals->get_aircraft_position();
+
// FIXME: the panel should handle this
static string last_ident = "";
// ADF.
////////////////////////////////////////////////////////////////////////
- FGNavRecord *adf
- = globals->get_navlist()->findByFreq( freq, acft_lon, acft_lat,
- acft_elev );
+
+ FGNavRecord *adf = globals->get_navlist()->findByFreq( freq, pos);
if ( adf != NULL ) {
char sfreq[128];
snprintf( sfreq, 10, "%d", freq );
stn_lat = adf->get_lat();
stn_elev = adf->get_elev_ft();
range = adf->get_range();
- effective_range = kludgeRange(stn_elev, acft_elev, range);
- xyz = adf->get_cart();
+ effective_range = kludgeRange(stn_elev, pos.getElevationM(), range);
+ xyz = adf->cart();
- if ( globals->get_soundmgr()->exists( "adf-ident" ) ) {
- globals->get_soundmgr()->remove( "adf-ident" );
+ if ( _sgr->exists( "adf-ident" ) ) {
+ _sgr->remove( "adf-ident" );
}
SGSoundSample *sound;
- sound = morse.make_ident( trans_ident, LO_FREQUENCY );
+ sound = FGMorse::instance()->make_ident( trans_ident, FGMorse::LO_FREQUENCY );
sound->set_volume( 0.3 );
- globals->get_soundmgr()->add( sound, "adf-ident" );
+ _sgr->add( sound, "adf-ident" );
int offset = (int)(sg_random() * 30.0);
play_count = offset / 4;
valid = false;
ident = "";
trans_ident = "";
- globals->get_soundmgr()->remove( "adf-ident" );
+ _sgr->remove( "adf-ident" );
last_ident = "";
// cout << "not picking up adf. :-(" << endl;
}