]> git.mxchange.org Git - flightgear.git/blobdiff - src/Cockpit/radiostack.cxx
Cleaned up a few things relating to playing morse audio vor/ils idents.
[flightgear.git] / src / Cockpit / radiostack.cxx
index 82512a7e423170627d248b75ebb9d0a46f14fd32..e706317b7cff008b442da6f8ad5b0498d8d45a8d 100644 (file)
@@ -21,6 +21,8 @@
 // $Id$
 
 
+#include <simgear/math/sg_random.h>
+
 #include <Aircraft/aircraft.hxx>
 #include <Main/bfi.hxx>
 #include <Navaids/ilslist.hxx>
 
 #include "radiostack.hxx"
 
+static int nav1_play_count = 0;
+static time_t nav1_last_time = 0;
+
+
 /**
  * Boy, this is ugly!  Make the VOR range vary by altitude difference.
  */
@@ -253,21 +259,39 @@ FGRadioStack::update()
        } else {
            nav1_radial = nav1_sel_radial;
        }
+    } else {
+       nav1_inrange = false;
+       nav1_dme_dist = 0.0;
+       // cout << "not picking up vor. :-(" << endl;
+    }
 
+    if ( nav1_valid && nav1_inrange ) {
        // play station ident via audio system if on + ident,
        // otherwise turn it off
        if ( nav1_on_btn && nav1_ident_btn ) {
-           if ( ! globals->get_soundmgr()->is_playing( "nav1-ident" ) ) {
-               globals->get_soundmgr()->play_once( "nav1-ident" );
+           if ( nav1_last_time <
+                globals->get_time_params()->get_cur_time() - 30 ) {
+               nav1_last_time = globals->get_time_params()->get_cur_time();
+               nav1_play_count = 0;
+           }
+           if ( nav1_play_count < 4 ) {
+               // play VOR ident
+               if ( !globals->get_soundmgr()->is_playing("nav1-vor-ident") ) {
+                   globals->get_soundmgr()->play_once( "nav1-vor-ident" );
+                   ++nav1_play_count;
+               }
+           } else if ( nav1_play_count < 5 && nav1_has_dme ) {
+               // play DME ident
+               if ( !globals->get_soundmgr()->is_playing("nav1-vor-ident") &&
+                    !globals->get_soundmgr()->is_playing("nav1-dme-ident") ) {
+                   globals->get_soundmgr()->play_once( "nav1-dme-ident" );
+                   ++nav1_play_count;
+               }
            }
        } else {
-           globals->get_soundmgr()->stop( "nav1-ident" );
+           globals->get_soundmgr()->stop( "nav1-vor-ident" );
+           globals->get_soundmgr()->stop( "nav1-dme-ident" );
        }
-    } else {
-       nav1_inrange = false;
-       nav1_dme_dist = 0.0;
-       globals->get_soundmgr()->stop( "nav1-ident" );
-       // cout << "not picking up vor. :-(" << endl;
     }
 
     if ( nav2_valid ) {
@@ -356,6 +380,7 @@ void FGRadioStack::search()
     if ( current_ilslist->query( lon, lat, elev, nav1_freq, &ils ) ) {
        nav1_ident = ils.get_locident();
        if ( last_nav1_ident != nav1_ident ) {
+           nav1_trans_ident = ils.get_trans_ident();
            last_nav1_ident = nav1_ident;
            nav1_valid = true;
            nav1_loc = true;
@@ -385,12 +410,28 @@ void FGRadioStack::search()
            nav1_dme_y = ils.get_dme_y();
            nav1_dme_z = ils.get_dme_z();
 
-           if ( globals->get_soundmgr()->exists( "nav1-ident" ) ) {
-               globals->get_soundmgr()->remove( "nav1-ident" );
+           if ( globals->get_soundmgr()->exists( "nav1-vor-ident" ) ) {
+               globals->get_soundmgr()->remove( "nav1-vor-ident" );
+           }
+           FGSimpleSound *sound;
+           sound = morse.make_ident( nav1_trans_ident, LO_FREQUENCY );
+           sound->set_volume( 0.3 );
+           globals->get_soundmgr()->add( sound, "nav1-vor-ident" );
+
+           if ( globals->get_soundmgr()->exists( "nav1-dme-ident" ) ) {
+               globals->get_soundmgr()->remove( "nav1-dme-ident" );
            }
-           FGSimpleSound *sound = morse.make_ident( nav1_ident );
+           sound = morse.make_ident( nav1_trans_ident, HI_FREQUENCY );
            sound->set_volume( 0.3 );
-           globals->get_soundmgr()->add( sound, "nav1-ident" );
+           globals->get_soundmgr()->add( sound, "nav1-dme-ident" );
+
+           int offset = (int)(sg_random() * 30.0);
+           nav1_play_count = offset / 4;
+           nav1_last_time = globals->get_time_params()->get_cur_time() -
+               offset;
+           cout << "offset = " << offset << " play_count = " << nav1_play_count
+                << " nav1_last_time = " << nav1_last_time << " current time = "
+                << globals->get_time_params()->get_cur_time() << endl;
 
            // cout << "Found an ils station in range" << endl;
            // cout << " id = " << ils.get_locident() << endl;
@@ -399,6 +440,7 @@ void FGRadioStack::search()
        nav1_ident = nav.get_ident();
        if ( last_nav1_ident != nav1_ident ) {
            last_nav1_ident = nav1_ident;
+           nav1_trans_ident = nav.get_trans_ident();
            nav1_valid = true;
            nav1_loc = false;
            nav1_has_dme = nav.get_has_dme();
@@ -415,12 +457,28 @@ void FGRadioStack::search()
            nav1_y = nav1_dme_y = nav.get_y();
            nav1_z = nav1_dme_z = nav.get_z();
 
-           if ( globals->get_soundmgr()->exists( "nav1-ident" ) ) {
-               globals->get_soundmgr()->remove( "nav1-ident" );
+           if ( globals->get_soundmgr()->exists( "nav1-vor-ident" ) ) {
+               globals->get_soundmgr()->remove( "nav1-vor-ident" );
            }
-           FGSimpleSound *sound = morse.make_ident( nav1_ident );
+           FGSimpleSound *sound;
+           sound = morse.make_ident( nav1_trans_ident, LO_FREQUENCY );
            sound->set_volume( 0.3 );
-           globals->get_soundmgr()->add( sound, "nav1-ident" );
+           globals->get_soundmgr()->add( sound, "nav1-vor-ident" );
+
+           if ( globals->get_soundmgr()->exists( "nav1-dme-ident" ) ) {
+               globals->get_soundmgr()->remove( "nav1-dme-ident" );
+           }
+           sound = morse.make_ident( nav1_trans_ident, HI_FREQUENCY );
+           sound->set_volume( 0.3 );
+           globals->get_soundmgr()->add( sound, "nav1-dme-ident" );
+
+           int offset = (int)(sg_random() * 30.0);
+           nav1_play_count = offset / 4;
+           nav1_last_time = globals->get_time_params()->get_cur_time() -
+               offset;
+           cout << "offset = " << offset << " play_count = " << nav1_play_count
+                << " nav1_last_time = " << nav1_last_time << " current time = "
+                << globals->get_time_params()->get_cur_time() << endl;
 
            // cout << "Found a vor station in range" << endl;
            // cout << " id = " << nav.get_ident() << endl;
@@ -430,7 +488,8 @@ void FGRadioStack::search()
        nav1_ident = "";
        nav1_radial = 0;
        nav1_dme_dist = 0;
-       globals->get_soundmgr()->remove( "nav1-ident" );
+       globals->get_soundmgr()->remove( "nav1-vor-ident" );
+       globals->get_soundmgr()->remove( "nav1-dme-ident" );
        // cout << "not picking up vor1. :-(" << endl;
     }
 
@@ -438,6 +497,7 @@ void FGRadioStack::search()
        nav2_ident = ils.get_locident();
        if ( last_nav2_ident != nav2_ident ) {
            last_nav2_ident = nav2_ident;
+           nav2_trans_ident = ils.get_trans_ident();
            nav2_valid = true;
            nav2_loc = true;
            nav2_has_dme = ils.get_has_dme();
@@ -468,6 +528,7 @@ void FGRadioStack::search()
        nav2_ident = nav.get_ident();
        if ( last_nav2_ident != nav2_ident ) {
            last_nav2_ident = nav2_ident;
+           nav2_trans_ident = nav.get_trans_ident();
            nav2_valid = true;
            nav2_loc = false;
            nav2_has_dme = nav.get_has_dme();