1
0
Fork 0

Updated to work with new instrumentation version of dme.

This commit is contained in:
curt 2003-04-01 03:42:51 +00:00
parent 541ff04072
commit fe3283eb12
2 changed files with 59 additions and 41 deletions

View file

@ -396,9 +396,11 @@ bool FGATC610x::open() {
mag_compass = fgGetNode( "/instrumentation/magnetic-compass/indicated-heading-deg", true ); mag_compass = fgGetNode( "/instrumentation/magnetic-compass/indicated-heading-deg", true );
dme_min = fgGetNode( "/radios/dme/ete-min", true ); dme_min = fgGetNode( "/instrumentation/dme/indicated-time-min", true );
dme_kt = fgGetNode( "/radios/dme/speed-kt", true ); dme_kt = fgGetNode( "/instrumentation/dme/indicated-ground-speed-kt",
dme_nm = fgGetNode( "/radios/dme/distance-nm", true ); true );
dme_nm = fgGetNode( "/instrumentation/dme/indicated-distance-nm", true );
dme_in_range = fgGetNode( "/instrumentation/dme/in-range", true );
adf_bus_power = fgGetNode( "/systems/electrical/outputs/adf", true ); adf_bus_power = fgGetNode( "/systems/electrical/outputs/adf", true );
dme_bus_power = fgGetNode( "/systems/electrical/outputs/dme", true ); dme_bus_power = fgGetNode( "/systems/electrical/outputs/dme", true );
@ -863,13 +865,21 @@ bool FGATC610x::do_radio_switches() {
dme_switch = (radio_switch_data[7] >> 4) & 0x03; dme_switch = (radio_switch_data[7] >> 4) & 0x03;
if ( dme_switch == 0 ) { if ( dme_switch == 0 ) {
// off // off
fgSetInt( "/radios/dme/switch-position", 0 ); fgSetInt( "/instrumentation/dme/switch-position", 0 );
} else if ( dme_switch == 2 ) { } else if ( dme_switch == 2 ) {
// nav1 // nav1
fgSetInt( "/radios/dme/switch-position", 1 ); fgSetInt( "/instrumentation/dme/switch-position", 1 );
fgSetString( "/instrumentation/dme/frequencies/source",
"/radios/nav[0]/frequencies/selected-mhz" );
freq = fgGetFloat( "/radios/nav[0]/frequencies/selected-mhz", true );
fgSetFloat( "/instrumentation/dme/frequencies/selected-mhz", freq );
} else if ( dme_switch == 1 ) { } else if ( dme_switch == 1 ) {
// nav2 // nav2
fgSetInt( "/radios/dme/switch-position", 3 ); fgSetInt( "/instrumentation/dme/switch-position", 3 );
fgSetString( "/instrumentation/dme/frequencies/source",
"/radios/nav[1]/frequencies/selected-mhz" );
freq = fgGetFloat( "/radios/nav[1]/frequencies/selected-mhz", true );
fgSetFloat( "/instrumentation/dme/frequencies/selected-mhz", freq );
} }
// NavCom1 Power // NavCom1 Power
@ -1325,43 +1335,50 @@ bool FGATC610x::do_radio_display() {
int i; int i;
if ( dme_has_power() && dme_servicable->getBoolValue() ) { if ( dme_has_power() && dme_servicable->getBoolValue() ) {
// DME minutes if ( dme_in_range->getBoolValue() ) {
float minutes = dme_min->getFloatValue(); // DME minutes
if ( minutes > 999 ) { float minutes = dme_min->getFloatValue();
minutes = 999.0; if ( minutes > 999 ) {
} minutes = 999.0;
snprintf(digits, 7, "%03.0f", minutes); }
for ( i = 0; i < 6; ++i ) { snprintf(digits, 7, "%03.0f", minutes);
digits[i] -= '0'; for ( i = 0; i < 6; ++i ) {
} digits[i] -= '0';
radio_display_data[0] = digits[1] << 4 | digits[2]; }
radio_display_data[1] = 0xf0 | digits[0]; radio_display_data[0] = digits[1] << 4 | digits[2];
radio_display_data[1] = 0xf0 | digits[0];
// DME knots // DME knots
float knots = dme_kt->getFloatValue(); float knots = dme_kt->getFloatValue();
if ( knots > 999 ) { if ( knots > 999 ) {
knots = 999.0; knots = 999.0;
} }
snprintf(digits, 7, "%03.0f", knots); snprintf(digits, 7, "%03.0f", knots);
for ( i = 0; i < 6; ++i ) { for ( i = 0; i < 6; ++i ) {
digits[i] -= '0'; digits[i] -= '0';
} }
radio_display_data[2] = digits[1] << 4 | digits[2]; radio_display_data[2] = digits[1] << 4 | digits[2];
radio_display_data[3] = 0xf0 | digits[0]; radio_display_data[3] = 0xf0 | digits[0];
// DME distance (nm) // DME distance (nm)
float nm = dme_nm->getFloatValue(); float nm = dme_nm->getFloatValue();
if ( nm > 99 ) { if ( nm > 99 ) {
nm = 99.0; nm = 99.0;
} }
snprintf(digits, 7, "%04.1f", nm); snprintf(digits, 7, "%04.1f", nm);
for ( i = 0; i < 6; ++i ) { for ( i = 0; i < 6; ++i ) {
digits[i] -= '0'; digits[i] -= '0';
} }
radio_display_data[4] = digits[1] << 4 | digits[3]; radio_display_data[4] = digits[1] << 4 | digits[3];
radio_display_data[5] = 0x00 | digits[0]; radio_display_data[5] = 0x00 | digits[0];
// the 0x00 in the upper nibble of the 6th byte of each // the 0x00 in the upper nibble of the 6th byte of each
// display turns on the decimal point // display turns on the decimal point
} else {
// out of range
for ( i = 0; i < 6; ++i ) {
radio_display_data[i] = 0xee;
}
}
} else { } else {
// blank dem display // blank dem display
for ( i = 0; i < 6; ++i ) { for ( i = 0; i < 6; ++i ) {

View file

@ -78,6 +78,7 @@ class FGATC610x : public FGProtocol {
// Property tree variables // Property tree variables
SGPropertyNode *mag_compass; SGPropertyNode *mag_compass;
SGPropertyNode *dme_min, *dme_kt, *dme_nm; SGPropertyNode *dme_min, *dme_kt, *dme_nm;
SGPropertyNode *dme_in_range;
SGPropertyNode *navcom1_power_btn, *navcom2_power_btn; 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;