]> git.mxchange.org Git - flightgear.git/blobdiff - src/Cockpit/navcom.hxx
Yank out all the glut dependencies and concentrate them in a (easily
[flightgear.git] / src / Cockpit / navcom.hxx
index e3ae300bfaa335aea605595fe88f45a01d48d4b0..698a50391beb13833919517762447d06f362e90f 100644 (file)
 #define _FG_NAVCOM_HXX
 
 
-#include <Main/fgfs.hxx>
 #include <Main/fg_props.hxx>
 
 #include <simgear/compiler.h>
-
+#include <simgear/structure/subsystem_mgr.hxx>
 #include <simgear/math/interpolater.hxx>
 #include <simgear/timing/timestamp.hxx>
 
@@ -37,7 +36,7 @@
 #include <Navaids/navlist.hxx>
 #include <Sound/morse.hxx>
 
-class FGNavCom : public FGSubsystem
+class FGNavCom : public SGSubsystem
 {
     FGMorse morse;
 
@@ -49,8 +48,8 @@ class FGNavCom : public FGSubsystem
     SGPropertyNode *lat_node;
     SGPropertyNode *alt_node;
     SGPropertyNode *bus_power;
-    SGPropertyNode *com_servicable, *nav_servicable;
-    SGPropertyNode *cdi_servicable, *gs_servicable, *tofrom_servicable;
+    SGPropertyNode *com_serviceable, *nav_serviceable;
+    SGPropertyNode *cdi_serviceable, *gs_serviceable, *tofrom_serviceable;
 
     string last_nav_id;
     bool last_nav_vor;
@@ -64,6 +63,7 @@ class FGNavCom : public FGSubsystem
     bool need_update;
 
     bool power_btn;
+    bool audio_btn;
 
     bool comm_valid;
     bool comm_inrange;
@@ -88,8 +88,16 @@ class FGNavCom : public FGSubsystem
     bool nav_loc;
     double nav_freq;
     double nav_alt_freq;
-    double nav_radial;
+    double nav_heading;         // true heading to nav station
+    double nav_radial;          // current radial we are on (taking
+                                // into consideration the vor station
+                                // alignment which likely doesn't
+                                // match the magnetic alignment
+                                // exactly.)
     double nav_sel_radial;
+    double nav_target_radial;
+    double nav_target_radial_true;
+    double nav_target_auto_hdg;
     double nav_loclon;
     double nav_loclat;
     double nav_x;
@@ -101,17 +109,21 @@ class FGNavCom : public FGSubsystem
     double nav_gs_x;
     double nav_gs_y;
     double nav_gs_z;
+    sgdVec3 gs_base_vec;
     double nav_gs_dist;
+    double nav_gs_dist_signed;
+    double nav_gs_rate_of_climb;
     SGTimeStamp prev_time;
     SGTimeStamp curr_time;
     double nav_elev;
     double nav_range;
     double nav_effective_range;
-    double nav_heading;
     double nav_target_gs;
-    double nav_magvar;
+    double nav_twist;
     double nav_vol_btn;
     bool nav_ident_btn;
+    double horiz_vel;
+    double last_x;
 
     // model standard VOR/DME/TACAN service volumes as per AIM 1-1-8
     double adjustNavRange( double stationElev, double aircraftElev,
@@ -141,10 +153,8 @@ public:
     }
 
     // NavCom Setters
-    inline void set_power_btn( bool val ) {
-        power_btn = val;
-
-    }
+    inline void set_power_btn( bool val ) { power_btn = val; }
+    inline void set_audio_btn( bool val ) { audio_btn = val; }
  
     // COMM Setters
     inline void set_comm_freq( double freq ) {
@@ -178,6 +188,7 @@ public:
         return power_btn && (bus_power->getDoubleValue() > 1.0);
     }
     inline bool get_power_btn() const { return power_btn; }
+    inline bool get_audio_btn() const { return audio_btn; }
 
     // COMM Accessors
     inline double get_comm_freq () const { return comm_freq; }
@@ -187,6 +198,13 @@ public:
     inline double get_nav_freq () const { return nav_freq; }
     inline double get_nav_alt_freq () const { return nav_alt_freq; }
     inline double get_nav_sel_radial() const { return nav_sel_radial; }
+    inline double get_nav_target_radial() const { return nav_target_radial; }
+    inline double get_nav_target_radial_true() const {
+        return nav_target_radial_true;
+    }
+    inline double get_nav_target_auto_hdg() const {
+        return nav_target_auto_hdg;
+    }
 
     // Calculated values.
     inline bool get_comm_inrange() const { return comm_inrange; }
@@ -208,15 +226,26 @@ public:
     inline double get_nav_gslon() const { return nav_gslon; }
     inline double get_nav_gslat() const { return nav_gslat; }
     inline double get_nav_gs_dist() const { return nav_gs_dist; }
+    inline double get_nav_gs_dist_signed() const { return nav_gs_dist_signed; }
+    inline double get_nav_gs_rate_of_climb() const {
+        return nav_gs_rate_of_climb;
+    }
     inline double get_nav_elev() const { return nav_elev; }
-    inline double get_nav_heading() const { return nav_heading; }
-    inline double get_nav_radial() const { return nav_radial; }
+    double get_nav_heading() const;
+    double get_nav_radial() const;
+    double get_nav_reciprocal_radial() const;
     inline double get_nav_target_gs() const { return nav_target_gs; }
-    inline double get_nav_magvar() const { return nav_magvar; }
-    double get_nav_heading_needle_deflection() const;
-    double get_nav_gs_needle_deflection() const;
+    inline double get_nav_twist() const { return nav_twist; }
+    double get_nav_cdi_deflection() const;
+    double get_nav_cdi_xtrack_error() const;
+    double get_nav_gs_deflection() const;
     inline double get_nav_vol_btn() const { return nav_vol_btn; }
     inline bool get_nav_ident_btn() const { return nav_ident_btn; }
+    inline const char * get_nav_id() const { return nav_id.c_str(); }
+    inline int get_nav_id_c1() const { return nav_id.c_str()[0]; }
+    inline int get_nav_id_c2() const { return nav_id.c_str()[1]; }
+    inline int get_nav_id_c3() const { return nav_id.c_str()[2]; }
+    inline int get_nav_id_c4() const { return nav_id.c_str()[3]; }
 };