X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCockpit%2Fsteam.cxx;h=6b4a2a86ab5c1ffa196cf5f77bd43956bd32a2c9;hb=47772b9853cad2580dcc4dc665092fd660966ae5;hp=7b4802709d104489c848fc890f47f9fc2df085de;hpb=2827cf1387c38a4dd5fb9f92cd9939dc38056539;p=flightgear.git diff --git a/src/Cockpit/steam.cxx b/src/Cockpit/steam.cxx index 7b4802709..6b4a2a86a 100644 --- a/src/Cockpit/steam.cxx +++ b/src/Cockpit/steam.cxx @@ -23,20 +23,16 @@ # include #endif -#if defined( FG_HAVE_NATIVE_SGI_COMPILERS ) -# include -#else -# include -#endif +#include + +#include STL_IOSTREAM #include #include #include #include -#include
-#include -FG_USING_NAMESPACE(std); +SG_USING_NAMESPACE(std); #include "radiostack.hxx" #include "steam.hxx" @@ -49,9 +45,6 @@ static bool isTied = false; // Declare the functions that read the variables //////////////////////////////////////////////////////////////////////// -// Anything that reads the BFI directly is not implemented at all! - - double FGSteam::the_STATIC_inhg = 29.92; double FGSteam::the_ALT_ft = 0.0; // Indicated altitude double FGSteam::get_ALT_ft() { _CatchUp(); return the_ALT_ft; } @@ -63,7 +56,7 @@ void FGSteam::set_ALT_datum_mb ( double datum_mb ) { the_ALT_datum_mb = datum_mb; } -double FGSteam::get_ASI_kias() { return FGBFI::getAirspeed(); } +double FGSteam::get_ASI_kias() { return fgGetDouble("/velocities/airspeed-kt"); } double FGSteam::the_VSI_case = 29.92; double FGSteam::the_VSI_fps = 0.0; @@ -107,27 +100,34 @@ int FGSteam::_UpdatesPending = 1000000; /* Forces filter to reset */ void FGSteam::update ( int timesteps ) { - if (!isTied) { - isTied = true; - fgTie("/steam/airspeed", FGSteam::get_ASI_kias); - fgTie("/steam/altitude", FGSteam::get_ALT_ft); - fgTie("/steam/altimeter-datum-mb", - FGSteam::get_ALT_datum_mb, FGSteam::set_ALT_datum_mb, - false); /* don't modify the value */ - fgTie("/steam/turn-rate", FGSteam::get_TC_std); - fgTie("/steam/slip-skid", FGSteam::get_TC_rad); - fgTie("/steam/vertical-speed", FGSteam::get_VSI_fps); - fgTie("/steam/gyro-compass", FGSteam::get_DG_deg); - fgTie("/steam/vor1", FGSteam::get_HackVOR1_deg); - fgTie("/steam/vor2", FGSteam::get_HackVOR2_deg); - fgTie("/steam/glidescope1", FGSteam::get_HackGS_deg); - fgTie("/steam/adf", FGSteam::get_HackADF_deg); - fgTie("/steam/gyro-compass-error", - FGSteam::get_DG_err, - FGSteam::set_DG_err); - fgTie("/steam/mag-compass", FGSteam::get_MH_deg); - } - _UpdatesPending += timesteps; + if (!isTied) { + isTied = true; + fgTie("/steam/airspeed-kt", FGSteam::get_ASI_kias); + fgSetArchivable("/steam/airspeed-kt"); + fgTie("/steam/altitude-ft", FGSteam::get_ALT_ft); + fgSetArchivable("/steam/altitude-ft"); + fgTie("/steam/altimeter-datum-mb", + FGSteam::get_ALT_datum_mb, FGSteam::set_ALT_datum_mb, + false); /* don't modify the value */ + fgSetArchivable("/steam/altimeter-datum-mb"); + fgTie("/steam/turn-rate", FGSteam::get_TC_std); + fgSetArchivable("/steam/turn-rate"); + fgTie("/steam/slip-skid", FGSteam::get_TC_rad); + fgSetArchivable("/steam/slip-skid"); + fgTie("/steam/vertical-speed-fpm", FGSteam::get_VSI_fps); + fgSetArchivable("/steam/vertical-speed-fpm"); + fgTie("/steam/gyro-compass-deg", FGSteam::get_DG_deg); + fgSetArchivable("/steam/gyro-compass-deg"); + fgTie("/steam/adf-deg", FGSteam::get_HackADF_deg); + fgSetArchivable("/steam/adf-deg"); + fgTie("/steam/gyro-compass-error-deg", + FGSteam::get_DG_err, FGSteam::set_DG_err, + false); /* don't modify the value */ + fgSetArchivable("/steam/gyro-compass-error-deg"); + fgTie("/steam/mag-compass-deg", FGSteam::get_MH_deg); + fgSetArchivable("/steam/mag-compass-deg"); + } + _UpdatesPending += timesteps; } @@ -203,7 +203,7 @@ void FGSteam::_CatchUp() { double dt = _UpdatesPending * 1.0 / fgGetInt("/sim/model-hz"); // FIXME: inefficient double AccN, AccE, AccU; - int i /*,j*/; + /* int i, j; */ double d, the_ENGINE_rpm; #if 0 @@ -248,7 +248,6 @@ void FGSteam::_CatchUp() More subtle flaw is having it not move or a travel limit occasionally due to some dirt in the tube or on the ball. */ - // the_TC_rad = - ( FGBFI::getSideSlip () ); /* incorrect */ d = - current_aircraft.fdm_state->get_A_Z_pilot(); if ( d < 1 ) d = 1; set_lowpass ( & the_TC_rad, @@ -264,9 +263,9 @@ void FGSteam::_CatchUp() */ set_lowpass ( & the_TC_std, current_aircraft.fdm_state->get_Phi_dot () - * RAD_TO_DEG / 20.0 + + * SGD_RADIANS_TO_DEGREES / 20.0 + current_aircraft.fdm_state->get_Psi_dot () - * RAD_TO_DEG / 3.0 , dt ); + * SGD_RADIANS_TO_DEGREES / 3.0 , dt ); /************************** We want to know the pilot accelerations, @@ -279,15 +278,17 @@ void FGSteam::_CatchUp() if ( fabs(the_TC_rad) > 0.2 ) { /* Massive sideslip jams it; it stops turning */ the_MH_degps = 0.0; - the_MH_err = FGBFI::getHeading () - the_MH_deg; + the_MH_err = fgGetDouble("/orientation/heading-deg") - the_MH_deg; } else { double MagDip, MagVar, CosDip; double FrcN, FrcE, FrcU, AccTot; double EdgN, EdgE, EdgU; double TrqN, TrqE, TrqU, Torque; /* Find a force vector towards exact magnetic north */ - MagVar = FGBFI::getMagVar() / RAD_TO_DEG; - MagDip = FGBFI::getMagDip() / RAD_TO_DEG; + MagVar = fgGetDouble("/environment/magnetic-variation-deg") + / SGD_RADIANS_TO_DEGREES; + MagDip = fgGetDouble("/environment/magnetic-dip-deg") + / SGD_RADIANS_TO_DEGREES; CosDip = cos ( MagDip ); FrcN = CosDip * cos ( MagVar ); FrcE = CosDip * sin ( MagVar ); @@ -298,8 +299,8 @@ void FGSteam::_CatchUp() if ( AccTot > 1.0 ) AccTot = sqrt ( AccTot ); else AccTot = 1.0; /* Force applies to north marking on compass card */ - EdgN = cos ( the_MH_err / RAD_TO_DEG ); - EdgE = sin ( the_MH_err / RAD_TO_DEG ); + EdgN = cos ( the_MH_err / SGD_RADIANS_TO_DEGREES ); + EdgE = sin ( the_MH_err / SGD_RADIANS_TO_DEGREES ); EdgU = 0.0; /* Apply the force to the edge to get torques */ TrqN = EdgE * FrcU - EdgU * FrcE; @@ -317,7 +318,7 @@ void FGSteam::_CatchUp() } if ( the_MH_err > 180.0 ) the_MH_err -= 360.0; else if ( the_MH_err < -180.0 ) the_MH_err += 360.0; - the_MH_deg = FGBFI::getHeading () - the_MH_err; + the_MH_deg = fgGetDouble("/orientation/heading-deg") - the_MH_err; } /************************** @@ -325,7 +326,7 @@ void FGSteam::_CatchUp() scaling capability for the vacuum pump later on. When we have a real engine model, we can ask it. */ - the_ENGINE_rpm = controls.get_throttle(0) * 26.0; + the_ENGINE_rpm = globals->get_controls()->get_throttle(0) * 26.0; /************************** First, we need to know what the static line is reporting, @@ -333,7 +334,8 @@ void FGSteam::_CatchUp() We filter the actual value by one second to account for the line impedance of the plumbing. */ - double static_inhg = altFtToPressInHg(FGBFI::getAltitude()); + double static_inhg + = altFtToPressInHg(fgGetDouble("/position/altitude-ft")); set_lowpass ( & the_STATIC_inhg, static_inhg, dt ); /* @@ -393,10 +395,10 @@ void FGSteam::_CatchUp() > put in those insidious turning errors ... for now anyway. */ if ( _UpdatesPending > 999999 ) - the_DG_err = FGBFI::getMagVar(); + the_DG_err = fgGetDouble("/environment/magnetic-variation-deg"); the_DG_degps = 0.01; /* HACK! */ if (dt<1.0) the_DG_err += dt * the_DG_degps; - the_DG_deg = FGBFI::getHeading () - the_DG_err; + the_DG_deg = fgGetDouble("/orientation/heading-deg") - the_DG_err; /************************** Finished updates, now clear the timer @@ -413,14 +415,17 @@ void FGSteam::_CatchUp() //////////////////////////////////////////////////////////////////////// +#if 0 + double FGSteam::get_HackGS_deg () { if ( current_radiostack->get_nav1_inrange() && current_radiostack->get_nav1_has_gs() ) { double x = current_radiostack->get_nav1_gs_dist(); - double y = (FGBFI::getAltitude() - current_radiostack->get_nav1_elev()) - * FEET_TO_METER; - double angle = atan2( y, x ) * RAD_TO_DEG; + double y = (fgGetDouble("/position/altitude-ft") + - current_radiostack->get_nav1_elev()) + * SG_FEET_TO_METER; + double angle = atan2( y, x ) * SGD_RADIANS_TO_DEGREES; return (current_radiostack->get_nav1_target_gs() - angle) * 5.0; } else { return 0.0; @@ -471,6 +476,7 @@ double FGSteam::get_HackVOR2_deg () { return r; } +#endif double FGSteam::get_HackOBS1_deg () { @@ -484,18 +490,18 @@ double FGSteam::get_HackOBS2_deg () { double FGSteam::get_HackADF_deg () { - double r; + static double last_r = 0; if ( current_radiostack->get_adf_inrange() ) { - r = current_radiostack->get_adf_heading() - FGBFI::getHeading(); - + double r = current_radiostack->get_adf_heading() + - fgGetDouble("/orientation/heading-deg"); + last_r = r; // cout << "Radial = " << current_radiostack->get_adf_heading() // << " Heading = " << FGBFI::getHeading() << endl; + return r; } else { - r = 0.0; + return last_r; } - - return r; }