JSBSim Flight Dynamics Model 1.3.3 (16 Oct 2026)
An Open Source Flight Dynamics and Control Software Library in C++
Loading...
Searching...
No Matches
FGInput Class Reference

Detailed Description

Handles simulation input.

INPUT section definition

The following specifies the way that JSBSim writes out data.

    NAME is the filename you want the input to come from

    TYPE can be:
      SOCKET      Will eventually send data to a socket input, where NAME
                  would then be the IP address of the machine the data should
                  be sent to. DON'T USE THIS YET!
      NONE        Specifies to do nothing. This setting makes it easy to turn on and
                  off the data input without having to mess with anything else.

      Examples:
<input type="SOCKET" port="4321"/>


The class FGInput is the manager of the inputs requested by the user. It
manages a list of instances derived from the abstract class FGInputType.

Definition at line 84 of file FGInput.h.

#include <FGInput.h>

+ Inheritance diagram for FGInput:
+ Collaboration diagram for FGInput:

Public Member Functions

 FGInput (FGFDMExec *)
 
void Disable (void)
 Disables the input generation for all input instances.
 
void Enable (void)
 Enables the input generation for all input instances.
 
std::string GetInputName (unsigned int idx) const
 Get the name identifier to which the input will be directed.
 
bool InitModel (void) override
 Initializes the instance.
 
bool Load (Element *el) override
 Load the input directives and adds a new input instance to the Input Manager list.
 
bool Run (bool Holding) override
 Runs the Input model; called by the Executive Can pass in a value indicating if the executive is directing the simulation to Hold.
 
bool SetDirectivesFile (const SGPath &fname)
 Adds a new input instance to the Input Manager.
 
bool SetInputName (unsigned int idx, const std::string &name)
 Overwrites the name identifier under which the input will be logged.
 
bool Toggle (int idx)
 Toggles the input generation of each input instance.
 
- Public Member Functions inherited from FGModel
 FGModel (FGFDMExec *, const std::string &name)
 Constructor.
 
 ~FGModel () override
 Destructor.
 
virtual SGPath FindFullPathName (const SGPath &path) const
 
FGFDMExec * GetExec (void) const
 
const std::string & GetName (void) const
 
unsigned int GetRate (void) const
 Get the output rate for the model in frames.
 
bool InitModel (void) override
 
void SetPropertyManager (std::shared_ptr< FGPropertyManager > fgpm)
 
void SetRate (unsigned int tt)
 Set the ouput rate for the model in frames.
 
- Public Member Functions inherited from FGModelFunctions
std::string GetFunctionStrings (const std::string &delimeter) const
 Gets the strings for the current set of functions.
 
std::string GetFunctionValues (const std::string &delimeter) const
 Gets the function values.
 
std::shared_ptr< FGFunction > GetPreFunction (const std::string &name)
 Get one of the "pre" function.
 
bool Load (Element *el, FGFDMExec *fdmex, std::string prefix="")
 
void PostLoad (Element *el, FGFDMExec *fdmex, std::string prefix="")
 
void PreLoad (Element *el, FGFDMExec *fdmex, std::string prefix="")
 
void RunPostFunctions (void)
 
void RunPreFunctions (void)
 
- Public Member Functions inherited from FGJSBBase
 FGJSBBase ()
 Constructor for FGJSBBase.
 
virtual ~FGJSBBase ()
 Destructor for FGJSBBase.
 

Additional Inherited Members

- Public Types inherited from FGJSBBase
enum  { eL = 1 , eM , eN }
 Moments L, M, N. More...
 
enum  { eP = 1 , eQ , eR }
 Rates P, Q, R. More...
 
enum  { eU = 1 , eV , eW }
 Velocities U, V, W. More...
 
enum  { eX = 1 , eY , eZ }
 Positions X, Y, Z. More...
 
enum  { ePhi = 1 , eTht , ePsi }
 Euler angles Phi, Theta, Psi. More...
 
