]> git.mxchange.org Git - flightgear.git/blobdiff - FDM/flight.hxx
Interface with Jon's submitted JSBsim changes.
[flightgear.git] / FDM / flight.hxx
index fdd514bd18a96c254a7cc28d4c3a81ce5500a801..9edf224e3ec211e6627583b58c3c01eb7375bd55 100644 (file)
 #define _FLIGHT_HXX
 
 
+#ifndef __cplusplus                                                          
+# error This library requires C++
+#endif                                   
+
+
 /* Required get_()
 
-   `FGState::get_Longitude ()'
-   `FGState::get_Latitude ()'
-   `FGState::get_Altitude ()'
-   `FGState::get_Phi ()'
-   `FGState::get_Theta ()'
-   `FGState::get_Psi ()'
-   `FGState::get_V_equiv_kts ()'
-
-   `FGState::get_Mass ()'
-   `FGState::get_I_xx ()'
-   `FGState::get_I_yy ()'
-   `FGState::get_I_zz ()'
-   `FGState::get_I_xz ()'
+   `FGInterface::get_Longitude ()'
+   `FGInterface::get_Latitude ()'
+   `FGInterface::get_Altitude ()'
+   `FGInterface::get_Phi ()'
+   `FGInterface::get_Theta ()'
+   `FGInterface::get_Psi ()'
+   `FGInterface::get_V_equiv_kts ()'
+
+   `FGInterface::get_Mass ()'
+   `FGInterface::get_I_xx ()'
+   `FGInterface::get_I_yy ()'
+   `FGInterface::get_I_zz ()'
+   `FGInterface::get_I_xz ()'
    
-   `FGState::get_V_north ()'
-   `FGState::get_V_east ()'
-   `FGState::get_V_down ()'
+   `FGInterface::get_V_north ()'
+   `FGInterface::get_V_east ()'
+   `FGInterface::get_V_down ()'
 
-   `FGState::get_P_Body ()'
-   `FGState::get_Q_Body ()'
-   `FGState::get_R_Body ()'
+   `FGInterface::get_P_Body ()'
+   `FGInterface::get_Q_Body ()'
+   `FGInterface::get_R_Body ()'
 
-   `FGState::get_Gamma_vert_rad ()'
-   `FGState::get_Climb_Rate ()'
-   `FGState::get_Beta ()'
+   `FGInterface::get_Gamma_vert_rad ()'
+   `FGInterface::get_Climb_Rate ()'
+   `FGInterface::get_Alpha ()'
+   `FGInterface::get_Beta ()'
 
-   `FGState::get_Runway_altitude ()'
+   `FGInterface::get_Runway_altitude ()'
 
-   `FGState::get_Lon_geocentric ()'
-   `FGState::get_Lat_geocentric ()'
-   `FGState::get_Sea_level_radius ()'
-   `FGState::get_Earth_position_angle ()'
+   `FGInterface::get_Lon_geocentric ()'
+   `FGInterface::get_Lat_geocentric ()'
+   `FGInterface::get_Sea_level_radius ()'
+   `FGInterface::get_Earth_position_angle ()'
 
-   `FGState::get_Dx_cg ()'
-   `FGState::get_Dy_cg ()'
-   `FGState::get_Dz_cg ()'
+   `FGInterface::get_Latitude_dot()'
+   `FGInterface::get_Longitude_dot()'
+   `FGInterface::get_Radius_dot()'
 
-   `FGState::get_T_local_to_body_11 ()' ... `FGState::get_T_local_to_body_33 ()'
+   `FGInterface::get_Dx_cg ()'
+   `FGInterface::get_Dy_cg ()'
+   `FGInterface::get_Dz_cg ()'
 
-   `FGState::get_Radius_to_vehicle ()'
+   `FGInterface::get_T_local_to_body_11 ()' ... `FGInterface::get_T_local_to_body_33 ()'
+
+   `FGInterface::get_Radius_to_vehicle ()'
 
  */
 
-#include <Flight/Slew/slew.hxx>
 
+#include <Time/timestamp.hxx>
 
 #ifndef __cplusplus                                                          
 # error This library requires C++
@@ -83,7 +93,7 @@ typedef double FG_VECTOR_3[3];
 
 
 // This is based heavily on LaRCsim/ls_generic.h
