]> git.mxchange.org Git - flightgear.git/blob - src/Aircraft/controls.hxx
More route-manager functionality moved to Nasal.
[flightgear.git] / src / Aircraft / controls.hxx
1 // controls.hxx -- defines a standard interface to all flight sim controls
2 //
3 // Written by Curtis Olson, started May 1997.
4 //
5 // Copyright (C) 1997  Curtis L. Olson  - http://www.flightgear.org/~curt
6 //
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License as
9 // published by the Free Software Foundation; either version 2 of the
10 // License, or (at your option) any later version.
11 //
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 // General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software
19 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20 //
21 // $Id$
22
23
24 #ifndef _CONTROLS_HXX
25 #define _CONTROLS_HXX
26
27 #include <simgear/structure/subsystem_mgr.hxx>
28 #include <simgear/props/tiedpropertylist.hxx>
29
30 // Define a structure containing the control parameters
31
32 class FGControls : public SGSubsystem
33 {
34
35 public:
36
37     enum {
38         ALL_ENGINES = -1,
39         MAX_ENGINES = 12
40     };
41
42     enum {
43         ALL_WHEELS = -1,
44         MAX_WHEELS = 3
45     };
46
47     enum {
48         ALL_TANKS = -1,
49         MAX_TANKS = 8
50     };
51
52     enum {
53         ALL_BOOSTPUMPS = -1,
54         MAX_BOOSTPUMPS = 2
55     };
56
57     enum {
58         ALL_HYD_SYSTEMS = -1,
59         MAX_HYD_SYSTEMS = 4
60     };
61
62     enum {
63         ALL_PACKS = -1,
64         MAX_PACKS = 4
65     };
66
67     enum {
68         ALL_LIGHTS = -1,
69         MAX_LIGHTS = 4
70     };
71
72     enum {
73         ALL_STATIONS = -1,
74         MAX_STATIONS = 12
75     };
76
77     enum {
78         ALL_AUTOPILOTS = -1,
79         MAX_AUTOPILOTS = 3
80     };
81
82     enum {
83         ALL_EJECTION_SEATS = -1,
84         MAX_EJECTION_SEATS = 10
85     };
86    
87     enum {
88         SEAT_SAFED = -1,
89         SEAT_ARMED = 0,
90         SEAT_FAIL = 1
91     };
92    
93     enum { 
94         CMD_SEL_NORM = -1,
95         CMD_SEL_AFT = 0,
96         CMD_SEL_SOLO = 1
97     };
98     
99 private:
100     // controls/flight/
101     double aileron;
102     double aileron_trim;
103     double elevator;
104     double elevator_trim;
105     double rudder;
106     double rudder_trim;
107     double flaps;
108     double slats;
109     bool BLC;          // Boundary Layer Control
110     double spoilers;
111     double speedbrake;
112     double wing_sweep;
113     bool wing_fold;
114     bool drag_chute;
115
116     // controls/engines/
117     bool throttle_idle;
118
119     // controls/engines/engine[n]/
120     double throttle[MAX_ENGINES];
121     bool starter[MAX_ENGINES];
122     bool fuel_pump[MAX_ENGINES];
123     bool fire_switch[MAX_ENGINES];
124     bool fire_bottle_discharge[MAX_ENGINES];
125     bool cutoff[MAX_ENGINES];
126     double mixture[MAX_ENGINES];
127     double prop_advance[MAX_ENGINES];
128     int magnetos[MAX_ENGINES];
129     int feed_tank[MAX_ENGINES];
130     bool nitrous_injection[MAX_ENGINES];  // War Emergency Power
131     double cowl_flaps_norm[MAX_ENGINES];
132     bool feather[MAX_ENGINES];
133     int ignition[MAX_ENGINES];
134     bool augmentation[MAX_ENGINES];
135     bool reverser[MAX_ENGINES];
136     bool water_injection[MAX_ENGINES];
137     double condition[MAX_ENGINES];           // turboprop speed select
138
139     // controls/fuel/
140     bool dump_valve;
141
142     // controls/fuel/tank[n]/
143     bool fuel_selector[MAX_TANKS];
144     int to_engine[MAX_TANKS];
145     int to_tank[MAX_TANKS];
146     
147     // controls/fuel/tank[n]/pump[p]/
148     bool boost_pump[MAX_TANKS * MAX_BOOSTPUMPS];
149
150     // controls/gear/
151     double brake_left;
152     double brake_right;
153     double copilot_brake_left;
154     double copilot_brake_right;
155     double brake_parking;
156     double steering;
157     bool nose_wheel_steering;
158     bool gear_down;
159     bool antiskid;
160     bool tailhook;
161     bool launchbar;
162     bool catapult_launch_cmd;
163     bool tailwheel_lock;
164
165     // controls/gear/wheel[n]/
166     bool alternate_extension[MAX_WHEELS];
167
168     // controls/anti-ice/
169     bool wing_heat;
170     bool pitot_heat;
171     int wiper;
172     bool window_heat;
173
174     // controls/anti-ice/engine[n]/
175     bool carb_heat[MAX_ENGINES];
176     bool inlet_heat[MAX_ENGINES];
177     
178     // controls/hydraulic/system[n]/
179     bool engine_pump[MAX_HYD_SYSTEMS];
180     bool electric_pump[MAX_HYD_SYSTEMS];
181
182     // controls/electric/
183     bool battery_switch;
184     bool external_power;
185     bool APU_generator;
186
187     // controls/electric/engine[n]/
188     bool generator_breaker[MAX_ENGINES];
189     bool bus_tie[MAX_ENGINES];
190
191     // controls/pneumatic/
192     bool APU_bleed;
193
194     // controls/pneumatic/engine[n]/
195     bool engine_bleed[MAX_ENGINES];
196     
197     // controls/pressurization/
198     int mode;
199     bool dump;
200     double outflow_valve;
201
202     // controls/pressurization/pack[n]/
203     bool pack_on[MAX_PACKS];
204
205     // controls/lighting/
206     bool landing_lights;
207     bool turn_off_lights;
208     bool taxi_light;
209     bool logo_lights;
210     bool nav_lights;
211     bool beacon;
212     bool strobe;
213     double panel_norm;
214     double instruments_norm;
215     double dome_norm;
216
217     // controls/armament/
218     bool master_arm;
219     int station_select;
220     bool release_ALL;
221
222     // controls/armament/station[n]/
223     int stick_size[MAX_STATIONS];
224     bool release_stick[MAX_STATIONS];
225     bool release_all[MAX_STATIONS];
226     bool jettison_all[MAX_STATIONS];
227
228     // controls/seat/
229     double vertical_adjust;
230     double fore_aft_adjust;
231     bool eject[MAX_EJECTION_SEATS];
232     int eseat_status[MAX_EJECTION_SEATS];
233     int cmd_selector_valve;
234
235     // controls/APU/
236     int off_start_run;
237     bool APU_fire_switch;
238
239     // controls/autoflight/autopilot[n]/
240     bool autopilot_engage[MAX_AUTOPILOTS];
241
242     // controls/autoflight/
243     bool autothrottle_arm;
244     bool autothrottle_engage;
245     double heading_select;
246     double altitude_select;
247     double bank_angle_select;
248     double vertical_speed_select;
249     double speed_select;
250     double mach_select; 
251     int vertical_mode;
252     int lateral_mode;
253      
254
255     SGPropertyNode_ptr auto_coordination;
256     SGPropertyNode_ptr auto_coordination_factor;
257     simgear::TiedPropertyList _tiedProperties;
258 public:
259
260     FGControls();
261     ~FGControls();
262
263     // Implementation of SGSubsystem.
264     void init ();
265     void bind ();
266     void unbind ();
267     void update (double dt);
268
269     // Reset function
270     void reset_all(void);
271         
272     // Query functions
273     // controls/flight/
274     inline double get_aileron() const { return aileron; }
275     inline double get_aileron_trim() const { return aileron_trim; }
276     inline double get_elevator() const { return elevator; }
277     inline double get_elevator_trim() const { return elevator_trim; }
278     inline double get_rudder() const { return rudder; }
279     inline double get_rudder_trim() const { return rudder_trim; }
280     inline double get_flaps() const { return flaps; }
281     inline double get_slats() const { return slats; }
282     inline bool get_BLC() const { return BLC; }  
283     inline double get_spoilers() const { return spoilers; }
284     inline double get_speedbrake() const { return speedbrake; }
285     inline double get_wing_sweep() const { return wing_sweep; }
286     inline bool get_wing_fold() const { return wing_fold; }
287     inline bool get_drag_chute() const { return drag_chute; }
288
289     // controls/engines/
290     inline bool get_throttle_idle() const { return throttle_idle; }
291
292     // controls/engines/engine[n]/
293     inline double get_throttle(int engine) const { return throttle[engine]; }
294     inline bool get_starter(int engine) const { return starter[engine]; }
295     inline bool get_fuel_pump(int engine) const { return fuel_pump[engine]; }
296     inline bool get_fire_switch(int engine) const { return fire_switch[engine]; }
297     inline bool get_fire_bottle_discharge(int engine) const {
298         return fire_bottle_discharge[engine];
299     }
300     inline bool get_cutoff(int engine) const { return cutoff[engine]; }
301     inline double get_mixture(int engine) const { return mixture[engine]; }
302     inline double get_prop_advance(int engine) const {
303         return prop_advance[engine];
304     }
305     inline int get_magnetos(int engine) const { return magnetos[engine]; }
306     inline int get_feed_tank(int engine) const { return feed_tank[engine]; }
307     inline bool get_nitrous_injection(int engine) const { 
308         return nitrous_injection[engine];
309     }
310     inline double get_cowl_flaps_norm(int engine) const {
311         return cowl_flaps_norm[engine];
312     }
313     inline bool get_feather(int engine) const { return feather[engine]; }
314     inline int get_ignition(int engine) const { return ignition[engine]; }
315     inline bool get_augmentation(int engine) const { return augmentation[engine]; }
316     inline bool get_reverser(int engine) const { return reverser[engine]; }
317     inline bool get_water_injection(int engine) const { 
318         return water_injection[engine]; 
319     }
320     inline double get_condition(int engine) const { return condition[engine]; }
321
322     // controls/fuel/
323     inline bool get_dump_valve() const { return dump_valve; }
324
325     // controls/fuel/tank[n]/
326     inline bool get_fuel_selector(int tank) const {
327         return fuel_selector[tank];
328     }
329     inline int get_to_engine(int tank) const { return to_engine[tank]; }
330     inline int get_to_tank(int tank) const { return to_tank[tank]; }
331
332     // controls/fuel/tank[n]/pump[p]/
333     inline bool get_boost_pump(int index) const {
334         return boost_pump[index];
335     }
336
337     // controls/gear/
338     inline double get_brake_left() const { return brake_left; }
339     inline double get_brake_right() const { return brake_right; }
340     inline double get_copilot_brake_left() const { return copilot_brake_left; }
341     inline double get_copilot_brake_right() const { return copilot_brake_right; }
342     inline double get_brake_parking() const { return brake_parking; }
343     inline double get_steering() const { return steering; }
344     inline bool get_nose_wheel_steering() const { return nose_wheel_steering; }
345     inline bool get_gear_down() const { return gear_down; }
346     inline bool get_antiskid() const { return antiskid; }
347     inline bool get_tailhook() const { return tailhook; }
348     inline bool get_launchbar() const { return launchbar; }
349     inline bool get_catapult_launch_cmd() const { return catapult_launch_cmd; }
350     inline bool get_tailwheel_lock() const { return tailwheel_lock; }
351
352     // controls/gear/wheel[n]/
353     inline bool get_alternate_extension(int wheel) const {
354         return alternate_extension[wheel];
355     }
356
357     // controls/anti-ice/
358     inline bool get_wing_heat() const { return wing_heat; }
359     inline bool get_pitot_heat() const { return pitot_heat; }
360     inline int get_wiper() const { return wiper; }
361     inline bool get_window_heat() const { return window_heat; }
362
363     // controls/anti-ice/engine[n]/
364     inline bool get_carb_heat(int engine) const { return carb_heat[engine]; }
365     inline bool get_inlet_heat(int engine) const { return inlet_heat[engine]; }
366
367     // controls/hydraulic/system[n]/
368     inline bool get_engine_pump(int system) const { return engine_pump[system]; }
369     inline bool get_electric_pump(int system) const { return electric_pump[system]; }
370
371     // controls/electric/
372     inline bool get_battery_switch() const { return battery_switch; }
373     inline bool get_external_power() const { return external_power; }
374     inline bool get_APU_generator() const { return APU_generator; }
375
376     // controls/electric/engine[n]/
377     inline bool get_generator_breaker(int engine) const { 
378         return generator_breaker[engine];
379     }
380     inline bool get_bus_tie(int engine) const { return bus_tie[engine]; }
381
382     // controls/pneumatic/
383     inline bool get_APU_bleed() const { return APU_bleed; }
384
385     // controls/pneumatic/engine[n]/
386     inline bool get_engine_bleed(int engine) const { return engine_bleed[engine]; }
387     
388     // controls/pressurization/
389     inline int get_mode() const { return mode; }
390     inline double get_outflow_valve() const { return outflow_valve; }
391     inline bool get_dump() const { return dump; }
392
393     // controls/pressurization/pack[n]/
394     inline bool get_pack_on(int pack) const { return pack_on[pack]; }
395
396     // controls/lighting/
397     inline bool get_landing_lights() const { return landing_lights; }
398     inline bool get_turn_off_lights() const { return  turn_off_lights; }
399     inline bool get_taxi_light() const { return taxi_light; }
400     inline bool get_logo_lights() const { return logo_lights; }
401     inline bool get_nav_lights() const { return nav_lights; }
402     inline bool get_beacon() const { return beacon; }
403     inline bool get_strobe() const { return strobe; }
404     inline double get_panel_norm() const { return panel_norm; }
405     inline double get_instruments_norm() const { return instruments_norm; }
406     inline double get_dome_norm() const { return dome_norm; }
407
408     // controls/armament/
409     inline bool get_master_arm() const { return master_arm; }
410     inline int get_station_select() const { return station_select; }
411     inline bool get_release_ALL() const { return release_ALL; }
412
413       // controls/armament/station[n]/
414     inline int get_stick_size(int station) const { return stick_size[station]; }
415     inline bool get_release_stick(int station) const { return release_stick[station]; }
416     inline bool get_release_all(int station) const { return release_all[station]; }
417     inline bool get_jettison_all(int station) const { return jettison_all[station]; }
418
419     // controls/seat/
420     inline double get_vertical_adjust() const { return vertical_adjust; }
421     inline double get_fore_aft_adjust() const { return fore_aft_adjust; }
422     inline bool get_ejection_seat( int which_seat ) const {
423         return eject[which_seat];
424     }
425     inline int get_eseat_status( int which_seat ) const {
426         return eseat_status[which_seat];
427     }
428     inline int get_cmd_selector_valve() const { return cmd_selector_valve; }
429     
430
431     // controls/APU/
432     inline int get_off_start_run() const { return off_start_run; }
433     inline bool get_APU_fire_switch() const { return APU_fire_switch; }
434
435     // controls/autoflight/
436     inline bool get_autothrottle_arm() const { return autothrottle_arm; }
437     inline bool get_autothrottle_engage() const { return autothrottle_engage; }
438     inline double get_heading_select() const { return heading_select; }
439     inline double get_altitude_select() const { return altitude_select; }
440     inline double get_bank_angle_select() const { return bank_angle_select; }
441     inline double get_vertical_speed_select() const { 
442         return vertical_speed_select; 
443     }
444     inline double get_speed_select() const { return speed_select; }
445     inline double get_mach_select() const { return mach_select; } 
446     inline int get_vertical_mode() const { return vertical_mode; }
447     inline int get_lateral_mode() const { return lateral_mode; }
448
449     // controls/autoflight/autopilot[n]/
450     inline bool get_autopilot_engage(int ap) const { 
451         return autopilot_engage[ap];
452     }
453      
454
455     // Update functions
456     // controls/flight/
457     void set_aileron( double pos );
458     void move_aileron( double amt );
459     void set_aileron_trim( double pos );
460     void move_aileron_trim( double amt );
461     void set_elevator( double pos );
462     void move_elevator( double amt );
463     void set_elevator_trim( double pos );
464     void move_elevator_trim( double amt );
465     void set_rudder( double pos );
466     void move_rudder( double amt );
467     void set_rudder_trim( double pos );
468     void move_rudder_trim( double amt );
469     void set_flaps( double pos );
470     void move_flaps( double amt );
471     void set_slats( double pos );
472     void move_slats( double amt );
473     void set_BLC( bool val ); 
474     void set_spoilers( double pos );
475     void move_spoilers( double amt );
476     void set_speedbrake( double pos );
477     void move_speedbrake( double amt );
478     void set_wing_sweep( double pos );
479     void move_wing_sweep( double amt );
480     void set_wing_fold( bool val );   
481     void set_drag_chute( bool val );
482
483     // controls/engines/
484     void set_throttle_idle( bool val );
485
486     // controls/engines/engine[n]/
487     void set_throttle( int engine, double pos );
488     void move_throttle( int engine, double amt );
489     void set_starter( int engine, bool flag );
490     void set_fuel_pump( int engine, bool val );
491     void set_fire_switch( int engine, bool val );
492     void set_fire_bottle_discharge( int engine, bool val );
493     void set_cutoff( int engine, bool val );
494     void set_mixture( int engine, double pos );
495     void move_mixture( int engine, double amt );
496     void set_prop_advance( int engine, double pos );
497     void move_prop_advance( int engine, double amt );
498     void set_magnetos( int engine, int pos );
499     void move_magnetos( int engine, int amt );
500     void set_feed_tank( int engine, int tank );
501     void set_nitrous_injection( int engine, bool val );
502     void set_cowl_flaps_norm( int engine, double pos );
503     void move_cowl_flaps_norm( int engine, double amt );
504     void set_feather( int engine, bool val );
505     void set_ignition( int engine, int val );
506     void set_augmentation( int engine, bool val );
507     void set_reverser( int engine, bool val );
508     void set_water_injection( int engine, bool val );
509     void set_condition( int engine, double val );    
510
511     // controls/fuel
512     void set_dump_valve( bool val );
513
514     // controls/fuel/tank[n]/
515     void set_fuel_selector( int tank, bool pos );
516     void set_to_engine( int tank, int engine );
517     void set_to_tank( int tank, int dest_tank );
518
519     // controls/fuel/tank[n]/pump[p]
520     void set_boost_pump( int index, bool val );
521
522     // controls/gear/
523     void set_brake_left( double pos );
524     void move_brake_left( double amt );
525     void set_brake_right( double pos );
526     void move_brake_right( double amt );
527     void set_copilot_brake_left( double pos );
528     void set_copilot_brake_right( double pos );
529     void set_brake_parking( double pos );
530     void set_steering( double pos );
531     void move_steering( double amt );
532     void set_nose_wheel_steering( bool nws );
533     void set_gear_down( bool gear );
534     void set_antiskid( bool val );
535     void set_tailhook( bool val );
536     void set_launchbar( bool val );
537     void set_catapult_launch_cmd( bool val );
538     void set_tailwheel_lock( bool val );
539
540     // controls/gear/wheel[n]/
541     void set_alternate_extension( int wheel, bool val );
542
543     // controls/anti-ice/
544     void set_wing_heat( bool val );
545     void set_pitot_heat( bool val );
546     void set_wiper( int speed );
547     void set_window_heat( bool val );
548
549     // controls/anti-ice/engine[n]/
550     void set_carb_heat( int engine, bool val );
551     void set_inlet_heat( int engine, bool val );
552
553     // controls/hydraulic/system[n]/
554     void set_engine_pump( int system, bool val );
555     void set_electric_pump( int system, bool val );
556
557     // controls/electric/
558     void set_battery_switch( bool val );
559     void set_external_power( bool val );
560     void set_APU_generator( bool val );
561
562     // controls/electric/engine[n]/
563     void set_generator_breaker( int engine, bool val );
564     void set_bus_tie( int engine, bool val );
565
566     // controls/pneumatic/
567     void set_APU_bleed( bool val );
568
569     // controls/pneumatic/engine[n]/
570     void set_engine_bleed( int engine, bool val );
571     
572     // controls/pressurization/
573     void set_mode( int mode );
574     void set_outflow_valve( double pos );
575     void move_outflow_valve( double amt );
576     void set_dump( bool val );
577
578     // controls/pressurization/pack[n]/
579     void set_pack_on( int pack, bool val );
580
581     // controls/lighting/
582     void set_landing_lights( bool val );
583     void set_turn_off_lights( bool val );
584     void set_taxi_light( bool val );
585     void set_logo_lights( bool val );
586     void set_nav_lights( bool val );
587     void set_beacon( bool val );
588     void set_strobe( bool val );
589     void set_panel_norm( double intensity );
590     void move_panel_norm( double amt );
591     void set_instruments_norm( double intensity );
592     void move_instruments_norm( double amt );
593     void set_dome_norm( double intensity );
594     void move_dome_norm( double amt );
595
596     // controls/armament/
597     void set_master_arm( bool val );
598     void set_station_select( int station );
599     void set_release_ALL( bool val );
600
601     // controls/armament/station[n]/
602     void set_stick_size( int station, int size );
603     void set_release_stick( int station, bool val );
604     void set_release_all( int station, bool val );
605     void set_jettison_all( int station, bool val );
606
607     // controls/seat/
608     void set_vertical_adjust( double pos );
609     void move_vertical_adjust( double amt );
610     void set_fore_aft_adjust( double pos );
611     void move_fore_aft_adjust( double amt );
612     void set_ejection_seat( int which_seat, bool val );
613     void set_eseat_status( int which_seat, int val );
614     void set_cmd_selector_valve( int val );
615
616     // controls/APU/
617     void set_off_start_run( int pos );
618     void set_APU_fire_switch( bool val );
619
620     // controls/autoflight/
621     void set_autothrottle_arm( bool val );
622     void set_autothrottle_engage( bool val );
623     void set_heading_select( double heading );
624     void move_heading_select( double amt );
625     void set_altitude_select( double altitude );
626     void move_altitude_select( double amt );
627     void set_bank_angle_select( double angle );
628     void move_bank_angle_select( double amt );
629     void set_vertical_speed_select( double vs );
630     void move_vertical_speed_select( double amt );
631     void set_speed_select( double speed );
632     void move_speed_select( double amt );
633     void set_mach_select( double mach ); 
634     void move_mach_select( double amt ); 
635     void set_vertical_mode( int mode );
636     void set_lateral_mode( int mode );
637
638     // controls/autoflight/autopilot[n]/
639     void set_autopilot_engage( int ap, bool val );
640
641 private:
642     inline void do_autocoordination() {
643       // check for autocoordination
644       if ( auto_coordination->getBoolValue() ) {
645         double factor = auto_coordination_factor->getDoubleValue();
646         if( factor > 0.0 ) set_rudder( aileron * factor );
647       }
648     }    
649 };
650
651
652 #endif // _CONTROLS_HXX
653
654