enum  { eDrag = 1 , eSide , eLift }
 Stability axis forces, Drag, Side force, Lift. More...
 
enum  { eRoll = 1 , ePitch , eYaw }
 Local frame orientation Roll, Pitch, Yaw. More...
 
enum  { eNorth = 1 , eEast , eDown }
 Local frame position North, East, Down. More...
 
enum  { eLat = 1 , eLong , eRad }
 Locations Radius, Latitude, Longitude. More...
 
enum  {
  inNone = 0 , inDegrees , inRadians , inMeters ,
  inFeet
}
 Conversion specifiers. More...
 
- Static Public Member Functions inherited from FGJSBBase
static constexpr double CelsiusToFahrenheit (double celsius)
 Converts from degrees Celsius to degrees Fahrenheit.
 
static constexpr double CelsiusToKelvin (double celsius)
 Converts from degrees Celsius to degrees Kelvin.
 
static constexpr double CelsiusToRankine (double celsius)
 Converts from degrees Celsius to degrees Rankine.
 
static constexpr double Constrain (double min, double value, double max)
 Constrain a value between a minimum and a maximum value.
 
static bool EqualToRoundoff (double a, double b)
 Finite precision comparison.
 
static bool EqualToRoundoff (double a, float b)
 Finite precision comparison.
 
static bool EqualToRoundoff (float a, double b)
 Finite precision comparison.
 
static bool EqualToRoundoff (float a, float b)
 Finite precision comparison.
 
static constexpr double FahrenheitToCelsius (double fahrenheit)
 Converts from degrees Fahrenheit to degrees Celsius.
 
static constexpr double FeetToMeters (double measure)
 Converts from feet to meters.
 
static const std::string & GetVersion (void)
 Returns the version number of JSBSim.
 
static constexpr double KelvinToCelsius (double kelvin)
 Converts from degrees Kelvin to degrees Celsius.
 
static constexpr double KelvinToFahrenheit (double kelvin)
 Converts from degrees Kelvin to degrees Fahrenheit.
 
static constexpr double KelvinToRankine (double kelvin)
 Converts from degrees Kelvin to degrees Rankine.
 
static constexpr double RankineToCelsius (double rankine)
 Converts from degrees Rankine to degrees Celsius.
 
static constexpr double RankineToKelvin (double rankine)
 Converts from degrees Rankine to degrees Kelvin.
 
static constexpr double sign (double num)
 
- Static Public Attributes inherited from FGJSBBase
static short debug_lvl = 1
 
- Protected Member Functions inherited from FGModel
bool Upload (Element *el, bool preLoad)
 Uploads this model in memory.
 
- Static Protected Member Functions inherited from FGJSBBase
static std::string CreateIndexedPropertyName (const std::string &Property, int index)
 
- Protected Attributes inherited from FGModel
bool enabled = true
 
unsigned int exe_ctr
 
FGFDMExec * FDMExec
 
std::string Name
 
std::shared_ptr< FGPropertyManager > PropertyManager
 
unsigned int rate
 
- Protected Attributes inherited from FGModelFunctions
FGPropertyReader LocalProperties
 
std::vector< std::shared_ptr< FGFunction > > PostFunctions
 
std::vector< std::shared_ptr< FGFunction > > PreFunctions
 
- Static Protected Attributes inherited from FGJSBBase
static constexpr double degtorad = M_PI / 180.
 
static constexpr double fpstokts = 1.0 / ktstofps
 
static constexpr double fttom = 0.3048
 
static constexpr double hptoftlbssec = 550.0
 
static constexpr double in3tom3 = inchtoft*inchtoft*inchtoft/m3toft3
 
static constexpr double inchtoft = 1.0/12.0
 
static constexpr double inhgtopa = 3386.38
 
static const std::string JSBSim_version = JSBSIM_VERSION " " __DATE__ " " __TIME__
 
static constexpr double kgtolb = 2.20462
 
static constexpr double kgtoslug = 0.06852168
 
static constexpr double ktstofps = 1852./(3600*fttom)
 
