#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++
// This is based heavily on LaRCsim/ls_generic.h
-class FGState {
+class FGInterface {
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 ==================*/
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 ===============================*/
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;
// 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; }
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 jitter);
+int fgFDMUpdate(int model, FGInterface& f, int multiloop, int jitter);
// Set the altitude (force)
-void fgFlightModelSetAltitude(int model, 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".
//