Add several common engine faults to the net_ctrls structure.
This commit is contained in:
parent
e6958608ce
commit
6d0456df08
2 changed files with 55 additions and 6 deletions
|
@ -119,6 +119,7 @@ void FGProps2NetCtrls( FGNetCtrls *net, bool honor_freezes,
|
||||||
1.0 ) >= 1.0;
|
1.0 ) >= 1.0;
|
||||||
net->num_engines = FGNetCtrls::FG_MAX_ENGINES;
|
net->num_engines = FGNetCtrls::FG_MAX_ENGINES;
|
||||||
for ( i = 0; i < FGNetCtrls::FG_MAX_ENGINES; ++i ) {
|
for ( i = 0; i < FGNetCtrls::FG_MAX_ENGINES; ++i ) {
|
||||||
|
// Controls
|
||||||
node = fgGetNode("/controls/engines/engine", i );
|
node = fgGetNode("/controls/engines/engine", i );
|
||||||
net->throttle[i] = node->getDoubleValue( "throttle", 0.0 );
|
net->throttle[i] = node->getDoubleValue( "throttle", 0.0 );
|
||||||
net->mixture[i] = node->getDoubleValue( "mixture", 0.0 );
|
net->mixture[i] = node->getDoubleValue( "mixture", 0.0 );
|
||||||
|
@ -131,7 +132,6 @@ void FGProps2NetCtrls( FGNetCtrls *net, bool honor_freezes,
|
||||||
// cout << "Starter -> " << node->getIntValue( "starter", false )
|
// cout << "Starter -> " << node->getIntValue( "starter", false )
|
||||||
// << endl;
|
// << endl;
|
||||||
}
|
}
|
||||||
node = fgGetNode("/controls", true);
|
|
||||||
net->fuel_pump_power[i]
|
net->fuel_pump_power[i]
|
||||||
= node->getDoubleValue( "/systems/electrical/outputs/fuel-pump",
|
= node->getDoubleValue( "/systems/electrical/outputs/fuel-pump",
|
||||||
1.0 ) >= 1.0;
|
1.0 ) >= 1.0;
|
||||||
|
@ -139,6 +139,20 @@ void FGProps2NetCtrls( FGNetCtrls *net, bool honor_freezes,
|
||||||
net->starter_power[i]
|
net->starter_power[i]
|
||||||
= node->getDoubleValue( "/systems/electrical/outputs/starter",
|
= node->getDoubleValue( "/systems/electrical/outputs/starter",
|
||||||
1.0 ) >= 1.0;
|
1.0 ) >= 1.0;
|
||||||
|
|
||||||
|
// Faults
|
||||||
|
SGPropertyNode *faults = node->getChild( "faults", 0, true );
|
||||||
|
net->engine_ok[i] = faults->getBoolValue( "serviceable", true );
|
||||||
|
net->mag_left_ok[i]
|
||||||
|
= faults->getBoolValue( "left-magneto-serviceable", true );
|
||||||
|
net->mag_right_ok[i]
|
||||||
|
= faults->getBoolValue( "right-magneto-serviceable", true);
|
||||||
|
net->spark_plugs_ok[i]
|
||||||
|
= faults->getBoolValue( "spark-plugs-serviceable", true );
|
||||||
|
net->oil_press_status[i]
|
||||||
|
= faults->getIntValue( "oil-pressure-status", 0 );
|
||||||
|
net->fuel_pump_ok[i]
|
||||||
|
= faults->getBoolValue( "fuel-pump-serviceable", true );
|
||||||
}
|
}
|
||||||
net->num_tanks = FGNetCtrls::FG_MAX_TANKS;
|
net->num_tanks = FGNetCtrls::FG_MAX_TANKS;
|
||||||
for ( i = 0; i < FGNetCtrls::FG_MAX_TANKS; ++i ) {
|
for ( i = 0; i < FGNetCtrls::FG_MAX_TANKS; ++i ) {
|
||||||
|
@ -216,12 +230,18 @@ void FGProps2NetCtrls( FGNetCtrls *net, bool honor_freezes,
|
||||||
htond(net->flaps);
|
htond(net->flaps);
|
||||||
net->flaps_power = htonl(net->flaps_power);
|
net->flaps_power = htonl(net->flaps_power);
|
||||||
for ( i = 0; i < FGNetCtrls::FG_MAX_ENGINES; ++i ) {
|
for ( i = 0; i < FGNetCtrls::FG_MAX_ENGINES; ++i ) {
|
||||||
|
net->magnetos[i] = htonl(net->magnetos[i]);
|
||||||
|
net->starter_power[i] = htonl(net->starter_power[i]);
|
||||||
htond(net->throttle[i]);
|
htond(net->throttle[i]);
|
||||||
htond(net->mixture[i]);
|
htond(net->mixture[i]);
|
||||||
net->fuel_pump_power[i] = htonl(net->fuel_pump_power[i]);
|
net->fuel_pump_power[i] = htonl(net->fuel_pump_power[i]);
|
||||||
htond(net->prop_advance[i]);
|
htond(net->prop_advance[i]);
|
||||||
net->magnetos[i] = htonl(net->magnetos[i]);
|
net->engine_ok[i] = htonl(net->engine_ok[i]);
|
||||||
net->starter_power[i] = htonl(net->starter_power[i]);
|
net->mag_left_ok[i] = htonl(net->mag_left_ok[i]);
|
||||||
|
net->mag_right_ok[i] = htonl(net->mag_right_ok[i]);
|
||||||
|
net->spark_plugs_ok[i] = htonl(net->spark_plugs_ok[i]);
|
||||||
|
net->oil_press_status[i] = htonl(net->oil_press_status[i]);
|
||||||
|
net->fuel_pump_ok[i] = htonl(net->fuel_pump_ok[i]);
|
||||||
}
|
}
|
||||||
net->num_engines = htonl(net->num_engines);
|
net->num_engines = htonl(net->num_engines);
|
||||||
for ( i = 0; i < FGNetCtrls::FG_MAX_TANKS; ++i ) {
|
for ( i = 0; i < FGNetCtrls::FG_MAX_TANKS; ++i ) {
|
||||||
|
@ -272,6 +292,12 @@ void FGNetCtrls2Props( FGNetCtrls *net, bool honor_freezes,
|
||||||
htond(net->mixture[i]);
|
htond(net->mixture[i]);
|
||||||
net->fuel_pump_power[i] = htonl(net->fuel_pump_power[i]);
|
net->fuel_pump_power[i] = htonl(net->fuel_pump_power[i]);
|
||||||
htond(net->prop_advance[i]);
|
htond(net->prop_advance[i]);
|
||||||
|
net->engine_ok[i] = htonl(net->engine_ok[i]);
|
||||||
|
net->mag_left_ok[i] = htonl(net->mag_left_ok[i]);
|
||||||
|
net->mag_right_ok[i] = htonl(net->mag_right_ok[i]);
|
||||||
|
net->spark_plugs_ok[i] = htonl(net->spark_plugs_ok[i]);
|
||||||
|
net->oil_press_status[i] = htonl(net->oil_press_status[i]);
|
||||||
|
net->fuel_pump_ok[i] = htonl(net->fuel_pump_ok[i]);
|
||||||
}
|
}
|
||||||
net->num_tanks = htonl(net->num_tanks);
|
net->num_tanks = htonl(net->num_tanks);
|
||||||
for ( i = 0; i < net->num_tanks; ++i ) {
|
for ( i = 0; i < net->num_tanks; ++i ) {
|
||||||
|
@ -311,12 +337,25 @@ void FGNetCtrls2Props( FGNetCtrls *net, bool honor_freezes,
|
||||||
fgSetBool( "/systems/electrical/outputs/flaps", net->flaps_power );
|
fgSetBool( "/systems/electrical/outputs/flaps", net->flaps_power );
|
||||||
|
|
||||||
for ( i = 0; i < FGNetCtrls::FG_MAX_ENGINES; ++i ) {
|
for ( i = 0; i < FGNetCtrls::FG_MAX_ENGINES; ++i ) {
|
||||||
|
// Controls
|
||||||
node = fgGetNode("/controls/engines/engine", i);
|
node = fgGetNode("/controls/engines/engine", i);
|
||||||
node->getChild( "throttle" )->setDoubleValue( net->throttle[i] );
|
node->getChild( "throttle" )->setDoubleValue( net->throttle[i] );
|
||||||
node->getChild( "mixture" )->setDoubleValue( net->mixture[i] );
|
node->getChild( "mixture" )->setDoubleValue( net->mixture[i] );
|
||||||
node->getChild( "propeller-pitch" )
|
node->getChild( "propeller-pitch" )
|
||||||
->setDoubleValue( net->prop_advance[i] );
|
->setDoubleValue( net->prop_advance[i] );
|
||||||
node->getChild( "magnetos" )->setDoubleValue( net->magnetos[i] );
|
node->getChild( "magnetos" )->setDoubleValue( net->magnetos[i] );
|
||||||
|
|
||||||
|
// Faults
|
||||||
|
SGPropertyNode *faults = node->getNode( "faults", true );
|
||||||
|
faults->setBoolValue( "serviceable", net->engine_ok[i] );
|
||||||
|
faults->setBoolValue( "left-magneto-serviceable",
|
||||||
|
net->mag_left_ok[i] );
|
||||||
|
faults->setBoolValue( "right-magneto-serviceable",
|
||||||
|
net->mag_right_ok[i]);
|
||||||
|
faults->setBoolValue( "spark-plugs-serviceable",
|
||||||
|
net->spark_plugs_ok[i] );
|
||||||
|
faults->setIntValue( "oil-pressure-status", net->oil_press_status[i] );
|
||||||
|
faults->setBoolValue( "fuel-pump-serviceable", net->fuel_pump_ok[i] );
|
||||||
}
|
}
|
||||||
|
|
||||||
fgSetBool( "/systems/electrical/outputs/fuel-pump",
|
fgSetBool( "/systems/electrical/outputs/fuel-pump",
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
# error This library requires C++
|
# error This library requires C++
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const int FG_NET_CTRLS_VERSION = 14;
|
const int FG_NET_CTRLS_VERSION = 15;
|
||||||
|
|
||||||
|
|
||||||
// Define a structure containing the control parameters
|
// Define a structure containing the control parameters
|
||||||
|
@ -53,6 +53,8 @@ public:
|
||||||
double elevator_trim; // -1 ... 1
|
double elevator_trim; // -1 ... 1
|
||||||
double rudder; // -1 ... 1
|
double rudder; // -1 ... 1
|
||||||
double flaps; // 0 ... 1
|
double flaps; // 0 ... 1
|
||||||
|
|
||||||
|
// Aero control faults
|
||||||
bool flaps_power; // true = power available
|
bool flaps_power; // true = power available
|
||||||
|
|
||||||
// Engine controls
|
// Engine controls
|
||||||
|
@ -64,6 +66,14 @@ public:
|
||||||
bool fuel_pump_power[FG_MAX_ENGINES];// true = on
|
bool fuel_pump_power[FG_MAX_ENGINES];// true = on
|
||||||
double prop_advance[FG_MAX_ENGINES]; // 0 ... 1
|
double prop_advance[FG_MAX_ENGINES]; // 0 ... 1
|
||||||
|
|
||||||
|
// Engine faults
|
||||||
|
bool engine_ok[FG_MAX_ENGINES];
|
||||||
|
bool mag_left_ok[FG_MAX_ENGINES];
|
||||||
|
bool mag_right_ok[FG_MAX_ENGINES];
|
||||||
|
bool spark_plugs_ok[FG_MAX_ENGINES]; // false = fouled plugs
|
||||||
|
int oil_press_status[FG_MAX_ENGINES]; // 0 = normal, 1 = low, 2 = full fail
|
||||||
|
bool fuel_pump_ok[FG_MAX_ENGINES];
|
||||||
|
|
||||||
// Fuel management
|
// Fuel management
|
||||||
int num_tanks; // number of valid tanks
|
int num_tanks; // number of valid tanks
|
||||||
bool fuel_selector[FG_MAX_TANKS]; // false = off, true = on
|
bool fuel_selector[FG_MAX_TANKS]; // false = off, true = on
|
||||||
|
|
Loading…
Reference in a new issue