Mercurial > public > ostc4
annotate Discovery/Src/tMenuSystem.c @ 411:e908b894f107 Improment_NVM
Bugfix: Limit log length in case of corrupted sample storage:
In case of a sample address reset the header would have a smaler end address as the start address. As result the length becomes very long and download e.g. via Subsurface, would seem to hang. To solve this the number of sample bytes in this use case has been limited. Tested with subsurface only. After change dowload of logs is possible again. Nevertheless the sampledata will be lost.
Minor change: "header" was used as global as well as as local variable => changed name for global variant to gheader.
author | ideenmodellierer |
---|---|
date | Mon, 13 Jan 2020 20:27:57 +0100 |
parents | 0dbf550dc743 |
children | 3485360c5db0 |
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 { | |
198 text[textPointer++] = ' '; | |
199 text[textPointer++] = ' '; | |
200 text[textPointer++] = ' '; | |
201 text[textPointer++] = ' '; | |
202 text[textPointer++] = '\027'; | |
203 text[textPointer++] = '/'; | |
204 text[textPointer++] = ' '; | |
205 text[textPointer++] = '0' + data->tX_colorscheme; | |
206 text[textPointer++] = '\020'; | |
207 } | |
208 } | |
209 else | |
210 { | |
211 if(data->nonMetricalSystem == 0) | |
212 { | |
213 text[textPointer++] = 'm'; | |
214 text[textPointer++] = '/'; | |
215 text[textPointer++] = 'C'; | |
216 } | |
217 else | |
218 { | |
219 text[textPointer++] = 'f'; | |
220 text[textPointer++] = 't'; | |
221 text[textPointer++] = '/'; | |
222 text[textPointer++] = 'F'; | |
223 } | |
224 | |
225 text[textPointer++] = ' '; | |
226 text[textPointer++] = ' '; | |
227 text[textPointer++] = ' '; | |
228 text[textPointer++] = ' '; | |
229 text[textPointer++] = '\027'; | |
230 text[textPointer++] = '/'; | |
231 text[textPointer++] = ' '; | |
232 text[textPointer++] = '0' + data->tX_colorscheme; | |
233 text[textPointer++] = '\020'; | |
234 text[textPointer++] = ' '; | |
235 text[textPointer++] = ' '; | |
236 text[textPointer++] = 'd'; | |
237 text[textPointer++] = 'e'; | |
238 text[textPointer++] = 'b'; | |
239 text[textPointer++] = 'u'; | |
240 text[textPointer++] = 'g'; | |
241 } | |
242 | |
243 text[textPointer++] = '\n'; | |
244 text[textPointer++] = '\r'; | |
245 text[textPointer] = 0; | |
246 } | |
247 else | |
248 { | |
249 strcpy(&text[textPointer],"\n\r"); | |
250 textPointer += 2; | |
251 } | |
252 | |
253 if((line == 0) || (line == 4)) | |
254 { | |
255 text[textPointer++] = TXT_2BYTE; | |
256 text[textPointer++] = TXT2BYTE_Customviews;//TXT2BYTE_ShowDebug; | |
257 } | |
258 text[textPointer++] = '\n'; | |
259 text[textPointer++] = '\r'; | |
260 text[textPointer] = 0; | |
261 | |
262 if((line == 0) || (line == 5)) | |
263 { | |
264 text[textPointer++] = TXT_Information; | |
265 text[textPointer++] = '\t'; | |
266 textPointer += snprintf(&text[textPointer],29,"RTE %u.%u OS %i.%i.%i" | |
267 ,RTEhigh | |
268 ,RTElow | |
269 ,firmwareDataGetPointer()->versionFirst | |
270 ,firmwareDataGetPointer()->versionSecond | |
271 ,firmwareDataGetPointer()->versionThird | |
272 ); | |
273 } | |
274 strcpy(&text[textPointer],"\n\r"); | |
275 textPointer += 2; | |
276 | |
277 if((line == 0) || (line == 6)) | |
278 { | |
279 text[textPointer++] = TXT_2BYTE; | |
280 text[textPointer++] = TXT2BYTE_ResetMenu; | |
281 text[textPointer] = 0; | |
282 } | |
283 strcpy(&text[textPointer],"\n\r"); | |
284 textPointer += 2; | |
285 | |
286 return StMSYS; | |
287 } | |
288 | |
289 | |
290 /* Private functions ---------------------------------------------------------*/ | |
291 | |
292 char customview_TXT2BYTE_helper(uint8_t customViewId) | |
293 { | |
294 char text = 0; | |
295 | |
296 switch(customViewId) | |
297 { | |
298 case CVIEW_sensors: | |
299 text = TXT2BYTE_O2monitor; | |
300 break; | |
301 case CVIEW_sensors_mV: | |
302 text = TXT2BYTE_O2voltage; | |
303 break; | |
304 case CVIEW_Compass: | |
305 text = TXT2BYTE_Compass; | |
306 break; | |
307 case CVIEW_Decolist: | |
308 text = TXT2BYTE_Decolist; | |
309 break; | |
310 case CVIEW_Tissues: | |
311 text = TXT2BYTE_Tissues; | |
312 break; | |
313 case CVIEW_Profile: | |
314 text = TXT2BYTE_Profile; | |
315 break; | |
316 case CVIEW_Gaslist: | |
317 text = TXT2BYTE_Gaslist; | |
318 break; | |
319 case CVIEW_EADTime: | |
320 text = TXT2BYTE_Info; | |
321 break; | |
322 case CVIEW_SummaryOfLeftCorner: | |
323 text = TXT2BYTE_Summary; | |
324 break; | |
325 case CVIEW_noneOrDebug: | |
379 | 326 text = TXT2BYTE_DispNoneDbg; |
38 | 327 break; |
328 default: | |
329 break; | |
330 } | |
331 return text; | |
332 } |