1
0
Fork 0

Merge branch 'jmt/navradio' into next

This commit is contained in:
Tim Moore 2009-09-17 22:55:43 +02:00
commit 0044bd4436
2 changed files with 45 additions and 20 deletions

View file

@ -153,7 +153,8 @@ FGNavRadio::FGNavRadio(SGPropertyNode *node) :
_localizerWidth(5.0), _localizerWidth(5.0),
_name(node->getStringValue("name", "nav")), _name(node->getStringValue("name", "nav")),
_num(node->getIntValue("number", 0)), _num(node->getIntValue("number", 0)),
_time_before_search_sec(-1.0) _time_before_search_sec(-1.0),
_falseCoursesEnabled(true)
{ {
SGPath path( globals->get_fg_root() ); SGPath path( globals->get_fg_root() );
SGPath term = path; SGPath term = path;
@ -209,6 +210,9 @@ FGNavRadio::init ()
tofrom_serviceable_node = createServiceableProp(node, "to-from"); tofrom_serviceable_node = createServiceableProp(node, "to-from");
dme_serviceable_node = createServiceableProp(node, "dme"); dme_serviceable_node = createServiceableProp(node, "dme");
globals->get_props()->tie("sim/realism/false-radio-courses-enabled",
SGRawValuePointer<bool>(&_falseCoursesEnabled));
// frequencies // frequencies
SGPropertyNode *subnode = node->getChild("frequencies", 0, true); SGPropertyNode *subnode = node->getChild("frequencies", 0, true);
freq_node = subnode->getChild("selected-mhz", 0, true); freq_node = subnode->getChild("selected-mhz", 0, true);
@ -518,12 +522,28 @@ void FGNavRadio::updateReceiver(double dt)
SG_NORMALIZE_RANGE(r, -180.0, 180.0); SG_NORMALIZE_RANGE(r, -180.0, 180.0);
if ( is_loc ) { if ( is_loc ) {
if (_falseCoursesEnabled) {
// The factor of 30.0 gives a period of 120 which gives us 3 cycles and six // The factor of 30.0 gives a period of 120 which gives us 3 cycles and six
// zeros i.e. six courses: one front course, one back course, and four // zeros i.e. six courses: one front course, one back course, and four
// false courses. Three of the six are reverse sensing. // false courses. Three of the six are reverse sensing.
_cdiDeflection = 30.0 * sawtooth(r / 30.0); _cdiDeflection = 30.0 * sawtooth(r / 30.0);
} else {
// no false courses, but we do need to create a back course
if (fabs(r) > 90.0) { // front course
_cdiDeflection = r - copysign(180.0, r);
} else {
_cdiDeflection = r; // back course
}
_cdiDeflection = -_cdiDeflection; // reverse for outbound radial
} // of false courses disabled
const double VOR_FULL_ARC = 20.0; // VOR is -10 .. 10 degree swing const double VOR_FULL_ARC = 20.0; // VOR is -10 .. 10 degree swing
_cdiDeflection *= VOR_FULL_ARC / _localizerWidth; // increased localiser sensitivity _cdiDeflection *= VOR_FULL_ARC / _localizerWidth; // increased localiser sensitivity
if (backcourse_node->getBoolValue()) {
_cdiDeflection = -_cdiDeflection;
}
} else { } else {
// handle the TO side of the VOR // handle the TO side of the VOR
if (fabs(r) > 90.0) { if (fabs(r) > 90.0) {
@ -570,6 +590,7 @@ void FGNavRadio::updateGlideSlope(double dt, const SGVec3d& aircraft, double sig
double angle = atan2(dot_v, dot_h) * SGD_RADIANS_TO_DEGREES; double angle = atan2(dot_v, dot_h) * SGD_RADIANS_TO_DEGREES;
double deflectionAngle = target_gs - angle; double deflectionAngle = target_gs - angle;
if (_falseCoursesEnabled) {
// Construct false glideslopes. The scale factor of 1.5 // Construct false glideslopes. The scale factor of 1.5
// in the sawtooth gives a period of 6 degrees. // in the sawtooth gives a period of 6 degrees.
// There will be zeros at 3, 6r, 9, 12r et cetera // There will be zeros at 3, 6r, 9, 12r et cetera
@ -585,6 +606,7 @@ void FGNavRadio::updateGlideSlope(double dt, const SGVec3d& aircraft, double sig
} else { } else {
// no false GS below the true GS // no false GS below the true GS
} }
}
_gsNeedleDeflection = deflectionAngle * 5.0; _gsNeedleDeflection = deflectionAngle * 5.0;
_gsNeedleDeflection *= signal_quality_norm; _gsNeedleDeflection *= signal_quality_norm;

View file

@ -156,6 +156,9 @@ class FGNavRadio : public SGSubsystem
double _gsNeedleDeflection; double _gsNeedleDeflection;
double _gsNeedleDeflectionNorm; double _gsNeedleDeflectionNorm;
// realism setting, are false courses and GS lobes enabled?
bool _falseCoursesEnabled;
bool updateWithPower(double aDt); bool updateWithPower(double aDt);
// model standard VOR/DME/TACAN service volumes as per AIM 1-1-8 // model standard VOR/DME/TACAN service volumes as per AIM 1-1-8