-// flight.c -- a general interface to the various flight models
+// flight.cxx -- a general interface to the various flight models
//
// Written by Curtis Olson, started May 1997.
//
}
FGInterface::FGInterface( double dt ) {
-
_setup();
delta_t = dt;
remainder = elapsed = multi_loop = 0;
void
FGInterface::_setup ()
{
+ inited = false;
+ bound = false;
+
init_vec( d_pilot_rp_body_v );
init_vec( d_cg_rp_body_v );
init_vec( f_body_total_v );
{
SG_LOG(SG_FLIGHT, SG_INFO, "Start initializing FGInterface");
+ inited = true;
+
stamp();
set_remainder(0);
SG_LOG(SG_FLIGHT, SG_INFO, "...initializing position...");
set_Longitude(fgGetDouble("/position/longitude-deg") * SGD_DEGREES_TO_RADIANS);
set_Latitude(fgGetDouble("/position/latitude-deg") * SGD_DEGREES_TO_RADIANS);
- double ground_elev_m = scenery.cur_elev + 1;
+ double ground_elev_m = scenery.get_cur_elev() + 1;
double ground_elev_ft = ground_elev_m * METERS_TO_FEET;
if (fgGetBool("/sim/startup/onground") ||
fgGetDouble("/position/altitude-ft") < ground_elev_ft)
// Set sea-level radius
SG_LOG(SG_FLIGHT, SG_INFO, "...initializing sea-level radius...");
+ SG_LOG(SG_FLIGHT, SG_INFO, " lat = " << fgGetDouble("/position/latitude-deg")
+ << " alt = " << fgGetDouble("/position/altitude-ft") );
double sea_level_radius_meters;
double lat_geoc;
- sgGeodToGeoc(get_Latitude(), get_Altitude(),
+ sgGeodToGeoc(fgGetDouble("/position/latitude-deg") * SGD_DEGREES_TO_RADIANS,
+ fgGetDouble("/position/altitude-ft") * SG_FEET_TO_METER,
&sea_level_radius_meters, &lat_geoc);
set_Sea_level_radius(sea_level_radius_meters * SG_METER_TO_FEET);
void
FGInterface::bind ()
{
+ bound = true;
+
// Time management (read-only)
fgTie("/fdm/time/delta_t", this,
&FGInterface::get_delta_t); // read-only
// Calibrated airspeed
fgTie("/velocities/airspeed-kt", this,
&FGInterface::get_V_calibrated_kts,
- &FGInterface::set_V_calibrated_kts);
+ &FGInterface::set_V_calibrated_kts,
+ false);
// Local velocities
+// fgTie("/velocities/speed-north-fps", this,
+// &FGInterface::get_V_north,
+// &FGInterface::set_V_north);
+// fgSetArchivable("/velocities/speed-north-fps");
+// fgTie("/velocities/speed-east-fps", this,
+// &FGInterface::get_V_east,
+// &FGInterface::set_V_east);
+// fgSetArchivable("/velocities/speed-east-fps");
+// fgTie("/velocities/speed-down-fps", this,
+// &FGInterface::get_V_down,
+// &FGInterface::set_V_down);
+// fgSetArchivable("/velocities/speed-down-fps");
+ // FIXME: Temporarily read-only, until the
+ // incompatibilities between JSBSim and
+ // LaRCSim are fixed (LaRCSim adds the
+ // earth's rotation to the east velocity).
fgTie("/velocities/speed-north-fps", this,
- &FGInterface::get_V_north,
- &FGInterface::set_V_north);
- fgSetArchivable("/velocities/speed-north-fps");
+ &FGInterface::get_V_north);
fgTie("/velocities/speed-east-fps", this,
- &FGInterface::get_V_east,
- &FGInterface::set_V_east);
- fgSetArchivable("/velocities/speed-east-fps");
+ &FGInterface::get_V_east);
fgTie("/velocities/speed-down-fps", this,
- &FGInterface::get_V_down,
- &FGInterface::set_V_down);
- fgSetArchivable("/velocities/speed-down-fps");
+ &FGInterface::get_V_down);
// Relative wind
+ // FIXME: temporarily archivable, until
+ // the NED problem is fixed.
fgTie("/velocities/uBody-fps", this,
&FGInterface::get_uBody,
- &FGInterface::set_uBody);
+ &FGInterface::set_uBody,
+ false);
+ fgSetArchivable("/velocities/uBody-fps");
fgTie("/velocities/vBody-fps", this,
&FGInterface::get_vBody,
- &FGInterface::set_vBody);
+ &FGInterface::set_vBody,
+ false);
+ fgSetArchivable("/velocities/vBody-fps");
fgTie("/velocities/wBody-fps", this,
&FGInterface::get_wBody,
- &FGInterface::set_wBody);
+ &FGInterface::set_wBody,
+ false);
+ fgSetArchivable("/velocities/wBody-fps");
// Climb and slip (read-only)
fgTie("/velocities/vertical-speed-fps", this,
void
FGInterface::unbind ()
{
+ bound = false;
+
fgUntie("/fdm/time/delta_t");
fgUntie("/fdm/time/elapsed");
fgUntie("/fdm/time/remainder");
fgUntie("/position/latitude-deg");
fgUntie("/position/longitude-deg");
fgUntie("/position/altitude-ft");
- fgUntie("/position/heading");
- fgUntie("/position/pitch");
- fgUntie("/position/roll");
+ fgUntie("/position/altitude-agl-ft");
+ fgUntie("/orientation/heading-deg");
+ fgUntie("/orientation/pitch-deg");
+ fgUntie("/orientation/roll-deg");
fgUntie("/velocities/airspeed-kt");
fgUntie("/velocities/speed-north-fps");
fgUntie("/velocities/speed-east-fps");
void FGInterface::_updatePosition( double lat_geoc, double lon, double alt ) {
double lat_geod, tmp_alt, sl_radius1, sl_radius2, tmp_lat_geoc;
+ // cout << "starting sea level rad = " << get_Sea_level_radius() << endl;
+
sgGeocToGeod( lat_geoc, ( get_Sea_level_radius() + alt ) * SG_FEET_TO_METER,
&lat_geod, &tmp_alt, &sl_radius1 );
sgGeodToGeoc( lat_geod, alt * SG_FEET_TO_METER, &sl_radius2, &tmp_lat_geoc );
_set_Geodetic_Position( lat_geod, lon, alt );
_set_Sea_level_radius( sl_radius2 * SG_METER_TO_FEET );
- _set_Runway_altitude( scenery.cur_elev*METERS_TO_FEET );
+ _set_Runway_altitude( scenery.get_cur_elev()*METERS_TO_FEET );
_set_sin_lat_geocentric( lat_geoc );
_set_cos_lat_geocentric( lat_geoc );