]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/models/FGOutput.h
Merge commit 'refs/merge-requests/1551' of git://gitorious.org/fg/flightgear into...
[flightgear.git] / src / FDM / JSBSim / models / FGOutput.h
1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
3  Header:       FGOutput.h
4  Author:       Jon Berndt
5  Date started: 12/2/98
6
7  ------------- Copyright (C) 1999  Jon S. Berndt (jon@jsbsim.org) -------------
8
9  This program is free software; you can redistribute it and/or modify it under
10  the terms of the GNU Lesser General Public License as published by the Free Software
11  Foundation; either version 2 of the License, or (at your option) any later
12  version.
13
14  This program is distributed in the hope that it will be useful, but WITHOUT
15  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
17  details.
18
19  You should have received a copy of the GNU Lesser General Public License along with
20  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
21  Place - Suite 330, Boston, MA  02111-1307, USA.
22
23  Further information about the GNU Lesser General Public License can also be found on
24  the world wide web at http://www.gnu.org.
25
26 HISTORY
27 --------------------------------------------------------------------------------
28 12/02/98   JSB   Created
29 11/09/07   HDW   Added FlightGear Socket Interface
30
31 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
32 SENTRY
33 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
34
35 #ifndef FGOUTPUT_H
36 #define FGOUTPUT_H
37
38 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39 INCLUDES
40 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
41
42 #include "FGModel.h"
43
44 #include <fstream>
45
46 #include "input_output/FGXMLFileRead.h"
47 #include "input_output/net_fdm.hxx"
48
49 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
50 DEFINITIONS
51 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
52
53 #define ID_OUTPUT "$Id: FGOutput.h,v 1.17 2009/10/24 22:59:30 jberndt Exp $"
54
55 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
56 FORWARD DECLARATIONS
57 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
58
59 namespace JSBSim {
60
61 class FGfdmSocket;
62
63 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
64 CLASS DOCUMENTATION
65 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
66
67 /** Handles simulation output.
68     OUTPUT section definition
69
70     The following specifies the way that JSBSim writes out data.
71 <pre>
72     NAME is the filename you want the output to go to
73
74     TYPE can be:
75       CSV         Comma separated data. If a filename is supplied then the
76                   data goes to that file. If "COUT" or "cout" is specified, the
77                   data goes to stdout. If the filename is a null filename the
78                   data goes to stdout, as well.
79       SOCKET      Will eventually send data to a socket output, where NAME
80                   would then be the IP address of the machine the data should
81                   be sent to. DON'T USE THIS YET!
82       FLIGHTGEAR  A socket is created for sending binary data packets to
83                   an external instance of FlightGear for visuals.  Parameters
84                   defining the socket are given on the \<output> line.
85       TABULAR     Columnar data.
86       TERMINAL    Output to terminal. NOT IMPLEMENTED YET!
87       NONE        Specifies to do nothing. This setting makes it easy to turn on and
88                   off the data output without having to mess with anything else.
89
90       Examples:
91 </pre>
92 @code
93         <output name="localhost" type="FLIGHTGEAR" port="5500" protocol="tcp" rate="10"/>
94 @endcode
95 @code
96         <output name="B737_datalog.csv" type="CSV" rate="20">
97            <property> velocities/vc-kts </property>
98            <velocities> ON </velocities>
99         </output>
100 @endcode
101 <br>
102 <pre>
103     The arguments that can be supplied, currently, are:
104
105     RATE_IN_HZ  An integer rate in times-per-second that the data is output. This
106                 value may not be *exactly* what you want, due to the dependence
107                 on dt, the cycle rate for the FDM.
108
109     The following parameters tell which subsystems of data to output:
110
111     simulation       ON|OFF
112     atmosphere       ON|OFF
113     massprops        ON|OFF
114     aerosurfaces     ON|OFF
115     rates            ON|OFF
116     velocities       ON|OFF
117     forces           ON|OFF
118     moments          ON|OFF
119     position         ON|OFF
120     coefficients     ON|OFF
121     ground_reactions ON|OFF
122     fcs              ON|OFF
123     propulsion       ON|OFF
124 </pre>
125     NOTE that Time is always output with the data.
126     @version $Id: FGOutput.h,v 1.17 2009/10/24 22:59:30 jberndt Exp $
127  */
128
129 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
130 CLASS DECLARATION
131 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
132
133 class FGOutput : public FGModel, public FGXMLFileRead
134 {
135 public:
136   FGOutput(FGFDMExec*);
137   ~FGOutput();
138
139   bool InitModel(void);
140   bool Run(void);
141
142   void DelimitedOutput(const std::string&);
143   void SocketOutput(void);
144   void FlightGearSocketOutput(void);
145   void SocketStatusOutput(const std::string&);
146   void SocketDataFill(FGNetFDM* net);
147
148
149   void SetType(const std::string& type);
150   void SetStartNewFile(bool tt) {StartNewFile = tt;}
151   void SetSubsystems(int tt) {SubSystems = tt;}
152   void Enable(void) { enabled = true; }
153   void Disable(void) { enabled = false; }
154   bool Toggle(void) {enabled = !enabled; return enabled;}
155   bool Load(Element* el);
156   void SetOutputFileName(const std::string& fname) {Filename = fname;}
157   void SetDirectivesFile(const std::string& fname) {DirectivesFile = fname;}
158   void SetRate(int rt);
159   string GetOutputFileName(void) const {return Filename;}
160
161   /// Subsystem types for specifying which will be output in the FDM data logging
162   enum  eSubSystems {
163     /** Subsystem: Simulation (= 1)          */ ssSimulation      = 1,
164     /** Subsystem: Aerosurfaces (= 2)        */ ssAerosurfaces    = 2,
165     /** Subsystem: Body rates (= 4)          */ ssRates           = 4,
166     /** Subsystem: Velocities (= 8)          */ ssVelocities      = 8,
167     /** Subsystem: Forces (= 16)             */ ssForces          = 16,
168     /** Subsystem: Moments (= 32)            */ ssMoments         = 32,
169     /** Subsystem: Atmosphere (= 64)         */ ssAtmosphere      = 64,
170     /** Subsystem: Mass Properties (= 128)   */ ssMassProps       = 128,
171     /** Subsystem: Coefficients (= 256)      */ ssCoefficients    = 256,
172     /** Subsystem: Propagate (= 512)         */ ssPropagate       = 512,
173     /** Subsystem: Ground Reactions (= 1024) */ ssGroundReactions = 1024,
174     /** Subsystem: FCS (= 2048)              */ ssFCS             = 2048,
175     /** Subsystem: Propulsion (= 4096)       */ ssPropulsion      = 4096
176   } subsystems;
177
178
179   FGNetFDM fgSockBuf;
180
181 private:
182   enum {otNone, otCSV, otTab, otSocket, otTerminal, otFlightGear, otUnknown} Type;
183   bool sFirstPass, dFirstPass, enabled;
184   int SubSystems;
185   int runID_postfix;
186   bool StartNewFile;
187   std::string output_file_name, delimeter, BaseFilename, Filename, DirectivesFile;
188   std::ofstream datafile;
189   FGfdmSocket* socket;
190   FGfdmSocket* flightGearSocket;
191   std::vector <FGPropertyManager*> OutputProperties;
192
193   void Debug(int from);
194 };
195 }
196 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
197 #endif
198