]> git.mxchange.org Git - flightgear.git/blobdiff - src/Instrumentation/kr_87.cxx
Add back power button binding, but move the location to /instrumentation/nav
[flightgear.git] / src / Instrumentation / kr_87.cxx
index 404a5e46f048945bf67a772d92660a9221b4c88e..5466ac8cf568fcfa1fcdc5ad20961318a9a9e167 100644 (file)
@@ -2,7 +2,7 @@
 //
 // 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
@@ -102,7 +102,8 @@ FGKR_87::FGKR_87( SGPropertyNode *node ) :
     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)
 {
 }
 
@@ -113,127 +114,136 @@ FGKR_87::~FGKR_87() {
 
 
 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;
@@ -244,6 +254,12 @@ void FGKR_87::update( double dt ) {
     Point3D station;
     double az1, az2, s;
 
+    // On timeout, scan again
+    _time_before_search_sec -= dt_sec;
+    if ( _time_before_search_sec < 0 ) {
+        search();
+    }
+
     ////////////////////////////////////////////////////////////////////////
     // Radio
     ////////////////////////////////////////////////////////////////////////
@@ -283,7 +299,7 @@ void FGKR_87::update( double dt ) {
         }
         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
@@ -308,14 +324,14 @@ void FGKR_87::update( double dt ) {
         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;
@@ -332,7 +348,7 @@ void FGKR_87::update( double dt ) {
         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;
@@ -426,7 +442,8 @@ void FGKR_87::update( double dt ) {
     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; }
@@ -435,7 +452,7 @@ void FGKR_87::update( double dt ) {
     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; }
 
@@ -487,6 +504,9 @@ void FGKR_87::search() {
                                // FIXME: the panel should handle this
     static string last_ident = "";
 
+    // reset search time
+    _time_before_search_sec = 1.0;
+
     ////////////////////////////////////////////////////////////////////////
     // ADF.
     ////////////////////////////////////////////////////////////////////////