1 // annunciator.hxx - manage the annunciator states
2 // Written by Curtis Olson, started May, 2003.
6 #include <simgear/math/interpolater.hxx>
8 #include <Main/fg_props.hxx>
9 #include <Main/util.hxx>
11 #include "annunciator.hxx"
14 Annunciator::Annunciator ():
23 Annunciator::~Annunciator ()
30 _volts = fgGetNode( "/systems/electrical/volts", true );
31 _vac_l = fgGetNode( "/systems/vacuum[0]/suction-inhg", true );
32 _vac_r = fgGetNode( "/systems/vacuum[1]/suction-inhg", true );
33 _fuel_l = fgGetNode( "/consumables/fuel/tank[0]/level-gal_us", true );
34 _fuel_r = fgGetNode( "/consumables/fuel/tank[1]/level-gal_us", true );
35 _oil_px = fgGetNode( "/engines/engine[0]/oil-pressure-psi", true );
36 _elec_serv = fgGetNode( "/systems/electrical/serviceable", true );
38 _ann_volts = fgGetNode( "/instrumentation/annunciator/volts", true );
39 _ann_vac_l = fgGetNode( "/instrumentation/annunciator/vacuum-left", true );
40 _ann_vac_r = fgGetNode( "/instrumentation/annunciator/vacuum-right", true );
41 _ann_fuel_l = fgGetNode( "/instrumentation/annunciator/fuel-left", true );
42 _ann_fuel_r = fgGetNode( "/instrumentation/annunciator/fuel-right", true );
43 _ann_oil_px = fgGetNode( "/instrumentation/annunciator/oil-pressure", true );
47 Annunciator::update (double dt)
56 if ( _volts->getDoubleValue() < 5.0 || !_elec_serv->getBoolValue() ) {
57 // Not enough juice to illuminate the display
58 _ann_volts->setBoolValue( false );
59 _ann_vac_l->setBoolValue( false );
60 _ann_vac_r->setBoolValue( false );
61 _ann_fuel_l->setBoolValue( false );
62 _ann_fuel_r->setBoolValue( false );
63 _ann_oil_px->setBoolValue( false );
66 if ( _volts->getDoubleValue() < 24.5 ) {
68 double rem = timer0 - (int)timer0;
70 _ann_volts->setBoolValue( true );
72 _ann_volts->setBoolValue( false );
75 _ann_volts->setBoolValue( true );
78 _ann_volts->setBoolValue( false );
82 if ( _fuel_l->getDoubleValue() < 5.0
83 && _fuel_r->getDoubleValue() < 5.0 )
86 double rem = timer0 - (int)timer0;
88 _ann_fuel_l->setBoolValue( true );
89 _ann_fuel_r->setBoolValue( true );
91 _ann_fuel_l->setBoolValue( false );
92 _ann_fuel_r->setBoolValue( false );
95 _ann_fuel_l->setBoolValue( true );
96 _ann_fuel_r->setBoolValue( true );
98 } else if ( _fuel_l->getDoubleValue() < 5.0 ) {
100 double rem = timer0 - (int)timer0;
102 _ann_fuel_l->setBoolValue( true );
104 _ann_fuel_l->setBoolValue( false );
107 _ann_fuel_l->setBoolValue( true );
109 _ann_fuel_r->setBoolValue( false );
110 } else if ( _fuel_r->getDoubleValue() < 5.0 ) {
112 double rem = timer0 - (int)timer0;
114 _ann_fuel_r->setBoolValue( true );
116 _ann_fuel_r->setBoolValue( false );
119 _ann_fuel_r->setBoolValue( true );
121 _ann_fuel_l->setBoolValue( false );
123 _ann_fuel_l->setBoolValue( false );
124 _ann_fuel_r->setBoolValue( false );
129 if ( _vac_l->getDoubleValue() < 3.0
130 && _vac_r->getDoubleValue() < 3.0 )
133 double rem = timer0 - (int)timer0;
135 _ann_vac_l->setBoolValue( true );
136 _ann_vac_r->setBoolValue( true );
138 _ann_vac_l->setBoolValue( false );
139 _ann_vac_r->setBoolValue( false );
142 _ann_vac_l->setBoolValue( true );
143 _ann_vac_r->setBoolValue( true );
145 } else if ( _vac_l->getDoubleValue() < 3.0 ) {
147 double rem = timer0 - (int)timer0;
149 _ann_vac_l->setBoolValue( true );
151 _ann_vac_l->setBoolValue( false );
154 _ann_vac_l->setBoolValue( true );
156 _ann_vac_r->setBoolValue( false );
157 } else if ( _vac_r->getDoubleValue() < 3.0 ) {
159 double rem = timer0 - (int)timer0;
161 _ann_vac_r->setBoolValue( true );
163 _ann_vac_r->setBoolValue( false );
166 _ann_vac_r->setBoolValue( true );
168 _ann_vac_l->setBoolValue( false );
170 _ann_vac_l->setBoolValue( false );
171 _ann_vac_r->setBoolValue( false );
176 if ( _oil_px->getDoubleValue() < 20.0 ) {
178 double rem = timer0 - (int)timer0;
180 _ann_oil_px->setBoolValue( true );
182 _ann_oil_px->setBoolValue( false );
185 _ann_oil_px->setBoolValue( true );
188 _ann_oil_px->setBoolValue( false );
195 // end of annunciator.cxx