static constexpr double lbtoslug = 1.0/slugtolb
 
static constexpr double m3toft3 = 1.0/(fttom*fttom*fttom)
 
static const std::string needed_cfg_version = "2.0"
 
static constexpr double psftoinhg = 0.014138
 
static constexpr double psftopa = 47.88
 
static constexpr double radtodeg = 180. / M_PI
 
static constexpr double slugtolb = 32.174049
 Note that definition of lbtoslug by the inverse of slugtolb and not to a different constant you can also get from some tables will make lbtoslug*slugtolb == 1 up to the magnitude of roundoff.
 

Constructor & Destructor Documentation

◆ FGInput()

FGInput ( FGFDMExec *  fdmex)

Definition at line 57 of file FGInput.cpp.

57 : FGModel(fdmex, "FGInput")
58{
59 enabled = true;
60
61 Debug(0);
62}
FGModel(FGFDMExec *, const std::string &name)
Constructor.
Definition FGModel.cpp:59

◆ ~FGInput()

~FGInput ( )
override

Definition at line 66 of file FGInput.cpp.

67{
68 vector<FGInputType*>::iterator it;
69 for (it = InputTypes.begin(); it != InputTypes.end(); ++it)
70 delete (*it);
71
72 Debug(1);
73}

Member Function Documentation

◆ Disable()

void Disable ( void  )

Disables the input generation for all input instances.

Definition at line 215 of file FGInput.cpp.

216{
217 enabled = false;
218 for (auto input : InputTypes)
219 input->Disable();
220}
void Disable(void)
Disables the input generation for all input instances.
Definition FGInput.cpp:215

◆ Enable()

void Enable ( void  )

Enables the input generation for all input instances.

Definition at line 207 of file FGInput.cpp.

208{
209 enabled = true;
210 for (auto input : InputTypes)
211 input->Enable();
212}
void Enable(void)
Enables the input generation for all input instances.
Definition FGInput.cpp:207

◆ GetInputName()

string GetInputName ( unsigned int  idx) const

Get the name identifier to which the input will be directed.

Parameters
idxID of the input instance from which the name identifier must be obtained
Returns
the name identifier.

Definition at line 195 of file FGInput.cpp.

196{
197 string name;
198
199 if (idx < InputTypes.size())
200 name = InputTypes[idx]->GetInputName();
201 return name;
202}

◆ InitModel()

bool InitModel ( void  )
overridevirtual

Initializes the instance.

This method is called by FGFDMExec::RunIC(). This is were the initialization of all classes derived from FGInputType takes place. It is important that this method is not called prior to FGFDMExec::RunIC() so that the initialization process can be executed properly.

Returns
true if the execution succeeded.

Reimplemented from FGModelFunctions.

Definition at line 125 of file FGInput.cpp.

126{
127 bool ret = false;
128
129 if (!FGModel::InitModel()) return false;
130
131 vector<FGInputType*>::iterator it;
132 for (it = InputTypes.begin(); it != InputTypes.end(); ++it)
133 ret &= (*it)->InitModel();
134
135 return ret;
136}

◆ Load()

bool Load ( Element *  el)
overridevirtual

Load the input directives and adds a new input instance to the Input Manager list.

Parameters
elXMLElement that is pointing to the input directives
Returns
true if the execution succeeded.

Reimplemented from FGModel.

Definition at line 77 of file FGInput.cpp.

