X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FJSBSim%2FFGOutput.cpp;h=b3b3858088f2c6d0986a541acef77d82397ac8e3;hb=b5d116dad7816125dbaf94989aba774349f01017;hp=b85c0e574a285e6ad278fb20c44305823157eea8;hpb=0f98d21dd7cd2ab63e191d8f506825b3aaac50a0;p=flightgear.git diff --git a/src/FDM/JSBSim/FGOutput.cpp b/src/FDM/JSBSim/FGOutput.cpp index b85c0e574..b3b385808 100644 --- a/src/FDM/JSBSim/FGOutput.cpp +++ b/src/FDM/JSBSim/FGOutput.cpp @@ -43,13 +43,16 @@ INCLUDES #include "FGFDMExec.h" #include "FGAtmosphere.h" #include "FGFCS.h" +#include "FGAerodynamics.h" +#include "FGGroundReactions.h" #include "FGAircraft.h" +#include "FGMassBalance.h" #include "FGTranslation.h" #include "FGRotation.h" #include "FGPosition.h" #include "FGAuxiliary.h" -static const char *IdSrc = "$Header$"; +static const char *IdSrc = "$Id$"; static const char *IdHdr = ID_OUTPUT; /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -66,16 +69,15 @@ FGOutput::FGOutput(FGFDMExec* fdmex) : FGModel(fdmex) SubSystems = 0; enabled = true; -#ifdef FG_WITH_JSBSIM_SOCKET - socket = new FGfdmSocket("localhost",1138); -#endif + Debug(0); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -FGOutput::~FGOutput(void) +FGOutput::~FGOutput() { if (socket) delete socket; + Debug(1); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -88,11 +90,7 @@ bool FGOutput::Run(void) if (Type == otSocket) { SocketOutput(); } else if (Type == otCSV) { - if (Filename != "COUT" && Filename != "cout" && Filename.size() > 0) { - DelimitedOutput(Filename); - } else { - DelimitedOutput(); - } + DelimitedOutput(Filename); } else if (Type == otTerminal) { // Not done yet } else if (Type == otNone) { @@ -100,8 +98,9 @@ bool FGOutput::Run(void) } else { // Not a valid type of output } - + return false; } else { + return true; } } return false; @@ -119,7 +118,7 @@ void FGOutput::SetType(string type) Type = otSocket; } else if (type == "TERMINAL") { Type = otTerminal; - } else if (type != "NONE"){ + } else if (type != string("NONE")) { Type = otUnknown; cerr << "Unknown type of output specified in config file" << endl; } @@ -127,295 +126,193 @@ void FGOutput::SetType(string type) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void FGOutput::DelimitedOutput(void) +void FGOutput::DelimitedOutput(string fname) { - if (dFirstPass) { - cout << "Time"; - if (SubSystems & FGAircraft::ssSimulation) { - // Nothing here, yet - } - if (SubSystems & FGAircraft::ssAerosurfaces) { - cout << ", "; - cout << "Throttle, "; - cout << "Aileron Cmd, "; - cout << "Elevator Cmd, "; - cout << "Rudder Cmd, "; - cout << "Aileron Pos, "; - cout << "Elevator Pos, "; - cout << "Rudder Pos"; - } - if (SubSystems & FGAircraft::ssRates) { - cout << ", "; - cout << "P, Q, R"; - } - if (SubSystems & FGAircraft::ssVelocities) { - cout << ", "; - cout << "QBar, "; - cout << "Vtotal, "; - cout << "U, V, W, "; - cout << "Vn, Ve, Vd"; - } - if (SubSystems & FGAircraft::ssForces) { - cout << ", "; - cout << "XsForce, YsForce, ZsForce, "; - cout << "Xforce, Yforce, Zforce"; - } - if (SubSystems & FGAircraft::ssMoments) { - cout << ", "; - cout << "L, M, N"; - } - if (SubSystems & FGAircraft::ssAtmosphere) { - cout << ", "; - cout << "Rho"; - } - if (SubSystems & FGAircraft::ssMassProps) { - cout << ", "; - cout << "Ixx, "; - cout << "Iyy, "; - cout << "Izz, "; - cout << "Ixz, "; - cout << "Mass, "; - cout << "Xcg, Ycg, Zcg"; - } - if (SubSystems & FGAircraft::ssPosition) { - cout << ", "; - cout << "Altitude, "; - cout << "Phi, Tht, Psi, "; - cout << "Alpha, "; - cout << "Latitude, "; - cout << "Longitude, "; - cout << "Distance AGL, "; - cout << "Runway Radius"; - } - if (SubSystems & FGAircraft::ssCoefficients) { - cout << ", "; - cout << Aircraft->GetCoefficientStrings(); - } - if (SubSystems & FGAircraft::ssGroundReactions) { - cout << ", "; - cout << Aircraft->GetGroundReactionStrings(); - } + streambuf* buffer; - cout << endl; - dFirstPass = false; - } - - cout << State->Getsim_time(); - if (SubSystems & FGAircraft::ssSimulation) { - } - if (SubSystems & FGAircraft::ssAerosurfaces) { - cout << ", "; - cout << FCS->GetThrottlePos(0) << ", "; - cout << FCS->GetDaCmd() << ", "; - cout << FCS->GetDeCmd() << ", "; - cout << FCS->GetDrCmd() << ", "; - cout << FCS->GetDaPos() << ", "; - cout << FCS->GetDePos() << ", "; - cout << FCS->GetDrPos(); - } - if (SubSystems & FGAircraft::ssRates) { - cout << ", "; - cout << Rotation->GetPQR(); - } - if (SubSystems & FGAircraft::ssVelocities) { - cout << ", "; - cout << Translation->Getqbar() << ", "; - cout << Translation->GetVt() << ", "; - cout << Translation->GetUVW() << ", "; - cout << Position->GetVel(); - } - if (SubSystems & FGAircraft::ssForces) { - cout << ", "; - cout << Aircraft->GetvFs() << ", "; - cout << Aircraft->GetForces(); - } - if (SubSystems & FGAircraft::ssMoments) { - cout << ", "; - cout << Aircraft->GetMoments(); - } - if (SubSystems & FGAircraft::ssAtmosphere) { - cout << ", "; - cout << Atmosphere->GetDensity(); - } - if (SubSystems & FGAircraft::ssMassProps) { - cout << ", "; - cout << Aircraft->GetIxx() << ", "; - cout << Aircraft->GetIyy() << ", "; - cout << Aircraft->GetIzz() << ", "; - cout << Aircraft->GetIxz() << ", "; - cout << Aircraft->GetMass() << ", "; - cout << Aircraft->GetXYZcg(); - } - if (SubSystems & FGAircraft::ssPosition) { - cout << ", "; - cout << Position->Geth() << ", "; - cout << Rotation->GetEuler() << ", "; - cout << Translation->Getalpha() << ", "; - cout << Position->GetLatitude() << ", "; - cout << Position->GetLongitude() << ", "; - cout << Position->GetDistanceAGL() << ", "; - cout << Position->GetRunwayRadius(); - } - if (SubSystems & FGAircraft::ssCoefficients) { - cout << ", "; - cout << Aircraft->GetCoefficientValues(); - } - if (SubSystems & FGAircraft::ssGroundReactions) { - cout << ", "; - cout << Aircraft->GetGroundReactionValues(); + if (fname == "COUT" || fname == "cout") { + buffer = cout.rdbuf(); + } else { + datafile.open(fname.c_str()); + buffer = datafile.rdbuf(); } - cout << endl; -} -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + ostream outstream(buffer); -void FGOutput::DelimitedOutput(string fname) -{ - if (sFirstPass) { - datafile.open(fname.c_str()); - datafile << "Time"; - if (SubSystems & FGAircraft::ssSimulation) { + if (dFirstPass) { + outstream << "Time"; + if (SubSystems & ssSimulation) { // Nothing here, yet } - if (SubSystems & FGAircraft::ssAerosurfaces) { - datafile << ", "; - datafile << "Throttle, "; - datafile << "Aileron Cmd, "; - datafile << "Elevator Cmd, "; - datafile << "Rudder Cmd, "; - datafile << "Aileron Pos, "; - datafile << "Elevator Pos, "; - datafile << "Rudder Pos"; + if (SubSystems & ssAerosurfaces) { + outstream << ", "; + outstream << "Aileron Cmd, "; + outstream << "Elevator Cmd, "; + outstream << "Rudder Cmd, "; + outstream << "Flap Cmd, "; + outstream << "Left Aileron Pos, "; + outstream << "Right Aileron Pos, "; + outstream << "Elevator Pos, "; + outstream << "Rudder Pos, "; + outstream << "Flap Pos"; } - if (SubSystems & FGAircraft::ssRates) { - datafile << ", "; - datafile << "P, Q, R"; + if (SubSystems & ssRates) { + outstream << ", "; + outstream << "P, Q, R, "; + outstream << "Pdot, Qdot, Rdot"; } - if (SubSystems & FGAircraft::ssVelocities) { - datafile << ", "; - datafile << "QBar, "; - datafile << "Vtotal, "; - datafile << "U, V, W, "; - datafile << "Vn, Ve, Vd"; + if (SubSystems & ssVelocities) { + outstream << ", "; + outstream << "QBar, "; + outstream << "Vtotal, "; + outstream << "UBody, VBody, WBody, "; + outstream << "UAero, VAero, WAero, "; + outstream << "Vn, Ve, Vd"; } - if (SubSystems & FGAircraft::ssForces) { - datafile << ", "; - datafile << "XsForce, YsForce, ZsForce, "; - datafile << "Xforce, Yforce, Zforce"; + if (SubSystems & ssForces) { + outstream << ", "; + outstream << "Drag, Side, Lift, "; + outstream << "L/D, "; + outstream << "Xforce, Yforce, Zforce, "; + outstream << "xGravity, yGravity, zGravity, "; + outstream << "xCoriolis, yCoriolis, zCoriolis, "; + outstream << "xCentrifugal, yCentrifugal, zCentrifugal"; } - if (SubSystems & FGAircraft::ssMoments) { - datafile << ", "; - datafile << "L, M, N"; + if (SubSystems & ssMoments) { + outstream << ", "; + outstream << "L, M, N"; } - if (SubSystems & FGAircraft::ssAtmosphere) { - datafile << ", "; - datafile << "Rho"; + if (SubSystems & ssAtmosphere) { + outstream << ", "; + outstream << "Rho, "; + outstream << "NWind, EWind, DWind"; } - if (SubSystems & FGAircraft::ssMassProps) { - datafile << ", "; - datafile << "Ixx, "; - datafile << "Iyy, "; - datafile << "Izz, "; - datafile << "Ixz, "; - datafile << "Mass, "; - datafile << "Xcg, Ycg, Zcg"; + if (SubSystems & ssMassProps) { + outstream << ", "; + outstream << "Ixx, "; + outstream << "Iyy, "; + outstream << "Izz, "; + outstream << "Ixz, "; + outstream << "Mass, "; + outstream << "Xcg, Ycg, Zcg"; } - if (SubSystems & FGAircraft::ssPosition) { - datafile << ", "; - datafile << "Altitude, "; - datafile << "Phi, Tht, Psi, "; - datafile << "Alpha, "; - datafile << "Latitude, "; - datafile << "Longitude, "; - datafile << "Distance AGL, "; - datafile << "Runway Radius"; + if (SubSystems & ssPosition) { + outstream << ", "; + outstream << "Altitude, "; + outstream << "Phi, Tht, Psi, "; + outstream << "Alpha, "; + outstream << "Beta, "; + outstream << "Latitude, "; + outstream << "Longitude, "; + outstream << "Distance AGL, "; + outstream << "Runway Radius"; } - if (SubSystems & FGAircraft::ssCoefficients) { - datafile << ", "; - datafile << Aircraft->GetCoefficientStrings(); + if (SubSystems & ssCoefficients) { + outstream << ", "; + outstream << Aerodynamics->GetCoefficientStrings(); } - if (SubSystems & FGAircraft::ssGroundReactions) { - datafile << ", "; - datafile << Aircraft->GetGroundReactionStrings(); + if (SubSystems & ssFCS) { + outstream << ", "; + outstream << FCS->GetComponentStrings(); } - if (SubSystems & FGAircraft::ssFCS) { - datafile << ", "; - datafile << FCS->GetComponentStrings(); + if (SubSystems & ssGroundReactions) { + outstream << ", "; + outstream << GroundReactions->GetGroundReactionStrings(); } - datafile << endl; - sFirstPass = false; + if (SubSystems & ssPropulsion && Propulsion->GetNumEngines() > 0) { + outstream << ", "; + outstream << Propulsion->GetPropulsionStrings(); + } + + outstream << endl; + dFirstPass = false; } - datafile << State->Getsim_time(); - if (SubSystems & FGAircraft::ssSimulation) { + outstream << State->Getsim_time(); + if (SubSystems & ssSimulation) { + } + if (SubSystems & ssAerosurfaces) { + outstream << ", "; + outstream << FCS->GetDaCmd() << ", "; + outstream << FCS->GetDeCmd() << ", "; + outstream << FCS->GetDrCmd() << ", "; + outstream << FCS->GetDfCmd() << ", "; + outstream << FCS->GetDaLPos() << ", "; + outstream << FCS->GetDaRPos() << ", "; + outstream << FCS->GetDePos() << ", "; + outstream << FCS->GetDrPos() << ", "; + outstream << FCS->GetDfPos(); } - if (SubSystems & FGAircraft::ssAerosurfaces) { - datafile << ", "; - datafile << FCS->GetThrottlePos(0) << ", "; - datafile << FCS->GetDaCmd() << ", "; - datafile << FCS->GetDeCmd() << ", "; - datafile << FCS->GetDrCmd() << ", "; - datafile << FCS->GetDaPos() << ", "; - datafile << FCS->GetDePos() << ", "; - datafile << FCS->GetDrPos(); + if (SubSystems & ssRates) { + outstream << ", "; + outstream << Rotation->GetPQR() << ", "; + outstream << Rotation->GetPQRdot(); } - if (SubSystems & FGAircraft::ssRates) { - datafile << ", "; - datafile << Rotation->GetPQR(); + if (SubSystems & ssVelocities) { + outstream << ", "; + outstream << Translation->Getqbar() << ", "; + outstream << Translation->GetVt() << ", "; + outstream << Translation->GetUVW() << ", "; + outstream << Translation->GetAeroUVW() << ", "; + outstream << Position->GetVel(); } - if (SubSystems & FGAircraft::ssVelocities) { - datafile << ", "; - datafile << Translation->Getqbar() << ", "; - datafile << Translation->GetVt() << ", "; - datafile << Translation->GetUVW() << ", "; - datafile << Position->GetVel(); + if (SubSystems & ssForces) { + outstream << ", "; + outstream << Aerodynamics->GetvFs() << ", "; + outstream << Aerodynamics->GetLoD() << ", "; + outstream << Aircraft->GetForces() << ", "; + outstream << Inertial->GetGravity() << ", "; + outstream << Inertial->GetCoriolis() << ", "; + outstream << Inertial->GetCentrifugal(); } - if (SubSystems & FGAircraft::ssForces) { - datafile << ", "; - datafile << Aircraft->GetvFs() << ", "; - datafile << Aircraft->GetForces(); + if (SubSystems & ssMoments) { + outstream << ", "; + outstream << Aircraft->GetMoments(); } - if (SubSystems & FGAircraft::ssMoments) { - datafile << ", "; - datafile << Aircraft->GetMoments(); + if (SubSystems & ssAtmosphere) { + outstream << ", "; + outstream << Atmosphere->GetDensity() << ", "; + outstream << Atmosphere->GetWindNED(); } - if (SubSystems & FGAircraft::ssAtmosphere) { - datafile << ", "; - datafile << Atmosphere->GetDensity(); + if (SubSystems & ssMassProps) { + outstream << ", "; + outstream << MassBalance->GetIxx() << ", "; + outstream << MassBalance->GetIyy() << ", "; + outstream << MassBalance->GetIzz() << ", "; + outstream << MassBalance->GetIxz() << ", "; + outstream << MassBalance->GetMass() << ", "; + outstream << MassBalance->GetXYZcg(); } - if (SubSystems & FGAircraft::ssMassProps) { - datafile << ", "; - datafile << Aircraft->GetIxx() << ", "; - datafile << Aircraft->GetIyy() << ", "; - datafile << Aircraft->GetIzz() << ", "; - datafile << Aircraft->GetIxz() << ", "; - datafile << Aircraft->GetMass() << ", "; - datafile << Aircraft->GetXYZcg(); + if (SubSystems & ssPosition) { + outstream << ", "; + outstream << Position->Geth() << ", "; + outstream << Rotation->GetEuler() << ", "; + outstream << Translation->Getalpha() << ", "; + outstream << Translation->Getbeta() << ", "; + outstream << Position->GetLatitude() << ", "; + outstream << Position->GetLongitude() << ", "; + outstream << Position->GetDistanceAGL() << ", "; + outstream << Position->GetRunwayRadius(); } - if (SubSystems & FGAircraft::ssPosition) { - datafile << ", "; - datafile << Position->Geth() << ", "; - datafile << Rotation->GetEuler() << ", "; - datafile << Translation->Getalpha() << ", "; - datafile << Position->GetLatitude() << ", "; - datafile << Position->GetLongitude() << ", "; - datafile << Position->GetDistanceAGL() << ", "; - datafile << Position->GetRunwayRadius(); + if (SubSystems & ssCoefficients) { + outstream << ", "; + outstream << Aerodynamics->GetCoefficientValues(); } - if (SubSystems & FGAircraft::ssCoefficients) { - datafile << ", "; - datafile << Aircraft->GetCoefficientValues(); + if (SubSystems & ssFCS) { + outstream << ", "; + outstream << FCS->GetComponentValues(); } - if (SubSystems & FGAircraft::ssGroundReactions) { - datafile << ", "; - datafile << Aircraft->GetGroundReactionValues(); + if (SubSystems & ssGroundReactions) { + outstream << ", "; + outstream << GroundReactions->GetGroundReactionValues(); } - if (SubSystems & FGAircraft::ssFCS) { - datafile << ", "; - datafile << FCS->GetComponentValues(); + if (SubSystems & ssPropulsion && Propulsion->GetNumEngines() > 0) { + outstream << ", "; + outstream << Propulsion->GetPropulsionValues(); } - datafile << endl; - datafile.flush(); + + outstream << endl; + outstream.flush(); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -423,8 +320,9 @@ void FGOutput::DelimitedOutput(string fname) void FGOutput::SocketOutput(void) { string asciiData; - /* + if (socket == NULL) return; + if (!socket->GetConnectStatus()) return; socket->Clear(); if (sFirstPass) { @@ -436,9 +334,12 @@ void FGOutput::SocketOutput(void) socket->Append("Psi"); socket->Append("Rho"); socket->Append("Vtotal"); - socket->Append("U"); - socket->Append("V"); - socket->Append("W"); + socket->Append("UBody"); + socket->Append("VBody"); + socket->Append("WBody"); + socket->Append("UAero"); + socket->Append("VAero"); + socket->Append("WAero"); socket->Append("Vn"); socket->Append("Ve"); socket->Append("Vd"); @@ -461,10 +362,11 @@ void FGOutput::SocketOutput(void) socket->Append("L"); socket->Append("M"); socket->Append("N"); - socket->Append("Throttle"); - socket->Append("Aileron"); - socket->Append("Elevator"); - socket->Append("Rudder"); + socket->Append("Throttle Position"); + socket->Append("Left Aileron Position"); + socket->Append("Right Aileron Position"); + socket->Append("Elevator Position"); + socket->Append("Rudder Position"); sFirstPass = false; socket->Send(); } @@ -477,36 +379,40 @@ void FGOutput::SocketOutput(void) socket->Append(Rotation->Getpsi()); socket->Append(Atmosphere->GetDensity()); socket->Append(Translation->GetVt()); - socket->Append(Translation->GetU()); - socket->Append(Translation->GetV()); - socket->Append(Translation->GetW()); + socket->Append(Translation->GetUVW(eU)); + socket->Append(Translation->GetUVW(eV)); + socket->Append(Translation->GetUVW(eW)); + socket->Append(Translation->GetAeroUVW(eU)); + socket->Append(Translation->GetAeroUVW(eV)); + socket->Append(Translation->GetAeroUVW(eW)); socket->Append(Position->GetVn()); socket->Append(Position->GetVe()); socket->Append(Position->GetVd()); - socket->Append(Translation->GetUdot()); - socket->Append(Translation->GetVdot()); - socket->Append(Translation->GetWdot()); - socket->Append(Rotation->GetP()); - socket->Append(Rotation->GetQ()); - socket->Append(Rotation->GetR()); - socket->Append(Rotation->GetPdot()); - socket->Append(Rotation->GetQdot()); - socket->Append(Rotation->GetRdot()); - socket->Append(Aircraft->GetFx()); - socket->Append(Aircraft->GetFy()); - socket->Append(Aircraft->GetFz()); + socket->Append(Translation->GetUVWdot(eU)); + socket->Append(Translation->GetUVWdot(eV)); + socket->Append(Translation->GetUVWdot(eW)); + socket->Append(Rotation->GetPQR(eP)); + socket->Append(Rotation->GetPQR(eQ)); + socket->Append(Rotation->GetPQR(eR)); + socket->Append(Rotation->GetPQRdot(eP)); + socket->Append(Rotation->GetPQRdot(eQ)); + socket->Append(Rotation->GetPQRdot(eR)); + socket->Append(Aircraft->GetForces(eX)); + socket->Append(Aircraft->GetForces(eY)); + socket->Append(Aircraft->GetForces(eZ)); socket->Append(Position->GetLatitude()); socket->Append(Position->GetLongitude()); socket->Append(Translation->Getqbar()); socket->Append(Translation->Getalpha()); - socket->Append(Aircraft->GetL()); - socket->Append(Aircraft->GetM()); - socket->Append(Aircraft->GetN()); - socket->Append(FCS->GetThrottle(0)); - socket->Append(FCS->GetDa()); - socket->Append(FCS->GetDe()); - socket->Append(FCS->GetDr()); - socket->Send(); */ + socket->Append(Aircraft->GetMoments(eL)); + socket->Append(Aircraft->GetMoments(eM)); + socket->Append(Aircraft->GetMoments(eN)); + socket->Append(FCS->GetThrottlePos(0)); + socket->Append(FCS->GetDaLPos()); + socket->Append(FCS->GetDaRPos()); + socket->Append(FCS->GetDePos()); + socket->Append(FCS->GetDrPos()); + socket->Send(); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -525,3 +431,130 @@ void FGOutput::SocketStatusOutput(string out_str) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +bool FGOutput::Load(FGConfigFile* AC_cfg) +{ + string token, parameter; + int OutRate = 0; + + token = AC_cfg->GetValue("NAME"); + Output->SetFilename(token); + token = AC_cfg->GetValue("TYPE"); + Output->SetType(token); + +#if defined( FG_WITH_JSBSIM_SOCKET ) || !defined( FGFS ) + if (token == "SOCKET") { + socket = new FGfdmSocket("localhost",1138); + } +#endif + + AC_cfg->GetNextConfigLine(); + + while ((token = AC_cfg->GetValue()) != string("/OUTPUT")) { + *AC_cfg >> parameter; + if (parameter == "RATE_IN_HZ") *AC_cfg >> OutRate; + if (parameter == "SIMULATION") { + *AC_cfg >> parameter; + if (parameter == "ON") SubSystems += ssSimulation; + } + if (parameter == "AEROSURFACES") { + *AC_cfg >> parameter; + if (parameter == "ON") SubSystems += ssAerosurfaces; + } + if (parameter == "RATES") { + *AC_cfg >> parameter; + if (parameter == "ON") SubSystems += ssRates; + } + if (parameter == "VELOCITIES") { + *AC_cfg >> parameter; + if (parameter == "ON") SubSystems += ssVelocities; + } + if (parameter == "FORCES") { + *AC_cfg >> parameter; + if (parameter == "ON") SubSystems += ssForces; + } + if (parameter == "MOMENTS") { + *AC_cfg >> parameter; + if (parameter == "ON") SubSystems += ssMoments; + } + if (parameter == "ATMOSPHERE") { + *AC_cfg >> parameter; + if (parameter == "ON") SubSystems += ssAtmosphere; + } + if (parameter == "MASSPROPS") { + *AC_cfg >> parameter; + if (parameter == "ON") SubSystems += ssMassProps; + } + if (parameter == "POSITION") { + *AC_cfg >> parameter; + if (parameter == "ON") SubSystems += ssPosition; + } + if (parameter == "COEFFICIENTS") { + *AC_cfg >> parameter; + if (parameter == "ON") SubSystems += ssCoefficients; + } + if (parameter == "GROUND_REACTIONS") { + *AC_cfg >> parameter; + if (parameter == "ON") SubSystems += ssGroundReactions; + } + if (parameter == "FCS") { + *AC_cfg >> parameter; + if (parameter == "ON") SubSystems += ssFCS; + } + if (parameter == "PROPULSION") { + *AC_cfg >> parameter; + if (parameter == "ON") SubSystems += ssPropulsion; + } + } + + OutRate = OutRate>120?120:(OutRate<0?0:OutRate); + rate = (int)(0.5 + 1.0/(State->Getdt()*OutRate)); + + return true; +} + +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +// The bitmasked value choices are as follows: +// unset: In this case (the default) JSBSim would only print +// out the normally expected messages, essentially echoing +// the config files as they are read. If the environment +// variable is not set, debug_lvl is set to 1 internally +// 0: This requests JSBSim not to output any messages +// whatsoever. +// 1: This value explicity requests the normal JSBSim +// startup messages +// 2: This value asks for a message to be printed out when +// a class is instantiated +// 4: When this value is set, a message is displayed when a +// FGModel object executes its Run() method +// 8: When this value is set, various runtime state variables +// are printed out periodically +// 16: When set various parameters are sanity checked and +// a message is printed out when they go out of bounds + +void FGOutput::Debug(int from) +{ + if (debug_lvl <= 0) return; + + if (debug_lvl & 1) { // Standard console startup message output + if (from == 0) { // Constructor + + } + } + if (debug_lvl & 2 ) { // Instantiation/Destruction notification + if (from == 0) cout << "Instantiated: FGOutput" << endl; + if (from == 1) cout << "Destroyed: FGOutput" << endl; + } + if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects + } + if (debug_lvl & 8 ) { // Runtime state variables + } + if (debug_lvl & 16) { // Sanity checking + } + if (debug_lvl & 64) { + if (from == 0) { // Constructor + cout << IdSrc << endl; + cout << IdHdr << endl; + } + } +} +