X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FInstrumentation%2Fdclgps.hxx;h=c05bf75ff672955527d03dd8bce95b2afe7beecd;hb=ef52b23e3a1aaf44d1a2283c920a70367960abff;hp=442105df8e0d357153380ba31af4a3c159ba02fa;hpb=1de61c8afdc45cddf4fbb4a070d44aa4cc4df366;p=flightgear.git diff --git a/src/Instrumentation/dclgps.hxx b/src/Instrumentation/dclgps.hxx index 442105df8..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,7 +206,7 @@ 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(); @@ -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; @@ -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;