X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCockpit%2Fkr_87.cxx;h=67a0586dbf341ae13d53f58ab928e8525f079cc2;hb=f38c88b762bc6c317669e8e0b00a92b09ee4671a;hp=c6a398e6c4143145e8aee9fa170c0c1325d0acef;hpb=2fec1506d3baeac09bcd0975899b14309318574f;p=flightgear.git diff --git a/src/Cockpit/kr_87.cxx b/src/Cockpit/kr_87.cxx index c6a398e6c..67a0586db 100644 --- a/src/Cockpit/kr_87.cxx +++ b/src/Cockpit/kr_87.cxx @@ -73,9 +73,12 @@ FGKR_87::FGKR_87() : 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)), need_update(true), valid(false), inrange(false), + dist(0.0), + heading(0.0), goal_needle_deg(0.0), et_flash_time(0.0), ant_mode(0), @@ -83,7 +86,8 @@ FGKR_87::FGKR_87() : timer_mode(0), count_mode(0), rotation(0), - on_off_vol_btn(0.5), + power_btn(true), + vol_btn(0.5), adf_btn(true), bfo_btn(false), frq_btn(false), @@ -92,6 +96,7 @@ FGKR_87::FGKR_87() : last_flt_et_btn(false), set_rst_btn(false), last_set_rst_btn(false), + ident_btn(false), freq(0.0), stby_freq(0.0), needle_deg(0.0), @@ -99,46 +104,24 @@ FGKR_87::FGKR_87() : elapsed_timer(0.0), tmp_timer(0.0) { - SGPath path( globals->get_fg_root() ); - SGPath term = path; - term.append( "Navaids/range.term" ); - SGPath low = path; - low.append( "Navaids/range.low" ); - SGPath high = path; - high.append( "Navaids/range.high" ); - - term_tbl = new SGInterpTable( term.str() ); - low_tbl = new SGInterpTable( low.str() ); - high_tbl = new SGInterpTable( high.str() ); } // Destructor -FGKR_87::~FGKR_87() -{ - delete term_tbl; - delete low_tbl; - delete high_tbl; +FGKR_87::~FGKR_87() { } -void -FGKR_87::init () -{ +void FGKR_87::init () { morse.init(); - - update(0); // FIXME: use dt } -void -FGKR_87::bind () -{ + +void FGKR_87::bind () { // internal values - fgTie("/radios/kr-87/internal/ident", this, - &FGKR_87::get_ident_btn, - &FGKR_87::set_ident_btn); - fgSetArchivable("/radios/kr-87/internal/ident"); + 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); // modes @@ -155,10 +138,14 @@ FGKR_87::bind () fgTie("/radios/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/on-off-volume", this, - &FGKR_87::get_on_off_vol_btn, - &FGKR_87::set_on_off_vol_btn); - fgSetArchivable("/radios/kr-87/inputs/on-off-volume"); + fgTie("/radios/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/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, &FGKR_87::get_adf_btn, &FGKR_87::set_adf_btn); @@ -174,6 +161,8 @@ FGKR_87::bind () fgTie("/radios/kr-87/inputs/set-rst-btn", this, &FGKR_87::get_set_rst_btn, &FGKR_87::set_set_rst_btn); + fgTie("/radios/kr-87/inputs/ident-btn", this, + &FGKR_87::get_ident_btn, &FGKR_87::set_ident_btn); // outputs fgTie("/radios/kr-87/outputs/selected-khz", this, @@ -198,12 +187,12 @@ FGKR_87::bind () fgTie("/radios/kr-87/annunciators/et", this, &FGKR_87::get_et_ann ); } -void -FGKR_87::unbind () -{ + +void FGKR_87::unbind () { // internal values - fgUntie("/radios/kr-87/internal/ident"); + fgUntie("/radios/kr-87/internal/valid"); fgUntie("/radios/kr-87/internal/inrange"); + fgUntie("/radios/kr-87/internal/dist"); fgUntie("/radios/kr-87/internal/heading"); // modes @@ -214,12 +203,14 @@ FGKR_87::unbind () // input and buttons fgUntie("/radios/kr-87/inputs/rotation-deg"); - fgUntie("/radios/kr-87/inputs/on-off-volume"); + 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"); // outputs fgUntie("/radios/kr-87/outputs/selected-khz"); @@ -239,9 +230,7 @@ FGKR_87::unbind () // 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 ) { 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; @@ -256,7 +245,7 @@ FGKR_87::update( double dt ) // Radio //////////////////////////////////////////////////////////////////////// - if ( on_off_vol_btn >= 0.01 ) { + if ( has_power() ) { // buttons if ( adf_btn == 0 ) { ant_mode = 1; @@ -399,7 +388,39 @@ FGKR_87::update( double dt ) et_ann = false; } - + // formatted timer + double time; + int hours, min, sec; + if ( timer_mode == 0 ) { + time = flight_timer; + } else { + time = elapsed_timer; + } + // cout << time << endl; + hours = (int)(time / 3600.0); + time -= hours * 3600.00; + min = (int)(time / 60.0); + time -= min * 60.0; + sec = (int)time; + int big, little; + if ( hours > 0 ) { + big = hours; + if ( big > 99 ) { + big = 99; + } + little = min; + } else { + big = min; + little = sec; + } + if ( big > 99 ) { + big = 99; + } + 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 ); + while ( goal_needle_deg < 0.0 ) { goal_needle_deg += 360.0; } while ( goal_needle_deg >= 360.0 ) { goal_needle_deg -= 360.0; } @@ -418,13 +439,13 @@ FGKR_87::update( double dt ) #ifdef ENABLE_AUDIO_SUPPORT if ( valid && inrange ) { - // play station ident via audio system if on + ident, + // play station ident via audio system if on + ident_btn, // otherwise turn it off - if ( on_off_vol_btn >= 0.01 && ident_btn ) { + if ( vol_btn >= 0.01 && ident_btn ) { FGSimpleSound *sound; sound = globals->get_soundmgr()->find( "adf-ident" ); if ( sound != NULL ) { - sound->set_volume( on_off_vol_btn ); + sound->set_volume( vol_btn ); } else { SG_LOG( SG_COCKPIT, SG_ALERT, "Can't find adf-ident sound" ); } @@ -449,8 +470,7 @@ FGKR_87::update( double dt ) // Update current nav/adf radio stations based on current postition -void FGKR_87::search() -{ +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;