78{
79 // Unlike the other FGModel classes, properties listed in the <input> section
80 // are not intended to create new properties. For that reason, FGInput
81 // cannot load its XML directives with FGModel::Load().
82 // Instead FGModelLoader::Open() and FGModel::PreLoad() must be explicitely
83 // called.
84 FGModelLoader ModelLoader(this);
85 Element* element = ModelLoader.Open(el);
86
87 if (!element) return false;
88
89 FGModel::PreLoad(element, FDMExec);
90
91 size_t idx = InputTypes.size();
92 string type = element->GetAttributeValue("type");
93 FGInputType* Input = 0;
94
95 if (debug_lvl > 0) {
96 FGLogging log(LogLevel::DEBUG);
97 log << endl << " Input data set: " << idx << " " << endl;
98 }
99
100 type = to_upper(type);
101
102 if (type.empty() || type == "SOCKET") {
103 Input = new FGInputSocket(FDMExec, enabled);
104 } else if (type == "QTJSBSIM") {
105 Input = new FGUDPInputSocket(FDMExec, enabled);
106 } else if (type != string("NONE")) {
107 FGXMLLogging log(element, LogLevel::ERROR);
108 log << "Unknown type of input specified in config file" << endl;
109 }
110
111 if (!Input) return false;
112
113 Input->SetIdx(idx);
114 Input->Load(element);
115 PostLoad(element, FDMExec);
116
117 InputTypes.push_back(Input);
118
119 Debug(2);
120 return true;
121}
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Run()

bool Run ( bool  Holding)
overridevirtual

Runs the Input model; called by the Executive Can pass in a value indicating if the executive is directing the simulation to Hold.

Parameters
Holdingif true, the executive has been directed to hold the sim from advancing time. Some models may ignore this flag, such as the Input model, which may need to be active to listen on a socket for the "Resume" command to be given.
Returns
false if no error

Reimplemented from FGModel.

Definition at line 140 of file FGInput.cpp.

141{
142 if (FDMExec->GetTrimStatus()) return true;
143 if (FGModel::Run(Holding)) return true;
144
145 vector<FGInputType*>::iterator it;
146 for (it = InputTypes.begin(); it != InputTypes.end(); ++it)
147 (*it)->Run(Holding);
148
149 return false;
150}
virtual bool Run(bool Holding)
Runs the model; called by the Executive.
Definition FGModel.cpp:101

◆ SetDirectivesFile()

bool SetDirectivesFile ( const SGPath &  fname)

Adds a new input instance to the Input Manager.

The definition of the new input instance is read from a file.

Parameters
fnamethe name of the file from which the ouput directives should be read.
Returns
true if the execution succeeded.

Definition at line 154 of file FGInput.cpp.

155{
156 FGXMLFileRead XMLFile;
157 Element* document = XMLFile.LoadXMLDocument(fname);
158 if (!document) {
159 LogException err;
160 err << "Could not read directive file: " << fname << endl;
161 throw err;
162 }
163 bool result = Load(document);
164
165 if (!result) {
166 FGLogging log(LogLevel::ERROR);
167 log << endl << "Aircraft input element has problems in file " << fname << endl;
168 }
169
170 return result;
171}
bool Load(Element *el) override
Load the input directives and adds a new input instance to the Input Manager list.
Definition FGInput.cpp:77
This class is solely for the purpose of determining what type of file is given on the command line.
Definition JSBSim.cpp:156

◆ SetInputName()

bool SetInputName ( unsigned int  idx,
const std::string &  name 
)

Overwrites the name identifier under which the input will be logged.

This method is taken into account if it is called between Load() and FGFDMExec::RunIC() otherwise it is ignored until the next call to SetStartNewInput().

Parameters
idxID of the instance which name identifier will be changed
namenew name
Returns
false if the instance does not exists.

Definition at line 185 of file FGInput.cpp.

186{
187 if (idx >= InputTypes.size()) return false;
188
189 InputTypes[idx]->SetInputName(name);
190 return true;
191}

◆ Toggle()

bool Toggle ( int  idx)

Toggles the input generation of each input instance.

Parameters
idxID of the input instance which input generation will be toggled.
Returns
false if the instance does not exist otherwise returns the status of the input generation (i.e. true if the input has been enabled, false if the input has been disabled)

Definition at line 175 of file FGInput.cpp.

176{
177 if (idx >= (int)0 && idx < (int)InputTypes.size())
178 return InputTypes[idx]->Toggle();
179
180 return false;
181}

The documentation for this class was generated from the following files: