} 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 ) {
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-vor-ident" );
- globals->get_soundmgr()->stop( "nav1-dme-ident" );
- // cout << "not picking up vor. :-(" << endl;
}
if ( nav2_valid ) {
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;
globals->get_soundmgr()->remove( "nav1-vor-ident" );
}
FGSimpleSound *sound;
- sound = morse.make_ident( nav1_ident, LO_FREQUENCY );
+ 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" );
}
- sound = morse.make_ident( nav1_ident, HI_FREQUENCY );
+ sound = morse.make_ident( nav1_trans_ident, HI_FREQUENCY );
sound->set_volume( 0.3 );
globals->get_soundmgr()->add( sound, "nav1-dme-ident" );
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();
globals->get_soundmgr()->remove( "nav1-vor-ident" );
}
FGSimpleSound *sound;
- sound = morse.make_ident( nav1_ident, LO_FREQUENCY );
+ 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" );
}
- sound = morse.make_ident( nav1_ident, HI_FREQUENCY );
+ sound = morse.make_ident( nav1_trans_ident, HI_FREQUENCY );
sound->set_volume( 0.3 );
globals->get_soundmgr()->add( sound, "nav1-dme-ident" );
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();
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();
char aptcode[5];
char rwyno[4];
int locfreq;
- char locident[5];
+ char locident[5]; // official ident
double locheading;
double loclat;
double loclon;
double imlat;
double imlon;
+ // for failure modeling
+ string trans_ident; // transmitted ident
+ bool loc_failed; // localizer failed?
+ bool gs_failed; // glide slope failed?
+ bool dme_failed; // dme failed?
+
public:
inline FGILS(void) {}
inline char *get_rwyno() { return rwyno; }
inline int get_locfreq() const { return locfreq; }
inline char *get_locident() { return locident; }
+ inline string get_trans_ident() { return trans_ident; }
inline double get_locheading() const { return locheading; }
inline double get_loclat() const { return loclat; }
inline double get_loclon() const { return loclon; }
// cout << "dme = " << cart << endl;
}
- // return in >> skipeol;
+ i.trans_ident = "I";
+ i.trans_ident += i.locident;
+ i.loc_failed = i.gs_failed = i.dme_failed = false;
+
+ // return in >> skipeol;
return in;
}
string ident; // to avoid a core dump with corrupt data
double magvar; // magvar from true north (negative = W)
+ // for failure modeling
+ string trans_ident; // transmitted ident
+ bool nav_failed; // nav failed?
+ bool dme_failed; // dme failed?
+
public:
inline FGNav(void) {}
inline int get_range() const { return range; }
inline bool get_has_dme() const { return has_dme; }
inline const char *get_ident() { return ident.c_str(); }
+ inline string get_trans_ident() { return trans_ident; }
inline double get_magvar () const { return magvar; }
/* inline void set_type( char t ) { type = t; }
n.y = cart.y();
n.z = cart.z();
+ n.trans_ident = n.ident;
+ n.nav_failed = n.dme_failed = false;
+
return in >> skipeol;
}
// remove a sound effect, return true if successful
bool FGSoundMgr::remove( const string& refname ) {
-#if defined ( PLIB_AUDIO_IS_BROKEN )
- // if PLIB_AUDIO_IS_BROKEN, we can't reliably remove sounds that
- // are currently being played. :-( So, let's just not remove them
- // and return false. The effects of this are that the sound
- // sample will continue to finish playing (or continue to loop
- // forever.) And the sound sample will remain registered in the
- // plib audio system. This is a memory leak, and eventually this
- // could cause us to max out the total number of allowed sound
- // samples in plib, but what are you going to do? Hopefully the
- // plib team will do a new stable relase with these problems
- // fixed.
-
- cout << "plib broken audio, skipping remove" << endl;
-
- return false;
-#endif
-
sound_map_iterator it = sounds.find( refname );
if ( it != sounds.end() ) {
// first stop the sound from playing (so we don't bomb the