comparison Discovery/Src/unit.c @ 38:5f11787b4f42

include in ostc4 repository
author heinrichsweikamp
date Sat, 28 Apr 2018 11:52:34 +0200
parents
children 1c95f811967c
comparison
equal deleted inserted replaced
37:ccc45c0e1ea2 38:5f11787b4f42
1 ///////////////////////////////////////////////////////////////////////////////
2 /// -*- coding: UTF-8 -*-
3 ///
4 /// \file Discovery/Src/unit.c
5 /// \brief input to meter/celsius or feet/farenheit
6 /// \author heinrichs weikamp gmbh
7 /// \date 24-Feb-2015
8 ///
9 /// \details
10 ///
11 /// $Id$
12 ///////////////////////////////////////////////////////////////////////////////
13 /// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh
14 ///
15 /// This program is free software: you can redistribute it and/or modify
16 /// it under the terms of the GNU General Public License as published by
17 /// the Free Software Foundation, either version 3 of the License, or
18 /// (at your option) any later version.
19 ///
20 /// This program is distributed in the hope that it will be useful,
21 /// but WITHOUT ANY WARRANTY; without even the implied warranty of
22 /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 /// GNU General Public License for more details.
24 ///
25 /// You should have received a copy of the GNU General Public License
26 /// along with this program. If not, see <http://www.gnu.org/licenses/>.
27 //////////////////////////////////////////////////////////////////////////////
28
29 /* Includes ------------------------------------------------------------------*/
30 #include "unit.h"
31 #include "settings.h"
32
33 /* Exported variables --------------------------------------------------------*/
34
35 /* Private types -------------------------------------------------------------*/
36 uint8_t test;
37
38 /* Private variables ---------------------------------------------------------*/
39
40 /* Private variables with external access via get_xxx() function -------------*/
41
42 /* Private function prototypes -----------------------------------------------*/
43
44 /* Announced function prototypes -----------------------------------------------*/
45
46 /* Exported functions --------------------------------------------------------*/
47
48 char unit_depth_char1_T105(void)
49 {
50 if(settingsGetPointer()->nonMetricalSystem)
51 return '\'';
52 else
53 return 'm';
54 }
55
56 char unit_depth_char2_T105(void)
57 {
58 if(settingsGetPointer()->nonMetricalSystem)
59 return ' ';
60 else
61 return '\004'; // 004 is nop
62 }
63
64 char unit_depth_char1(void)
65 {
66 if(settingsGetPointer()->nonMetricalSystem)
67 return 'f';
68 else
69 return 'm';
70 }
71
72 char unit_depth_char2(void)
73 {
74 if(settingsGetPointer()->nonMetricalSystem)
75 return 't';
76 else
77 return '\004'; // 004 is nop
78 }
79
80 float unit_depth_float(float input_meter)
81 {
82 if(settingsGetPointer()->nonMetricalSystem == 0)
83 return input_meter;
84 else
85 {
86 return 3.2808f * input_meter;
87 }
88 }
89
90 uint16_t unit_depth_integer(uint16_t input_meter)
91 {
92 if(settingsGetPointer()->nonMetricalSystem == 0)
93 return input_meter;
94 else
95 {
96 return (input_meter * 10) / 3;
97 }
98 }
99
100 float unit_temperature_float(float input_celsius)
101 {
102 if(settingsGetPointer()->nonMetricalSystem == 0)
103 return input_celsius;
104 else
105 {
106 return input_celsius * (9.0f/5.0f) + 32;
107 }
108 }
109
110 uint16_t unit_speed_integer(uint16_t input_meterPerMinute)
111 {
112 if(settingsGetPointer()->nonMetricalSystem == 0)
113 return input_meterPerMinute;
114 else
115 {
116 return (input_meterPerMinute * 10) / 3;
117 }
118 }
119
120 /* Quelle: https://de.wikipedia.org/wiki/Luftdruck */
121 /*
122 const float luftdruckStartMinus300[15] =
123 {
124 1.0530f,
125 1.0396f,
126 1.0263f,
127 1.01325f, // 0 m
128 1.0003f,
129 0.9876f,
130 0.9750f,
131 0.9625f,
132 0.9503f,
133 0.9381f,
134 0.9262f,
135 0.9144f,
136 0.9027f,
137 0.8912f, // 1000 m
138 0.8358f
139 };
140 */
141
142 const int luftdruckStartMinus300[15] =
143 {
144 1053,
145 1040,
146 1026,
147 1013, // 0 m
148 1000,
149 988,
150 975,
151 962,
152 950,
153 938,
154 926,
155 914,
156 903,
157 891, // 1000 m
158 836
159 };
160
161
162 int unit_SeaLevelRelation_integer(int input_atmospheric_mbar)
163 {
164 int i = 0;
165 int distance1, distance2;
166 for(i=0;i<15;i++)
167 {
168 if(input_atmospheric_mbar >= luftdruckStartMinus300[i])
169 break;
170 }
171
172 if(i >= 14)
173 return 1500;
174 else if(i == 0)
175 return -300;
176 else
177 {
178 distance1 = input_atmospheric_mbar - luftdruckStartMinus300[i];
179 distance2 = luftdruckStartMinus300[i-1] - input_atmospheric_mbar;
180 if(distance2 < distance1)
181 i -= 1;
182 return (i*100) - 300;
183 }
184 }