- _indicated_vertical_speed_node =
- node->getChild("indicated-vertical-speed", 0, true);
- _true_track_node =
- node->getChild("indicated-track-true-deg", 0, true);
- _magnetic_track_node =
- node->getChild("indicated-track-magnetic-deg", 0, true);
- _speed_node =
- node->getChild("indicated-ground-speed-kt", 0, true);
- _odometer_node =
- node->getChild("odometer", 0, true);
- _trip_odometer_node =
- node->getChild("trip-odometer", 0, true);
- _true_bug_error_node =
- node->getChild("true-bug-error-deg", 0, true);
- _magnetic_bug_error_node =
- node->getChild("magnetic-bug-error-deg", 0, true);
-
- _leg_distance_node =
- wp_node->getChild("leg-distance-nm", 0, true);
- _leg_course_node =
- wp_node->getChild("leg-true-course-deg", 0, true);
- _leg_magnetic_course_node =
- wp_node->getChild("leg-mag-course-deg", 0, true);
- _alt_dist_ratio_node =
- wp_node->getChild("alt-dist-ratio", 0, true);
- _leg_course_deviation_node =
- wp_node->getChild("leg-course-deviation-deg", 0, true);
- _leg_course_error_nm_node =
- wp_node->getChild("leg-course-error-nm", 0, true);
- _leg_to_flag_node =
- wp_node->getChild("leg-to-flag", 0, true);
- _alt_deviation_node =
- wp_node->getChild("alt-deviation-ft", 0, true);
+ _odometer_node = node->getChild("odometer", 0, true);
+ _trip_odometer_node = node->getChild("trip-odometer", 0, true);
+ _true_bug_error_node = node->getChild("true-bug-error-deg", 0, true);
+ _magnetic_bug_error_node = node->getChild("magnetic-bug-error-deg", 0, true);
+
+// command system
+ node->tie("mode", SGRawValueMethods<GPS, const char*>(*this, &GPS::getMode, NULL));
+ node->tie("command", SGRawValueMethods<GPS, const char*>(*this, &GPS::getCommand, &GPS::setCommand));
+
+ _scratchNode = node->getChild("scratch", 0, true);
+ tieSGGeod(_scratchNode, _scratchPos, "longitude-deg", "latitude-deg", "altitude-ft");
+ _scratchNode->tie("valid", SGRawValueMethods<GPS, bool>(*this, &GPS::getScratchValid, NULL));
+ _scratchNode->tie("distance-nm", SGRawValueMethods<GPS, double>(*this, &GPS::getScratchDistance, NULL));
+ _scratchNode->tie("true-bearing-deg", SGRawValueMethods<GPS, double>(*this, &GPS::getScratchTrueBearing, NULL));
+ _scratchNode->tie("mag-bearing-deg", SGRawValueMethods<GPS, double>(*this, &GPS::getScratchMagBearing, NULL));
+ _scratchNode->tie("has-next", SGRawValueMethods<GPS, bool>(*this, &GPS::getScratchHasNext, NULL));
+ _scratchValid = false;
+
+// waypoint data (including various historical things)
+ SGPropertyNode *wp_node = node->getChild("wp", 0, true);
+ SGPropertyNode *wp0_node = wp_node->getChild("wp", 0, true);
+ SGPropertyNode *wp1_node = wp_node->getChild("wp", 1, true);
+
+ tieSGGeodReadOnly(wp0_node, _wp0_position, "longitude-deg", "latitude-deg", "altitude-ft");
+ wp0_node->tie("ID", SGRawValueMethods<GPS, const char*>
+ (*this, &GPS::getWP0Ident, NULL));
+ wp0_node->tie("name", SGRawValueMethods<GPS, const char*>
+ (*this, &GPS::getWP0Name, NULL));
+
+ tieSGGeodReadOnly(wp1_node, _wp1_position, "longitude-deg", "latitude-deg", "altitude-ft");
+ wp1_node->tie("ID", SGRawValueMethods<GPS, const char*>
+ (*this, &GPS::getWP1Ident, NULL));
+ wp1_node->tie("name", SGRawValueMethods<GPS, const char*>
+ (*this, &GPS::getWP1Name, NULL));
+
+ // for compatability, alias selected course down to wp/wp[1]/desired-course-deg
+ SGPropertyNode* wp1Crs = wp1_node->getChild("desired-course-deg", 0, true);
+ wp1Crs->alias(node->getChild("selected-course-deg"));
+
+// _true_wp1_bearing_error_node =
+// wp1_node->getChild("true-bearing-error-deg", 0, true);
+// _magnetic_wp1_bearing_error_node =
+ // wp1_node->getChild("magnetic-bearing-error-deg", 0, true);
+
+ wp1_node->tie("distance-nm", SGRawValueMethods<GPS, double>
+ (*this, &GPS::getWP1Distance, NULL));
+ wp1_node->tie("bearing-true-deg", SGRawValueMethods<GPS, double>
+ (*this, &GPS::getWP1Bearing, NULL));
+ wp1_node->tie("bearing-mag-deg", SGRawValueMethods<GPS, double>
+ (*this, &GPS::getWP1MagBearing, NULL));
+ wp1_node->tie("TTW-sec", SGRawValueMethods<GPS, double>
+ (*this, &GPS::getWP1TTW, NULL));
+ wp1_node->tie("TTW", SGRawValueMethods<GPS, const char*>
+ (*this, &GPS::getWP1TTWString, NULL));
+
+ wp1_node->tie("course-deviation-deg", SGRawValueMethods<GPS, double>
+ (*this, &GPS::getWP1CourseDeviation, NULL));
+ wp1_node->tie("course-error-nm", SGRawValueMethods<GPS, double>
+ (*this, &GPS::getWP1CourseErrorNm, NULL));
+ wp1_node->tie("to-flag", SGRawValueMethods<GPS, bool>
+ (*this, &GPS::getWP1ToFlag, NULL));
+ wp1_node->tie("from-flag", SGRawValueMethods<GPS, bool>
+ (*this, &GPS::getWP1FromFlag, NULL));
+
+ _tracking_bug_node = node->getChild("tracking-bug", 0, true);
+
+// leg properties (only valid in DTO/LEG modes, not OBS)
+ wp_node->tie("leg-distance-nm", SGRawValueMethods<GPS, double>(*this, &GPS::getLegDistance, NULL));
+ wp_node->tie("leg-true-course-deg", SGRawValueMethods<GPS, double>(*this, &GPS::getLegCourse, NULL));
+ wp_node->tie("leg-mag-course-deg", SGRawValueMethods<GPS, double>(*this, &GPS::getLegMagCourse, NULL));
+ wp_node->tie("alt-dist-ratio", SGRawValueMethods<GPS, double>(*this, &GPS::getAltDistanceRatio, NULL));
+
+// reference navid
+ SGPropertyNode_ptr ref_navaid = node->getChild("ref-navaid", 0, true);
+ _ref_navaid_id_node = ref_navaid->getChild("id", 0, true);
+ _ref_navaid_name_node = ref_navaid->getChild("name", 0, true);
+ _ref_navaid_bearing_node = ref_navaid->getChild("bearing-deg", 0, true);
+ _ref_navaid_frequency_node = ref_navaid->getChild("frequency-mhz", 0, true);
+ _ref_navaid_distance_node = ref_navaid->getChild("distance-nm", 0, true);
+ _ref_navaid_mag_bearing_node = ref_navaid->getChild("mag-bearing-deg", 0, true);
+ _ref_navaid_elapsed = 0.0;
+ _ref_navaid_set = false;
+
+// route properties
+ // should these move to the route manager?
+ _routeDistanceNm = node->getChild("route-distance-nm", 0, true);
+ _routeETE = node->getChild("ETE", 0, true);
+ _routeEditedSignal = fgGetNode("/autopilot/route-manager/signals/edited", true);
+ _routeFinishedSignal = fgGetNode("/autopilot/route-manager/signals/finished", true);
+
+// add listener to various things
+ _listener = new GPSListener(this);
+ _route_current_wp_node = fgGetNode("/autopilot/route-manager/current-wp", true);
+ _route_current_wp_node->addChangeListener(_listener);
+ _route_active_node = fgGetNode("/autopilot/route-manager/active", true);
+ _route_active_node->addChangeListener(_listener);
+ _ref_navaid_id_node->addChangeListener(_listener);
+ _routeEditedSignal->addChangeListener(_listener);
+ _routeFinishedSignal->addChangeListener(_listener);
+
+// navradio slaving properties
+ node->tie("cdi-deflection", SGRawValueMethods<GPS,double>
+ (*this, &GPS::getCDIDeflection));
+
+ SGPropertyNode* toFlag = node->getChild("to-flag", 0, true);
+ toFlag->alias(wp1_node->getChild("to-flag"));
+
+ SGPropertyNode* fromFlag = node->getChild("from-flag", 0, true);
+ fromFlag->alias(wp1_node->getChild("from-flag"));
+