JSBSim Flight Dynamics Model  1.1.11 (13 Feb 2022)
An Open Source Flight Dynamics and Control Software Library in C++
FGOutputSocket.cpp
1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 
3  Module: FGOutputSocket.cpp
4  Author: Bertrand Coconnier
5  Date started: 09/10/11
6  Purpose: Manage output of sim parameters to a socket
7  Called by: FGOutput
8 
9  ------------- Copyright (C) 2011 Bertrand Coconnier -------------
10 
11  This program is free software; you can redistribute it and/or modify it under
12  the terms of the GNU Lesser General Public License as published by the Free Software
13  Foundation; either version 2 of the License, or (at your option) any later
14  version.
15 
16  This program is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
18  FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
19  details.
20 
21  You should have received a copy of the GNU Lesser General Public License along with
22  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
23  Place - Suite 330, Boston, MA 02111-1307, USA.
24 
25  Further information about the GNU Lesser General Public License can also be found on
26  the world wide web at http://www.gnu.org.
27 
28 FUNCTIONAL DESCRIPTION
29 --------------------------------------------------------------------------------
30 This is the place where you create output routines to dump data for perusal
31 later.
32 
33 HISTORY
34 --------------------------------------------------------------------------------
35 09/10/11 BC Created
36 
37 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38 INCLUDES
39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
40 
41 #include <cstring>
42 #include <cstdlib>
43 
44 #include "FGOutputSocket.h"
45 #include "FGFDMExec.h"
46 #include "models/FGAerodynamics.h"
47 #include "models/FGAccelerations.h"
48 #include "models/FGAircraft.h"
49 #include "models/FGAtmosphere.h"
50 #include "models/FGAuxiliary.h"
51 #include "models/FGPropulsion.h"
52 #include "models/FGMassBalance.h"
53 #include "models/FGPropagate.h"
54 #include "models/FGGroundReactions.h"
55 #include "models/FGFCS.h"
56 #include "models/atmosphere/FGWinds.h"
57 #include "input_output/FGXMLElement.h"
58 #include "math/FGPropertyValue.h"
59 
60 using namespace std;
61 
62 namespace JSBSim {
63 
64 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
65 CLASS IMPLEMENTATION
66 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
67 
68 FGOutputSocket::FGOutputSocket(FGFDMExec* fdmex) :
69  FGOutputType(fdmex),
70  socket(0)
71 {
72 }
73 
74 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
75 
77 {
78  delete socket;
79 }
80 
81 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
82 
83 void FGOutputSocket::SetOutputName(const string& fname)
84 {
85  // tokenize the output name
86  size_t dot_pos = fname.find(':', 0);
87  size_t slash_pos = fname.find('/', 0);
88 
89  string name = fname.substr(0, dot_pos);
90 
91  string proto = "TCP";
92  if(dot_pos + 1 < slash_pos)
93  proto = fname.substr(dot_pos + 1, slash_pos - dot_pos - 1);
94 
95  string port = "1138";
96  if(slash_pos < string::npos)
97  port = fname.substr(slash_pos + 1, string::npos);
98 
99  // set the model name
100  Name = name + ":" + port + "/" + proto;
101 
102  // set the socket params
103  SockName = name;
104 
105  SockPort = atoi(port.c_str());
106 
107  if (to_upper(proto) == "UDP")
108  SockProtocol = FGfdmSocket::ptUDP;
109  else // Default to TCP
110  SockProtocol = FGfdmSocket::ptTCP;
111 }
112 
113 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
114 
116 {
117  if (!FGOutputType::Load(el))
118  return false;
119 
120  SetOutputName(el->GetAttributeValue("name") + ":" +
121  el->GetAttributeValue("protocol") + "/" +
122  el->GetAttributeValue("port"));
123 
124  // Check if output precision for doubles has been specified, default to 7 if not
125  if(el->HasAttribute("precision"))
126  precision = (int)el->GetAttributeValueAsNumber("precision");
127  else
128  precision = 7;
129 
130  return true;
131 }
132 
133 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
134 
136 {
137  if (FGOutputType::InitModel()) {
138  delete socket;
139  socket = new FGfdmSocket(SockName, SockPort, SockProtocol, precision);
140 
141  if (socket == 0) return false;
142  if (!socket->GetConnectStatus()) return false;
143 
144  PrintHeaders();
145 
146  return true;
147  }
148 
149  return false;
150 }
151 
152 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
153 
154 void FGOutputSocket::PrintHeaders(void)
155 {
156  string scratch;
157 
158  socket->Clear();
159  socket->Clear("<LABELS>");
160  socket->Append("Time");
161 
162  if (SubSystems & ssAerosurfaces) {
163  socket->Append("Aileron Command");
164  socket->Append("Elevator Command");
165  socket->Append("Rudder Command");
166  socket->Append("Flap Command");
167  socket->Append("Left Aileron Position");
168  socket->Append("Right Aileron Position");
169  socket->Append("Elevator Position");
170  socket->Append("Rudder Position");
171  socket->Append("Flap Position");
172  }
173 
174  if (SubSystems & ssRates) {
175  socket->Append("P");
176  socket->Append("Q");
177  socket->Append("R");
178  socket->Append("PDot");
179  socket->Append("QDot");
180  socket->Append("RDot");
181  }
182 
183  if (SubSystems & ssVelocities) {
184  socket->Append("QBar");
185  socket->Append("Vtotal");
186  socket->Append("UBody");
187  socket->Append("VBody");
188  socket->Append("WBody");
189  socket->Append("UAero");
190  socket->Append("VAero");
191  socket->Append("WAero");
192  socket->Append("Vn");
193  socket->Append("Ve");
194  socket->Append("Vd");
195  }
196 
197  if (SubSystems & ssForces) {
198  socket->Append("F_Drag");
199  socket->Append("F_Side");
200  socket->Append("F_Lift");
201  socket->Append("LoD");
202  socket->Append("Fx");
203  socket->Append("Fy");
204  socket->Append("Fz");
205  }
206 
207  if (SubSystems & ssMoments) {
208  socket->Append("L");
209  socket->Append("M");
210  socket->Append("N");
211  }
212 
213  if (SubSystems & ssAtmosphere) {
214  socket->Append("Rho");
215  socket->Append("SL pressure");
216  socket->Append("Ambient pressure");
217  socket->Append("Turbulence Magnitude");
218  socket->Append("Turbulence Direction");
219  socket->Append("NWind");
220  socket->Append("EWind");
221  socket->Append("DWind");
222  }
223 
224  if (SubSystems & ssMassProps) {
225  socket->Append("Ixx");
226  socket->Append("Ixy");
227  socket->Append("Ixz");
228  socket->Append("Iyx");
229  socket->Append("Iyy");
230  socket->Append("Iyz");
231  socket->Append("Izx");
232  socket->Append("Izy");
233  socket->Append("Izz");
234  socket->Append("Mass");
235  socket->Append("Xcg");
236  socket->Append("Ycg");
237  socket->Append("Zcg");
238  }
239 
240  if (SubSystems & ssPropagate) {
241  socket->Append("Altitude");
242  socket->Append("Phi (deg)");
243  socket->Append("Tht (deg)");
244  socket->Append("Psi (deg)");
245  socket->Append("Alpha (deg)");
246  socket->Append("Beta (deg)");
247  socket->Append("Latitude (deg)");
248  socket->Append("Longitude (deg)");
249  }
250 
251  if (SubSystems & ssAeroFunctions) {
252  scratch = Aerodynamics->GetAeroFunctionStrings(",");
253  if (scratch.length() != 0) socket->Append(scratch);
254  }
255 
256  if (SubSystems & ssFCS) {
257  scratch = FCS->GetComponentStrings(",");
258  if (scratch.length() != 0) socket->Append(scratch);
259  }
260 
261  if (SubSystems & ssGroundReactions)
262  socket->Append(GroundReactions->GetGroundReactionStrings(","));
263 
264  if (SubSystems & ssPropulsion && Propulsion->GetNumEngines() > 0)
265  socket->Append(Propulsion->GetPropulsionStrings(","));
266 
267  for (unsigned int i=0;i<OutputParameters.size();++i) {
268  if (!OutputCaptions[i].empty())
269  socket->Append(OutputCaptions[i]);
270  else
271  socket->Append(OutputParameters[i]->GetPrintableName());
272  }
273 
274  socket->Send();
275 }
276 
277 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
278 
280 {
281  string asciiData, scratch;
282 
283  if (socket == 0) return;
284  if (!socket->GetConnectStatus()) return;
285 
286  socket->Clear();
287  socket->Append(FDMExec->GetSimTime());
288 
289  if (SubSystems & ssAerosurfaces) {
290  socket->Append(FCS->GetDaCmd());
291  socket->Append(FCS->GetDeCmd());
292  socket->Append(FCS->GetDrCmd());
293  socket->Append(FCS->GetDfCmd());
294  socket->Append(FCS->GetDaLPos());
295  socket->Append(FCS->GetDaRPos());
296  socket->Append(FCS->GetDePos());
297  socket->Append(FCS->GetDrPos());
298  socket->Append(FCS->GetDfPos());
299  }
300  if (SubSystems & ssRates) {
301  socket->Append(radtodeg*Propagate->GetPQR(eP));
302  socket->Append(radtodeg*Propagate->GetPQR(eQ));
303  socket->Append(radtodeg*Propagate->GetPQR(eR));
304  socket->Append(radtodeg*Accelerations->GetPQRdot(eP));
305  socket->Append(radtodeg*Accelerations->GetPQRdot(eQ));
306  socket->Append(radtodeg*Accelerations->GetPQRdot(eR));
307  }
308  if (SubSystems & ssVelocities) {
309  socket->Append(Auxiliary->Getqbar());
310  socket->Append(Auxiliary->GetVt());
311  socket->Append(Propagate->GetUVW(eU));
312  socket->Append(Propagate->GetUVW(eV));
313  socket->Append(Propagate->GetUVW(eW));
314  socket->Append(Auxiliary->GetAeroUVW(eU));
315  socket->Append(Auxiliary->GetAeroUVW(eV));
316  socket->Append(Auxiliary->GetAeroUVW(eW));
317  socket->Append(Propagate->GetVel(eNorth));
318  socket->Append(Propagate->GetVel(eEast));
319  socket->Append(Propagate->GetVel(eDown));
320  }
321  if (SubSystems & ssForces) {
322  socket->Append(Aerodynamics->GetvFw()(eDrag));
323  socket->Append(Aerodynamics->GetvFw()(eSide));
324  socket->Append(Aerodynamics->GetvFw()(eLift));
325  socket->Append(Aerodynamics->GetLoD());
326  socket->Append(Aircraft->GetForces(eX));
327  socket->Append(Aircraft->GetForces(eY));
328  socket->Append(Aircraft->GetForces(eZ));
329  }
330  if (SubSystems & ssMoments) {
331  socket->Append(Aircraft->GetMoments(eL));
332  socket->Append(Aircraft->GetMoments(eM));
333  socket->Append(Aircraft->GetMoments(eN));
334  }
335  if (SubSystems & ssAtmosphere) {
336  socket->Append(Atmosphere->GetDensity());
337  socket->Append(Atmosphere->GetPressureSL());
338  socket->Append(Atmosphere->GetPressure());
339  socket->Append(Winds->GetTurbMagnitude());
340  socket->Append(Winds->GetTurbDirection());
341  socket->Append(Winds->GetTotalWindNED().Dump(","));
342  }
343  if (SubSystems & ssMassProps) {
344  socket->Append(MassBalance->GetJ()(1,1));
345  socket->Append(MassBalance->GetJ()(1,2));
346  socket->Append(MassBalance->GetJ()(1,3));
347  socket->Append(MassBalance->GetJ()(2,1));
348  socket->Append(MassBalance->GetJ()(2,2));
349  socket->Append(MassBalance->GetJ()(2,3));
350  socket->Append(MassBalance->GetJ()(3,1));
351  socket->Append(MassBalance->GetJ()(3,2));
352  socket->Append(MassBalance->GetJ()(3,3));
353  socket->Append(MassBalance->GetMass());
354  socket->Append(MassBalance->GetXYZcg()(eX));
355  socket->Append(MassBalance->GetXYZcg()(eY));
356  socket->Append(MassBalance->GetXYZcg()(eZ));
357  }
358  if (SubSystems & ssPropagate) {
359  socket->Append(Propagate->GetAltitudeASL());
360  socket->Append(radtodeg*Propagate->GetEuler(ePhi));
361  socket->Append(radtodeg*Propagate->GetEuler(eTht));
362  socket->Append(radtodeg*Propagate->GetEuler(ePsi));
363  socket->Append(Auxiliary->Getalpha(inDegrees));
364  socket->Append(Auxiliary->Getbeta(inDegrees));
365  socket->Append(Propagate->GetLocation().GetLatitudeDeg());
366  socket->Append(Propagate->GetLocation().GetLongitudeDeg());
367  }
368  if (SubSystems & ssAeroFunctions) {
369  scratch = Aerodynamics->GetAeroFunctionValues(",");
370  if (scratch.length() != 0) socket->Append(scratch);
371  }
372  if (SubSystems & ssFCS) {
373  scratch = FCS->GetComponentValues(",");
374  if (scratch.length() != 0) socket->Append(scratch);
375  }
376  if (SubSystems & ssGroundReactions) {
377  socket->Append(GroundReactions->GetGroundReactionValues(","));
378  }
379  if (SubSystems & ssPropulsion && Propulsion->GetNumEngines() > 0) {
380  socket->Append(Propulsion->GetPropulsionValues(","));
381  }
382 
383  for (unsigned int i=0;i<OutputParameters.size();++i) {
384  socket->Append(OutputParameters[i]->GetValue());
385  }
386 
387  socket->Send();
388 }
389 
390 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
391 
392 void FGOutputSocket::SocketStatusOutput(const string& out_str)
393 {
394  string asciiData;
395 
396  if (socket == 0) return;
397 
398  socket->Clear();
399  asciiData = string("<STATUS>") + out_str;
400  socket->Append(asciiData.c_str());
401  socket->Send();
402 }
403 }
JSBSim::FGOutputType::ssMoments
@ ssMoments
Subsystem: Moments (= 32)
Definition: FGOutputType.h:181
JSBSim::FGFDMExec
Encapsulates the JSBSim simulation executive.
Definition: FGFDMExec.h:185
JSBSim::FGPropagate::GetAltitudeASL
double GetAltitudeASL(void) const
Returns the current altitude above sea level.
Definition: FGPropagate.cpp:523
JSBSim::FGLocation::GetLongitudeDeg
double GetLongitudeDeg() const
Get the longitude.
Definition: FGLocation.h:240
JSBSim::FGfdmSocket
Encapsulates an object that enables JSBSim to communicate via socket (input and/or output).
Definition: FGfdmSocket.h:70
JSBSim::FGOutputType
Abstract class to provide functions generic to all the output directives.
Definition: FGOutputType.h:90
JSBSim::FGLocation::GetLatitudeDeg
double GetLatitudeDeg() const
Get the GEOCENTRIC latitude in degrees.
Definition: FGLocation.h:267
JSBSim::FGOutputType::ssAeroFunctions
@ ssAeroFunctions
Subsystem: Coefficients (= 256)
Definition: FGOutputType.h:184
JSBSim::FGAtmosphere::GetPressure
virtual double GetPressure(void) const
Returns the pressure in psf.
Definition: FGAtmosphere.h:144
JSBSim::Element::HasAttribute
bool HasAttribute(const std::string &key)
Determines if an element has the supplied attribute.
Definition: FGXMLElement.h:155
JSBSim::Element::GetAttributeValue
std::string GetAttributeValue(const std::string &key)
Retrieves an attribute.
Definition: FGXMLElement.cpp:260
JSBSim::FGOutputSocket::InitModel
bool InitModel(void) override
Initializes the instance.
Definition: FGOutputSocket.cpp:135
JSBSim::FGFCS::GetDeCmd
double GetDeCmd(void) const
Gets the elevator command.
Definition: FGFCS.h:216
JSBSim::FGOutputSocket::Print
void Print(void) override
Generates the output.
Definition: FGOutputSocket.cpp:279
JSBSim::FGWinds::GetTotalWindNED
virtual const FGColumnVector3 & GetTotalWindNED(void) const
Retrieves the total wind components in NED frame.
Definition: FGWinds.h:187
JSBSim::FGOutputType::ssAtmosphere
@ ssAtmosphere
Subsystem: Atmosphere (= 64)
Definition: FGOutputType.h:182
JSBSim::FGAerodynamics::GetvFw
const FGColumnVector3 & GetvFw(void) const
Retrieves the aerodynamic forces in the wind axes.
Definition: FGAerodynamics.h:171
JSBSim::FGColumnVector3::Dump
std::string Dump(const std::string &delimeter) const
Prints the contents of the vector.
Definition: FGColumnVector3.cpp:63
JSBSim::FGFDMExec::GetSimTime
double GetSimTime(void) const
Returns the cumulative simulation time in seconds.
Definition: FGFDMExec.h:542
JSBSim::FGOutputType::InitModel
bool InitModel(void) override
Init the output model according to its configitation.
Definition: FGOutputType.cpp:178
JSBSim::FGFCS::GetDfPos
double GetDfPos(int form=ofRad) const
Gets the flaps position.
Definition: FGFCS.h:314
JSBSim::FGFCS::GetDfCmd
double GetDfCmd(void) const
Gets the flaps command.
Definition: FGFCS.h:228
JSBSim::FGAuxiliary::GetVt
double GetVt(void) const
Gets the magnitude of total vehicle velocity including wind effects in feet per second.
Definition: FGAuxiliary.h:204
JSBSim::FGFCS::GetDaCmd
double GetDaCmd(void) const
Gets the aileron command.
Definition: FGFCS.h:212
JSBSim::FGFCS::GetComponentStrings
std::string GetComponentStrings(const std::string &delimiter) const
Retrieves all component names for inclusion in output stream.
Definition: FGFCS.cpp:624
JSBSim::FGOutputType::ssPropagate
@ ssPropagate
Subsystem: Propagate (= 512)
Definition: FGOutputType.h:185
JSBSim::FGOutputSocket::Load
bool Load(Element *el) override
Init the output directives from an XML file.
Definition: FGOutputSocket.cpp:115
JSBSim::FGPropagate::GetPQR
const FGColumnVector3 & GetPQR(void) const
Retrieves the body angular rates vector, relative to the ECEF frame.
Definition: FGPropagate.h:209
JSBSim::FGOutputType::ssMassProps
@ ssMassProps
Subsystem: Mass Properties (= 128)
Definition: FGOutputType.h:183
JSBSim::FGFCS::GetDePos
double GetDePos(int form=ofRad) const
Gets the elevator position.
Definition: FGFCS.h:294
JSBSim::FGPropagate::GetVel
const FGColumnVector3 & GetVel(void) const
Retrieves the velocity vector.
Definition: FGPropagate.h:183
JSBSim::FGOutputType::ssRates
@ ssRates
Subsystem: Body rates (= 4)
Definition: FGOutputType.h:178
JSBSim::FGAerodynamics::GetLoD
double GetLoD(void) const
Retrieves the lift over drag ratio.
Definition: FGAerodynamics.h:208
JSBSim::FGOutputType::ssForces
@ ssForces
Subsystem: Forces (= 16)
Definition: FGOutputType.h:180
JSBSim::FGOutputType::ssFCS
@ ssFCS
Subsystem: FCS (= 2048)
Definition: FGOutputType.h:187
JSBSim::FGOutputType::ssPropulsion
@ ssPropulsion
Subsystem: Propulsion (= 4096)
Definition: FGOutputType.h:188
JSBSim::Element::GetAttributeValueAsNumber
double GetAttributeValueAsNumber(const std::string &key)
Retrieves an attribute value as a double precision real number.
Definition: FGXMLElement.cpp:279
JSBSim::FGFCS::GetComponentValues
std::string GetComponentValues(const std::string &delimiter) const
Retrieves all component outputs for inclusion in output stream.
Definition: FGFCS.cpp:647
JSBSim::FGPropulsion::GetNumEngines
unsigned int GetNumEngines(void) const
Retrieves the number of engines defined for the aircraft.
Definition: FGPropulsion.h:127
JSBSim::FGOutputType::ssAerosurfaces
@ ssAerosurfaces
Subsystem: Aerosurfaces (= 2)
Definition: FGOutputType.h:177
JSBSim::FGOutputType::ssGroundReactions
@ ssGroundReactions
Subsystem: Ground Reactions (= 1024)
Definition: FGOutputType.h:186
JSBSim::FGFCS::GetDrCmd
double GetDrCmd(void) const
Gets the rudder command.
Definition: FGFCS.h:220
JSBSim::FGAerodynamics::GetAeroFunctionValues
std::string GetAeroFunctionValues(const std::string &delimeter) const
Gets the aero function values.
Definition: FGAerodynamics.cpp:549
JSBSim::FGFCS::GetDaRPos
double GetDaRPos(int form=ofRad) const
Gets the right aileron position.
Definition: FGFCS.h:289
JSBSim::FGOutputSocket::SetOutputName
void SetOutputName(const std::string &name) override
Overwrites the name identifier under which the output will be logged.
Definition: FGOutputSocket.cpp:83
JSBSim::FGAerodynamics::GetAeroFunctionStrings
std::string GetAeroFunctionStrings(const std::string &delimeter) const
Gets the strings for the current set of aero functions.
Definition: FGAerodynamics.cpp:517
JSBSim::FGPropagate::GetUVW
const FGColumnVector3 & GetUVW(void) const
Retrieves the body frame vehicle velocity vector.
Definition: FGPropagate.h:195
JSBSim::FGPropagate::GetEuler
const FGColumnVector3 & GetEuler(void) const
Retrieves the Euler angles that define the vehicle orientation.
Definition: FGPropagate.h:251
JSBSim::FGMassBalance::GetXYZcg
const FGColumnVector3 & GetXYZcg(void) const
Returns the coordinates of the center of gravity expressed in the structural frame.
Definition: FGMassBalance.h:146
JSBSim::FGMassBalance::GetJ
const FGMatrix33 & GetJ(void) const
Returns the inertia matrix expressed in the body frame.
Definition: FGMassBalance.h:193
JSBSim::FGOutputSocket::SocketStatusOutput
void SocketStatusOutput(const std::string &out_str)
Outputs a status thru the socket.
Definition: FGOutputSocket.cpp:392
JSBSim::FGOutputSocket::~FGOutputSocket
~FGOutputSocket() override
Destructor.
Definition: FGOutputSocket.cpp:76
JSBSim::FGAccelerations::GetPQRdot
const FGColumnVector3 & GetPQRdot(void) const
Retrieves the body axis angular acceleration vector.
Definition: FGAccelerations.h:161
JSBSim::FGAtmosphere::GetDensity
virtual double GetDensity(void) const
Returns the density in slugs/ft^3.
Definition: FGAtmosphere.h:167
JSBSim::FGFCS::GetDaLPos
double GetDaLPos(int form=ofRad) const
Gets the left aileron position.
Definition: FGFCS.h:284
JSBSim::FGOutputType::Load
bool Load(Element *el) override
Init the output directives from an XML file (implement the FGModel interface).
Definition: FGOutputType.cpp:102
JSBSim::FGOutputType::ssVelocities
@ ssVelocities
Subsystem: Velocities (= 8)
Definition: FGOutputType.h:179
JSBSim::Element
Definition: FGXMLElement.h:143
JSBSim::FGFCS::GetDrPos
double GetDrPos(int form=ofRad) const
Gets the rudder position.
Definition: FGFCS.h:299