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 #include "ApplyExternalSettings.hpp"
25 #include "Interface.hpp"
26 #include "ActionInterface.hpp"
27 #include "Device/All.hpp"
28 #include "Operation/MessageOperationEnvironment.hpp"
33 bool modified
= false;
35 static Validity last_fraction
, last_overload
;
36 const ExternalSettings
&settings
= CommonInterface::Basic().settings
;
37 const Plane
&plane
= CommonInterface::GetComputerSettings().plane
;
38 if (settings
.ballast_fraction_available
.Modified(last_fraction
)) {
39 ActionInterface::SetBallast(settings
.ballast_fraction
, false);
43 last_fraction
= settings
.ballast_fraction_available
;
45 if (settings
.ballast_overload_available
.Modified(last_overload
) &&
46 settings
.ballast_overload
>= fixed(1) &&
47 positive(plane
.max_ballast
)) {
48 fixed fraction
= ((settings
.ballast_overload
- fixed(1)) *
49 plane
.dry_mass
) / plane
.max_ballast
;
50 ActionInterface::SetBallast(fraction
, false);
54 last_overload
= settings
.ballast_overload_available
;
62 bool modified
= false;
65 const ExternalSettings
&settings
= CommonInterface::Basic().settings
;
67 if (settings
.bugs_available
.Modified(last
)) {
68 ActionInterface::SetBugs(settings
.bugs
, false);
72 last
= settings
.bugs_available
;
80 bool modified
= false;
82 ComputerSettings
&settings_computer
=
83 CommonInterface::SetComputerSettings();
84 const NMEAInfo
&basic
= CommonInterface::Basic();
85 const DerivedInfo
&calculated
= CommonInterface::Calculated();
87 if (basic
.settings
.qnh_available
.Modified(settings_computer
.pressure_available
)) {
88 settings_computer
.pressure
= basic
.settings
.qnh
;
89 settings_computer
.pressure_available
= basic
.settings
.qnh_available
;
93 if (calculated
.pressure_available
.Modified(settings_computer
.pressure_available
)) {
94 settings_computer
.pressure
= calculated
.pressure
;
95 settings_computer
.pressure_available
= calculated
.pressure_available
;
97 MessageOperationEnvironment env
;
98 AllDevicesPutQNH(settings_computer
.pressure
, env
);
107 MacCreadyProcessTimer()
109 bool modified
= false;
111 static ExternalSettings last_external_settings
;
112 static Validity last_auto_mac_cready
;
114 const NMEAInfo
&basic
= CommonInterface::Basic();
115 const DerivedInfo
&calculated
= CommonInterface::Calculated();
117 if (last_auto_mac_cready
.Modified(calculated
.auto_mac_cready_available
)) {
118 /* time warp, reset */
119 last_auto_mac_cready
.Clear();
123 if (basic
.settings
.mac_cready_available
.Modified(last_external_settings
.mac_cready_available
)) {
124 ActionInterface::SetMacCready(basic
.settings
.mac_cready
, false);
126 } else if (calculated
.auto_mac_cready_available
.Modified(last_auto_mac_cready
)) {
127 last_auto_mac_cready
= calculated
.auto_mac_cready_available
;
128 ActionInterface::SetMacCready(calculated
.auto_mac_cready
);
132 last_external_settings
= basic
.settings
;
138 ApplyExternalSettings()
140 bool modified
= false;
141 modified
|= BallastProcessTimer();
142 modified
|= BugsProcessTimer();
143 modified
|= QNHProcessTimer();
144 modified
|= MacCreadyProcessTimer();