-class FGState {
+class FGInterface {
 
 public:
 
@@ -92,18 +102,23 @@ public:
        // Slew (in MS terminology)
        FG_SLEW = 0,
        
-       // The only "real" model that is currently implemented
+       // The NASA LaRCsim (Navion) flight model
        FG_LARCSIM = 1,
 
-       FG_ACM = 2,
-       FG_SUPER_SONIC = 3,
-       FG_HELICOPTER = 4,
-       FG_AUTOGYRO = 5,
-       FG_BALLOON = 6,
-       FG_PARACHUTE = 7,
+       // Jon S. Berndt's new FDM written from the ground up in C++
+       FG_JSBSIM = 2,
+
+       // The following aren't implemented but are here to spark
+       // thoughts and discussions, and maybe even action.
+       FG_ACM = 3,
+       FG_SUPER_SONIC = 4,
+       FG_HELICOPTER = 5,
+       FG_AUTOGYRO = 6,
+       FG_BALLOON = 7,
+       FG_PARACHUTE = 8,
 
        // Driven externally via a serial port, net, file, etc.
-       FG_EXTERNAL = 8
+       FG_EXTERNAL = 9
     };
 
 /*================== Mass properties and geometry values ==================*/
@@ -511,14 +526,14 @@ public:
 
     FG_VECTOR_3    geocentric_rates_v;     // Geocentric linear velocities
     // inline double * get_Geocentric_rates_v() { return geocentric_rates_v; }
-    // inline double get_Latitude_dot() const { return geocentric_rates_v[0]; }
-    // inline double get_Longitude_dot() const { return geocentric_rates_v[1]; }
-    // inline double get_Radius_dot() const { return geocentric_rates_v[2]; }
-    /* inline void set_Geocentric_Rates( double lat, double lon, double rad ) {
+    inline double get_Latitude_dot() const { return geocentric_rates_v[0]; }
+    inline double get_Longitude_dot() const { return geocentric_rates_v[1]; }
+    inline double get_Radius_dot() const { return geocentric_rates_v[2]; }
+    inline void set_Geocentric_Rates( double lat, double lon, double rad ) {
        geocentric_rates_v[0] = lat;
        geocentric_rates_v[1] = lon;
        geocentric_rates_v[2] = rad;
-    } */
+    }
     
     /*=============================== Positions ===============================*/
 
@@ -538,6 +553,7 @@ public:
     inline void set_Radius_to_vehicle(double radius) {
        geocentric_position_v[2] = radius;
     }
+
     inline void set_Geocentric_Position( double lat, double lon, double rad ) {
        geocentric_position_v[0] = lat;
        geocentric_position_v[1] = lon;
@@ -621,8 +637,8 @@ public:
     // inline void set_Centrifugal_relief(double cr) { centrifugal_relief = cr; }
 
     double    alpha, beta, alpha_dot, beta_dot;   // in radians  
-    // inline double get_Alpha() const { return alpha; }
-    // inline void set_Alpha( double a ) { alpha = a; }
+    inline double get_Alpha() const { return alpha; }
+    inline void set_Alpha( double a ) { alpha = a; }
     inline double get_Beta() const { return beta; }
     inline void set_Beta( double b ) { beta = b; }
     // inline double get_Alpha_dot() const { return alpha_dot; }
@@ -769,28 +785,61 @@ public:
     double        climb_rate;           // in feet per second
     inline double get_Climb_Rate() const { return climb_rate; }
     inline void set_Climb_Rate(double rate) { climb_rate = rate; }
+
+    FGTimeStamp valid_stamp;       // time this record is valid
+    FGTimeStamp next_stamp;       // time this record is valid
+    inline FGTimeStamp get_time_stamp() const { return valid_stamp; }
+    inline void stamp_time() { valid_stamp = next_stamp; next_stamp.stamp(); }
+
+    // Extrapolate FDM based on time_offset (in usec)
+    void extrapolate( int time_offset );
+
 };
 
 
-extern FGState cur_fdm_state;
+extern FGInterface cur_fdm_state;
 
 
 // General interface to the flight model routines
 
 // Initialize the flight model parameters
-int fgFlightModelInit(int model, FGState& f, double dt);
+int fgFDMInit(int model, FGInterface& f, double dt);
 
 // Run multiloop iterations of the flight model
-int fgFlightModelUpdate(int model, FGState& f, int multiloop);
+int fgFDMUpdate(int model, FGInterface& f, int multiloop, int jitter);
 
 // Set the altitude (force)
-void fgFlightModelSetAltitude(int model, FGState& f, double alt_meters);
+void fgFDMForceAltitude(int model, double alt_meters);
+
+// Set the local ground elevation
+void fgFDMSetGroundElevation(int model, double alt_meters);
 
 
 #endif // _FLIGHT_HXX
 
 
 // $Log$
+// Revision 1.13  1999/02/05 21:29:02  curt
+// Modifications to incorporate Jon S. Berndts flight model code.
+//
+// Revision 1.12  1999/01/20 13:42:23  curt
+// Tweaked FDM interface.
+// Testing check sum support for NMEA serial output.
+//
+// Revision 1.11  1999/01/19 17:52:07  curt
+// Working on being able to extrapolate a new position and orientation
+// based on a position, orientation, and time offset.
+//
+// Revision 1.10  1999/01/09 13:37:33  curt
+// Convert fgTIMESTAMP to FGTimeStamp which holds usec instead of ms.
+//
+// Revision 1.9  1999/01/08 19:27:38  curt
+// Fixed AOA reading on HUD.
+// Continued work on time jitter compensation.
+//
+// Revision 1.8  1999/01/08 03:23:52  curt
+// Beginning work on compensating for sim time vs. real world time "jitter".
+//
 // Revision 1.7  1998/12/18 23:37:09  curt
 // Collapsed out the FGState variables not currently needed.  They are just
 // commented out and can be readded easily at any time.  The point of this