X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FInstrumentation%2Fgps.hxx;h=f69a70a76be4b6fcc0922b92210e2fe5d13f3ef7;hb=a9a1734f1e1d8e2e4f52309a5965624704385c8a;hp=d20c74e4814eeb6ec3012c531df2e735b874b9f0;hpb=3e0489bd910620e5d34e33d231c55135daeb2543;p=flightgear.git diff --git a/src/Instrumentation/gps.hxx b/src/Instrumentation/gps.hxx index d20c74e48..f69a70a76 100644 --- a/src/Instrumentation/gps.hxx +++ b/src/Instrumentation/gps.hxx @@ -7,11 +7,15 @@ #ifndef __INSTRUMENTS_GPS_HXX #define __INSTRUMENTS_GPS_HXX 1 +#include +#include + #include #include #include -#include "Navaids/positioned.hxx" +#include +#include // forward decls class SGRoute; @@ -71,20 +75,29 @@ private: * /instrumentation/gps/magnetic-bug-error-deg */ -class GPS : public SGSubsystem +class GPS : public SGSubsystem, public flightgear::RNAV { - public: - GPS (SGPropertyNode *node); GPS (); virtual ~GPS (); + // SGSubsystem interface virtual void init (); virtual void update (double delta_time_sec); virtual void bind(); virtual void unbind(); + + // RNAV interface + virtual SGGeod position(); + virtual double trackDeg(); + virtual double groundSpeedKts(); + virtual double vspeedFPM(); + virtual double magvarDeg(); + virtual double selectedMagCourse(); + virtual double overflightArmDistanceM(); + private: friend class GPSListener; friend class SearchFilter; @@ -123,19 +136,12 @@ private: double waypointAlertTime() const { return _waypointAlertTime; } - bool tuneNavRadioToRefVor() const - { return _tuneRadio1ToRefVor; } - bool requireHardSurface() const { return _requireHardSurface; } double minRunwayLengthFt() const { return _minRunwayLengthFt; } - double getExternalCourse() const; - - void setExternalCourse(double aCourseDeg); - bool cdiDeflectionIsAngular() const { return (_cdiMaxDeflectionNm <= 0.0); } @@ -147,6 +153,9 @@ private: bool driveAutopilot() const { return _driveAutopilot; } + + bool courseSelectable() const + { return _courseSelectable; } private: bool _enableTurnAnticipation; @@ -160,25 +169,19 @@ private: // (in seconds) double _waypointAlertTime; - // should GPS automatically tune NAV1 to the reference VOR? - bool _tuneRadio1ToRefVor; - // minimum runway length to require when filtering double _minRunwayLengthFt; // should we require a hard-surfaced runway when filtering? bool _requireHardSurface; - // helpers to tie course-source property - const char* getCourseSource() const; - void setCourseSource(const char* aPropPath); - - // property to retrieve the external course from - SGPropertyNode_ptr _extCourseSource; - double _cdiMaxDeflectionNm; + // should we drive the autopilot directly or not? bool _driveAutopilot; + + // is selected-course-deg read to set desired-course or not? + bool _courseSelectable; }; class SearchFilter : public FGPositioned::Filter @@ -196,12 +199,10 @@ private: void clearOutput(); void updateBasicData(double dt); - void updateWaypoints(); void updateTrackingBug(); void updateReferenceNavaid(double dt); void referenceNavaidSet(const std::string& aNavaid); - void tuneNavRadios(); void updateRouteData(); void driveAutopilot(); @@ -273,15 +274,17 @@ private: double getScratchDistance() const; double getScratchMagBearing() const; double getScratchTrueBearing() const; - bool getScratchHasNext() const { return _searchHasNext; } + bool getScratchHasNext() const; double getSelectedCourse() const { return _selectedCourse; } + void setSelectedCourse(double crs); + double getDesiredCourse() const { return _desiredCourse; } + double getCDIDeflection() const; double getLegDistance() const; double getLegCourse() const; double getLegMagCourse() const; - double getAltDistanceRatio() const; double getTrueTrack() const { return _last_true_track; } double getMagTrack() const; @@ -331,6 +334,7 @@ private: // members SGPropertyNode_ptr _gpsNode; + SGPropertyNode_ptr _currentWayptNode; SGPropertyNode_ptr _magvar_node; SGPropertyNode_ptr _serviceable_node; SGPropertyNode_ptr _electrical_node; @@ -341,6 +345,8 @@ private: SGPropertyNode_ptr _trip_odometer_node; SGPropertyNode_ptr _true_bug_error_node; SGPropertyNode_ptr _magnetic_bug_error_node; + SGPropertyNode_ptr _eastWestVelocity; + SGPropertyNode_ptr _northSouthVelocity; SGPropertyNode_ptr _ref_navaid_id_node; SGPropertyNode_ptr _ref_navaid_bearing_node; @@ -355,8 +361,10 @@ private: SGPropertyNode_ptr _routeETE; SGPropertyNode_ptr _routeEditedSignal; SGPropertyNode_ptr _routeFinishedSignal; - + SGPropertyNode_ptr _desiredCourseNode; + double _selectedCourse; + double _desiredCourse; bool _dataValid; SGGeod _last_pos; @@ -364,6 +372,8 @@ private: double _last_speed_kts; double _last_true_track; double _last_vertical_speed; + double _lastEWVelocity; + double _lastNSVelocity; std::string _mode; GPSListener* _listener; @@ -379,10 +389,8 @@ private: SGGeodProperty _position; SGGeod _wp0_position; - SGGeod _wp1_position; SGGeod _indicated_pos; - std::string _wp0Ident, _wp0Name, _wp1Ident, _wp1Name; - double _wp1DistanceM, _wp1TrueBearing; + double _legDistanceNm; // scratch data SGGeod _scratchPos; @@ -394,8 +402,6 @@ private: std::string _searchQuery; FGPositioned::Type _searchType; bool _searchExact; - bool _searchOrderByRange; - bool _searchResultsCached; FGPositioned::List _searchResults; bool _searchIsRoute; ///< set if 'search' is actually the current route bool _searchHasNext; ///< is there a result after this one? @@ -412,9 +418,14 @@ private: SGGeod _turnPt; SGGeod _turnCentre; + std::auto_ptr _wayptController; + SGPropertyNode_ptr _realismSimpleGps; ///< should the GPS be simple or realistic? + flightgear::WayptRef _prevWaypt; + flightgear::WayptRef _currentWaypt; // autopilot drive properties + SGPropertyNode_ptr _apDrivingFlag; SGPropertyNode_ptr _apTrueHeading; SGPropertyNode_ptr _apTargetAltitudeFt; SGPropertyNode_ptr _apAltitudeLock;