Mercurial > public > ostc4
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 } |
