Mercurial > public > ostc4
annotate Discovery/Src/tMenuSystem.c @ 539:d784f281833a
Added inertia simulation for compass heading:
In previous version calculated compass values were directly used for visualization of the compass. This causes a fast changing (jumping) of values. With the inertia introduction the compass behalfs more like an analog compass. The final value is reached slowly and the displayed values are more stable.
For configuration a new menu item has been added to the compass menu allowing to switch inertia off (default), small and large inertia simulation
author | Ideenmodellierer |
---|---|
date | Sat, 10 Oct 2020 16:59:18 +0200 |
parents | 54c5ec8416c4 |
children | dd7ce655db26 |
rev | line source |
---|---|
38 | 1 /////////////////////////////////////////////////////////////////////////////// |
2 /// -*- coding: UTF-8 -*- | |
3 /// | |
4 /// \file Discovery/Src/tMenuSystem.c | |
5 /// \brief Main Template file for Menu Page System settings | |
6 /// \author heinrichs weikamp gmbh | |
7 /// \date 05-Aug-2014 | |
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 "tMenu.h" | |
31 #include "tMenuSystem.h" | |
32 #include "tHome.h" // for enum CUSTOMVIEWS and init_t7_compass() | |
33 | |
379 | 34 static uint8_t customviewsSubpage = 0; |
35 | |
38 | 36 /* Private function prototypes -----------------------------------------------*/ |
37 char customview_TXT2BYTE_helper(uint8_t customViewId); | |
38 | |
379 | 39 void set_CustomsviewsSubpage(uint8_t page) |
40 { | |
41 customviewsSubpage = page; | |
42 } | |
43 | |
38 | 44 /* Exported functions --------------------------------------------------------*/ |
45 | |
46 uint32_t tMSystem_refresh(uint8_t line, char *text, uint16_t *tab, char *subtext) | |
47 { | |
48 SSettings *data; | |
379 | 49 int i; |
38 | 50 uint8_t textPointer; |
51 uint8_t dateFormat; | |
52 uint8_t RTEhigh, RTElow; | |
53 RTC_DateTypeDef Sdate; | |
54 RTC_TimeTypeDef Stime; | |
55 const SDiveState * pStateReal = stateRealGetPointer(); | |
56 | |
57 data = settingsGetPointer(); | |
58 textPointer = 0; | |
59 *tab = 300; | |
60 *subtext = 0; | |
61 | |
62 // dive mode | |
63 if(actual_menu_content != MENU_SURFACE) | |
64 { | |
65 uint8_t id; | |
66 | |
379 | 67 for(i=0; i<5;i++) /* fill maximum 5 items and leave last one for sub page selection */ |
38 | 68 { |
379 | 69 id = cv_changelist[customviewsSubpage * 5 + i]; |
70 if(id == CVIEW_END) /* last list item? */ | |
71 { | |
72 break; | |
73 } | |
74 else | |
75 { | |
76 text[textPointer++] = '\006' - CHECK_BIT_THOME(data->cv_configuration,id); | |
77 text[textPointer++] = ' '; | |
78 textPointer += snprintf(&text[textPointer], 60, | |
79 "%c%c\n\r", | |
80 TXT_2BYTE, customview_TXT2BYTE_helper(id)); | |
81 } | |
38 | 82 } |
379 | 83 text[textPointer++] = TXT_2BYTE; |
84 text[textPointer++] = TXT2BYTE_ButtonNext; | |
38 | 85 text[textPointer] = 0; |
86 | |
379 | 87 for(;i<5;i++) /* clear empty lines in case menu shows less than 5 entries */ |
88 { | |
89 text[textPointer++]='\n'; | |
90 text[textPointer++]='\r'; | |
91 text[textPointer] = 0; | |
92 } | |
93 | |
38 | 94 return StMSYS; |
95 } | |
96 | |
97 // surface mode | |
139
decb0461302a
Get version from local memory instead from incoming data
Ideenmodellierer
parents:
138
diff
changeset
|
98 getActualRTEandFONTversion(&RTEhigh,&RTElow,NULL,NULL); |
38 | 99 |
100 if((RTEhigh == 0xFF) || (RTElow == 0xFF)) | |
101 { | |
102 RTEhigh = 0; | |
103 RTElow = 0; | |
104 } | |
105 | |
106 if((line == 0) || (line == 1)) | |
107 { | |
108 translateDate(pStateReal->lifeData.dateBinaryFormat, &Sdate); | |
109 translateTime(pStateReal->lifeData.timeBinaryFormat, &Stime); | |
110 | |
111 dateFormat = data->date_format; | |
112 | |
113 textPointer += snprintf(&text[textPointer], 40, | |
114 "Date" | |
115 "\016\016" | |
116 " " | |
117 ); | |
118 | |
119 if(dateFormat == DDMMYY) | |
120 { | |
121 textPointer += snprintf(&text[textPointer], 40, | |
122 "DDMMYY" | |
123 "\017" | |
124 "\t" | |
125 "%02d-%02d-%02d" | |
126 " " | |
127 , Sdate.Date, Sdate.Month, 2000 + Sdate.Year | |
128 ); | |
129 } | |
130 else | |
131 if(dateFormat == MMDDYY) | |
132 { | |
133 textPointer += snprintf(&text[textPointer], 40, | |
134 "MMDDYY" | |
135 "\017" | |
136 "\t" | |
137 "%02d-%02d-%02d" | |
138 " " | |
139 ,Sdate.Month, Sdate.Date, 2000 + Sdate.Year | |
140 ); | |
141 } | |
142 else | |
143 if(dateFormat == YYMMDD) | |
144 { | |
145 textPointer += snprintf(&text[textPointer], 40, | |
146 "YYMMDD" | |
147 "\017" | |
148 "\t" | |
149 "%02d-%02d-%02d" | |
150 " " | |
151 , 2000 + Sdate.Year, Sdate.Month, Sdate.Date | |
152 ); | |
153 } | |
154 | |
155 textPointer += snprintf(&text[textPointer], 60, | |
156 "%02d:%02d:%02d" | |
157 "\n\r" | |
158 ,Stime.Hours, Stime.Minutes, Stime.Seconds | |
159 ); | |
160 } | |
161 else | |
162 { | |
163 strcpy(&text[textPointer],"\n\r"); | |
164 textPointer += 2; | |
165 } | |
166 | |
167 if((line == 0) || (line == 2)) | |
168 { | |
169 text[textPointer++] = TXT_Language; | |
170 text[textPointer++] = '\t'; | |
171 text[textPointer++] = TXT_LanguageName; | |
172 text[textPointer++] = '\n'; | |
173 text[textPointer++] = '\r'; | |
174 text[textPointer] = 0; | |
175 } | |
176 else | |
177 { | |
178 strcpy(&text[textPointer],"\n\r"); | |
179 textPointer += 2; | |
180 } | |
181 | |
182 if((line == 0) || (line == 3)) | |
183 { | |
184 text[textPointer++] = TXT_2BYTE; | |
185 text[textPointer++] = TXT2BYTE_Layout; | |
186 text[textPointer++] = '\t'; | |
187 | |
188 if(!data->showDebugInfo) | |
189 { | |
190 text[textPointer++] = TXT_2BYTE; | |
191 if(data->nonMetricalSystem == 0) | |
192 text[textPointer++] = TXT2BYTE_Units_metric; | |
193 else | |
194 text[textPointer++] = TXT2BYTE_Units_feet; | |
195 | |
196 if(data->tX_colorscheme != 0) | |
197 { | |
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
198 text[textPointer++] = ' '; |
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
199 text[textPointer++] = '/'; |
38 | 200 text[textPointer++] = '\027'; |
201 text[textPointer++] = ' '; | |
202 text[textPointer++] = '0' + data->tX_colorscheme; | |
203 text[textPointer++] = '\020'; | |
204 } | |
205 } | |
206 else | |
207 { | |
208 if(data->nonMetricalSystem == 0) | |
209 { | |
210 text[textPointer++] = 'm'; | |
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
211 text[textPointer++] = ' '; |
38 | 212 text[textPointer++] = '/'; |
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
213 text[textPointer++] = ' '; |
38 | 214 text[textPointer++] = 'C'; |
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
215 text[textPointer++] = ' '; |
38 | 216 } |
217 else | |
218 { | |
219 text[textPointer++] = 'f'; | |
220 text[textPointer++] = 't'; | |
221 text[textPointer++] = ' '; | |
222 text[textPointer++] = '/'; | |
223 text[textPointer++] = ' '; | |
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
224 text[textPointer++] = 'F'; |
38 | 225 text[textPointer++] = ' '; |
536
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
226 } |
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
227 if(data->tX_colorscheme != 0) |
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
228 { |
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
229 text[textPointer++] = '/'; |
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
230 text[textPointer++] = '\027'; |
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
231 text[textPointer++] = ' '; |
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
232 text[textPointer++] = '0' + data->tX_colorscheme; |
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
233 text[textPointer++] = ' '; |
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
234 text[textPointer++] = '\020'; |
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
235 } |
54c5ec8416c4
Changed visualization of Depth / temperatur / debugview entry
Ideenmodellierer
parents:
520
diff
changeset
|
236 text[textPointer++] = '/'; |
38 | 237 text[textPointer++] = ' '; |
238 text[textPointer++] = 'd'; | |
239 text[textPointer++] = 'e'; | |
240 text[textPointer++] = 'b'; | |
241 text[textPointer++] = 'u'; | |
242 text[textPointer++] = 'g'; | |
243 } | |
244 | |
245 text[textPointer++] = '\n'; | |
246 text[textPointer++] = '\r'; | |
247 text[textPointer] = 0; | |
248 } | |
249 else | |
250 { | |
251 strcpy(&text[textPointer],"\n\r"); | |
252 textPointer += 2; | |
253 } | |
254 | |
255 if((line == 0) || (line == 4)) | |
256 { | |
257 text[textPointer++] = TXT_Information; | |
258 text[textPointer++] = '\t'; | |
259 textPointer += snprintf(&text[textPointer],29,"RTE %u.%u OS %i.%i.%i" | |
260 ,RTEhigh | |
261 ,RTElow | |
262 ,firmwareDataGetPointer()->versionFirst | |
263 ,firmwareDataGetPointer()->versionSecond | |
264 ,firmwareDataGetPointer()->versionThird | |
265 ); | |
266 } | |
267 strcpy(&text[textPointer],"\n\r"); | |
268 textPointer += 2; | |
269 | |
520 | 270 if((line == 0) || (line == 5)) |
38 | 271 { |
272 text[textPointer++] = TXT_2BYTE; | |
273 text[textPointer++] = TXT2BYTE_ResetMenu; | |
274 text[textPointer] = 0; | |
275 } | |
276 strcpy(&text[textPointer],"\n\r"); | |
277 textPointer += 2; | |
278 | |
279 return StMSYS; | |
280 } | |
281 | |
282 | |
283 /* Private functions ---------------------------------------------------------*/ |