X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FInstrumentation%2Fdclgps.hxx;h=c05bf75ff672955527d03dd8bce95b2afe7beecd;hb=42c3d8867f20ab46ebf014ea54b15d9f7c631d3a;hp=00b7943b35a90b75492dd0931415d604d6564ad8;hpb=0dbe9a4c38c0471fd721c76f2e850d9006da3804;p=flightgear.git diff --git a/src/Instrumentation/dclgps.hxx b/src/Instrumentation/dclgps.hxx index 00b7943b3..c05bf75ff 100644 --- a/src/Instrumentation/dclgps.hxx +++ b/src/Instrumentation/dclgps.hxx @@ -5,7 +5,7 @@ // // Written by David Luff, started 2005. // -// Copyright (C) 2005 - David C Luff - david.luff@nottingham.ac.uk +// Copyright (C) 2005 - David C Luff: daveluff --AT-- ntlworld --D0T-- com // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ @@ -32,8 +32,6 @@ #include #include -#include - #include #include #include @@ -144,6 +142,40 @@ typedef vector < FGIAP* > iap_list_type; typedef map < string, iap_list_type > iap_map_type; typedef iap_map_type::iterator iap_map_iterator; +// A class to encapsulate hr:min representation of time. + +class ClockTime { +public: + ClockTime(); + ClockTime(int hr, int min); + ~ClockTime(); + inline void set_hr(int hr) { _hr = hr; } + inline int hr() const { return(_hr); } + inline void set_min(int min) { _min = min; } + inline int min() const { return(_min); } + + ClockTime operator+ (const ClockTime& t) { + int cumMin = _hr * 60 + _min + t.hr() * 60 + t.min(); + ClockTime t2(cumMin / 60, cumMin % 60); + return(t2); + } + // Operator - has a max difference of 23:59, + // and assumes the day has wrapped if the second operand + // is larger that the first. + // eg. 2:59 - 3:00 = 23:59 + ClockTime operator- (const ClockTime& t) { + int diff = (_hr * 60 + _min) - (t.hr() * 60 + t.min()); + if(diff < 0) { diff += 24 * 60; } + ClockTime t2(diff / 60, diff % 60); + return(t2); + } + friend ostream& operator<< (ostream& out, const ClockTime& t); + +private: + int _hr; + int _min; +}; + // ------------------------------------------------------------------------------ class DCLGPS; @@ -174,19 +206,19 @@ public: virtual void CleanUp(); // The LooseFocus function is called when a page or subpage looses focus - // and allow pages to clean up state that is maintained whilst focus is + // and allows pages to clean up state that is maintained whilst focus is // retained, but lost on return. virtual void LooseFocus(); // Allows pages that display info for a given ID to have it set/get if they implement these functions. - virtual void SetId(string s); - virtual string GetId(); + virtual void SetId(const string& s); + virtual const string& GetId()=0; inline int GetSubPage() { return(_subPage); } inline int GetNSubPages() { return(_nSubPages); } - inline string GetName() { return(_name); } + inline const string& GetName() { return(_name); } protected: DCLGPS* _parent; @@ -203,7 +235,7 @@ typedef vector gps_page_list_type; typedef gps_page_list_type::iterator gps_page_list_itr; // TODO - merge generic GPS functions instead and split out KLN specific stuff. -class DCLGPS : public SGSubsystem, public FGPanelInstrument { +class DCLGPS : public SGSubsystem { friend class GPSPage; @@ -274,7 +306,7 @@ public: // Returns -1 if no active waypoint. int GetActiveWaypointIndex(); // Ditto for an arbitrary waypoint id - int GetWaypointIndex(string id); + int GetWaypointIndex(const string& id); // Returns meters inline float GetDistToActiveWaypoint() { return _dist2Act; } @@ -292,7 +324,7 @@ public: // returns -1 if groundspeed is less than 30kts. // If the waypoint is an unreached part of the active flight plan the time will be via each leg. // otherwise it will be a direct-to time. - double GetTimeToWaypoint(string id); + double GetTimeToWaypoint(const string& id); // Return true if waypoint alerting is occuring inline bool GetWaypointAlert() const { return(_waypointAlert); } @@ -313,7 +345,7 @@ public: inline bool GetToFlag() const { return(_headingBugTo); } // Initiate Direct To operation to the supplied ID. - void DtoInitiate(string id); + void DtoInitiate(const string& id); // Cancel Direct To operation void DtoCancel(); @@ -377,14 +409,14 @@ protected: gps_waypoint_map _waypoints; private: // Worker function for the below. - const GPSWaypoint* ActualFindFirstById(string id, bool exact = false); + const GPSWaypoint* ActualFindFirstById(const string& id, bool exact = false); protected: // Find first of any type of waypoint by id. (TODO - Possibly we should return multiple waypoints here). - const GPSWaypoint* FindFirstById(string id, bool &multi, bool exact = false); - FGNavRecord* FindFirstVorById(string id, bool &multi, bool exact = false); - FGNavRecord* FindFirstNDBById(string id, bool &multi, bool exact = false); - const FGAirport* FindFirstAptById(string id, bool &multi, bool exact = false); - const FGFix* FindFirstIntById(string id, bool &multi, bool exact = false); + const GPSWaypoint* FindFirstById(const string& id, bool &multi, bool exact = false); + FGNavRecord* FindFirstVorById(const string& id, bool &multi, bool exact = false); + FGNavRecord* FindFirstNDBById(const string& id, bool &multi, bool exact = false); + const FGAirport* FindFirstAptById(const string& id, bool &multi, bool exact = false); + const FGFix* FindFirstIntById(const string& id, bool &multi, bool exact = false); // Find the closest VOR to a position in RADIANS. FGNavRecord* FindClosestVor(double lat_rad, double lon_rad); @@ -486,6 +518,20 @@ protected: bool _departed; // Set when groundspeed first exceeds 30kts. string _departureTimeString; // Ditto. double _elapsedTime; // Elapsed time in seconds since departure + ClockTime _powerOnTime; // Time (hr:min) of unit power-up. + bool _powerOnTimerSet; // Indicates that we have set the above following power-up. + void SetPowerOnTimer(); +public: + void ResetPowerOnTimer(); + // Set the alarm to go off at a given time. + inline void SetAlarm(int hr, int min) { + _alarmTime.set_hr(hr); + _alarmTime.set_min(min); + _alarmSet = true; + } +protected: + ClockTime _alarmTime; + bool _alarmSet; // Configuration that affects flightplan operation bool _turnAnticipationEnabled;