//
// Written by Curtis Olson, started April 2002.
//
-// Copyright (C) 2002 Curtis L. Olson - curt@flightgear.org
+// Copyright (C) 2002 Curtis L. Olson - http://www.flightgear.org/~curt
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
needle_deg(0.0),
flight_timer(0.0),
elapsed_timer(0.0),
- tmp_timer(0.0)
+ tmp_timer(0.0),
+ _time_before_search_sec(0)
{
}
void FGKR_87::init () {
- serviceable->setBoolValue( true );
morse.init();
}
void FGKR_87::bind () {
// internal values
- fgTie("/radios/kr-87/internal/valid", this, &FGKR_87::get_valid);
- fgTie("/radios/kr-87/internal/inrange", this, &FGKR_87::get_inrange);
- fgTie("/radios/kr-87/internal/dist", this, &FGKR_87::get_dist);
- fgTie("/radios/kr-87/internal/heading", this, &FGKR_87::get_heading);
+ fgTie("/instrumentation/kr-87/internal/valid", this, &FGKR_87::get_valid);
+ fgTie("/instrumentation/kr-87/internal/inrange", this,
+ &FGKR_87::get_inrange);
+ fgTie("/instrumentation/kr-87/internal/dist", this,
+ &FGKR_87::get_dist);
+ fgTie("/instrumentation/kr-87/internal/heading", this,
+ &FGKR_87::get_heading);
// modes
- fgTie("/radios/kr-87/modes/ant", this,
+ fgTie("/instrumentation/kr-87/modes/ant", this,
&FGKR_87::get_ant_mode);
- fgTie("/radios/kr-87/modes/stby", this,
+ fgTie("/instrumentation/kr-87/modes/stby", this,
&FGKR_87::get_stby_mode);
- fgTie("/radios/kr-87/modes/timer", this,
+ fgTie("/instrumentation/kr-87/modes/timer", this,
&FGKR_87::get_timer_mode);
- fgTie("/radios/kr-87/modes/count", this,
+ fgTie("/instrumentation/kr-87/modes/count", this,
&FGKR_87::get_count_mode);
// input and buttons
- fgTie("/radios/kr-87/inputs/rotation-deg", this,
+ fgTie("/instrumentation/kr-87/inputs/rotation-deg", this,
&FGKR_87::get_rotation, &FGKR_87::set_rotation);
- fgSetArchivable("/radios/kr-87/inputs/rotation-deg");
- fgTie("/radios/kr-87/inputs/power-btn", this,
+ fgSetArchivable("/instrumentation/kr-87/inputs/rotation-deg");
+ fgTie("/instrumentation/kr-87/inputs/power-btn", this,
&FGKR_87::get_power_btn,
&FGKR_87::set_power_btn);
- fgSetArchivable("/radios/kr-87/inputs/power-btn");
- fgTie("/radios/kr-87/inputs/audio-btn", this,
+ fgSetArchivable("/instrumentation/kr-87/inputs/power-btn");
+ fgTie("/instrumentation/kr-87/inputs/audio-btn", this,
&FGKR_87::get_audio_btn,
&FGKR_87::set_audio_btn);
- fgSetArchivable("/radios/kr-87/inputs/audio-btn");
- fgTie("/radios/kr-87/inputs/volume", this,
+ fgSetArchivable("/instrumentation/kr-87/inputs/audio-btn");
+ fgTie("/instrumentation/kr-87/inputs/volume", this,
&FGKR_87::get_vol_btn,
&FGKR_87::set_vol_btn);
- fgSetArchivable("/radios/kr-87/inputs/volume");
- fgTie("/radios/kr-87/inputs/adf-btn", this,
+ fgSetArchivable("/instrumentation/kr-87/inputs/volume");
+ fgTie("/instrumentation/kr-87/inputs/adf-btn", this,
&FGKR_87::get_adf_btn,
&FGKR_87::set_adf_btn);
- fgTie("/radios/kr-87/inputs/bfo-btn", this,
+ fgTie("/instrumentation/kr-87/inputs/bfo-btn", this,
&FGKR_87::get_bfo_btn,
&FGKR_87::set_bfo_btn);
- fgTie("/radios/kr-87/inputs/frq-btn", this,
+ fgTie("/instrumentation/kr-87/inputs/frq-btn", this,
&FGKR_87::get_frq_btn,
&FGKR_87::set_frq_btn);
- fgTie("/radios/kr-87/inputs/flt-et-btn", this,
+ fgTie("/instrumentation/kr-87/inputs/flt-et-btn", this,
&FGKR_87::get_flt_et_btn,
&FGKR_87::set_flt_et_btn);
- fgTie("/radios/kr-87/inputs/set-rst-btn", this,
+ fgTie("/instrumentation/kr-87/inputs/set-rst-btn", this,
&FGKR_87::get_set_rst_btn,
&FGKR_87::set_set_rst_btn);
// outputs
- fgTie("/radios/kr-87/outputs/selected-khz", this,
+ fgTie("/instrumentation/kr-87/outputs/selected-khz", this,
&FGKR_87::get_freq, &FGKR_87::set_freq);
- fgSetArchivable("/radios/kr-87/outputs/selected-khz");
- fgTie("/radios/kr-87/outputs/standby-khz", this,
+ fgSetArchivable("/instrumentation/kr-87/outputs/selected-khz");
+ fgTie("/instrumentation/kr-87/outputs/standby-khz", this,
&FGKR_87::get_stby_freq, &FGKR_87::set_stby_freq);
- fgSetArchivable("/radios/kr-87/outputs/standby-khz");
- fgTie("/radios/kr-87/outputs/needle-deg", this,
+ fgSetArchivable("/instrumentation/kr-87/outputs/standby-khz");
+ fgTie("/instrumentation/kr-87/outputs/needle-deg", this,
&FGKR_87::get_needle_deg);
- fgTie("/radios/kr-87/outputs/flight-timer", this, &FGKR_87::get_flight_timer);
- fgTie("/radios/kr-87/outputs/elapsed-timer", this,
+ fgTie("/instrumentation/kr-87/outputs/flight-timer", this,
+ &FGKR_87::get_flight_timer);
+ fgTie("/instrumentation/kr-87/outputs/elapsed-timer", this,
&FGKR_87::get_elapsed_timer,
&FGKR_87::set_elapsed_timer);
// annunciators
- fgTie("/radios/kr-87/annunciators/ant", this, &FGKR_87::get_ant_ann );
- fgTie("/radios/kr-87/annunciators/adf", this, &FGKR_87::get_adf_ann );
- fgTie("/radios/kr-87/annunciators/bfo", this, &FGKR_87::get_bfo_ann );
- fgTie("/radios/kr-87/annunciators/frq", this, &FGKR_87::get_frq_ann );
- fgTie("/radios/kr-87/annunciators/flt", this, &FGKR_87::get_flt_ann );
- fgTie("/radios/kr-87/annunciators/et", this, &FGKR_87::get_et_ann );
+ fgTie("/instrumentation/kr-87/annunciators/ant", this,
+ &FGKR_87::get_ant_ann );
+ fgTie("/instrumentation/kr-87/annunciators/adf", this,
+ &FGKR_87::get_adf_ann );
+ fgTie("/instrumentation/kr-87/annunciators/bfo", this,
+ &FGKR_87::get_bfo_ann );
+ fgTie("/instrumentation/kr-87/annunciators/frq", this,
+ &FGKR_87::get_frq_ann );
+ fgTie("/instrumentation/kr-87/annunciators/flt", this,
+ &FGKR_87::get_flt_ann );
+ fgTie("/instrumentation/kr-87/annunciators/et", this,
+ &FGKR_87::get_et_ann );
}
void FGKR_87::unbind () {
// internal values
- fgUntie("/radios/kr-87/internal/valid");
- fgUntie("/radios/kr-87/internal/inrange");
- fgUntie("/radios/kr-87/internal/dist");
- fgUntie("/radios/kr-87/internal/heading");
+ fgUntie("/instrumentation/kr-87/internal/valid");
+ fgUntie("/instrumentation/kr-87/internal/inrange");
+ fgUntie("/instrumentation/kr-87/internal/dist");
+ fgUntie("/instrumentation/kr-87/internal/heading");
// modes
- fgUntie("/radios/kr-87/modes/ant");
- fgUntie("/radios/kr-87/modes/stby");
- fgUntie("/radios/kr-87/modes/timer");
- fgUntie("/radios/kr-87/modes/count");
+ fgUntie("/instrumentation/kr-87/modes/ant");
+ fgUntie("/instrumentation/kr-87/modes/stby");
+ fgUntie("/instrumentation/kr-87/modes/timer");
+ fgUntie("/instrumentation/kr-87/modes/count");
// input and buttons
- fgUntie("/radios/kr-87/inputs/rotation-deg");
- fgUntie("/radios/kr-87/inputs/power-btn");
- fgUntie("/radios/kr-87/inputs/volume");
- fgUntie("/radios/kr-87/inputs/adf-btn");
- fgUntie("/radios/kr-87/inputs/bfo-btn");
- fgUntie("/radios/kr-87/inputs/frq-btn");
- fgUntie("/radios/kr-87/inputs/flt-et-btn");
- fgUntie("/radios/kr-87/inputs/set-rst-btn");
- fgUntie("/radios/kr-87/inputs/ident-btn");
+ fgUntie("/instrumentation/kr-87/inputs/rotation-deg");
+ fgUntie("/instrumentation/kr-87/inputs/power-btn");
+ fgUntie("/instrumentation/kr-87/inputs/volume");
+ fgUntie("/instrumentation/kr-87/inputs/adf-btn");
+ fgUntie("/instrumentation/kr-87/inputs/bfo-btn");
+ fgUntie("/instrumentation/kr-87/inputs/frq-btn");
+ fgUntie("/instrumentation/kr-87/inputs/flt-et-btn");
+ fgUntie("/instrumentation/kr-87/inputs/set-rst-btn");
+ fgUntie("/instrumentation/kr-87/inputs/ident-btn");
// outputs
- fgUntie("/radios/kr-87/outputs/selected-khz");
- fgUntie("/radios/kr-87/outputs/standby-khz");
- fgUntie("/radios/kr-87/outputs/needle-deg");
- fgUntie("/radios/kr-87/outputs/flight-timer");
- fgUntie("/radios/kr-87/outputs/elapsed-timer");
+ fgUntie("/instrumentation/kr-87/outputs/selected-khz");
+ fgUntie("/instrumentation/kr-87/outputs/standby-khz");
+ fgUntie("/instrumentation/kr-87/outputs/needle-deg");
+ fgUntie("/instrumentation/kr-87/outputs/flight-timer");
+ fgUntie("/instrumentation/kr-87/outputs/elapsed-timer");
// annunciators
- fgUntie("/radios/kr-87/annunciators/ant");
- fgUntie("/radios/kr-87/annunciators/adf");
- fgUntie("/radios/kr-87/annunciators/bfo");
- fgUntie("/radios/kr-87/annunciators/frq");
- fgUntie("/radios/kr-87/annunciators/flt");
- fgUntie("/radios/kr-87/annunciators/et");
+ fgUntie("/instrumentation/kr-87/annunciators/ant");
+ fgUntie("/instrumentation/kr-87/annunciators/adf");
+ fgUntie("/instrumentation/kr-87/annunciators/bfo");
+ fgUntie("/instrumentation/kr-87/annunciators/frq");
+ fgUntie("/instrumentation/kr-87/annunciators/flt");
+ fgUntie("/instrumentation/kr-87/annunciators/et");
}
// Update the various nav values based on position and valid tuned in navs
-void FGKR_87::update( double dt ) {
+void FGKR_87::update( double dt_sec ) {
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;
Point3D station;
double az1, az2, s;
+ // On timeout, scan again
+ _time_before_search_sec -= dt_sec;
+ if ( _time_before_search_sec < 0 ) {
+ search();
+ }
+
////////////////////////////////////////////////////////////////////////
// Radio
////////////////////////////////////////////////////////////////////////
}
if ( set_rst_btn == 1 && set_rst_btn == last_set_rst_btn ) {
// button depressed and was last iteration too
- tmp_timer += dt;
+ tmp_timer += dt_sec;
// cout << "tmp_timer = " << tmp_timer << endl;
if ( tmp_timer > 2.0 ) {
// button held depressed for 2 seconds
last_set_rst_btn = set_rst_btn;
// timers
- flight_timer += dt;
+ flight_timer += dt_sec;
if ( set_rst_btn == 0 ) {
// only count if set/rst button not depressed
if ( count_mode == 0 ) {
- elapsed_timer += dt;
+ elapsed_timer += dt_sec;
} else if ( count_mode == 1 ) {
- elapsed_timer -= dt;
+ elapsed_timer -= dt_sec;
if ( elapsed_timer < 1.0 ) {
count_mode = 0;
elapsed_timer = 0.0;
if ( count_mode < 2 ) {
et_ann = stby_mode && timer_mode;
} else {
- et_flash_time += dt;
+ et_flash_time += dt_sec;
if ( et_ann && et_flash_time > 0.5 ) {
et_ann = false;
et_flash_time -= 0.5;
char formatted_timer[128];
// cout << big << ":" << little << endl;
snprintf(formatted_timer, 6, "%02d:%02d", big, little);
- fgSetString( "/radios/kr-87/outputs/timer-string", formatted_timer );
+ fgSetString( "/instrumentation/kr-87/outputs/timer-string",
+ formatted_timer );
while ( goal_needle_deg < 0.0 ) { goal_needle_deg += 360.0; }
while ( goal_needle_deg >= 360.0 ) { goal_needle_deg -= 360.0; }
while ( diff < -180.0 ) { diff += 360.0; }
while ( diff > 180.0 ) { diff -= 360.0; }
- needle_deg += diff * dt * 4;
+ needle_deg += diff * dt_sec * 4;
while ( needle_deg < 0.0 ) { needle_deg += 360.0; }
while ( needle_deg >= 360.0 ) { needle_deg -= 360.0; }
// FIXME: the panel should handle this
static string last_ident = "";
+ // reset search time
+ _time_before_search_sec = 1.0;
+
////////////////////////////////////////////////////////////////////////
// ADF.
////////////////////////////////////////////////////////////////////////