Begin interfacing with the electrical model.
This commit is contained in:
parent
d16f082500
commit
427505cf37
3 changed files with 39 additions and 22 deletions
|
@ -398,8 +398,13 @@ bool FGATC610x::open() {
|
||||||
dme_kt = fgGetNode( "/radios/dme/speed-kt", true );
|
dme_kt = fgGetNode( "/radios/dme/speed-kt", true );
|
||||||
dme_nm = fgGetNode( "/radios/dme/distance-nm", true );
|
dme_nm = fgGetNode( "/radios/dme/distance-nm", true );
|
||||||
|
|
||||||
navcom1_power = fgGetNode( "/radios/comm[0]/inputs/power-btn", true );
|
navcom1_bus_power = fgGetNode( "/systems/electrical/outputs/navcomm[0]",
|
||||||
navcom2_power = fgGetNode( "/radios/comm[1]/inputs/power-btn", true );
|
true );
|
||||||
|
navcom2_bus_power = fgGetNode( "/systems/electrical/outputs/navcomm[1]",
|
||||||
|
true );
|
||||||
|
|
||||||
|
navcom1_power_btn = fgGetNode( "/radios/comm[0]/inputs/power-btn", true );
|
||||||
|
navcom2_power_btn = fgGetNode( "/radios/comm[1]/inputs/power-btn", true );
|
||||||
|
|
||||||
com1_freq = fgGetNode( "/radios/comm[0]/frequencies/selected-mhz", true );
|
com1_freq = fgGetNode( "/radios/comm[0]/frequencies/selected-mhz", true );
|
||||||
com1_stby_freq
|
com1_stby_freq
|
||||||
|
@ -674,7 +679,7 @@ bool FGATC610x::do_radio_switches() {
|
||||||
fgSetBool( "/radios/comm[0]/inputs/power-btn",
|
fgSetBool( "/radios/comm[0]/inputs/power-btn",
|
||||||
radio_switch_data[7] & 0x01 );
|
radio_switch_data[7] & 0x01 );
|
||||||
|
|
||||||
if ( navcom1_power->getBoolValue() ) {
|
if ( navcom1_has_power() ) {
|
||||||
// Com1 Swap
|
// Com1 Swap
|
||||||
int com1_swap = !((radio_switch_data[7] >> 1) & 0x01);
|
int com1_swap = !((radio_switch_data[7] >> 1) & 0x01);
|
||||||
static int last_com1_swap;
|
static int last_com1_swap;
|
||||||
|
@ -691,7 +696,7 @@ bool FGATC610x::do_radio_switches() {
|
||||||
fgSetBool( "/radios/comm[1]/inputs/power-btn",
|
fgSetBool( "/radios/comm[1]/inputs/power-btn",
|
||||||
radio_switch_data[15] & 0x01 );
|
radio_switch_data[15] & 0x01 );
|
||||||
|
|
||||||
if ( navcom2_power->getBoolValue() ) {
|
if ( navcom2_has_power() ) {
|
||||||
// Com2 Swap
|
// Com2 Swap
|
||||||
int com2_swap = !((radio_switch_data[15] >> 1) & 0x01);
|
int com2_swap = !((radio_switch_data[15] >> 1) & 0x01);
|
||||||
static int last_com2_swap;
|
static int last_com2_swap;
|
||||||
|
@ -704,7 +709,7 @@ bool FGATC610x::do_radio_switches() {
|
||||||
last_com2_swap = com2_swap;
|
last_com2_swap = com2_swap;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( navcom1_power->getBoolValue() ) {
|
if ( navcom1_has_power() ) {
|
||||||
// Nav1 Swap
|
// Nav1 Swap
|
||||||
int nav1_swap = radio_switch_data[11] & 0x01;
|
int nav1_swap = radio_switch_data[11] & 0x01;
|
||||||
static int last_nav1_swap;
|
static int last_nav1_swap;
|
||||||
|
@ -717,7 +722,7 @@ bool FGATC610x::do_radio_switches() {
|
||||||
last_nav1_swap = nav1_swap;
|
last_nav1_swap = nav1_swap;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( navcom2_power->getBoolValue() ) {
|
if ( navcom2_has_power() ) {
|
||||||
// Nav2 Swap
|
// Nav2 Swap
|
||||||
int nav2_swap = !(radio_switch_data[19] & 0x01);
|
int nav2_swap = !(radio_switch_data[19] & 0x01);
|
||||||
static int last_nav2_swap;
|
static int last_nav2_swap;
|
||||||
|
@ -730,7 +735,7 @@ bool FGATC610x::do_radio_switches() {
|
||||||
last_nav2_swap = nav2_swap;
|
last_nav2_swap = nav2_swap;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( navcom1_power->getBoolValue() ) {
|
if ( navcom1_has_power() ) {
|
||||||
// Com1 Tuner
|
// Com1 Tuner
|
||||||
int com1_tuner_fine = ((radio_switch_data[5] >> 4) & 0x0f) - 1;
|
int com1_tuner_fine = ((radio_switch_data[5] >> 4) & 0x0f) - 1;
|
||||||
int com1_tuner_coarse = (radio_switch_data[5] & 0x0f) - 1;
|
int com1_tuner_coarse = (radio_switch_data[5] & 0x0f) - 1;
|
||||||
|
@ -782,7 +787,7 @@ bool FGATC610x::do_radio_switches() {
|
||||||
coarse_freq + fine_freq / 40.0 );
|
coarse_freq + fine_freq / 40.0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( navcom2_power->getBoolValue() ) {
|
if ( navcom2_has_power() ) {
|
||||||
// Com2 Tuner
|
// Com2 Tuner
|
||||||
int com2_tuner_fine = ((radio_switch_data[13] >> 4) & 0x0f) - 1;
|
int com2_tuner_fine = ((radio_switch_data[13] >> 4) & 0x0f) - 1;
|
||||||
int com2_tuner_coarse = (radio_switch_data[13] & 0x0f) - 1;
|
int com2_tuner_coarse = (radio_switch_data[13] & 0x0f) - 1;
|
||||||
|
@ -834,7 +839,7 @@ bool FGATC610x::do_radio_switches() {
|
||||||
coarse_freq + fine_freq / 40.0 );
|
coarse_freq + fine_freq / 40.0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( navcom1_power->getBoolValue() ) {
|
if ( navcom1_has_power() ) {
|
||||||
// Nav1 Tuner
|
// Nav1 Tuner
|
||||||
int nav1_tuner_fine = ((radio_switch_data[9] >> 4) & 0x0f) - 1;
|
int nav1_tuner_fine = ((radio_switch_data[9] >> 4) & 0x0f) - 1;
|
||||||
int nav1_tuner_coarse = (radio_switch_data[9] & 0x0f) - 1;
|
int nav1_tuner_coarse = (radio_switch_data[9] & 0x0f) - 1;
|
||||||
|
@ -886,7 +891,7 @@ bool FGATC610x::do_radio_switches() {
|
||||||
coarse_freq + fine_freq / 20.0 );
|
coarse_freq + fine_freq / 20.0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( navcom2_power->getBoolValue() ) {
|
if ( navcom2_has_power() ) {
|
||||||
// Nav2 Tuner
|
// Nav2 Tuner
|
||||||
int nav2_tuner_fine = ((radio_switch_data[17] >> 4) & 0x0f) - 1;
|
int nav2_tuner_fine = ((radio_switch_data[17] >> 4) & 0x0f) - 1;
|
||||||
int nav2_tuner_coarse = (radio_switch_data[17] & 0x0f) - 1;
|
int nav2_tuner_coarse = (radio_switch_data[17] & 0x0f) - 1;
|
||||||
|
@ -1152,7 +1157,7 @@ bool FGATC610x::do_radio_display() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( navcom1_power->getBoolValue() ) {
|
if ( navcom1_has_power() ) {
|
||||||
// Com1 standby frequency
|
// Com1 standby frequency
|
||||||
float com1_stby = com1_stby_freq->getFloatValue();
|
float com1_stby = com1_stby_freq->getFloatValue();
|
||||||
if ( fabs(com1_stby) > 999.99 ) {
|
if ( fabs(com1_stby) > 999.99 ) {
|
||||||
|
@ -1189,7 +1194,7 @@ bool FGATC610x::do_radio_display() {
|
||||||
radio_display_data[11] = 0xff;
|
radio_display_data[11] = 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( navcom2_power->getBoolValue() ) {
|
if ( navcom2_has_power() ) {
|
||||||
// Com2 standby frequency
|
// Com2 standby frequency
|
||||||
float com2_stby = com2_stby_freq->getFloatValue();
|
float com2_stby = com2_stby_freq->getFloatValue();
|
||||||
if ( fabs(com2_stby) > 999.99 ) {
|
if ( fabs(com2_stby) > 999.99 ) {
|
||||||
|
@ -1226,7 +1231,7 @@ bool FGATC610x::do_radio_display() {
|
||||||
radio_display_data[23] = 0xff;
|
radio_display_data[23] = 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( navcom1_power->getBoolValue() ) {
|
if ( navcom1_has_power() ) {
|
||||||
// Nav1 standby frequency
|
// Nav1 standby frequency
|
||||||
float nav1_stby = nav1_stby_freq->getFloatValue();
|
float nav1_stby = nav1_stby_freq->getFloatValue();
|
||||||
if ( fabs(nav1_stby) > 999.99 ) {
|
if ( fabs(nav1_stby) > 999.99 ) {
|
||||||
|
@ -1263,7 +1268,7 @@ bool FGATC610x::do_radio_display() {
|
||||||
radio_display_data[17] = 0xff;
|
radio_display_data[17] = 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( navcom2_power->getBoolValue() ) {
|
if ( navcom2_has_power() ) {
|
||||||
// Nav2 standby frequency
|
// Nav2 standby frequency
|
||||||
float nav2_stby = nav2_stby_freq->getFloatValue();
|
float nav2_stby = nav2_stby_freq->getFloatValue();
|
||||||
if ( fabs(nav2_stby) > 999.99 ) {
|
if ( fabs(nav2_stby) > 999.99 ) {
|
||||||
|
@ -1537,11 +1542,11 @@ bool FGATC610x::do_switches() {
|
||||||
|
|
||||||
// other toggle switches
|
// other toggle switches
|
||||||
fgSetBool( "/controls/fuel-pump[0]", switch_matrix[board][0][2] );
|
fgSetBool( "/controls/fuel-pump[0]", switch_matrix[board][0][2] );
|
||||||
fgSetBool( "/controls/switches/landing-light", switch_matrix[board][1][2] );
|
|
||||||
fgSetBool( "/controls/switches/flashing-beacon",
|
fgSetBool( "/controls/switches/flashing-beacon",
|
||||||
switch_matrix[board][2][2] );
|
switch_matrix[board][1][2] );
|
||||||
fgSetBool( "/controls/switches/map-lights", switch_matrix[board][3][2] );
|
fgSetBool( "/controls/switches/landing-light", switch_matrix[board][2][2] );
|
||||||
fgSetBool( "/controls/switches/instrument-lights",
|
fgSetBool( "/controls/switches/taxi-lights", switch_matrix[board][3][2] );
|
||||||
|
fgSetBool( "/controls/switches/nav-lights",
|
||||||
switch_matrix[board][4][2] );
|
switch_matrix[board][4][2] );
|
||||||
fgSetBool( "/controls/switches/strobe-lights", switch_matrix[board][5][2] );
|
fgSetBool( "/controls/switches/strobe-lights", switch_matrix[board][5][2] );
|
||||||
fgSetBool( "/controls/switches/pitot-heat", switch_matrix[board][6][2] );
|
fgSetBool( "/controls/switches/pitot-heat", switch_matrix[board][6][2] );
|
||||||
|
|
|
@ -73,7 +73,8 @@ class FGATC610x : public FGProtocol {
|
||||||
|
|
||||||
SGPropertyNode *mag_compass;
|
SGPropertyNode *mag_compass;
|
||||||
SGPropertyNode *dme_min, *dme_kt, *dme_nm;
|
SGPropertyNode *dme_min, *dme_kt, *dme_nm;
|
||||||
SGPropertyNode *navcom1_power, *navcom2_power;
|
SGPropertyNode *navcom1_bus_power, *navcom2_bus_power;
|
||||||
|
SGPropertyNode *navcom1_power_btn, *navcom2_power_btn;
|
||||||
SGPropertyNode *com1_freq, *com1_stby_freq;
|
SGPropertyNode *com1_freq, *com1_stby_freq;
|
||||||
SGPropertyNode *com2_freq, *com2_stby_freq;
|
SGPropertyNode *com2_freq, *com2_stby_freq;
|
||||||
SGPropertyNode *nav1_freq, *nav1_stby_freq;
|
SGPropertyNode *nav1_freq, *nav1_stby_freq;
|
||||||
|
@ -111,6 +112,16 @@ class FGATC610x : public FGProtocol {
|
||||||
bool do_steppers();
|
bool do_steppers();
|
||||||
bool do_switches();
|
bool do_switches();
|
||||||
|
|
||||||
|
// convenience
|
||||||
|
inline bool navcom1_has_power() const {
|
||||||
|
return (navcom1_bus_power->getDoubleValue() > 1.0)
|
||||||
|
&& navcom1_power_btn->getBoolValue();
|
||||||
|
}
|
||||||
|
inline bool navcom2_has_power() const {
|
||||||
|
return (navcom2_bus_power->getDoubleValue() > 1.0)
|
||||||
|
&& navcom2_power_btn->getBoolValue();
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
FGATC610x() { }
|
FGATC610x() { }
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
# error This library requires C++
|
# error This library requires C++
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const int FG_RAW_CTRLS_VERSION = 10;
|
const int FG_RAW_CTRLS_VERSION = 11;
|
||||||
|
|
||||||
|
|
||||||
// Define a structure containing the control parameters
|
// Define a structure containing the control parameters
|
||||||
|
@ -53,14 +53,15 @@ 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
|
||||||
|
bool flaps_power; // true = power available
|
||||||
|
|
||||||
// Engine controls
|
// Engine controls
|
||||||
int num_engines; // number of valid engines
|
int num_engines; // number of valid engines
|
||||||
int magnetos[FG_MAX_ENGINES];
|
int magnetos[FG_MAX_ENGINES];
|
||||||
bool starter[FG_MAX_ENGINES]; // true = starter engauged
|
bool starter_power[FG_MAX_ENGINES]; // true = starter power
|
||||||
double throttle[FG_MAX_ENGINES]; // 0 ... 1
|
double throttle[FG_MAX_ENGINES]; // 0 ... 1
|
||||||
double mixture[FG_MAX_ENGINES]; // 0 ... 1
|
double mixture[FG_MAX_ENGINES]; // 0 ... 1
|
||||||
bool fuel_pump[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
|
||||||
|
|
||||||
// Fuel management
|
// Fuel management
|
||||||
|
|
Loading…
Reference in a new issue