Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

Subsystems.h

Go to the documentation of this file.
00001 /*
00002  * Subsystems.h
00003  *
00004  * Part of Fly! Legacy project
00005  *
00006  * Copyright 2003 Chris Wallace
00007  *
00008  * Fly! Legacy is free software; you can redistribute it and/or modify
00009  *   it under the terms of the GNU General Public License as published by
00010  *   the Free Software Foundation; either version 2 of the License, or
00011  *   (at your option) any later version.
00012  *
00013  * Fly! Legacy is distributed in the hope that it will be useful,
00014  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016  *   GNU General Public License for more details.
00017  *
00018  * You should have received a copy of the GNU General Public License
00019  *   along with Fly! Legacy; if not, write to the Free Software
00020  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00021  *
00022  */
00023 
00029 #ifndef SUBSYSTEMS_H
00030 #define SUBSYSTEMS_H
00031 
00032 
00033 #include "FlyLegacy.h"
00034 #include <vector>
00035 #include <map>
00036 
00037 
00038 //
00039 // Miscellaneous subsystems
00040 //
00041 #define SUBSYSTEM_BASE            ('subs')    // CSubsystem
00042 #define SUBSYSTEM_DEPENDENT         ('dpnd')    // CDependent
00043 #define SUBSYSTEM_ANNOUNCEMENT        ('annc')    // CAnnouncement
00044 #define SUBSYSTEM_GENERIC_MONITOR     ('genM')    // CGenericMonitor
00045 #define SUBSYSTEM_GENERIC_INDICATOR     ('genI')    // CGenericIndicator
00046 #define SUBSYSTEM_HISTORY         ('hist')    // CHistory
00047 #define SUBSYSTEM_PNEUMATIC_PUMP      ('pnup')    // CPneumaticPump
00048 #define SUBSYSTEM_EMERGENCY_LOCATOR     ('elts')    // CEmergencyLocator
00049 #define SUBSYSTEM_EXTERIOR_LIGHT      ('bulb')    // CExteriorLight
00050 #define SUBSYSTEM_PITOT_STATIC_SWITCH   ('pssw')    // CPitotStaticSwitch
00051 #define SUBSYSTEM_PITOT_HEAT_SWITCH     ('phsw')    // CPitotHeatSwitch
00052 #define SUBSYSTEM_STATIC_SOURCE_SWITCH    ('sssw')    // CStaticSourceSwitch
00053 #define SUBSYSTEM_ANNUNCIATOR_LIGHT     ('anlt')    // CAnnunciatorLight
00054 #define SUBSYSTEM_STALL_WARNING       ('stal')    // CStallWarning
00055 #define SUBSYSTEM_LIGHT_SETTING_STATE   ('lsst')    // CLightSettingState
00056 #define SUBSYSTEM_SWITCH_SET        ('swst')    // CSwitchSet
00057 #define SUBSYSTEM_ROTARY_IGNITION_SWITCH  ('rign')    // CRotaryIgnitionSwitch
00058 #define SUBSYSTEM_BATTERY         ('batt')    // CBattery
00059 #define SUBSYSTEM_ALTERNATOR        ('natr')    // CAlternator
00060 
00061 //
00062 // Gauge subsystems
00063 //
00064 #define SUBSYSTEM_PITOT_STATIC_SUBS     ('psss')    // CPitotStaticSubsystem
00065 #define SUBSYSTEM_ALTIMETER         ('ALTI')    // CAltimeter
00066 #define SUBSYSTEM_VERTICAL_SPEED      ('VSI_')    // CVerticalSpeedIndicator
00067 #define SUBSYSTEM_AIRSPEED          ('SPED')    // CAirspeedIndicator
00068 #define SUBSYSTEM_PNEUMATIC         ('pnus')    // CPneumaticSubsystem
00069 #define SUBSYSTEM_ATTITUDE          ('ATTI')    // CAttitudeIndicator
00070 #define SUBSYSTEM_DIRECTIONAL_GYRO      ('GYRO')    // CDirectionalGyro
00071 #define SUBSYSTEM_VACUUM_INDICATOR      ('vaci')    // CVacuumIndicator
00072 #define SUBSYSTEM_TURN_COORDINATOR      ('TURN')    // CTurnCoordinator
00073 #define SUBSYSTEM_MAGNETIC_COMPASS      ('mcmp')    // CMagneticCompass
00074 #define SUBSYSTEM_NAVIGATION        ('navg')    // CNavigation
00075 #define SUBSYSTEM_DIGITAL_CLOCK_OAT     ('doat')    // CDigitalClockOAT
00076 #define SUBSYSTEM_KAP140_PANEL        ('K140')    // CBKKAP140Panel
00077 #define SUBSYSTEM_MARKER_PANEL        ('mark')    // CMarkerPanel
00078 #define SUBSYSTEM_AMMETER         ('amps')    // CAmmeter
00079 
00080 //
00081 // Engine gauge subsystems
00082 //
00083 #define SUBSYSTEM_ENGINE_SUBSYSTEM      ('esub')    // CEngineSubsystem
00084 #define SUBSYSTEM_TACHOMETER        ('TACH')    // CTachometer
00085 #define SUBSYSTEM_OIL_TEMPERATURE     ('oilT')    // COilTemperature
00086 #define SUBSYSTEM_OIL_PRESSURE        ('oilP')    // COilPressure
00087 #define SUBSYSTEM_EXHAUST_GAS_TEMPERATURE ('eEGT')    // CExhaustGasTemperature
00088 #define SUBSYSTEM_MANIFOLD_PRESSURE     ('eMAP')    // CManifoldPressure
00089 #define SUBSYSTEM_HOBBS_METER       ('hobs')    // CHobbsMeter
00090 #define SUBSYSTEM_TACHOMETER_TIMER      ('takt')    // CTachometerTimer
00091 
00092 //
00093 // Aircraft control subsystems
00094 //
00095 #define SUBSYSTEM_BASE_CONTROL        ('CONT')    // CBaseControl
00096 #define SUBSYSTEM_THROTTLE_CONTROL      ('THRO')    // CThrottleControl
00097 #define SUBSYSTEM_MIXTURE_CONTROL     ('MIXT')    // CMixtureControl
00098 #define SUBSYSTEM_STEERING_CONTROL      ('ster')    // CSteeringControl
00099 #define SUBSYSTEM_FLAP_CONTROL        ('flap')    // CFlapControl
00100 #define SUBSYSTEM_ELEVATOR_CONTROL      ('elvr')    // CElevatorControl
00101 #define SUBSYSTEM_AILERON_CONTROL     ('ailr')    // CAileronControl
00102 #define SUBSYSTEM_RUDDER_CONTROL      ('rudr')    // CRudderControl
00103 #define SUBSYSTEM_ELEVATOR_TRIM_CONTROL   ('etrm')    // CElevatorTrimControl
00104 #define SUBSYSTEM_AILERON_TRIM_CONTROL    ('atrm')    // CAileronTrimControl
00105 #define SUBSYSTEM_RUDDER_TRIM_CONTROL   ('rtrm')    // CRudderTrimControl
00106 #define SUBSYSTEM_BRAKE_CONTROL       ('brak')    // CBrakeControl
00107 
00108 //
00109 // Radio subsystems
00110 //
00111 #define SUBSYSTEM_RADIO               ('rado')    // CRadio
00112 #define SUBSYSTEM_NAV_RADIO           ('navi')    // CNavRadio
00113 #define SUBSYSTEM_RNAV_RADIO          ('rnav')    // CRnavRadio
00114 #define SUBSYSTEM_COMM_RADIO          ('comm')    // CCommRadio
00115 #define SUBSYSTEM_HF_COMM_RADIO       ('hifr')    // CHFCommRadio
00116 #define SUBSYSTEM_TRANSPONDER_RADIO   ('xpdr')    // CTransponderRadio
00117 #define SUBSYSTEM_ADF_RADIO           ('adfr')    // CADFRadio
00118 #define SUBSYSTEM_KLN89_GPS_RADIO     ('gpsr')    // CBKKLN89GPSRadio
00119 #define SUBSYSTEM_KX155_RADIO         ('kx15')    // CBKKX155Radio
00120 #define SUBSYSTEM_KT76_RADIO          ('kt76')    // CBKKT76Radio
00121 #define SUBSYSTEM_AUDIO_PANEL_RADIO   ('adio')    // CAudioPanelRadio
00122 #define SUBSYSTEM_KAP140_RADIO        ('ka14')    // CBKKAP140Radio
00123 
00124 //
00125 // Fuel subsystems specified in the GAS file
00126 //
00127 #define SUBSYSTEM_FUEL_SUBSYSTEM    ('fSub')    // CFuelSubsystem
00128 #define SUBSYSTEM_FUEL_TAP          ('fTap')    // CFuelTap
00129 #define SUBSYSTEM_FUEL_CELL         ('fCel')    // CFuelCell
00130 #define SUBSYSTEM_FUEL_HEATER       ('fHtr')    // CFuelHeater
00131 #define SUBSYSTEM_FUEL_MATH         ('fMat')    // CFuelMath
00132 #define SUBSYSTEM_FUEL_PUMP         ('fPmp')    // CFuelPump
00133 #define SUBSYSTEM_FUEL_SOURCE       ('fsrc')    // CFuelSource
00134 #define SUBSYSTEM_FUEL_TANK         ('ftnk')    // CFuelTank
00135 
00136 
00137 // *** Implemented subsystem types above this line
00138 
00139 #define SUBSYSTEM_ENGINE_GAUGE        ('egag')    // CEngineGauge
00140 #define SUBSYSTEM_ON_GROUND_MONITOR     ('ognd')    // COnGroundMonitor
00141 #define SUBSYSTEM_ALTITUDE_MONITOR      ('altm')    // CAltitudeMonitor
00142 #define SUBSYSTEM_SPEED_MONITOR       ('spdm')    // CSpeedMonitor
00143 #define SUBSYSTEM_ENGINE_STATUS       ('ests')    // CEngineStatus
00144 #define SUBSYSTEM_TIME_DELAY        ('tdla')    // CTimeDelay
00145 #define SUBSYSTEM_KEYED_SYSTEM        ('keyd')    // CKeyedSystem
00146 #define SUBSYSTEM_TACHOMETER_V1       ('tach')    // CTachometerV1
00147 #define SUBSYSTEM_THROTTLE_CONTROL_V1   ('thro')    // CThrottleV1
00148 #define SUBSYSTEM_MIXTURE_CONTROL_V1    ('mixt')    // CMixtureControlV1
00149 #define SUBSYSTEM_PROPELLER_CONTROL_V1    ('blad')    // CPropellerControlV1
00150 #define SUBSYSTEM_PRIME_CONTROL_V1      ('prim')    // CPrimeControlV1
00151 #define SUBSYSTEM_ENGINE_ANTI_ICE_V1    ('carb')    // CEngineAntiIceV1
00152 #define SUBSYSTEM_IDLE_CONTROL_V1     ('idle')    // CIdleControlV1
00153 #define SUBSYSTEM_ALTIMETER_V1        ('alti')    // CAltimeterV1
00154 #define SUBSYSTEM_VERTICAL_SPEED_V1     ('vsi_')    // CVerticalSpeedIndicatorV1
00155 #define SUBSYSTEM_AIRSPEED_V1       ('sped')    // CAirspeedIndicatorV1
00156 #define SUBSYSTEM_ATTITUDE_V1       ('atti')    // CAttitudeIndicatorV1
00157 #define SUBSYSTEM_DIRECTIONAL_GYRO_V1   ('gyro')    // CDirectionalGyroV1
00158 #define SUBSYSTEM_TURN_COORDINATOR_V1   ('turn')    // CTurnCoordinatorV1
00159 #define SUBSYSTEM_AUDIO_PANEL_V1      ('audp')    // CAudioPanelV1
00160 #define SUBSYSTEM_STARTER_CONTROL     ('strt')    // CStarterControl
00161 #define SUBSYSTEM_MAGNETO_CONTROL     ('neto')    // CMagnetoControl
00162 #define SUBSYSTEM_VOLTMETER         ('volt')    // CVoltmeter
00163 #define SUBSYSTEM_GENERATOR         ('genr')    // CGenerator
00164 #define SUBSYSTEM_FREQUENCY_METER     ('freq')    // CFrequencyMEter
00165 #define SUBSYSTEM_INVERTER          ('nvrt')    // CInverter
00166 #define SUBSYSTEM_FUEL_GAUGE        ('fgag')    // CFuelGauge
00167 #define SUBSYSTEM_GEAR_CONTROL        ('gear')    // CGearControl
00168 #define SUBSYSTEM_PROPELLER_CONTROL     ('BLAD')    // CPropellerControl
00169 #define SUBSYSTEM_PRIME_CONTROL       ('PRIM')    // CPrimeControl
00170 #define SUBSYSTEM_AUDIO_PANEL       ('AUDP')    // CAudioPanel
00171 #define SUBSYSTEM_ENGINE_ANTI_ICE     ('CARB')    // CEngineAntiIce
00172 #define SUBSYSTEM_IDLE_CONTROL        ('IDLE')    // CIdleControl
00173 #define SUBSYSTEM_HIGH_LIFT_CONTROL     ('hild')    // CHighLiftControl
00174 #define SUBSYSTEM_FUEL_FLOW_GAUGE     ('fflw')    // CFuelFlowGauge
00175 #define SUBSYSTEM_FUEL_PRESSURE_GAUGE   ('fprs')    // CFuelPressureGauge
00176 #define SUBSYSTEM_SUCTION_GAUGE       ('suct')    // CSuctionGauge
00177 #define SUBSYSTEM_FLAP_GAUGE        ('flpg')    // CFlapGauge
00178 #define SUBSYSTEM_ANNUNCIATOR       ('annr')    // CAnnunciator
00179 #define SUBSYSTEM_PRESSURIZATION      ('pzat')    // CPressurization
00180 #define SUBSYSTEM_N1_TACHOMETER       ('_N1_')    // CN1Tachometer
00181 #define SUBSYSTEM_N2_TACHOMETER       ('_N2_')    // CN2Tachometer
00182 #define SUBSYSTEM_TORQUE_METER        ('torq')    // CTorqueMEter
00183 #define SUBSYSTEM_DME_PANEL         ('dmep')    // CDMEPanel
00184 #define SUBSYSTEM_DME_PANEL_1       ('dme2')    // CDMEPanel2
00185 #define SUBSYSTEM_WEATHER_RADAR       ('wrdr')    // CWeatherRadar
00186 #define SUBSYSTEM_INDICATOR_SET       ('inds')    // CIndicatorSet
00187 #define SUBSYSTEM_CONTACTOR         ('cntr')    // CContactor
00188 #define SUBSYSTEM_FLASHER         ('flsh')    // CFlasher
00189 #define SUBSYSTEM_FAST_SLOW_METER     ('fosm')    // CFastSlowMEter
00190 #define SUBSYSTEM_CYLINDER_HEAD_TEMP_GAUGE  ('eCHT')    // CCylinderHeadTempGauge
00191 #define SUBSYSTEM_ITT_GAUGE         ('eITT')    // CInterturbineTempGauge
00192 #define SUBSYSTEM_ACCELEROMETER       ('acel')    // CAccelerometer
00193 #define SUBSYSTEM_TCAS_PANEL        ('tcas')    // CTCASPanel
00194 #define SUBSYSTEM_GEAR_LIGHT        ('grlt')    // CGearLight
00195 #define SUBSYSTEM_FUEL_PUMP_CONTROL     ('fpsw')    // CFuelPumpControl
00196 #define SUBSYSTEM_GEAR_WARNING        ('grwn')    // CGearWarning
00197 #define SUBSYSTEM_SYNCHROPHASER       ('sync')    // CSynchrophaser
00198 #define SUBSYSTEM_SURFACE_DEICE       ('sdic')    // CSurfaceDeice
00199 #define SUBSYSTEM_PROPELLER_DEICE     ('pdic')    // CPropellerDeice
00200 #define SUBSYSTEM_CROSSFEED_CONTROL     ('xfed')    // CCrossfeedControl
00201 #define SUBSYSTEM_OXYGEN          ('oxyg')    // COxygen
00202 #define SUBSYSTEM_STARTER_IGNITER     ('StIg')    // CStarterIgniter
00203 #define SUBSYSTEM_ENGINE_MONITOR      ('eMnr')    // CEngineMonitor
00204 #define SUBSYSTEM_FIRE_SYSTEM       ('fire')    // CFireSystem
00205 #define SUBSYSTEM_FUEL_IMBALANCE      ('fimb')    // CFuelImbalance
00206 #define SUBSYSTEM_COWL_FLAP         ('cowl')    // CCowlFlap
00207 #define SUBSYSTEM_TEMP_CONTROL        ('temp')    // CTempControl
00208 #define SUBSYSTEM_WIPER_CONTROL       ('wipe')    // CWiperControl
00209 #define SUBSYSTEM_AIR_BRAKE_CONTROL     ('abrk')    // CAirbrakeControl
00210 #define SUBSYSTEM_THRUST_REVERSE_CONTROL  ('trev')    // CThrustReverseControl
00211 #define SUBSYSTEM_PERFORMANCE_RESERVE   ('aprs')    // CPerformanceReserve
00212 #define SUBSYSTEM_RUDDER_BIAS       ('rbia')    // CRudderBias
00213 #define SUBSYSTEM_STALL_IDENT       ('stlI')    // CStallIdent
00214 #define SUBSYSTEM_IGNITER_CONTROL     ('ignc')    // CIgniterControl
00215 #define SUBSYSTEM_WING_DEICE        ('wdic')    // CWingDeice
00216 #define SUBSYSTEM_TEMP_AIRSPEED_DISPLAY   ('tasd')    // CTemperatureAirspeedDisplay
00217 #define SUBSYSTEM_COLLINS_PFD       ('cpfd')    // CCollinsPFD
00218 #define SUBSYSTEM_COLLINS_ND        ('cnvd')    // CCollinsND
00219 #define SUBSYSTEM_COLLINS_AD        ('cadd')    // CCollinsAD
00220 #define SUBSYSTEM_COLLINS_MND       ('cmnd')    // CCollinsMND
00221 #define SUBSYSTEM_COLLINS_RTU       ('crtu')    // CCollinsRTU
00222 #define SUBSYSTEM_PILATUS_PFD       ('ppfd')    // CPilatusPFD
00223 #define SUBSYSTEM_VIRTUAL_GPS       ('vgps')    // CVirtualGPS
00224 #define SUBSYSTEM_ROTOR           ('rtrs')    // CRotorSubsystem
00225 #define SUBSYSTEM_407_DIGITAL_INDICATORS  ('x407')    // C407DigitalIndicators
00226 #define SUBSYSTEM_HOOK            ('hook')    // CHookControl
00227 #define SUBSYSTEM_THRUST_PITCH_CONTROL    ('tvpc')    // CThrustPitchControl
00228 #define SUBSYSTEM_LON_CYCLIC_CONTROL    ('zCyc')    // CLonCyclicControl
00229 #define SUBSYSTEM_LAT_CYCLIC_CONTROL    ('xCyc')    // CLatCyclicControl
00230 #define SUBSYSTEM_TAIL_ROTOR_CONTROL    ('tRtr')    // CTailRotorControl
00231 #define SUBSYSTEM_COLLECTIVE_CONTROL    ('coll')    // CCollectiveControl
00232 #define SUBSYSTEM_LON_CYCLIC_TRIM_CONTROL ('zCyt')    // CLonCyclicTrimControl
00233 #define SUBSYSTEM_LAT_CYCLIC_TRIM_CONTROL ('xCyt')    // CLatCyclicTrimControl
00234 #define SUBSYSTEM_TAIL_ROTOR_TRIM_CONTROL ('tRtt')    // CTailRotorTrimControl
00235 #define SUBSYSTEM_COLLECTIVE_TRIM_CONTROL ('tCol')    // CCollectiveTrimControl
00236 #define SUBSYSTEM_AIR_MODEL         ('airS')    // CAirModel
00237 #define SUBSYSTEM_MIXER_MODEL       ('mixr')    // CMixerModel
00238 #define SUBSYSTEM_WHEEL_MODEL       ('whls')    // CWheelModel
00239 #define SUBSYSTEM_ENGINE_MODEL        ('ngns')    // CEngineModel
00240 #define SUBSYSTEM_WING_MODEL        ('wngs')    // CWingModel
00241 #define SUBSYSTEM_AUTOPILOT_MASTER_PANEL  ('MrAp')    // CAutopilotMasterPanel
00242 #define SUBSYSTEM_AUTOPILOT_PANEL     ('appl')    // CAutopilotPanel
00243 #define SUBSYSTEM_K150_PANEL        ('K150')    // CKAP150Panel
00244 #define SUBSYSTEM_K200_PANEL        ('K200')    // CKAP200Panel
00245 #define SUBSYSTEM_AFCS65_PANEL        ('C065')    // CAFCS65Panel
00246 #define SUBSYSTEM_AFCS85_PANEL        ('C085')    // CAFCS85Panel
00247 #define SUBSYSTEM_UNIVERSAL_FMS       ('ufms')    // CFMSys
00248 #define SUBSYSTEM_ENGINE_FUEL_PUMP      ('edfp')    // CEngineFuelPump
00249 #define SUBSYSTEM_FUEL_MANAGEMENT     ('fmnt')    // CFuelManagement
00250 #define SUBSYSTEM_APU_FUEL_SOURCE     ('fAPU')    // CAPUFuelSource
00251 
00252 
00253 //
00254 // CSubsystem is the top-level abstract parent for all electrical subsystem
00255 //   classes.  Every CSubsystem has an "indication" attribute stored in the 'indn'
00256 //   member.  The interpretation of the indication is completely arbitrary based
00257 //   on the specific CSubsystem subclass.  For example, the indn for a CVoltmeter
00258 //   object would be the voltage level of the circuit it was connected to; the indn
00259 //   value for a CAltimeter object would represent the vehicle barometric altitude.
00260 //
00261 // Every CSubsystem instance MUST have a unique Tag identifier assigned to it in
00262 //   the object specification.
00263 //
00264 // All CSubsystem objects can be configured to have the indication value lag behind
00265 //   the current setting through the 'timK' and 'ratK' values.
00266 //
00267 
00268 typedef enum {
00269   INDN_NONE,
00270   INDN_LINEAR,
00271   INDN_EXPONENTIAL
00272 } EIndicationMode;
00273 
00274 typedef enum {
00275   EVAL_UNKNOWN,
00276   EVAL_INPROGRESS,
00277   EVAL_COMPLETE
00278 } EEvalState;
00279 
00280 
00281 class CSubsystem : public CStreamObject {
00282 public:
00283   CSubsystem (void);
00284   virtual ~CSubsystem (void);
00285 
00286   // CStreamObject methods
00287   virtual int   Read (SStream *stream, Tag tag);
00288   virtual void  ReadFinished (void);
00289   virtual void  Write (SStream *stream);
00290 
00291   // CSubsystem methods
00292   void  TypeIs (Tag t);
00293   bool  IsType (Tag t);
00294   void  Alias (Tag tag, Tag alias);
00295   bool  MsgForMe (SMessage *msg);
00296 
00297   virtual EMessageResult  ReceiveMessage (SMessage *msg);
00298   virtual void  SetGroup (int group) { gNum = group; }
00299 //  virtual void  StartSituation (void);
00300 //  virtual void  EndSituation (void);
00301   virtual void  Prepare (void);
00302   virtual void  TimeSlice (float dT);
00303 
00304   virtual void  Print (FILE *f);
00305 
00306 protected:
00307   // Subsystem type, used for debugging
00308   Tag   type;
00309   char  type_string[8];
00310 
00311   // Unique ID.  Mandatory for all subsystem instances
00312   Tag   unId;
00313   char  unId_string[8];
00314 
00315   std::map<Tag,Tag>   aliasList;    // Mapping of aliased datatags
00316 
00317   // These parameters control the indication value of the subsystem
00318   float     timK;   // Time constant
00319   float     ratK;   // Rate constant
00320   float     indn;   // Current indication value
00321   float     indnTarget; // Target indication value
00322   EIndicationMode indnMode; // Indication mode
00323 
00324   // Sound effect name; no direct use in CSubsystem implementation, but included
00325   //   as part of the base object for use by derived classes.
00326   char  fWAV[64];
00327 
00328   // DEPRECATED messaging fields
00329   unsigned int    uNum;
00330   unsigned int    gNum;
00331   EMessageHWType  hwId;
00332 };
00333 
00334 
00335 typedef enum {
00336   DEPENDENCY_AND,
00337   DEPENDENCY_OR
00338 } EDependentFunction;
00339 
00340 typedef enum {
00341   POLL_NEVER,
00342   POLL_CHANGED,
00343   POLL_ALWAYS,
00344 } EDependentPolling;
00345 
00346 //
00347 // CDependent introduces the concept of an on/off activity state to the CSubsystem.
00348 //   The on/off state of a CDependency is derived from the on/off states of other
00349 //   CDependency instances, in a hierarchical tree that can represent various
00350 //   electrical circuits in a user vehicle.
00351 //
00352 // On each simulation cycle, the CDependent polls the 'stat' datatag of each of
00353 //   its dependencies, combines them with either an AND or OR function, and
00354 //   sets its own 'stat' member accordingly.  (Note, 'actv' and 'st8t' are
00355 //   synonym datatags for 'stat').
00356 //
00357 // Since CDependent objects are typically used to represent components of
00358 //   electrical circuits such as switches, fuses, busses, etc., additional
00359 //   members are present to represent circuit voltage and current load
00360 //   as well as AC frequency (if the object is dependent upon an AC current source)
00361 //   and maximum voltage.
00362 //
00363 // Proxy messaging is a feature whereby the CDependent can send additional
00364 //   messages to other subsystems when the state of the CDependent changes.
00365 //
00366 class CDependent: public CSubsystem {
00367 public:
00368   CDependent (void);
00369   virtual ~CDependent (void);
00370 
00371   // CStreamObject methods
00372   virtual int   Read (SStream *stream, Tag tag);
00373   virtual void  ReadFinished (void);
00374   virtual void  Write (SStream *stream);
00375 
00376   // CSubsystem methods
00377   virtual EMessageResult  ReceiveMessage (SMessage *msg);
00378   virtual void            TimeSlice (float dT);
00379   virtual void            Print (FILE *f);
00380 
00381   // CDependent methods
00382   void                    SetEvaluated (EEvalState eval);
00383   int                     NumDependencies (void);
00384 
00385 public:
00386   // Whether the dependency activity status has been evaluated for this timeslice
00387   EEvalState  evaluated;
00388 
00389   // State dependencies
00390   std::vector<SMessage> dpnd; // Messages used to determine our state
00391   EDependentFunction    mode; // How to combine multiple dependent states
00392 
00393   // Electrical ciruit parameters (read datatags)
00394   bool          stat; // Default activity state
00395   int           st8t; // Default state controller state
00396   float         volt; // Subsystem voltage
00397   float         offV; // Voltage when state is off
00398   float         mVlt; // Maximum voltage
00399   float         load; // Subsystem load (amps)
00400   float         freQ; // AC frequency
00401 
00402   // Real-time state
00403   bool          active;   // Activity state (true=active, false=inactive)
00404   int           state;    // State controller value
00405 
00406   // Real-time electrical values
00407   float         voltage;
00408   float         current;
00409   float         frequency;
00410 
00411   // Proxy messages
00412   SMessage        pxy1; // Rising edge proxy message
00413   SMessage        pxy0; // Falling edge proxy message
00414   float         rise; // Threshold for rising edge proxy
00415   float         fall; // Threshold for falling edge proxy
00416 
00417   // Polling messages
00418   SMessage        mPol; // Polling message
00419   bool          mAll; // Create all three polling messages
00420   EDependentPolling   poll; // Polling behaviour
00421 };
00422 
00423 
00424 //
00425 // CAnnouncement
00426 //
00427 class CAnnouncement : public CSubsystem {
00428 public:
00429   CAnnouncement (void);
00430 
00431   // CStreamObject methods
00432 //  virtual int   Read (SStream *stream, Tag tag);
00433 //  virtual void  ReadFinished (void);
00434 //  virtual void  Write (SStream *stream);
00435 
00436   // CSubsystem methods
00437 //  virtual void  ReceiveMessage (SMessage *msg);
00438 //  virtual void  Update (float dT);
00439 };
00440 
00441 
00442 // 
00443 // CGenericMonitor
00444 //
00445 typedef enum {
00446   MONITOR_LT,
00447   MONITOR_GT,
00448   MONITOR_LE,
00449   MONITOR_GE
00450 } EMonitorMode;
00451 
00452 
00453 //
00454 // CGenericMonitor
00455 //
00456 class CGenericMonitor : public CDependent {
00457 public:
00458   CGenericMonitor (void);
00459 
00460   // CStreamObject methods
00461   virtual int   Read (SStream *stream, Tag tag);
00462 
00463   // CSubsystem methods
00464   virtual EMessageResult  ReceiveMessage (SMessage *msg);
00465   virtual void      TimeSlice (float dT);
00466 
00467 protected:
00468   SMessage    mVal;   // Message to get value for comparison
00469   EMonitorMode  mode;   // How to compare value to reference value
00470   float     comp;   // Reference value for comparison
00471 };
00472 
00473 
00474 //
00475 // CGenericIndicator
00476 //
00477 class CGenericIndicator : public CDependent {
00478 public:
00479   CGenericIndicator (void);
00480 
00481   // CStreamObject methods
00482   virtual int       Read (SStream *stream, Tag tag);
00483   virtual void      ReadFinished (void);
00484 
00485   // CSubsystem methods
00486   virtual EMessageResult  ReceiveMessage (SMessage *msg);
00487 
00488 protected:
00489   SMessage    mVal;   // Message to get value for comparison
00490   Tag       alia;   // Alias datatag
00491 };
00492 
00493 
00494 //
00495 // CHistory
00496 //
00497 class CHistory : public CDependent {
00498 public:
00499   CHistory (void);
00500 
00501   // CStreamObject methods
00502 
00503   // CSubsystem methods
00504 };
00505 
00506 
00507 
00508 //
00509 // CPneumaticPump
00510 //
00511 class CPneumaticPump : public CDependent {
00512 public:
00513   CPneumaticPump (void);
00514 
00515   // CStreamObject methods
00516   virtual int   Read (SStream *stream, Tag tag);
00517 
00518   // CSubsystem methods
00519   virtual EMessageResult  ReceiveMessage (SMessage *msg);
00520 
00521 protected:
00522   float   suct;     // Pump suction (psi)
00523 };
00524 
00525 
00526 //
00527 // CEmergencyLocator
00528 //
00529 class CEmergencyLocator : public CDependent {
00530 public:
00531   CEmergencyLocator (void);
00532 
00533   // CStreamObject methods
00534   virtual int   Read (SStream *stream, Tag tag);
00535 
00536   // CSubsystem methods
00537 
00538 protected:
00539   float   gLim;     // G-load activation limit
00540 };
00541 
00542 
00543 //
00544 // CExteriorLight
00545 //
00546 class CExteriorLight : public CDependent {
00547 public:
00548   CExteriorLight (void);
00549 
00550   // CStreamObject methods
00551   virtual int   Read (SStream *stream, Tag tag);
00552 
00553   // CSubsystem methods
00554 
00555 protected:
00556   Tag     LMid;     // Light model ID
00557 };
00558 
00559 
00560 //
00561 // CPitotStaticSwitch
00562 //
00563 class CPitotStaticSwitch : public CDependent {
00564 public:
00565   CPitotStaticSwitch (void);
00566   virtual ~CPitotStaticSwitch (void);
00567 
00568   // CStreamObject methods
00569   virtual int   Read (SStream *stream, Tag tag);
00570 
00571   // CSubsystem methods
00572 
00573 protected:
00574   int   nSystems;       // Number of pitot/static systems
00575   int   *system;        // Array of pitot/static system group numbers
00576 };
00577 
00578 
00579 //
00580 // CPitotHeatSwitch
00581 //
00582 class CPitotHeatSwitch : public CPitotStaticSwitch {
00583 public:
00584   CPitotHeatSwitch (void);
00585 
00586   // CStreamObject methods
00587 
00588   // CSubsystem methods
00589 
00590 protected:
00591 };
00592 
00593 
00594 //
00595 // CStaticSourceSwitch
00596 //
00597 class CStaticSourceSwitch : public CPitotStaticSwitch {
00598 public:
00599   CStaticSourceSwitch (void);
00600 
00601   // CStreamObject methods
00602 
00603   // CSubsystem methods
00604 
00605 protected:
00606 };
00607 
00608 
00609 //
00610 // CAnnunciatorLight
00611 //
00612 class CAnnunciatorLight : public CDependent {
00613 public:
00614   CAnnunciatorLight (void);
00615 
00616   // CStreamObject methods
00617   virtual int   Read (SStream *stream, Tag tag);
00618 
00619   // CSubsystem methods
00620 
00621 protected:
00622   float   blnk;       // Blink period (sec)
00623   float   blpp;       // Blink rate (on duty cycle in sec)
00624 };
00625 
00626 
00627 //
00628 // CStallWarning
00629 //
00630 class CStallWarning : public CDependent {
00631 public:
00632   CStallWarning (void);
00633 
00634   // CStreamObject methods
00635   virtual int   Read (SStream *stream, Tag tag);
00636 
00637   // CSubsystem methods
00638 
00639 protected:
00640   char    wing[64];     // Wing section name
00641 };
00642 
00643 
00644 //
00645 // CLightSettingState
00646 //
00647 class CLightSettingState : public CDependent {
00648 public:
00649   CLightSettingState (void);
00650 
00651   // CStreamObject methods
00652   virtual int   Read (SStream *stream, Tag tag);
00653 
00654   // CSubsystem methods
00655 
00656 protected:
00657   float   levl;       // Light level
00658 };
00659 
00660 
00661 //
00662 // CSwitchSet
00663 //
00664 class CSwitchSet : public CDependent {
00665 public:
00666   CSwitchSet (void);
00667   virtual ~CSwitchSet (void);
00668 
00669   // CStreamObject methods
00670   virtual int   Read (SStream *stream, Tag tag);
00671 
00672   // CSubsystem methods
00673 
00674 protected:
00675   std::vector<SMessage>    smsg;     // Switch messages
00676 
00677   bool    sync;      // Sync all switches
00678   bool    LAND;     // Controlled by LAND key mapping
00679   bool    TAXI;     // Controlled by TAXI key mapping
00680   bool    NAVI;     // Controlled by NAVI key mapping
00681 };
00682 
00683 
00684 //
00685 // CRotaryIgnitionSwitch
00686 //
00687 class CRotaryIgnitionSwitch : public CDependent {
00688 public:
00689   CRotaryIgnitionSwitch (void);
00690 
00691   // CStreamObject methods
00692 
00693   // CSubsystem methods
00694 
00695 protected:
00696 };
00697 
00698 
00699 //
00700 // CBattery
00701 //
00702 class CBattery : public CDependent {
00703 public:
00704   CBattery (void);
00705 
00706   // CStreamObject methods
00707   virtual int   Read (SStream *stream, Tag tag);
00708 
00709   // CSubsystem methods
00710 
00711 protected:
00712   float   life;       // Capacity (amp-hours)
00713 };
00714 
00715 
00716 //
00717 // CAlternator
00718 //
00719 class CAlternator : public CDependent {
00720 public:
00721   CAlternator (void);
00722 
00723   // CStreamObject methods
00724   virtual int   Read (SStream *stream, Tag tag);
00725 
00726   // CSubsystem methods
00727   EMessageResult ReceiveMessage (SMessage *msg);
00728 
00729 protected:
00730   float   mxld;       // Maximum load (amps)
00731   float   loRg;       // Minimum RPM regulatable
00732 };
00733 
00734 
00735 // *
00736 // * Gauge subsystems
00737 // *
00738 
00739 //
00740 // CPitotStaticSubsystem
00741 //
00742 // This subystem is an abstract base class for any subsystems which have a 
00743 //   dependency on a pitot/static subsystem.
00744 //
00745 class CPitotStaticSubsystem : public CDependent {
00746 public:
00747   CPitotStaticSubsystem (void);
00748 
00749   // CStreamObject methods
00750   virtual int   Read (SStream *stream, Tag tag);
00751 //  virtual void  ReadFinished (void);
00752 
00753   // CSubsystem methods
00754 //  virtual EMessageResult  ReceiveMessage (SMessage *msg);
00755 
00756 protected:
00757   int       gNum;   // Port group number
00758 };
00759 
00760 
00761 //
00762 // CAltimeter
00763 //
00764 class CAltimeter : public CPitotStaticSubsystem {
00765 public:
00766   CAltimeter (void);
00767 
00768   // CStreamObject methods
00769   virtual int   Read (SStream *stream, Tag tag);
00770 //  virtual void  ReadFinished (void);
00771 
00772   // CSubsystem methods
00773   virtual EMessageResult  ReceiveMessage (SMessage *msg);
00774 
00775 protected:
00776 };
00777 
00778 
00779 //
00780 // CVerticalSpeedIndicator
00781 //
00782 class CVerticalSpeedIndicator : public CPitotStaticSubsystem {
00783 public:
00784   CVerticalSpeedIndicator (void);
00785 
00786   // CStreamObject methods
00787   virtual int   Read (SStream *stream, Tag tag);
00788 //  virtual void  ReadFinished (void);
00789 
00790   // CSubsystem methods
00791   virtual EMessageResult  ReceiveMessage (SMessage *msg);
00792 
00793 protected:
00794 };
00795 
00796 
00797 //
00798 // CAirspeedIndicator
00799 //
00800 class CAirspeedIndicator : public CPitotStaticSubsystem {
00801 public:
00802   CAirspeedIndicator (void);
00803 
00804   // CStreamObject methods
00805   virtual int   Read (SStream *stream, Tag tag);
00806 //  virtual void  ReadFinished (void);
00807 
00808   // CSubsystem methods
00809   virtual EMessageResult  ReceiveMessage (SMessage *msg);
00810 
00811 protected:
00812 };
00813 
00814 
00815 //
00816 // CPneumaticSubsystem
00817 //
00818 // This subystem is an abstract base class for any subsystems which have a 
00819 //   dependency on a pneumatic pump subsystem
00820 //
00821 class CPneumaticSubsystem : public CDependent {
00822 public:
00823   CPneumaticSubsystem (void);
00824   virtual ~CPneumaticSubsystem (void);
00825 
00826   // CStreamObject methods
00827   virtual int   Read (SStream *stream, Tag tag);
00828 //  virtual void  ReadFinished (void);
00829 
00830   // CSubsystem methods
00831 //  virtual EMessageResult  ReceiveMessage (SMessage *msg);
00832 
00833 protected:
00834   std::vector<SMessage>   mPmp;   // Dependent pump messages
00835 };
00836 
00837 
00838 //
00839 // CAttitudeIndicator
00840 //
00841 class CAttitudeIndicator : public CPneumaticSubsystem {
00842 public:
00843   CAttitudeIndicator (void);
00844 
00845   // CStreamObject methods
00846   virtual int   Read (SStream *stream, Tag tag);
00847 //  virtual void  ReadFinished (void);
00848 
00849   // CSubsystem methods
00850   virtual EMessageResult  ReceiveMessage (SMessage *msg);
00851 
00852 protected:
00853   float     prat;   // Precession rate
00854 };
00855 
00856 
00857 //
00858 // CDirectionalGyro
00859 //
00860 class CDirectionalGyro : public CPneumaticSubsystem {
00861 public:
00862   CDirectionalGyro (void);
00863 
00864   // CStreamObject methods
00865   virtual int   Read (SStream *stream, Tag tag);
00866 //  virtual void  ReadFinished (void);
00867 
00868   // CSubsystem methods
00869   virtual EMessageResult  ReceiveMessage (SMessage *msg);
00870 
00871 protected:
00872   float     step;
00873 };
00874 
00875 
00876 //
00877 // CVacuumIndicator
00878 //
00879 class CVacuumIndicator : public CPneumaticSubsystem {
00880 public:
00881   CVacuumIndicator (void);
00882 
00883   // CStreamObject methods
00884   virtual int   Read (SStream *stream, Tag tag);
00885 //  virtual void  ReadFinished (void);
00886 
00887   // CSubsystem methods
00888 //  virtual EMessageResult  ReceiveMessage (SMessage *msg);
00889 
00890 protected:
00891 };
00892 
00893 
00894 //
00895 // CTurnCoordinator
00896 //
00897 class CTurnCoordinator : public CDependent {
00898 public:
00899   CTurnCoordinator (void);
00900 
00901   // CStreamObject methods
00902   virtual int   Read (SStream *stream, Tag tag);
00903 //  virtual void  ReadFinished (void);
00904 
00905   // CSubsystem methods
00906 //  virtual EMessageResult  ReceiveMessage (SMessage *msg);
00907 
00908 protected:
00909   float     tilt;   // Tilt??
00910 };
00911 
00912 
00913 //
00914 // CMagneticCompass
00915 //
00916 class CMagneticCompass : public CDependent {
00917 public:
00918   CMagneticCompass (void);
00919 
00920   // CStreamObject methods
00921 
00922   // CSubsystem methods
00923 };
00924 
00925 
00926 //
00927 // CNavigation
00928 //
00929 class CNavigation : public CDependent {
00930 public:
00931   CNavigation (void);
00932 
00933   // CStreamObject methods
00934 
00935   // CSubsystem methods
00936 };
00937 
00938 
00939 //
00940 // CDigitalClockOAT
00941 //
00942 class CDigitalClockOAT : public CDependent {
00943 public:
00944   CDigitalClockOAT (void);
00945 
00946   // CStreamObject methods
00947 
00948   // CSubsystem methods
00949 
00950 protected:
00951 };
00952 
00953 
00954 //
00955 // CBKKAP140Panel
00956 //
00957 class CBKKAP140Panel : public CDependent {
00958 public:
00959   CBKKAP140Panel (void);
00960 
00961   // CStreamObject methods
00962   virtual int   Read (SStream *stream, Tag tag);
00963 
00964   // CSubsystem methods
00965 
00966 protected:
00967 //  CAutopilotSpec  atop;   // Autopilot specification object
00968   SMessage    gyro;   // Directional gyro (heading) message
00969   SMessage    nav1;   // NAV gauge message
00970 };
00971 
00972 
00973 //
00974 // CMarkerPanel
00975 //
00976 class CMarkerPanel : public CDependent {
00977 public:
00978   CMarkerPanel (void);
00979 
00980   // CStreamObject methods
00981 
00982   // CSubsystem methods
00983 
00984 protected:
00985 };
00986 
00987 
00988 //
00989 // CAmmeter
00990 //
00991 class CAmmeter : public CDependent {
00992 public:
00993   CAmmeter (void);
00994 
00995   // CStreamObject methods
00996   virtual int   Read (SStream *stream, Tag tag);
00997 
00998   // CSubsystem methods
00999 
01000 protected:
01001   bool    chrg;     // Charge meter
01002   SMessage  mMon;     // Monitor message
01003 };
01004 
01005 
01006 // *
01007 // * Engine gauge subsystems
01008 // *
01009 
01010 //
01011 // CSteeringControl
01012 //
01013 class CSteeringControl : public CDependent {
01014 public:
01015   CSteeringControl (void);
01016 
01017   // CStreamObject methods
01018 
01019   // CSubsystem methods
01020 
01021 protected:
01022 };
01023 
01024 
01025 //
01026 // CEngineSubsystem
01027 //
01028 // This subsystem is an abstract base class for any subsystems which have a 
01029 //   dependency on an engine
01030 //
01031 class CEngineSubsystem : public CDependent {
01032 public:
01033   CEngineSubsystem (void);
01034 
01035   // CStreamObject methods
01036   virtual int   Read (SStream *stream, Tag tag);
01037 
01038   // CSubsystem methods
01039 
01040 protected:
01041   unsigned int  eNum;   // Engine number
01042 };
01043 
01044 
01045 //
01046 // CTachometer
01047 //
01048 class CTachometer : public CEngineSubsystem {
01049 public:
01050   CTachometer (void);
01051 
01052   // CStreamObject methods
01053 
01054   // CSubsystem methods
01055 
01056 protected:
01057 };
01058 
01059 
01060 //
01061 // COilTemperature
01062 //
01063 class COilTemperature : public CEngineSubsystem {
01064 public:
01065   COilTemperature (void);
01066 
01067   // CStreamObject methods
01068 
01069   // CSubsystem methods
01070 };
01071 
01072 
01073 //
01074 // COilPressure
01075 //
01076 class COilPressure : public CEngineSubsystem {
01077 public:
01078   COilPressure (void);
01079 
01080   // CStreamObject methods
01081   virtual int   Read (SStream *stream, Tag tag);
01082 
01083   // CSubsystem methods
01084 
01085 protected:
01086   float lowP;     // Low pressure threshold
01087 };
01088 
01089 
01090 //
01091 // CExhaustGasTemperature
01092 //
01093 class CExhaustGasTemperature : public CEngineSubsystem {
01094 public:
01095   CExhaustGasTemperature (void);
01096 
01097   // CStreamObject methods
01098 
01099   // CSubsystem methods
01100 };
01101 
01102 
01103 //
01104 // CManifoldPressure
01105 //
01106 class CManifoldPressure : public CEngineSubsystem {
01107 public:
01108   CManifoldPressure (void);
01109 
01110   // CStreamObject methods
01111 
01112   // CSubsystem methods
01113 };
01114 
01115 
01116 //
01117 // CHobbsMeter
01118 //
01119 class CHobbsMeter : public CEngineSubsystem {
01120 public:
01121   CHobbsMeter (void);
01122 
01123   // CStreamObject methods
01124 
01125   // CSubsystem methods
01126 };
01127 
01128 
01129 //
01130 // CTachometerTimer
01131 //
01132 class CTachometerTimer : public CEngineSubsystem {
01133 public:
01134   CTachometerTimer (void);
01135 
01136   // CStreamObject methods
01137 
01138   // CSubsystem methods
01139 };
01140 
01141 
01142 // *
01143 // * Aircraft control subsystems
01144 // *
01145 
01146 //
01147 // CBaseControl
01148 //
01149 class CBaseControl : public CDependent {
01150 public:
01151   CBaseControl (void);
01152 
01153   // CStreamObject methods
01154   virtual int   Read (SStream *stream, Tag tag);
01155 
01156   // CSubsystem methods
01157 
01158   // CBaseControl methods
01159   void    Incr (void);
01160   void    Decr (void);
01161 
01162 protected:
01163   float   scal;   // Scaling factor
01164   float   step;   // Step size
01165   float   bend;   // Exponential value
01166   float   posn;   // Default position
01167 };
01168 
01169 
01170 //
01171 // CThrottleControl
01172 //
01173 class CThrottleControl : public CBaseControl {
01174 public:
01175   CThrottleControl (void);
01176 
01177   // CStreamObject methods
01178 
01179   // CSubsystem methods
01180 
01181 protected:
01182 };
01183 
01184 
01185 //
01186 // CMixtureControl
01187 //
01188 class CMixtureControl : public CBaseControl {
01189 public:
01190   CMixtureControl (void);
01191 
01192   // CStreamObject methods
01193   virtual int   Read (SStream *stream, Tag tag);
01194 
01195   // CSubsystem methods
01196 
01197 protected:
01198   bool  autoControl;    // Under automatic or user control?
01199   bool  injd;       // Fuel injected system (vs carbeurated)
01200   float prmr;       // Priming rate
01201   float prff;       // Priming fuel flow
01202   float plim;       // Priming pump limit
01203 };
01204 
01205 
01206 //
01207 // CFlapControl
01208 //
01209 class CFlapControl : public CBaseControl {
01210 public:
01211   CFlapControl (void);
01212   virtual ~CFlapControl (void);
01213 
01214   // CStreamObject methods
01215   virtual int   Read (SStream *stream, Tag tag);
01216 
01217   // CSubsystem methods
01218 
01219 protected:
01220   int   nPos;       // Number of flap positions
01221   float *pos;       // Array of flap positions
01222   int   nSpeed;       // Number of damage speeds
01223   float *speed;       // Array of damage speeds
01224 };
01225 
01226 
01227 //
01228 // CElevatorControl
01229 //
01230 class CElevatorControl : public CBaseControl {
01231 public:
01232   CElevatorControl (void);
01233 
01234   // CStreamObject methods
01235 
01236   // CSubsystem methods
01237 
01238 protected:
01239 };
01240 
01241 
01242 //
01243 // CAileronControl
01244 //
01245 class CAileronControl : public CBaseControl {
01246 public:
01247   CAileronControl (void);
01248 
01249   // CStreamObject methods
01250 
01251   // CSubsystem methods
01252 
01253 protected:
01254 };
01255 
01256 
01257 //
01258 // CRudderControl
01259 //
01260 class CRudderControl : public CBaseControl {
01261 public:
01262   CRudderControl (void);
01263 
01264   // CStreamObject methods
01265 
01266   // CSubsystem methods
01267 
01268 protected:
01269 };
01270 
01271 
01272 //
01273 // CElevatorTrimControl
01274 //
01275 class CElevatorTrimControl : public CBaseControl {
01276 public:
01277   CElevatorTrimControl (void);
01278 
01279   // CStreamObject methods
01280 
01281   // CSubsystem methods
01282 
01283 protected:
01284 };
01285 
01286 
01287 //
01288 // CAileronTrimControl
01289 //
01290 class CAileronTrimControl : public CBaseControl {
01291 public:
01292   CAileronTrimControl (void);
01293 
01294   // CStreamObject methods
01295 
01296   // CSubsystem methods
01297 
01298 protected:
01299 };
01300 
01301 
01302 //
01303 // CRudderTrimControl
01304 //
01305 class CRudderTrimControl : public CBaseControl {
01306 public:
01307   CRudderTrimControl (void);
01308 
01309   // CStreamObject methods
01310 
01311   // CSubsystem methods
01312 
01313 protected:
01314 };
01315 
01316 
01317 //
01318 // CBrakeControl
01319 //
01320 class CBrakeControl : public CBaseControl {
01321 public:
01322   CBrakeControl (void);
01323 
01324   // CStreamObject methods
01325 
01326   // CSubsystem methods
01327 
01328 protected:
01329 };
01330 
01331 
01332 // *
01333 // *  Radio subsystems
01334 // *
01335 
01336 //
01337 // CRadio
01338 //
01339 // This subsytem is the base for all radio subsystems
01340 //
01341 class CRadio : public CDependent {
01342 public:
01343   CRadio (void);
01344 
01345   // CStreamObject methods
01346   virtual int       Read (SStream *stream, Tag tag);
01347 
01348   // CSubsystem methods
01349   virtual EMessageResult  ReceiveMessage (SMessage *msg);
01350 
01351 protected:
01352   float     tune;         // Frequency
01353   float     lfrq;         // Minimum frequency
01354   float     hfrq;         // Maximum frequency
01355   float     sinc;         // Seek increment
01356   bool      test;         // Test mode active
01357 };
01358 
01359 //
01360 // CNavRadio
01361 //
01362 class CNavRadio : public CRadio {
01363 public:
01364   CNavRadio (void);
01365   virtual ~CNavRadio (void);
01366 
01367   // CStreamObject methods
01368   virtual int       Read (SStream *stream, Tag tag);
01369 
01370   // CSubsystem methods
01371   virtual EMessageResult  ReceiveMessage (SMessage *msg);
01372   virtual void            TimeSlice (float dT);
01373 
01374   // CNavRadio methods
01375   virtual void            RescanNavaids (void);
01376 
01377 protected:
01378   float     stby;           // Standby frequency
01379 
01380   SNavaid   *navaidList;    // List of local navaids
01381   float     navaidTimer;    // Timer for querying local navaids periodically
01382   int       navaidFilter;   // Navaid type to filter
01383   SNavaid   *navaidTuned;   // Pointer to tuned navaid
01384   
01385   // Navaid pointer
01386   float     navd;           // Navaid pointer (degrees)
01387   float     navdTarget;     // Navaid value to track to
01388   float     navdTimK;       // Exponential tracking time constant
01389   float     navdRatK;       // Linear tracking time constant
01390 };
01391 
01392 
01393 //
01394 // CRnavRadio
01395 //
01396 class CRnavRadio : public CRadio {
01397 public:
01398   CRnavRadio (void);
01399 
01400   // CStreamObject methods
01401 
01402   // CSubsystem methods
01403 //  virtual EMessageResult  ReceiveMessage (SMessage *msg);
01404 
01405 protected:
01406 };
01407 
01408 
01409 //
01410 // CCommRadio
01411 //
01412 class CCommRadio : public CRadio {
01413 public:
01414   CCommRadio (void);
01415 
01416   // CStreamObject methods
01417 
01418   // CSubsystem methods
01419 //  virtual EMessageResult  ReceiveMessage (SMessage *msg);
01420 
01421 protected:
01422   float       stby;           // Standby frequency
01423 };
01424 
01425 
01426 //
01427 // CHFCommRadio
01428 //
01429 class CHFCommRadio : public CCommRadio {
01430 public:
01431   CHFCommRadio (void);
01432 
01433   // CStreamObject methods
01434 
01435   // CSubsystem methods
01436 //  virtual EMessageResult  ReceiveMessage (SMessage *msg);
01437 
01438 protected:
01439 };
01440 
01441 
01442 //
01443 // CTransponderRadio
01444 //
01445 typedef enum {
01446   XPDR_OFF        = 0,
01447   XPDR_STARTUPA1  = 1,
01448   XPDR_STARTUPA2  = 2,
01449   XPDR_STANDBY    = 3,
01450   XPDR_TEST       = 4,
01451   XPDR_ON         = 5,
01452   XPDR_ALT        = 6
01453 } ETransponderMode;
01454 
01455 typedef enum {
01456   XPDR_SWITCH_OFF     = 0,
01457   XPDR_SWITCH_STANDBY = 3,
01458   XPDR_SWITCH_TEST    = 4,
01459   XPDR_SWITCH_ON      = 5,
01460   XPDR_SWITCH_ALT     = 6
01461 } ETransponderSwitchMode;
01462 
01463 class CTransponderRadio : public CRadio {
01464 public:
01465   CTransponderRadio (void);
01466 
01467   // CStreamObject methods
01468   virtual int       Read (SStream *stream, Tag tag);
01469 
01470   // CSubsystem methods
01471   virtual EMessageResult  ReceiveMessage (SMessage *msg);
01472   virtual void            TimeSlice (float dT);
01473 
01474 protected:
01475   ETransponderMode         mode;       // Operating mode
01476   ETransponderSwitchMode   smod;       // Switch mode
01477   char                     airc[16];   // Aircraft tail number
01478   int                      lspd;       // Minumum safe operating speed in kias
01479   int                      uspd;       // Maximum safe operating speed in kias
01480   SMessage                 mAlt;       // Altimeter message
01481 
01482   bool                     prevActive; // Used to detect power-on transition
01483   float                    startupTimer;
01484 
01485   int                      code;        // Transponder code
01486   bool                     reply;
01487   float                    replyTimer;
01488 };
01489 
01490 
01491 //
01492 // CADFRadio
01493 //
01494 class CADFRadio : public CNavRadio {
01495 public:
01496   CADFRadio (void);
01497 
01498   // CStreamObject methods
01499   virtual int       Read (SStream *stream, Tag tag);
01500 
01501   // CSubsystem methods
01502   virtual EMessageResult  ReceiveMessage (SMessage *msg);
01503   virtual void            TimeSlice (float dT);
01504 
01505   // CADFRadio methods
01506   void    ChangeADFFrequency (float &freq, int digit, int change);
01507 
01508 protected:
01509   // Display mode flags indicate the state of the display
01510   bool        adf;        // ADF active flag
01511   bool        frq;        // FRQ active flag
01512   bool        bfo;        // BFO active flag
01513   bool        flt;        // Flight timer active flag
01514   bool        et;         // Elapsed timer active flag
01515 
01516   // Elapsed and flight timers
01517   bool        etst;       // Elapsed timer started flag
01518   bool        fltStored;  // Stored state of FLT when FRQ active
01519   bool        etStored;   // Stored state of ET when FRQ active
01520   float       ftime;      // Flight timer in seconds
01521   float       etime;      // Elapsed timer in seconds
01522 
01523   // ??? Unknown purpose
01524   bool        frct;       // Fractional tuning enable flag
01525   bool        tone;       // Tone enable flag
01526   float       volu;       // Tone volume
01527 };
01528 
01529 
01530 //
01531 // CBKKX155Radio
01532 //
01533 typedef enum {
01534   COM_MODE_NORMAL,
01535   COM_MODE_SELECT,
01536   COM_MODE_PROGRAM
01537 } EBKKX155ComMode;
01538 
01539 typedef enum {
01540   NAV_MODE_STANDBY,
01541   NAV_MODE_CDI,
01542   NAV_MODE_BEARING,
01543   NAV_MODE_RADIAL,
01544   NAV_MODE_TIMER
01545 } EBKKX155NavMode;
01546 
01547 class CBKKX155Radio : public CRadio {
01548 public:
01549   CBKKX155Radio (void);
01550   virtual ~CBKKX155Radio (void);
01551 
01552   // CStreamObject methods
01553 
01554   // CSubsystem methods
01555   virtual EMessageResult  ReceiveMessage (SMessage *msg);
01556   virtual void  TimeSlice (float dT);
01557 
01558   // CBKKX155Radio methods
01559   void          RescanNavaids (void);
01560 
01561 protected:
01562   // Radio frequencies are in KHz
01563   float     comA, comS;
01564   float     navA, navS;
01565   float     temp;
01566 
01567   // Frequency step size
01568   float     comfractstep;
01569 
01570   // OBS setting (degrees)
01571   float     obs;
01572 
01573   // Navaid pointer (degrees)
01574   float     navd;
01575 
01576   // COM and NAV modes
01577   EBKKX155ComMode   comMode;
01578   EBKKX155NavMode   navMode;
01579 
01580   SNavaid   *navaidList;    // List of local navaids
01581   float     navaidTimer;    // Timer for querying local navaids periodically
01582   SNavaid   *navaidTuned;   // Pointer to tuned navaid
01583 };
01584 
01585 
01586 //
01587 // CBKKT76Radio
01588 //
01589 class CBKKT76Radio : public CTransponderRadio {
01590 public:
01591   CBKKT76Radio (void);
01592 
01593   // CStreamObject methods
01594   virtual int       Read (SStream *stream, Tag tag);
01595 
01596   // CSubsystem methods
01597   virtual EMessageResult  ReceiveMessage (SMessage *msg);
01598   virtual void            TimeSlice (float dT);
01599 
01600 protected:
01601   char              tempCode[5];
01602   int               entryDigit;
01603   bool              entryMode;
01604   float             entryTimer;
01605 };
01606 
01607 
01608 //
01609 // CBKKLN89GPSRadio
01610 //
01611 class CBKKLN89GPSRadio : public CRadio {
01612 public:
01613   CBKKLN89GPSRadio (void);
01614 
01615   // CStreamObject methods
01616   virtual int       Read (SStream *stream, Tag tag);
01617   virtual void      ReadFinished (void);
01618 
01619   // CSubsystem methods
01620 //  virtual EMessageResult  ReceiveMessage (SMessage *msg);
01621 
01622 protected:
01623   SMessage    mFMS;   // Flight Management System message
01624   SMessage    mSpd;   // Airspeed indicator message
01625 };
01626 
01627 
01628 //
01629 // CAudioPanelRadio
01630 //
01631 class CAudioPanelRadio : public CDependent {
01632 public:
01633   CAudioPanelRadio (void);
01634 
01635   // CStreamObject methods
01636 
01637   // CSubsystem methods
01638 //  virtual EMessageResult  ReceiveMessage (SMessage *msg);
01639 
01640 protected:
01641 };
01642 
01643 
01644 //
01645 // CBKKAP140Radio
01646 //
01647 class CBKKAP140Radio : public CDependent {
01648 public:
01649   CBKKAP140Radio (void);
01650 
01651   // CStreamObject methods
01652 //  virtual int   Read (SStream *stream, Tag tag);
01653 //  virtual void  ReadFinished (void);
01654 
01655   // CSubsystem methods
01656 //  virtual EMessageResult  ReceiveMessage (SMessage *msg);
01657 
01658 protected:
01659 };
01660 
01661 
01662 // *
01663 // * Fuel subsystems defined in GAS file
01664 // *
01665 
01666 //
01667 // CFuelSubsystem
01668 //
01669 // This class is the base for all subsystems found in the GAS (fuel system)
01670 //   stream file
01671 //
01672 class CFuelSubsystem : public CDependent {
01673 public:
01674   // Constructor
01675   CFuelSubsystem (void);
01676   virtual ~CFuelSubsystem (void);
01677 
01678   // CStreamObject methods
01679   virtual int   Read (SStream *stream, Tag tag);
01680 
01681 // Data members
01682 protected:
01683   char              name[64];   // UI readable name
01684   std::vector<Tag>  pipe;       // Fuel subsystem dependencies
01685 };
01686 
01687 //
01688 // CFuelTap
01689 //
01690 class CFuelTap : public CFuelSubsystem {
01691 public:
01692   // Constructor
01693   CFuelTap (void);
01694 
01695   // CStreamObject methods
01696   virtual int   Read (SStream *stream, Tag tag);
01697   virtual void  ReadFinished (void);
01698 
01699   // CSubsystem methods
01700   virtual EMessageResult  ReceiveMessage (SMessage *msg);
01701 
01702 // Data members
01703 protected:
01704   float     stff; // Startup fuel flow
01705   unsigned int  eNum; // Engine number
01706 
01707   float     gph;  // Fuel flow through tap (gallons per hour)
01708 };
01709 
01710 //
01711 // CFuelCell
01712 //
01713 class CFuelCell : public CFuelSubsystem {
01714 public:
01715   // Constructor
01716   CFuelCell (void);
01717 
01718   // CStreamObject methods
01719   virtual int   Read (SStream *stream, Tag tag);
01720   virtual void  ReadFinished (void);
01721 
01722   // CSubsystem methods
01723   virtual EMessageResult  ReceiveMessage (SMessage *msg);
01724 
01725 // Data members
01726 protected:
01727   float cap;    // Capacity (gallons)
01728   float qty;    // Default quantity (gallons)
01729   SVector bPos;   // Position
01730   float basP;   // Base pressure (psi)
01731 
01732   float gals;   // Fuel quantity in gallons
01733 };
01734 
01735 
01736 //
01737 // CFuelHeater
01738 //
01739 class CFuelHeater : public CFuelSubsystem {
01740 public:
01741   // Constructor
01742   CFuelHeater (void);
01743 
01744   // CStreamObject methods
01745   virtual int   Read (SStream *stream, Tag tag);
01746 
01747 // Data members
01748 protected:
01749 };
01750 
01751 
01752 //
01753 // CFuelMath
01754 //
01755 class CFuelMath : public CFuelSubsystem {
01756 public:
01757   // Constructor
01758   CFuelMath (void);
01759 
01760   // CStreamObject methods
01761   virtual int   Read (SStream *stream, Tag tag);
01762 
01763 // Data members
01764 protected:
01765 };
01766 
01767 
01768 //
01769 // CFuelPump
01770 //
01771 class CFuelPump : public CFuelSubsystem {
01772 public:
01773   // Constructor
01774   CFuelPump (void);
01775 
01776   // CStreamObject methods
01777   virtual int   Read (SStream *stream, Tag tag);
01778 
01779 // Data members
01780 protected:
01781   float setP;   // Pump pressure
01782   bool  pass;   // Allow fuel passthrough when system is off
01783 };
01784 
01785 
01786 //
01787 // CFuelSource
01788 //
01789 class CFuelSource : public CFuelSubsystem {
01790 public:
01791   // Constructor
01792   CFuelSource (void);
01793 
01794   // CStreamObject methods
01795   virtual int   Read (SStream *stream, Tag tag);
01796 
01797 // Data members
01798 protected:
01799 };
01800 
01801 
01802 //
01803 // CFuelTank
01804 //
01805 class CFuelTank : public CFuelSubsystem {
01806 public:
01807   // Constructor
01808   CFuelTank (void);
01809 
01810   // CStreamObject methods
01811   virtual int   Read (SStream *stream, Tag tag);
01812 
01813 // Data members
01814 protected:
01815 };
01816 
01817 
01818 //
01819 // CEngineFuelPump
01820 //
01821 class CEngineFuelPump : public CFuelSubsystem {
01822 public:
01823   // Constructor
01824   CEngineFuelPump (void);
01825 
01826   // CStreamObject methods
01827   virtual int   Read (SStream *stream, Tag tag);
01828 
01829 // Data members
01830 protected:
01831 };
01832 
01833 
01834 //
01835 // CFuelManagement
01836 //
01837 class CFuelManagement : public CFuelSubsystem {
01838 public:
01839   // Constructor
01840   CFuelManagement (void);
01841 
01842   // CStreamObject methods
01843   virtual int   Read (SStream *stream, Tag tag);
01844 
01845 // Data members
01846 protected:
01847 };
01848 
01849 
01850 //
01851 // CAPUFuelSource
01852 //
01853 class CAPUFuelSource : public CFuelSubsystem {
01854 public:
01855   // Constructor
01856   CAPUFuelSource (void);
01857 
01858   // CStreamObject methods
01859   virtual int   Read (SStream *stream, Tag tag);
01860 
01861 // Data members
01862 protected:
01863 };
01864 
01865 
01866 /*
01867  * Actively implemented subsystems above here
01868  */
01869 
01870 /*
01871 //
01872 // COnGroundMonitor
01873 //
01874 // This subystem monitors whether the user vehicle is sitting on the ground
01875 //
01876 class COnGroundMonitor : public CDependent {
01877 public:
01878   COnGroundMonitor (void);
01879 
01880   // CStreamObject methods
01881 //  virtual int   Read (SStream *stream, Tag tag);
01882 //  virtual void  ReadFinished (void);
01883 //  virtual void  Write (SStream *stream);
01884 
01885   // CSubsystem methods
01886 //  virtual void  ReceiveMessage (SMessage *msg);
01887 //  virtual void  Update (float dT);
01888 };
01889 
01890 //
01891 // CAltitudeMonitor
01892 //
01893 // This subsystem monitors the user vehicle altitude and compares it to a preset
01894 //   altitude threshold.  The subsystem state reflects whether the user vehicle
01895 //   is above or below the threshold altitude.
01896 //
01897 class CAltitudeMonitor : public CDependent {
01898 public:
01899   CAltitudeMonitor (void);
01900 
01901   // CStreamObject methods
01902   virtual int   Read (SStream *stream, Tag tag);
01903   virtual void  ReadFinished (void);
01904   virtual void  Write (SStream *stream);
01905 
01906   // CSubsystem methods
01907 //  virtual void  ReceiveMessage (SMessage *msg);
01908 //  virtual void  Update (float dT);
01909 };
01910 
01911 //
01912 // CSpeedMonitor
01913 //
01914 // This subsystem monitors the user vehicle airspeed and compares it to a preset
01915 //   threshold value.  The subsystem state reflects whether the user vehicle
01916 //   is travelling faster or slower than the threshold airspeed.
01917 //
01918 class CSpeedMonitor : public CDependent {
01919 public:
01920   CSpeedMonitor (void);
01921 
01922   // CStreamObject methods
01923   virtual int   Read (SStream *stream, Tag tag);
01924   virtual void  ReadFinished (void);
01925   virtual void  Write (SStream *stream);
01926 
01927   // CSubsystem methods
01928 //  virtual void  ReceiveMessage (SMessage *msg);
01929 //  virtual void  Update (float dT);
01930 };
01931 
01932 //
01933 // CEngineStatus
01934 //
01935 // This subsystem monitors the status of a single engine, and sets its
01936 //   indication value based on whether the engine is stopped, starting or
01937 //   running
01938 //
01939 class CEngineStatus : public CDependent {
01940 public:
01941   CEngineStatus (void);
01942 
01943   // CStreamObject methods
01944   virtual int   Read (SStream *stream, Tag tag);
01945   virtual void  ReadFinished (void);
01946   virtual void  Write (SStream *stream);
01947 
01948   // CSubsystem methods
01949 //  virtual void  ReceiveMessage (SMessage *msg);
01950 //  virtual void  Update (float dT);
01951 };
01952 
01953 
01954 //
01955 // CTimeDelay
01956 //
01957 // This monitor subsystem can be configured to (do something) at periodic
01958 //   time intervals
01959 //
01960 class CTimeDelay : public CDependent {
01961 public:
01962   CTimeDelay (void);
01963 
01964   // CStreamObject methods
01965   virtual int   Read (SStream *stream, Tag tag);
01966   virtual void  ReadFinished (void);
01967   virtual void  Write (SStream *stream);
01968 
01969   // CSubsystem methods
01970 //  virtual void  ReceiveMessage (SMessage *msg);
01971 //  virtual void  Update (float dT);
01972 };
01973 
01974 //
01975 // CKeyedSystem
01976 //
01977 class CKeyedSystem : public CSubsystem {
01978 public:
01979   CKeyedSystem (void);
01980 
01981   // CStreamObject methods
01982   virtual int   Read (SStream *stream, Tag tag);
01983   virtual void  ReadFinished (void);
01984   virtual void  Write (SStream *stream);
01985 
01986   // CSubsystem methods
01987 //  virtual void  ReceiveMessage (SMessage *msg);
01988 //  virtual void  Update (float dT);
01989 };
01990 
01991 
01992 
01993 //
01994 // CTachometerBase
01995 //
01996 class CTachometerBase : public CEngineSubsystem {
01997 public:
01998   CTachometerBase (void);
01999 
02000   // CStreamObject methods
02001   virtual int   Read (SStream *stream, Tag tag);
02002   virtual void  ReadFinished (void);
02003   virtual void  Write (SStream *stream);
02004 
02005   // CSubsystem methods
02006 //  virtual void  ReceiveMessage (SMessage *msg);
02007 //  virtual void  Update (float dT);
02008 };
02009 
02010 
02011 //
02012 // CTachometerV1
02013 //
02014 class CTachometerV1 : public CTachometerBase {
02015 public:
02016   CTachometerV1 (void);
02017 
02018   // CStreamObject methods
02019   virtual int   Read (SStream *stream, Tag tag);
02020   virtual void  ReadFinished (void);
02021   virtual void  Write (SStream *stream);
02022 
02023   // CSubsystem methods
02024 //  virtual void  ReceiveMessage (SMessage *msg);
02025 //  virtual void  Update (float dT);
02026 };
02027 
02028 
02029 //
02030 // CThrottleControlBase
02031 //
02032 class CThrottleControlBase : public CEngineControl {
02033 public:
02034   CThrottleControlBase (void);
02035 
02036   // CStreamObject methods
02037   virtual int   Read (SStream *stream, Tag tag);
02038   virtual void  ReadFinished (void);
02039   virtual void  Write (SStream *stream);
02040 
02041   // CSubsystem methods
02042 //  virtual void  ReceiveMessage (SMessage *msg);
02043 //  virtual void  Update (float dT);
02044 };
02045 
02046 //
02047 // CThrottleControlV1
02048 //
02049 class CThrottleControlV1 : public CEngineControl {
02050 public:
02051   CThrottleControlV1 (void);
02052 
02053   // CStreamObject methods
02054   virtual int   Read (SStream *stream, Tag tag);
02055   virtual void  ReadFinished (void);
02056   virtual void  Write (SStream *stream);
02057 
02058   // CSubsystem methods
02059 //  virtual void  ReceiveMessage (SMessage *msg);
02060 //  virtual void  Update (float dT);
02061 };
02062 
02063 //
02064 // CMixtureControlBase
02065 //
02066 class CMixtureControlBase : public CEngineControl {
02067 public:
02068   CMixtureControlBase (void);
02069 
02070   // CStreamObject methods
02071   virtual int   Read (SStream *stream, Tag tag);
02072   virtual void  ReadFinished (void);
02073   virtual void  Write (SStream *stream);
02074 
02075   // CSubsystem methods
02076 //  virtual void  ReceiveMessage (SMessage *msg);
02077 //  virtual void  Update (float dT);
02078 };
02079 
02080 //
02081 // CMixtureControlV1
02082 //
02083 class CMixtureControlV1 : public CMixtureControlBase {
02084 public:
02085   CMixtureControlV1 (void);
02086 
02087   // CStreamObject methods
02088   virtual int   Read (SStream *stream, Tag tag);
02089   virtual void  ReadFinished (void);
02090   virtual void  Write (SStream *stream);
02091 
02092   // CSubsystem methods
02093 //  virtual void  ReceiveMessage (SMessage *msg);
02094 //  virtual void  Update (float dT);
02095 };
02096 
02097 //
02098 // CPropellerControlV1
02099 //
02100 // This monitor subsystem can be configured to (do something) at periodic
02101 //   time intervals
02102 //
02103 class CPropellerControlV1 : public CSubsystem {
02104 public:
02105   CPropellerControlV1 (void);
02106 
02107   // CStreamObject methods
02108   virtual int   Read (SStream *stream, Tag tag);
02109   virtual void  ReadFinished (void);
02110   virtual void  Write (SStream *stream);
02111 
02112   // CSubsystem methods
02113 //  virtual void  ReceiveMessage (SMessage *msg);
02114 //  virtual void  Update (float dT);
02115 };
02116 
02117 
02118 //
02119 // CPrimeControlV1
02120 //
02121 class CPrimeControlV1 : public CSubsystem {
02122 public:
02123   CPrimeControlV1 (void);
02124 
02125   // CStreamObject methods
02126   virtual int   Read (SStream *stream, Tag tag);
02127   virtual void  ReadFinished (void);
02128   virtual void  Write (SStream *stream);
02129 
02130   // CSubsystem methods
02131 //  virtual void  ReceiveMessage (SMessage *msg);
02132 //  virtual void  Update (float dT);
02133 };
02134 
02135 //
02136 // CEngineAntiIceV1
02137 //
02138 class CEngineAntiIceV1 : public CSubsystem {
02139 public:
02140   CEngineAntiIceV1 (void);
02141 
02142   // CStreamObject methods
02143   virtual int   Read (SStream *stream, Tag tag);
02144   virtual void  ReadFinished (void);
02145   virtual void  Write (SStream *stream);
02146 
02147   // CSubsystem methods
02148 //  virtual void  ReceiveMessage (SMessage *msg);
02149 //  virtual void  Update (float dT);
02150 };
02151 
02152 //
02153 // CIdleControlV1
02154 //
02155 class CIdleControlV1 : public CSubsystem {
02156 public:
02157   CIdleControlV1 (void);
02158 
02159   // CStreamObject methods
02160   virtual int   Read (SStream *stream, Tag tag);
02161   virtual void  ReadFinished (void);
02162   virtual void  Write (SStream *stream);
02163 
02164   // CSubsystem methods
02165 //  virtual void  ReceiveMessage (SMessage *msg);
02166 //  virtual void  Update (float dT);
02167 };
02168 
02169 
02170 */
02171 
02172 
02173 
02174 //
02175 // Pitot-Static Port
02176 //
02177 // This object represents a single port in the pitot-static (PSS) system
02178 //
02179 class CPitotStaticPort : public CDependent {
02180 public:
02181   CPitotStaticPort (void);
02182 
02183   // CStreamObject members
02184   virtual int   Read (SStream *stream, Tag tag);
02185   virtual void  ReadFinished (void);
02186   virtual void  Write (SStream *stream);
02187 
02188 protected:
02189   EPortType type;   // PITOT or STATIC port type
02190   SVector   bPos;   // Location relative to aircraft center of gravity
02191   int     grup;   // Group number
02192   EPortFace face;   // LEFT or RIGHT facing
02193   bool    inie;   // Interior port?
02194   bool    wont;   // Port won't ice up
02195 };
02196 
02197 #endif // SUBSYSTEMS_H
SourceForge.net Logo Documentation generated by doxygen