1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2 3 Header: FGGFCS.h 4 Author: Jon S. Berndt 5 Date started: 12/12/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/12/98 JSB Created 29 30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 31 SENTRY 32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ 33 34 #ifndef FGFCS_H 35 #define FGFCS_H 36 37 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 38 INCLUDES 39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ 40 41 #include <iosfwd> 42 #include <vector> 43 #include <string> 44 45 #include "models/FGModel.h" 46 #include "models/FGLGear.h" 47 #include "models/FGGroundReactions.h" 48 49 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 50 FORWARD DECLARATIONS 51 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ 52 53 namespace JSBSim { 54 55 class FGFCSChannel; 56 typedef enum { ofRad=0, ofDeg, ofNorm, ofMag , NForms} OutputForm; 57 58 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 59 CLASS DOCUMENTATION 60 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ 61 62 /** Encapsulates the Flight Control System (FCS) functionality. 63 This class also encapsulates the identical "system" and "autopilot" capability. 64 FGFCS owns and contains the list of FGFCSComponents 65 that define a system or systems for the modeled aircraft. The config file 66 for the aircraft contains a description of the control path that starts at 67 an input or command and ends at an effector, e.g. an aerosurface. The FCS 68 components which comprise the control laws for an axis are defined 69 sequentially in the configuration file. For instance, for the X-15: 70 71 @code 72 <flight_control name="X-15 SAS"> 73 <channel> 74 <summer name="Pitch Trim Sum"> 75 <input> fcs/elevator-cmd-norm </input> 76 <input> fcs/pitch-trim-cmd-norm </input> 77 <clipto> 78 <min>-1</min> 79 <max>1</max> 80 </clipto> 81 </summer> 82 83 <aerosurface_scale name="Pitch Command Scale"> 84 <input> fcs/pitch-trim-sum </input> 85 <range> 86 <min> -50 </min> 87 <max> 50 </max> 88 </range> 89 </aerosurface_scale> 90 91 ... etc. 92 @endcode 93 94 In the above case we can see the first few components of the pitch channel 95 defined. The input to the first component (a summer), as can be seen in the "Pitch trim 96 sum" component, is really the sum of two parameters: elevator command (from 97 the stick - a pilot input), and pitch trim. 98 The next component created is an aerosurface scale component - a type of 99 gain (see the LoadFCS() method for insight on how the various types of 100 components map into the actual component classes). This continues until the 101 final component for an axis when the 102 \<output> element is usually used to specify where the output is supposed to go. See the 103 individual components for more information on how they are mechanized. 104 105 Another option for the flight controls portion of the config file is that in 106 addition to using the "NAME" attribute in, 107 108 @code 109 <flight_control name="X-15 SAS"> 110 @endcode 111 112 one can also supply a filename: 113 114 @code 115 <flight_control name="X-15 SAS" file="X15.xml"> 116 </flight_control> 117 @endcode 118 119 In this case, the FCS would be read in from another file. 120 121 <h2>Properties</h2> 122 @property fcs/aileron-cmd-norm normalized aileron command 123 @property fcs/elevator-cmd-norm normalized elevator command 124 @property fcs/rudder-cmd-norm 125 @property fcs/steer-cmd-norm 126 @property fcs/flap-cmd-norm 127 @property fcs/speedbrake-cmd-norm 128 @property fcs/spoiler-cmd-norm 129 @property fcs/pitch-trim-cmd-norm 130 @property fcs/roll-trim-cmd-norm 131 @property fcs/yaw-trim-cmd-norm 132 @property gear/gear-cmd-norm 133 @property fcs/left-aileron-pos-rad 134 @property fcs/left-aileron-pos-deg 135 @property fcs/left-aileron-pos-norm 136 @property fcs/mag-left-aileron-pos-rad 137 @property fcs/right-aileron-pos-rad 138 @property fcs/right-aileron-pos-deg 139 @property fcs/right-aileron-pos-norm 140 @property fcs/mag-right-aileron-pos-rad 141 @property fcs/elevator-pos-rad 142 @property fcs/elevator-pos-deg 143 @property fcs/elevator-pos-norm 144 @property fcs/mag-elevator-pos-rad 145 @property fcs/rudder-pos-rad 146 @property fcs/rudder-pos-deg 147 @property fcs/rudder-pos-norm 148 @property fcs/mag-rudder-pos-rad 149 @property fcs/flap-pos-rad 150 @property fcs/flap-pos-deg 151 @property fcs/flap-pos-norm 152 @property fcs/speedbrake-pos-rad 153 @property fcs/speedbrake-pos-deg 154 @property fcs/speedbrake-pos-norm 155 @property fcs/mag-speedbrake-pos-rad 156 @property fcs/spoiler-pos-rad 157 @property fcs/spoiler-pos-deg 158 @property fcs/spoiler-pos-norm 159 @property fcs/mag-spoiler-pos-rad 160 @property fcs/wing-fold-pos-norm 161 @property gear/gear-pos-norm 162 @property gear/tailhook-pos-norm 163 164 @author Jon S. Berndt 165 @version $Revision: 1.55 $ 166 @see FGActuator 167 @see FGDeadBand 168 @see FGFCSFunction 169 @see FGFilter 170 @see FGGain 171 @see FGKinemat 172 @see FGPID 173 @see FGSensor 174 @see FGSummer 175 @see FGSwitch 176 @see FGWaypoint 177 @see FGAngles 178 @see FGFCSComponent 179 @see Element 180 @see FGDistributor 181 */ 182 183 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 184 CLASS DECLARATION 185 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ 186 187 class FGFCS : public FGModel 188 { 189 190 public: 191 /** Constructor 192 @param Executive a pointer to the parent executive object */ 193 FGFCS(FGFDMExec*); 194 /// Destructor 195 ~FGFCS(); 196 197 bool InitModel(void); 198 199 /** Runs the Flight Controls model; called by the Executive 200 Can pass in a value indicating if the executive is directing the simulation to Hold. 201 @param Holding if true, the executive has been directed to hold the sim from 202 advancing time. Some models may ignore this flag, such as the Input 203 model, which may need to be active to listen on a socket for the 204 "Resume" command to be given. 205 @return false if no error */ 206 bool Run(bool Holding); 207 208 /// @name Pilot input command retrieval 209 //@{ 210 /** Gets the aileron command. 211 @return aileron command in range from -1.0 - 1.0 */ GetDaCmd(void)212 double GetDaCmd(void) const { return DaCmd; } 213 214 /** Gets the elevator command. 215 @return elevator command in range from -1.0 - 1.0 */ GetDeCmd(void)216 double GetDeCmd(void) const { return DeCmd; } 217 218 /** Gets the rudder command. 219 @return rudder command in range from -1.0 - 1.0 */ GetDrCmd(void)220 double GetDrCmd(void) const { return DrCmd; } 221 222 /** Gets the steering command. 223 @return steering command in range from -1.0 - 1.0 */ GetDsCmd(void)224 double GetDsCmd(void) const { return fdmex->GetGroundReactions()->GetDsCmd(); } 225 226 /** Gets the flaps command. 227 @return flaps command in range from 0 to 1.0 */ GetDfCmd(void)228 double GetDfCmd(void) const { return DfCmd; } 229 230 /** Gets the speedbrake command. 231 @return speedbrake command in range from 0 to 1.0 */ GetDsbCmd(void)232 double GetDsbCmd(void) const { return DsbCmd; } 233 234 /** Gets the spoiler command. 235 @return spoiler command in range from 0 to 1.0 */ GetDspCmd(void)236 double GetDspCmd(void) const { return DspCmd; } 237 238 /** Gets the throttle command. 239 @param engine engine ID number 240 @return throttle command in range from 0 - 1.0 for the given engine */ 241 double GetThrottleCmd(int engine) const; 242 GetThrottleCmd()243 const std::vector<double>& GetThrottleCmd() const {return ThrottleCmd;} 244 245 /** Gets the mixture command. 246 @param engine engine ID number 247 @return mixture command in range from 0 - 1.0 for the given engine */ GetMixtureCmd(int engine)248 double GetMixtureCmd(int engine) const { return MixtureCmd[engine]; } 249 GetMixtureCmd()250 const std::vector<double>& GetMixtureCmd() const {return MixtureCmd;} 251 252 /** Gets the prop pitch command. 253 @param engine engine ID number 254 @return pitch command in range from 0.0 - 1.0 for the given engine */ GetPropAdvanceCmd(int engine)255 double GetPropAdvanceCmd(int engine) const { return PropAdvanceCmd[engine]; } 256 257 /** Gets the prop feather command. 258 @param engine engine ID number 259 @return feather command for the given engine (on / off)*/ GetFeatherCmd(int engine)260 bool GetFeatherCmd(int engine) const { return PropFeatherCmd[engine]; } 261 262 /** Gets the pitch trim command. 263 @return pitch trim command in range from -1.0 to 1.0 */ GetPitchTrimCmd(void)264 double GetPitchTrimCmd(void) const { return PTrimCmd; } 265 266 /** Gets the rudder trim command. 267 @return rudder trim command in range from -1.0 - 1.0 */ GetYawTrimCmd(void)268 double GetYawTrimCmd(void) const { return YTrimCmd; } 269 270 /** Gets the aileron trim command. 271 @return aileron trim command in range from -1.0 - 1.0 */ GetRollTrimCmd(void)272 double GetRollTrimCmd(void) const { return RTrimCmd; } 273 274 /** Get the gear extend/retract command. 0 commands gear up, 1 down. 275 defaults to down. 276 @return the current value of the gear extend/retract command*/ GetGearCmd(void)277 double GetGearCmd(void) const { return GearCmd; } 278 //@} 279 280 /// @name Aerosurface position retrieval 281 //@{ 282 /** Gets the left aileron position. 283 @return aileron position in radians */ 284 double GetDaLPos( int form = ofRad ) 285 const { return DaLPos[form]; } 286 287 /** Gets the right aileron position. 288 @return aileron position in radians */ 289 double GetDaRPos( int form = ofRad ) 290 const { return DaRPos[form]; } 291 292 /** Gets the elevator position. 293 @return elevator position in radians */ 294 double GetDePos( int form = ofRad ) 295 const { return DePos[form]; } 296 297 /** Gets the rudder position. 298 @return rudder position in radians */ 299 double GetDrPos( int form = ofRad ) 300 const { return DrPos[form]; } 301 302 /** Gets the speedbrake position. 303 @return speedbrake position in radians */ 304 double GetDsbPos( int form = ofRad ) 305 const { return DsbPos[form]; } 306 307 /** Gets the spoiler position. 308 @return spoiler position in radians */ 309 double GetDspPos( int form = ofRad ) 310 const { return DspPos[form]; } 311 312 /** Gets the flaps position. 313 @return flaps position in radians */ 314 double GetDfPos( int form = ofRad ) 315 const { return DfPos[form]; } 316 317 /** Gets the throttle position. 318 @param engine engine ID number 319 @return throttle position for the given engine in range from 0 - 1.0 */ 320 double GetThrottlePos(int engine) const; 321 GetThrottlePos()322 const std::vector<double>& GetThrottlePos() const {return ThrottlePos;} 323 324 /** Gets the mixture position. 325 @param engine engine ID number 326 @return mixture position for the given engine in range from 0 - 1.0 */ GetMixturePos(int engine)327 double GetMixturePos(int engine) const { return MixturePos[engine]; } 328 GetMixturePos()329 const std::vector<double>& GetMixturePos() const {return MixturePos;} 330 331 /** Gets the gear position (0 up, 1 down), defaults to down 332 @return gear position (0 up, 1 down) */ GetGearPos(void)333 double GetGearPos(void) const { return GearPos; } 334 335 /** Gets the tailhook position (0 up, 1 down) 336 @return tailhook position (0 up, 1 down) */ GetTailhookPos(void)337 double GetTailhookPos(void) const { return TailhookPos; } 338 339 /** Gets the wing fold position (0 unfolded, 1 folded) 340 @return wing fold position (0 unfolded, 1 folded) */ GetWingFoldPos(void)341 double GetWingFoldPos(void) const { return WingFoldPos; } 342 343 /** Gets the prop pitch position. 344 @param engine engine ID number 345 @return prop pitch position for the given engine in range from 0 - 1.0 */ GetPropAdvance(int engine)346 double GetPropAdvance(int engine) const { return PropAdvance[engine]; } 347 GetPropAdvance()348 const std::vector<double>& GetPropAdvance() const { return PropAdvance; } 349 350 /** Gets the prop feather position. 351 @param engine engine ID number 352 @return prop fether for the given engine (on / off)*/ GetPropFeather(int engine)353 bool GetPropFeather(int engine) const { return PropFeather[engine]; } 354 GetPropFeather()355 const std::vector<bool>& GetPropFeather() const { return PropFeather; } 356 //@} 357 358 /** Retrieves all component names for inclusion in output stream 359 @param delimiter either a tab or comma string depending on output type 360 @return a string containing the descriptive names for all components */ 361 std::string GetComponentStrings(const std::string& delimiter) const; 362 363 /** Retrieves all component outputs for inclusion in output stream 364 @param delimiter either a tab or comma string depending on output type 365 @return a string containing the numeric values for the current set of 366 component outputs */ 367 std::string GetComponentValues(const std::string& delimiter) const; 368 369 /// @name Pilot input command setting 370 //@{ 371 /** Sets the aileron command 372 @param cmd aileron command */ SetDaCmd(double cmd)373 void SetDaCmd( double cmd ) { DaCmd = cmd; } 374 375 /** Sets the elevator command 376 @param cmd elevator command in percent*/ SetDeCmd(double cmd)377 void SetDeCmd(double cmd ) { DeCmd = cmd; } 378 379 /** Sets the rudder command 380 @param cmd rudder command in percent*/ SetDrCmd(double cmd)381 void SetDrCmd(double cmd) { DrCmd = cmd; } 382 383 /** Sets the steering command 384 @param cmd steering command in percent*/ SetDsCmd(double cmd)385 void SetDsCmd(double cmd) { fdmex->GetGroundReactions()->SetDsCmd( cmd ); } 386 387 /** Sets the flaps command 388 @param cmd flaps command in percent*/ SetDfCmd(double cmd)389 void SetDfCmd(double cmd) { DfCmd = cmd; } 390 391 /** Sets the speedbrake command 392 @param cmd speedbrake command in percent*/ SetDsbCmd(double cmd)393 void SetDsbCmd(double cmd) { DsbCmd = cmd; } 394 395 /** Sets the spoilers command 396 @param cmd spoilers command in percent*/ SetDspCmd(double cmd)397 void SetDspCmd(double cmd) { DspCmd = cmd; } 398 399 /** Sets the pitch trim command 400 @param cmd pitch trim command in percent*/ SetPitchTrimCmd(double cmd)401 void SetPitchTrimCmd(double cmd) { PTrimCmd = cmd; } 402 403 /** Sets the rudder trim command 404 @param cmd rudder trim command in percent*/ SetYawTrimCmd(double cmd)405 void SetYawTrimCmd(double cmd) { YTrimCmd = cmd; } 406 407 /** Sets the aileron trim command 408 @param cmd aileron trim command in percent*/ SetRollTrimCmd(double cmd)409 void SetRollTrimCmd(double cmd) { RTrimCmd = cmd; } 410 411 /** Sets the throttle command for the specified engine 412 @param engine engine ID number 413 @param cmd normalized throttle command (0.0 - 1.0)*/ 414 void SetThrottleCmd(int engine, double cmd); 415 416 /** Sets the mixture command for the specified engine 417 @param engine engine ID number 418 @param cmd normalized mixture command (0.0 - 1.0)*/ 419 void SetMixtureCmd(int engine, double cmd); 420 421 /** Set the gear extend/retract command, defaults to down 422 @param gear command 0 for up, 1 for down */ SetGearCmd(double gearcmd)423 void SetGearCmd(double gearcmd) { GearCmd = gearcmd; } 424 425 /** Sets the propeller pitch command for the specified engine 426 @param engine engine ID number 427 @param cmd pitch command in percent (0.0 - 1.0)*/ 428 void SetPropAdvanceCmd(int engine, double cmd); 429 430 /** Sets the propeller feather command for the specified engine 431 @param engine engine ID number 432 @param cmd feather (bool)*/ 433 void SetFeatherCmd(int engine, bool cmd); 434 //@} 435 436 /// @name Aerosurface position setting 437 //@{ 438 /** Sets the left aileron position 439 @param cmd left aileron position in radians*/ 440 void SetDaLPos( int form , double pos ); 441 442 /** Sets the right aileron position 443 @param cmd right aileron position in radians*/ 444 void SetDaRPos( int form , double pos ); 445 446 /** Sets the elevator position 447 @param cmd elevator position in radians*/ 448 void SetDePos( int form , double pos ); 449 450 /** Sets the rudder position 451 @param cmd rudder position in radians*/ 452 void SetDrPos( int form , double pos ); 453 454 /** Sets the flaps position 455 @param cmd flaps position in radians*/ 456 void SetDfPos( int form , double pos ); 457 458 /** Sets the speedbrake position 459 @param cmd speedbrake position in radians*/ 460 void SetDsbPos( int form , double pos ); 461 462 /** Sets the spoiler position 463 @param cmd spoiler position in radians*/ 464 void SetDspPos( int form , double pos ); 465 466 /** Sets the actual throttle setting for the specified engine 467 @param engine engine ID number 468 @param cmd normalized throttle setting (0.0 - 1.0)*/ 469 void SetThrottlePos(int engine, double cmd); 470 471 /** Sets the actual mixture setting for the specified engine 472 @param engine engine ID number 473 @param cmd normalized mixture setting (0.0 - 1.0)*/ 474 void SetMixturePos(int engine, double cmd); 475 476 /** Set the gear extend/retract position, defaults to down 477 @param gear position 0 up, 1 down */ SetGearPos(double gearpos)478 void SetGearPos(double gearpos) { GearPos = gearpos; } 479 480 /** Set the tailhook position 481 @param tailhook position 0 up, 1 down */ SetTailhookPos(double hookpos)482 void SetTailhookPos(double hookpos) { TailhookPos = hookpos; } 483 484 /** Set the wing fold position 485 @param wing fold position 0 unfolded, 1 folded */ SetWingFoldPos(double foldpos)486 void SetWingFoldPos(double foldpos) { WingFoldPos = foldpos; } 487 488 /** Sets the actual prop pitch setting for the specified engine 489 @param engine engine ID number 490 @param cmd prop pitch setting in percent (0.0 - 1.0)*/ 491 void SetPropAdvance(int engine, double cmd); 492 493 /** Sets the actual prop feather setting for the specified engine 494 @param engine engine ID number 495 @param cmd prop fether setting (bool)*/ 496 void SetPropFeather(int engine, bool cmd); 497 //@} 498 499 /// @name Landing Gear brakes 500 //@{ 501 /** Sets the left brake group 502 @param cmd brake setting in percent (0.0 - 1.0) */ SetLBrake(double cmd)503 void SetLBrake(double cmd) {BrakePos[FGLGear::bgLeft] = cmd;} 504 505 /** Sets the right brake group 506 @param cmd brake setting in percent (0.0 - 1.0) */ SetRBrake(double cmd)507 void SetRBrake(double cmd) {BrakePos[FGLGear::bgRight] = cmd;} 508 509 /** Sets the center brake group 510 @param cmd brake setting in percent (0.0 - 1.0) */ SetCBrake(double cmd)511 void SetCBrake(double cmd) {BrakePos[FGLGear::bgCenter] = cmd;} 512 513 /** Gets the brake for a specified group. 514 @param bg which brakegroup to retrieve the command for 515 @return the brake setting for the supplied brake group argument */ 516 double GetBrake(FGLGear::BrakeGroup bg); 517 GetBrakePos()518 const std::vector<double>& GetBrakePos() const {return BrakePos;} 519 520 /** Gets the left brake. 521 @return the left brake setting. */ GetLBrake(void)522 double GetLBrake(void) const {return BrakePos[FGLGear::bgLeft];} 523 524 /** Gets the right brake. 525 @return the right brake setting. */ GetRBrake(void)526 double GetRBrake(void) const {return BrakePos[FGLGear::bgRight];} 527 528 /** Gets the center brake. 529 @return the center brake setting. */ GetCBrake(void)530 double GetCBrake(void) const {return BrakePos[FGLGear::bgCenter];} 531 //@} 532 533 enum SystemType { stFCS, stSystem, stAutoPilot }; 534 535 /** Loads the Flight Control System. 536 Load() is called from FGFDMExec. 537 @param el pointer to the Element instance 538 @return true if succesful */ 539 virtual bool Load(Element* el); 540 541 SGPath FindFullPathName(const SGPath& path) const; 542 543 void AddThrottle(void); 544 double GetDt(void) const; 545 GetPropertyManager(void)546 FGPropertyManager* GetPropertyManager(void) { return PropertyManager; } 547 GetTrimStatus(void)548 bool GetTrimStatus(void) const { return FDMExec->GetTrimStatus(); } GetChannelDeltaT(void)549 double GetChannelDeltaT(void) const { return GetDt() * ChannelRate; } 550 551 private: 552 double DaCmd, DeCmd, DrCmd, DfCmd, DsbCmd, DspCmd; 553 double DePos[NForms], DaLPos[NForms], DaRPos[NForms], DrPos[NForms]; 554 double DfPos[NForms], DsbPos[NForms], DspPos[NForms]; 555 double PTrimCmd, YTrimCmd, RTrimCmd; 556 std::vector <double> ThrottleCmd; 557 std::vector <double> ThrottlePos; 558 std::vector <double> MixtureCmd; 559 std::vector <double> MixturePos; 560 std::vector <double> PropAdvanceCmd; 561 std::vector <double> PropAdvance; 562 std::vector <bool> PropFeatherCmd; 563 std::vector <bool> PropFeather; 564 //double LeftBrake, RightBrake, CenterBrake; // Brake settings 565 std::vector <double> BrakePos; // left, center, right - defined by FGLGear:: enum 566 double GearCmd,GearPos; 567 double TailhookPos, WingFoldPos; 568 SystemType systype; 569 int ChannelRate; 570 FGFDMExec* fdmex; 571 572 typedef std::vector <FGFCSChannel*> Channels; 573 Channels SystemChannels; 574 void bind(void); 575 void bindThrottle(unsigned int); 576 void Debug(int from); 577 }; 578 } 579 580 #endif 581