4 XCSoar Glide Computer - http://www.xcsoar.org/
5 Copyright (C) 2000-2013 The XCSoar Project
6 A detailed list of copyright holders can be found in the file "AUTHORS".
8 This program is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License
10 as published by the Free Software Foundation; either version 2
11 of the License, or (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 #ifndef XCSOAR_FLYING_STATE_HPP
25 #define XCSOAR_FLYING_STATE_HPP
27 #include "Math/fixed.hpp"
28 #include "Geo/GeoPoint.hpp"
30 #include <type_traits>
33 * Structure for flying state (takeoff/landing)
37 /** True if airborne, False otherwise */
39 /** Detects when glider is on ground for several seconds */
44 /** Time of takeoff */
48 * The location of the aircraft when it took off. This attribute is
49 * only valid if #flying is true.
51 GeoPoint takeoff_location
;
54 * The time stamp when the aircraft released from towing. This is
55 * an estimate based on sink. If the aircraft was never seen on
56 * ground (i.e. XCSoar was switched on while flying), this value is
57 * not too useful. This is negative if the aircraft is assumed to
63 * The location of the aircraft when it released from towing.
64 * Always check GeoPoint::IsValid() before using this value.
66 GeoPoint release_location
;
69 * The location that is most far away from the release location.
70 * Always check GeoPoint::IsValid() before using this value.
72 GeoPoint far_location
;
75 * The distance from #release_location to #far_location. This value
76 * is negative if it was not calculated yet.
81 * Time stamp of the landing. Invalid if negative.
85 GeoPoint landing_location
;
87 /** Reset flying state as if never flown */
90 bool IsTowing() const {
91 return flying
&& negative(release_time
);
95 static_assert(std::is_trivial
<FlyingState
>::value
, "type is not trivial");