1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2 3 Header: FGInputType.h 4 Author: Paul Chavent 5 Date started: 01/20/15 6 7 ------------- Copyright (C) 2015 Paul Chavent ------------- 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 01/20/15 PC Created 29 30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 31 SENTRY 32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ 33 34 #ifndef FGINPUTTYPE_H 35 #define FGINPUTTYPE_H 36 37 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 38 INCLUDES 39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ 40 41 #include "models/FGModel.h" 42 43 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 44 FORWARD DECLARATIONS 45 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ 46 47 namespace JSBSim { 48 49 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50 CLASS DOCUMENTATION 51 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ 52 53 /** Abstract class to provide functions generic to all the input directives. 54 This class is used by the input manager FGInput to manage a list of 55 different input classes without needing to know the details of each one of 56 them. It also provides the functions that are common to all the input 57 classes. 58 59 The class inherits from FGModelFunctions so it is possible to define 60 functions that execute before or after the input is generated. Such 61 functions need to be tagged with a "pre" or "post" type attribute to denote 62 the sequence in which they should be executed. 63 64 The class mimics some functionalities of FGModel (methods InitModel(), 65 Run() and SetRate()). However it does not inherit from FGModel since it is 66 conceptually different from the model paradigm. 67 */ 68 69 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 70 CLASS DECLARATION 71 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ 72 73 class FGInputType : public FGModel 74 { 75 public: 76 /** Constructor (implement the FGModel interface). 77 @param fdmex a pointer to the parent executive object 78 */ 79 FGInputType(FGFDMExec* fdmex); 80 81 /// Destructor 82 virtual ~FGInputType(); 83 84 /** Set the idx for this input instance 85 @param idx ID of the input instance that is constructed 86 */ 87 void SetIdx(unsigned int idx); 88 89 /** Init the input directives from an XML file (implement the FGModel interface). 90 @param element XML Element that is pointing to the input directives 91 */ 92 virtual bool Load(Element* el); 93 94 /// Init the input model according to its configitation. 95 virtual bool InitModel(void); 96 97 /** Executes the input directives (implement the FGModel interface). 98 This method checks that the current time step matches the input 99 rate and calls the registered "pre" functions, the input 100 generation and finally the "post" functions. 101 @result false if no error. 102 */ 103 bool Run(bool Holding); 104 105 /** Generate the input. This is a pure method so it must be implemented by 106 the classes that inherits from FGInputType. The Read name may not be 107 relevant to all inputs but it has been kept for backward compatibility. 108 */ 109 virtual void Read(bool Holding) = 0; 110 111 /// Enables the input generation. Enable(void)112 void Enable(void) { enabled = true; } 113 /// Disables the input generation. Disable(void)114 void Disable(void) { enabled = false; } 115 /** Toggles the input generation. 116 @result the input generation status i.e. true if the input has been 117 enabled, false if the input has been disabled. */ Toggle(void)118 bool Toggle(void) {enabled = !enabled; return enabled;} 119 120 /** Overwrites the name identifier under which the input will be read. 121 This method is taken into account if it is called before 122 FGFDMExec::RunIC() otherwise it is ignored until the next call to 123 SetStartNewInput(). 124 @param name new name */ SetInputName(const std::string & name)125 virtual void SetInputName(const std::string& name) { Name = name; } 126 127 /** Get the name identifier to which the input will be directed. 128 @result the name identifier.*/ GetInputName(void)129 virtual const std::string& GetInputName(void) const { return Name; } 130 131 protected: 132 unsigned int InputIdx; 133 bool enabled; 134 135 void Debug(int from); 136 }; 137 } 138 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 139 #endif 140