Work on wiring the dme into the electrical model.
This commit is contained in:
parent
cc4821e43f
commit
2a19fc2f53
4 changed files with 20 additions and 6 deletions
|
@ -75,6 +75,7 @@ FGRadioStack::FGRadioStack() :
|
|||
lon_node(fgGetNode("/position/longitude-deg", true)),
|
||||
lat_node(fgGetNode("/position/latitude-deg", true)),
|
||||
alt_node(fgGetNode("/position/altitude-ft", true)),
|
||||
dme_bus_power(fgGetNode("/systems/electrical/outputs/dme", true)),
|
||||
need_update(true),
|
||||
dme_freq(0.0),
|
||||
dme_dist(0.0),
|
||||
|
@ -225,7 +226,7 @@ FGRadioStack::update(double dt)
|
|||
// DME.
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
if ( dme_valid ) {
|
||||
if ( dme_valid && dme_has_power() ) {
|
||||
station = Point3D( dme_x, dme_y, dme_z );
|
||||
dme_dist = aircraft.distance3D( station ) * SG_METER_TO_NM;
|
||||
dme_effective_range = kludgeRange(dme_elev, elev, dme_range);
|
||||
|
@ -319,13 +320,13 @@ void FGRadioStack::search()
|
|||
// FIXME: the panel should handle this
|
||||
// don't worry about overhead for now,
|
||||
// since this is handled only periodically
|
||||
int dme_switch_pos = fgGetInt("/radios/dme/switch-position");
|
||||
if ( dme_switch_pos == 1 && navcom1.has_power() ) {
|
||||
dme_switch_pos = fgGetInt("/radios/dme/switch-position", 2);
|
||||
if ( dme_switch_pos == 1 && dme_has_power() && navcom1.has_power() ) {
|
||||
if ( dme_freq != navcom1.get_nav_freq() ) {
|
||||
dme_freq = navcom1.get_nav_freq();
|
||||
need_update = true;
|
||||
}
|
||||
} else if ( dme_switch_pos == 3 && navcom2.has_power() ) {
|
||||
} else if ( dme_switch_pos == 3 && dme_has_power() && navcom2.has_power() ){
|
||||
if ( dme_freq != navcom2.get_nav_freq() ) {
|
||||
dme_freq = navcom2.get_nav_freq();
|
||||
need_update = true;
|
||||
|
|
|
@ -54,10 +54,12 @@ class FGRadioStack : public FGSubsystem
|
|||
SGPropertyNode *lon_node;
|
||||
SGPropertyNode *lat_node;
|
||||
SGPropertyNode *alt_node;
|
||||
SGPropertyNode *dme_bus_power;
|
||||
|
||||
bool need_update;
|
||||
|
||||
bool dme_valid;
|
||||
int dme_switch_pos;
|
||||
bool dme_inrange;
|
||||
double dme_freq;
|
||||
double dme_lon;
|
||||
|
@ -111,6 +113,10 @@ public:
|
|||
|
||||
|
||||
// DME Accessors
|
||||
inline bool dme_has_power() const {
|
||||
return (dme_switch_pos == 1 || dme_switch_pos == 3)
|
||||
&& (dme_bus_power->getDoubleValue() > 1.0);
|
||||
}
|
||||
inline double get_dme_freq () const { return dme_freq; }
|
||||
|
||||
// Marker Beacon Accessors
|
||||
|
|
|
@ -398,6 +398,7 @@ bool FGATC610x::open() {
|
|||
dme_kt = fgGetNode( "/radios/dme/speed-kt", true );
|
||||
dme_nm = fgGetNode( "/radios/dme/distance-nm", true );
|
||||
|
||||
dme_bus_power = fgGetNode( "/systems/electrical/outputs/dme", true );
|
||||
navcom1_bus_power = fgGetNode( "/systems/electrical/outputs/navcomm[0]",
|
||||
true );
|
||||
navcom2_bus_power = fgGetNode( "/systems/electrical/outputs/navcomm[1]",
|
||||
|
@ -1112,7 +1113,7 @@ bool FGATC610x::do_radio_display() {
|
|||
char digits[10];
|
||||
int i;
|
||||
|
||||
if ( dme_switch != 0 ) {
|
||||
if ( dme_has_power() ) {
|
||||
// DME minutes
|
||||
float minutes = dme_min->getFloatValue();
|
||||
if ( minutes > 999 ) {
|
||||
|
|
|
@ -71,9 +71,11 @@ class FGATC610x : public FGProtocol {
|
|||
|
||||
float compass_position;
|
||||
|
||||
SGPropertyNode *dme_bus_power;
|
||||
SGPropertyNode *navcom1_bus_power, *navcom2_bus_power;
|
||||
|
||||
SGPropertyNode *mag_compass;
|
||||
SGPropertyNode *dme_min, *dme_kt, *dme_nm;
|
||||
SGPropertyNode *navcom1_bus_power, *navcom2_bus_power;
|
||||
SGPropertyNode *navcom1_power_btn, *navcom2_power_btn;
|
||||
SGPropertyNode *com1_freq, *com1_stby_freq;
|
||||
SGPropertyNode *com2_freq, *com2_stby_freq;
|
||||
|
@ -113,6 +115,10 @@ class FGATC610x : public FGProtocol {
|
|||
bool do_switches();
|
||||
|
||||
// convenience
|
||||
inline bool dme_has_power() const {
|
||||
return (dme_bus_power->getDoubleValue() > 1.0)
|
||||
&& dme_switch;
|
||||
}
|
||||
inline bool navcom1_has_power() const {
|
||||
return (navcom1_bus_power->getDoubleValue() > 1.0)
|
||||
&& navcom1_power_btn->getBoolValue();
|
||||
|
|
Loading…
Add table
Reference in a new issue