Mercurial > public > ostc4
annotate Discovery/Src/t3.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 | 0e1db77b2aca |
children | 6fbf7cd391cb |
rev | line source |
---|---|
38 | 1 /////////////////////////////////////////////////////////////////////////////// |
2 /// -*- coding: UTF-8 -*- | |
3 /// | |
4 /// \file Discovery/Src/t3.c | |
5 /// \brief Main Template file for dive mode special scree t3 | |
6 /// \author Heinrichs Weikamp gmbh | |
7 /// \date 10-Nov-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 "t3.h" | |
31 | |
32 #include "data_exchange_main.h" | |
33 #include "decom.h" | |
34 #include "gfx_fonts.h" | |
35 #include "math.h" | |
36 #include "tHome.h" | |
37 #include "timer.h" | |
38 #include "unit.h" | |
39 | |
237
ec16fd26e280
Bugfix: do not show NDL in bigscreen mode when zero
Jan Mulder <jlmulder@xs4all.nl>
parents:
214
diff
changeset
|
40 //* Imported function prototypes ---------------------------------------------*/ |
38 | 41 extern uint8_t write_gas(char *text, uint8_t oxygen, uint8_t helium); |
42 | |
43 /* Exported variables --------------------------------------------------------*/ | |
44 | |
45 const uint16_t BigFontSeperationLeftRight = 399; | |
46 const uint16_t BigFontSeperationTopBottom = 240; | |
47 | |
48 /* Private variables ---------------------------------------------------------*/ | |
49 GFX_DrawCfgScreen t3screen; | |
50 GFX_DrawCfgWindow t3l1; | |
51 GFX_DrawCfgWindow t3r1; | |
52 GFX_DrawCfgWindow t3c1; | |
53 GFX_DrawCfgWindow t3c2; | |
54 | |
529
0e1db77b2aca
Added skip condition in custom view selection:
Ideenmodellierer
parents:
527
diff
changeset
|
55 uint8_t t3_selection_customview = CVIEW_noneOrDebug; |
38 | 56 |
57 /* TEM HAS TO MOVE TO GLOBAL--------------------------------------------------*/ | |
58 | |
59 /* Private types -------------------------------------------------------------*/ | |
60 #define TEXTSIZE 16 | |
384
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
61 #define NUMBER_OF_VIEWS 7 /* number of views defined in the array below */ |
38 | 62 |
63 const uint8_t t3_customviewsStandard[] = | |
64 { | |
65 CVIEW_T3_Decostop, | |
66 CVIEW_sensors, | |
67 CVIEW_Compass, | |
68 CVIEW_T3_MaxDepth, | |
69 CVIEW_T3_StopWatch, | |
70 CVIEW_T3_TTS, | |
71 CVIEW_T3_ppO2andGas, | |
518 | 72 CVIEW_T3_GasList, |
511 | 73 CVIEW_T3_Navigation, |
74 CVIEW_T3_DepthData, | |
38 | 75 CVIEW_T3_END |
76 }; | |
77 | |
78 /* Private function prototypes -----------------------------------------------*/ | |
79 void t3_refresh_divemode(void); | |
80 | |
81 uint8_t t3_test_customview_warnings(void); | |
82 void t3_refresh_customview(float depth); | |
496 | 83 void t3_basics_compass(GFX_DrawCfgScreen *tXscreen, point_t center, uint16_t ActualHeading, uint16_t UserSetHeading); |
38 | 84 |
85 /* Exported functions --------------------------------------------------------*/ | |
86 | |
87 void t3_init(void) | |
88 { | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
89 SSettings* pSettings; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
90 pSettings = settingsGetPointer(); |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
91 |
496 | 92 t3_selection_customview = t3_customviewsStandard[0]; |
38 | 93 |
94 t3screen.FBStartAdress = 0; | |
95 t3screen.ImageHeight = 480; | |
96 t3screen.ImageWidth = 800; | |
97 t3screen.LayerIndex = 1; | |
98 | |
99 t3l1.Image = &t3screen; | |
100 t3l1.WindowNumberOfTextLines = 2; | |
101 t3l1.WindowLineSpacing = 19; // Abstand von Y0 | |
102 t3l1.WindowTab = 100; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
103 |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
104 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
105 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
106 t3l1.WindowX0 = 0; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
107 t3l1.WindowX1 = BigFontSeperationLeftRight - 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
108 t3l1.WindowY0 = BigFontSeperationTopBottom + 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
109 t3l1.WindowY1 = 479; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
110 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
111 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
112 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
113 t3l1.WindowX0 = 800 - BigFontSeperationLeftRight + 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
114 t3l1.WindowX1 = 799; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
115 t3l1.WindowY0 = 0; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
116 t3l1.WindowY1 = 479 - BigFontSeperationTopBottom + 5 ; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
117 } |
38 | 118 |
119 t3r1.Image = &t3screen; | |
120 t3r1.WindowNumberOfTextLines = t3l1.WindowNumberOfTextLines; | |
121 t3r1.WindowLineSpacing = t3l1.WindowLineSpacing; | |
122 t3r1.WindowTab = t3l1.WindowTab; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
123 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
124 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
125 t3r1.WindowX0 = BigFontSeperationLeftRight + 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
126 t3r1.WindowX1 = 799; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
127 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
128 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
129 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
130 t3r1.WindowX0 = 0; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
131 t3r1.WindowX1 = BigFontSeperationLeftRight - 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
132 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
133 |
38 | 134 t3r1.WindowY0 = t3l1.WindowY0; |
135 t3r1.WindowY1 = t3l1.WindowY1; | |
136 | |
518 | 137 /* t3c1 is across the complete lower part of the display */ |
38 | 138 t3c1.Image = &t3screen; |
139 t3c1.WindowNumberOfTextLines = 2; | |
518 | 140 t3c1.WindowLineSpacing = 84 + 5; /* double font + spacing */ |
38 | 141 t3c1.WindowX0 = 0; |
142 t3c1.WindowX1 = 799; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
143 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
144 { |
511 | 145 t3c1.WindowY0 = 5; |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
146 t3c1.WindowY1 = BigFontSeperationTopBottom - 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
147 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
148 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
149 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
150 t3c1.WindowY0 = 480 - BigFontSeperationTopBottom + 5; |
511 | 151 t3c1.WindowY1 = 479 - 5; |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
152 } |
38 | 153 |
518 | 154 /* t3c2 is just showing the lower right part of the display */ |
38 | 155 t3c2.Image = &t3screen; |
156 t3c2.WindowNumberOfTextLines = 3; | |
511 | 157 t3c2.WindowLineSpacing = t3c1.WindowLineSpacing ; |
38 | 158 t3c2.WindowX0 = 370; |
159 t3c2.WindowX1 = 799; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
160 t3c2.WindowY0 = t3c1.WindowY0; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
161 t3c2.WindowY1 = t3c1.WindowY1; |
38 | 162 t3c2.WindowTab = 600; |
163 } | |
164 | |
165 | |
166 void t3_refresh(void) | |
167 { | |
496 | 168 static uint8_t last_mode = MODE_SURFACE; |
169 | |
38 | 170 SStateList status; |
171 get_globalStateList(&status); | |
172 | |
173 if(stateUsed->mode != MODE_DIVE) | |
174 { | |
175 settingsGetPointer()->design = 7; | |
176 return; | |
177 } | |
178 | |
179 if(status.base != BaseHome) | |
180 return; | |
181 | |
496 | 182 if(last_mode != MODE_DIVE) /* Select customview */ |
183 { | |
184 if((settingsGetPointer()->tX_customViewTimeout == 0) && (settingsGetPointer()->showDebugInfo)) | |
185 { | |
186 t3_selection_customview = CVIEW_noneOrDebug; | |
187 } | |
188 else | |
189 { | |
190 t3_selection_customview = settingsGetPointer()->tX_customViewPrimary; | |
191 } | |
192 t3_change_customview(ACTION_END); | |
193 } | |
38 | 194 t3screen.FBStartAdress = getFrame(24); |
195 t3_refresh_divemode(); | |
166
255eedad4155
cleanup: get rid of some compile warnings
Jan Mulder <jlmulder@xs4all.nl>
parents:
138
diff
changeset
|
196 GFX_SetFramesTopBottom(t3screen.FBStartAdress, 0,480); |
38 | 197 releaseAllFramesExcept(24,t3screen.FBStartAdress); |
496 | 198 last_mode = stateUsed->mode; |
38 | 199 } |
200 | |
201 | |
202 /* Private functions ---------------------------------------------------------*/ | |
203 | |
204 float t3_basics_lines_depth_and_divetime(GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXl1, GFX_DrawCfgWindow* tXr1, uint8_t mode) | |
205 { | |
518 | 206 char text[256]; |
207 uint8_t textPointer; | |
38 | 208 uint8_t color; |
209 uint8_t depthChangeRate; | |
210 uint8_t depthChangeAscent; | |
211 point_t start, stop, startZeroLine; | |
518 | 212 SDivetime Divetime = {0,0,0,0}; |
38 | 213 |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
214 SSettings* pSettings; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
215 pSettings = settingsGetPointer(); |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
216 |
38 | 217 start.x = 0; |
218 stop.x = 799; | |
219 stop.y = start.y = BigFontSeperationTopBottom; | |
220 GFX_draw_line(tXscreen, start, stop, CLUT_Font020); | |
221 | |
222 start.y = BigFontSeperationTopBottom; | |
223 stop.y = 479; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
224 |
38 | 225 stop.x = start.x = BigFontSeperationLeftRight; |
226 GFX_draw_line(tXscreen, start, stop, CLUT_Font020); | |
227 | |
228 /* depth */ | |
174
ecb71521d004
Bugfix: make max depth move with current depth (part 2)
Jan Mulder <jlmulder@xs4all.nl>
parents:
166
diff
changeset
|
229 float depth = unit_depth_float(stateUsed->lifeData.depth_meter); |
38 | 230 |
231 if(depth <= 0.3f) | |
232 depth = 0; | |
233 | |
234 if(settingsGetPointer()->nonMetricalSystem) | |
235 snprintf(text,TEXTSIZE,"\032\f[feet]"); | |
236 else | |
237 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Depth); | |
238 GFX_write_string(&FontT42,tXl1,text,0); | |
239 | |
240 if( ((mode == DIVEMODE_Apnea) && ((stateUsed->lifeData.ascent_rate_meter_per_min > 4) || (stateUsed->lifeData.ascent_rate_meter_per_min < -4 ))) | |
241 || ((mode != DIVEMODE_Apnea) && ((stateUsed->lifeData.ascent_rate_meter_per_min > 8) || (stateUsed->lifeData.ascent_rate_meter_per_min < -10))) | |
242 ) | |
243 { | |
244 snprintf(text,TEXTSIZE,"\f\002%.0f %c%c/min " | |
245 , unit_depth_float(stateUsed->lifeData.ascent_rate_meter_per_min) | |
246 , unit_depth_char1() | |
247 , unit_depth_char2() | |
248 ); | |
249 GFX_write_string(&FontT42,tXl1,text,0); | |
250 } | |
251 | |
252 if( depth < 100) | |
253 snprintf(text,TEXTSIZE,"\020\003\016%01.1f",depth); | |
254 else | |
255 snprintf(text,TEXTSIZE,"\020\003\016%01.0f",depth); | |
256 | |
257 t3_basics_colorscheme_mod(text); | |
258 GFX_write_string(&FontT105,tXl1,text,1); | |
259 | |
260 | |
261 /* ascentrate graph */ | |
262 if(mode == DIVEMODE_Apnea) | |
263 { | |
264 /* ascentrate graph - apnea mode */ | |
265 if(stateUsed->lifeData.ascent_rate_meter_per_min > 0) | |
266 { | |
267 depthChangeAscent = 1; | |
268 if(stateUsed->lifeData.ascent_rate_meter_per_min < 200) | |
269 depthChangeRate = (uint8_t)stateUsed->lifeData.ascent_rate_meter_per_min; | |
270 else | |
271 depthChangeRate = 200; | |
272 } | |
273 else | |
274 { | |
275 depthChangeAscent = 0; | |
276 if(stateUsed->lifeData.ascent_rate_meter_per_min > -200) | |
277 depthChangeRate = (uint8_t)(0 - stateUsed->lifeData.ascent_rate_meter_per_min); | |
278 else | |
279 depthChangeRate = 200; | |
280 } | |
413 | 281 |
282 if(!pSettings->FlipDisplay) | |
283 { | |
284 start.y = tXl1->WindowY0 - 1; | |
285 } | |
286 else | |
287 { | |
288 start.y = tXl1->WindowY1 + 1; | |
289 } | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
290 startZeroLine.y = start.y; |
38 | 291 for(int i = 0; i<5;i++) |
292 { | |
293 start.y += 40; | |
294 stop.y = start.y; | |
413 | 295 if(!pSettings->FlipDisplay) |
296 { | |
297 start.x = tXl1->WindowX1 - 1; | |
298 } | |
299 else | |
300 { | |
301 start.x = tXr1->WindowX1 - 1; | |
302 } | |
38 | 303 stop.x = start.x - 17; |
304 | |
305 if(depthChangeRate <= 6) | |
306 { | |
307 if(i == 2) | |
308 { | |
309 startZeroLine.y = start.y; | |
310 stop.x = start.x - 34; | |
311 } | |
312 } | |
313 else | |
314 { | |
315 if(((i == 1) && depthChangeAscent) || ((i == 3) && !depthChangeAscent)) | |
316 { | |
317 startZeroLine.y = start.y; | |
318 stop.x = start.x - 34; | |
319 } | |
320 } | |
321 GFX_draw_line(tXscreen, start, stop, 0); | |
322 } | |
323 // new thick bar design Sept. 2015 | |
324 if((stateUsed->lifeData.ascent_rate_meter_per_min > 4) || (stateUsed->lifeData.ascent_rate_meter_per_min < -4)) | |
325 { | |
326 start.y = startZeroLine.y; | |
327 if(depthChangeAscent) | |
328 { | |
329 color = CLUT_EverythingOkayGreen; | |
330 start.y += 7; // starte etwas weiter oben | |
331 stop.y = start.y + (uint16_t)(depthChangeRate * 4) - 9; // - x; // wegen der Liniendicke | |
332 if(stop.y > 475) | |
333 stop.y = 475; | |
334 } | |
335 else | |
336 { | |
337 color = CLUT_Font023; | |
338 start.y -= 7; | |
339 stop.y = start.y - (uint16_t)(depthChangeRate * 4) + 9; | |
340 if(stop.y <= tXl1->WindowY0) | |
341 stop.y = tXl1->WindowY0 + 1; | |
342 } | |
413 | 343 if(!pSettings->FlipDisplay) |
344 { | |
345 start.x = tXl1->WindowX1 - 3 - 5; | |
346 } | |
347 else | |
348 { | |
349 start.x = tXr1->WindowX1 - 3 - 5; | |
350 } | |
351 | |
352 stop.x = start.x; | |
38 | 353 GFX_draw_thick_line(12,tXscreen, start, stop, color); |
354 } | |
355 } | |
356 else | |
357 { | |
358 /* ascentrate graph -standard mode */ | |
359 if(stateUsed->lifeData.ascent_rate_meter_per_min > 0) | |
360 { | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
361 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
362 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
363 start.y = tXl1->WindowY0 - 1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
364 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
365 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
366 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
367 start.y = tXl1->WindowY1 + 1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
368 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
369 |
38 | 370 for(int i = 0; i<4;i++) |
371 { | |
372 start.y += 5*8; | |
373 stop.y = start.y; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
374 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
375 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
376 start.x = tXl1->WindowX1 - 1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
377 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
378 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
379 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
380 start.x = tXr1->WindowX1 - 1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
381 } |
38 | 382 stop.x = start.x - 17; |
383 GFX_draw_line(tXscreen, start, stop, 0); | |
384 } | |
385 // new thick bar design Sept. 2015 | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
386 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
387 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
388 start.x = tXl1->WindowX1 - 3 - 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
389 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
390 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
391 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
392 start.x = tXr1->WindowX1 - 3 - 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
393 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
394 |
38 | 395 stop.x = start.x; |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
396 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
397 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
398 start.y = tXl1->WindowY0 - 1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
399 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
400 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
401 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
402 start.y = tXl1->WindowY1 + 1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
403 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
404 |
38 | 405 stop.y = start.y + (uint16_t)(stateUsed->lifeData.ascent_rate_meter_per_min * 8); |
406 stop.y -= 3; // wegen der Liniendicke von 12 anstelle von 9 | |
407 if(stop.y >= 470) | |
408 stop.y = 470; | |
409 start.y += 7; // starte etwas weiter oben | |
410 if(stateUsed->lifeData.ascent_rate_meter_per_min <= 10) | |
411 color = CLUT_EverythingOkayGreen; | |
412 else | |
413 if(stateUsed->lifeData.ascent_rate_meter_per_min <= 15) | |
414 color = CLUT_WarningYellow; | |
415 else | |
416 color = CLUT_WarningRed; | |
417 | |
418 GFX_draw_thick_line(12,tXscreen, start, stop, color); | |
419 } | |
420 } | |
421 | |
422 // divetime | |
423 if(mode == DIVEMODE_Apnea) | |
424 { | |
425 if(stateUsed->lifeData.counterSecondsShallowDepth) | |
426 { | |
427 SDivetime SurfaceBreakTime = {0,0,0,0}; | |
428 | |
429 SurfaceBreakTime.Total = stateUsed->lifeData.counterSecondsShallowDepth; | |
430 SurfaceBreakTime.Minutes = SurfaceBreakTime.Total / 60; | |
431 SurfaceBreakTime.Seconds = SurfaceBreakTime.Total - (SurfaceBreakTime.Minutes * 60); | |
432 | |
433 snprintf(text,TEXTSIZE,"\032\f\002%c%c", TXT_2BYTE,TXT2BYTE_ApneaSurface); | |
434 GFX_write_string(&FontT42,tXr1,text,0); | |
435 | |
436 snprintf(text,TEXTSIZE,"\020\003\016\002%u:%02u",SurfaceBreakTime.Minutes, SurfaceBreakTime.Seconds); | |
437 } | |
438 else | |
439 { | |
440 Divetime.Total = stateUsed->lifeData.dive_time_seconds; | |
441 Divetime.Minutes = Divetime.Total / 60; | |
442 Divetime.Seconds = Divetime.Total - ( Divetime.Minutes * 60 ); | |
443 | |
444 snprintf(text,TEXTSIZE,"\032\f\002%c",TXT_Divetime); | |
445 GFX_write_string(&FontT42,tXr1,text,0); | |
446 | |
447 if(Divetime.Minutes < 100) | |
448 snprintf(text,TEXTSIZE,"\020\003\016\002%u:%02u",Divetime.Minutes, Divetime.Seconds); | |
449 else | |
450 snprintf(text,TEXTSIZE,"\020\003\016\002%u'",Divetime.Minutes); | |
451 } | |
518 | 452 t3_basics_colorscheme_mod(text); |
453 GFX_write_string(&FontT105,tXr1,text,1); | |
38 | 454 } |
455 else | |
456 { | |
518 | 457 switch(get_globalState()) |
458 { | |
459 case StDBEAR: snprintf(text,TEXTSIZE,"\a\003\001%c%c", TXT_2BYTE, TXT2BYTE_DiveBearingQ); | |
460 GFX_write_string_color(&FontT42,tXr1,text,1,CLUT_WarningYellow); | |
461 break; | |
462 case StDRAVG: snprintf(text,TEXTSIZE,"\a\003\001%c%c", TXT_2BYTE, TXT2BYTE_DiveResetAvgQ); | |
463 GFX_write_string_color(&FontT42,tXr1,text,1,CLUT_WarningYellow); | |
464 break; | |
38 | 465 |
518 | 466 case StDMGAS: |
467 textPointer = 0; | |
468 text[textPointer++] = '\a'; | |
469 text[textPointer++] = '\001'; | |
470 text[textPointer++] = ' '; | |
471 textPointer += tHome_gas_writer(stateUsed->diveSettings.gas[actualBetterGasId()].oxygen_percentage,stateUsed->diveSettings.gas[actualBetterGasId()].helium_percentage,&text[textPointer]); | |
472 text[textPointer++] = '?'; | |
473 text[textPointer++] = ' '; | |
474 text[textPointer++] = 0; | |
475 GFX_write_string_color(&FontT42,tXr1,text,1,CLUT_WarningYellow); | |
476 break; | |
477 default: /* show divetime */ | |
38 | 478 |
518 | 479 Divetime.Total = stateUsed->lifeData.dive_time_seconds_without_surface_time; |
480 Divetime.Minutes = Divetime.Total / 60; | |
481 Divetime.Seconds = Divetime.Total - ( Divetime.Minutes * 60 ); | |
482 | |
483 snprintf(text,TEXTSIZE,"\032\f\002%c",TXT_Divetime); | |
484 GFX_write_string(&FontT42,tXr1,text,0); | |
485 | |
486 if(Divetime.Minutes < 100) | |
487 snprintf(text,TEXTSIZE,"\020\003\016\002%u:%02u",Divetime.Minutes, Divetime.Seconds); | |
488 else | |
489 snprintf(text,TEXTSIZE,"\020\003\016\002%u'",Divetime.Minutes); | |
490 | |
491 t3_basics_colorscheme_mod(text); | |
492 GFX_write_string(&FontT105,tXr1,text,1); | |
493 break; | |
494 } | |
38 | 495 } |
496 | |
497 return depth; | |
498 } | |
499 | |
500 | |
501 void t3_refresh_divemode(void) | |
502 { | |
503 uint8_t customview_warnings = 0; | |
504 float depth_meter = 0.0; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
505 |
38 | 506 // everything like lines, depth, ascent graph and divetime |
507 depth_meter = t3_basics_lines_depth_and_divetime(&t3screen, &t3l1, &t3r1, 0); // 0 could be stateUsed->diveSettings.diveMode for CCR specials | |
508 | |
509 // customview | |
510 if(stateUsed->warnings.numWarnings) | |
511 customview_warnings = t3_test_customview_warnings(); | |
512 | |
513 if(customview_warnings && warning_count_high_time) | |
514 t3_basics_show_customview_warnings(&t3c1); | |
515 else | |
516 t3_refresh_customview(depth_meter); | |
517 | |
518 if(stateUsed->warnings.lowBattery) | |
496 | 519 t3_basics_battery_low_customview_extra(&t3r1); //t3c1); |
38 | 520 } |
521 | |
522 | |
523 void t3_basics_battery_low_customview_extra(GFX_DrawCfgWindow* tXc1) | |
524 { | |
525 char TextC1[256]; | |
526 | |
496 | 527 TextC1[0] = ' ';//'\002'; |
38 | 528 TextC1[1] = '\f'; |
529 TextC1[2] = '\025'; | |
530 TextC1[3] = '3'; | |
531 TextC1[4] = '1'; | |
532 TextC1[5] = '1'; | |
533 TextC1[6] = '1'; | |
534 TextC1[7] = '1'; | |
535 TextC1[8] = '1'; | |
536 TextC1[9] = '1'; | |
537 TextC1[10] = '1'; | |
538 TextC1[11] = '1'; | |
539 TextC1[12] = '1'; | |
540 TextC1[13] = '1'; | |
541 TextC1[14] = '0'; | |
542 TextC1[15] = 0; | |
543 | |
544 if(!warning_count_high_time) | |
545 TextC1[4] = '2'; | |
546 | |
547 GFX_write_string(&Batt24,tXc1,TextC1,0); | |
548 } | |
549 | |
550 | |
551 | |
552 void t3_refresh_customview(float depth) | |
553 { | |
272
74a8296a2318
cleanup: simplify stateUsed usage
Jan Mulder <jlmulder@xs4all.nl>
parents:
237
diff
changeset
|
554 t3_basics_refresh_customview(depth, t3_selection_customview, &t3screen, &t3c1, &t3c2, stateUsedWrite->diveSettings.diveMode); |
38 | 555 } |
556 | |
557 | |
558 void t3_basics_refresh_apnoeRight(float depth, uint8_t tX_selection_customview, GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXc1, GFX_DrawCfgWindow* tXc2, uint8_t mode) | |
559 { | |
560 char text[512]; | |
561 uint16_t textpointer = 0; | |
562 | |
563 // CVIEW_T3_Temperature | |
564 float temperature; | |
413 | 565 SSettings* pSettings; |
566 pSettings = settingsGetPointer(); | |
38 | 567 |
568 SDivetime TotalDivetime = {0,0,0,0}; | |
569 SDivetime LastDivetime = {0,0,0,0}; | |
570 | |
571 uint16_t tempWinX0; | |
413 | 572 uint16_t tempWinX1; |
38 | 573 uint16_t tempWinY0; |
413 | 574 uint16_t tempWinY1; |
38 | 575 |
576 tempWinX0 = tXc1->WindowX0; | |
413 | 577 tempWinX1 = tXc1->WindowX1; |
38 | 578 tempWinY0 = tXc1->WindowY0; |
413 | 579 tempWinY1 = tXc1->WindowY1; |
38 | 580 |
581 tXc1->WindowX0 = 440; // rechte Seite | |
582 | |
583 switch(tX_selection_customview) | |
584 { | |
585 case CVIEW_T3_Temperature: | |
586 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Temperature); | |
587 GFX_write_string(&FontT42,tXc1,text,0); | |
588 | |
189
8b8074080d7b
Bugfix: average temperature on arrival from RTE instead of display time
Jan Mulder <jlmulder@xs4all.nl>
parents:
174
diff
changeset
|
589 temperature = unit_temperature_float(stateUsed->lifeData.temperature_celsius); |
38 | 590 textpointer = snprintf(text,TEXTSIZE,"\020\003\016%01.0f\016\016\140",temperature); // "\016\016%01.1f `" + C or F |
591 if(settingsGetPointer()->nonMetricalSystem == 0) | |
592 text[textpointer++] = 'C'; | |
593 else | |
594 text[textpointer++] = 'F'; | |
595 text[textpointer++] = 0; | |
596 t3_basics_colorscheme_mod(text); | |
597 GFX_write_string(&FontT105,tXc1,text,1); | |
598 break; | |
599 | |
600 case CVIEW_T3_ApnoeSurfaceInfo: | |
601 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Divetime); | |
602 GFX_write_string(&FontT42,tXc1,text,0); | |
603 | |
604 TotalDivetime.Total = stateUsed->lifeData.dive_time_seconds_without_surface_time; | |
605 TotalDivetime.Minutes = TotalDivetime.Total / 60; | |
606 TotalDivetime.Seconds = TotalDivetime.Total - ( TotalDivetime.Minutes * 60 ); | |
607 | |
608 LastDivetime.Total = stateUsed->lifeData.apnea_last_dive_time_seconds; | |
609 LastDivetime.Minutes = LastDivetime.Total / 60; | |
610 LastDivetime.Seconds = LastDivetime.Total - ( LastDivetime.Minutes * 60 ); | |
611 | |
413 | 612 // tXc1->WindowY0 = 100; // obere Zeile |
613 if(!pSettings->FlipDisplay) | |
614 { | |
615 tXc1->WindowY0 = 100; | |
616 } | |
617 else | |
618 { | |
619 tXc1->WindowY1 -= 100; /* jump to upper of two lines */ | |
620 } | |
38 | 621 |
622 snprintf(text,TEXTSIZE,"\020\016%u:%02u",LastDivetime.Minutes, LastDivetime.Seconds); | |
623 t3_basics_colorscheme_mod(text); | |
624 GFX_write_string(&FontT105,tXc1,text,0); | |
625 | |
413 | 626 if(pSettings->FlipDisplay) |
627 { | |
628 tXc1->WindowX0 = 0; | |
629 | |
630 } | |
38 | 631 snprintf(text,TEXTSIZE,"\032\002%c%c",TXT_2BYTE, TXT2BYTE_ApneaLast); |
632 GFX_write_string(&FontT42,tXc1,text,0); | |
633 | |
413 | 634 if(!pSettings->FlipDisplay) |
635 { | |
636 tXc1->WindowY0 = tempWinY0; | |
637 } | |
638 else | |
639 { | |
640 tXc1->WindowX1 = tempWinX1; | |
641 tXc1->WindowY1 = tempWinY1; /* jump to upper of two lines */ | |
642 } | |
38 | 643 |
644 snprintf(text,TEXTSIZE,"\020\016%u:%02u",TotalDivetime.Minutes, TotalDivetime.Seconds); | |
645 t3_basics_colorscheme_mod(text); | |
646 GFX_write_string(&FontT105,tXc1,text,0); | |
647 | |
648 snprintf(text,TEXTSIZE,"\032\002%c%c",TXT_2BYTE, TXT2BYTE_ApneaTotal); | |
413 | 649 if(pSettings->FlipDisplay) |
650 { | |
651 tXc1->WindowX0 = 0; | |
652 | |
653 } | |
38 | 654 GFX_write_string(&FontT42,tXc1,text,0); |
655 break; | |
656 } | |
657 | |
658 tXc1->WindowX0 = tempWinX0; | |
413 | 659 tXc1->WindowX1 = tempWinX1; |
38 | 660 tXc1->WindowY0 = tempWinY0; |
661 | |
662 } | |
663 | |
664 | |
665 void t3_basics_refresh_customview(float depth, uint8_t tX_selection_customview, GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXc1, GFX_DrawCfgWindow* tXc2, uint8_t mode) | |
666 { | |
667 char text[512]; | |
668 uint16_t textpointer = 0; | |
669 | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
670 SSettings* pSettings; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
671 pSettings = settingsGetPointer(); |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
672 |
38 | 673 // CVIEW_T3_Decostop and CVIEW_T3_TTS |
674 const SDecoinfo * pDecoinfo; | |
675 if(stateUsed->diveSettings.deco_type.ub.standard == GF_MODE) | |
676 pDecoinfo = &stateUsed->decolistBuehlmann; | |
677 else | |
678 pDecoinfo = &stateUsed->decolistVPM; | |
679 | |
680 // CVIEW_T3_Decostop | |
681 uint16_t nextstopLengthSeconds = 0; | |
682 uint8_t nextstopDepthMeter = 0; | |
683 SDivetime SafetyStopTime = {0,0,0,0}; | |
684 | |
685 // CVIEW_T3_ppO2andGas | |
686 uint8_t oxygen_percentage = 0; | |
687 | |
688 // CVIEW_T3_Temperature | |
689 float temperature; | |
690 | |
691 // CVIEW_T3_GasList | |
692 float fPpO2limitHigh, fPpO2limitLow, fPpO2ofGasAtThisDepth; | |
693 const SGasLine * pGasLine; | |
694 uint8_t oxygen, helium; | |
695 uint8_t lineNumber; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
696 uint8_t gasPosIdx; |
38 | 697 |
496 | 698 /* compass position */ |
699 point_t center; | |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
700 uint16_t heading; |
496 | 701 |
38 | 702 // CVIEW_T3_StopWatch |
703 SDivetime Stopwatch = {0,0,0,0}; | |
704 float fAverageDepth, fAverageDepthAbsolute; | |
705 | |
706 uint16_t tempWinX0; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
707 uint16_t tempWinX1; |
38 | 708 uint16_t tempWinY0; |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
709 uint16_t tempWinY1; |
38 | 710 uint16_t tempWinC2X0; |
413 | 711 uint16_t tempWinC2Y0; |
712 uint16_t tempWinC2X1; | |
713 uint16_t tempWinC2Y1; | |
38 | 714 uint16_t tempWinC2Tab; |
715 | |
716 tempWinX0 = tXc1->WindowX0; | |
717 tempWinY0 = tXc1->WindowY0; | |
496 | 718 tempWinX1 = tXc1->WindowX1; |
719 tempWinY1 = tXc1->WindowY1; | |
413 | 720 |
38 | 721 tempWinC2X0 = tXc2->WindowX0; |
413 | 722 tempWinC2Y0 = tXc2->WindowY0; |
723 tempWinC2X1 = tXc2->WindowX1; | |
724 tempWinC2Y1 = tXc2->WindowY1; | |
38 | 725 tempWinC2Tab = tXc2->WindowTab; |
726 | |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
727 if(settingsGetPointer()->compassInertia) |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
728 { |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
729 heading = (uint16_t)compass_getCompensated(); |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
730 } |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
731 else |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
732 { |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
733 heading = (uint16_t)stateUsed->lifeData.compass_heading; |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
734 } |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
735 |
38 | 736 switch(tX_selection_customview) |
737 { | |
738 case CVIEW_T3_ApnoeSurfaceInfo: | |
739 snprintf(text,TEXTSIZE,"\032\f%c",TXT_MaxDepth); | |
740 | |
413 | 741 if(!pSettings->FlipDisplay) |
742 { | |
743 GFX_write_string(&FontT42,tXc1,text,0); | |
744 tXc1->WindowY0 = 100; | |
745 } | |
746 else | |
747 { | |
748 GFX_write_string(&FontT42,tXc2,text,0); | |
749 tXc2->WindowY1 -= 100; /* jump to upper of two lines */ | |
750 } | |
38 | 751 |
752 snprintf(text,TEXTSIZE,"\020\016%01.1f",unit_depth_float(stateUsed->lifeData.apnea_last_max_depth_meter)); | |
753 t3_basics_colorscheme_mod(text); | |
413 | 754 |
755 if(!pSettings->FlipDisplay) | |
756 { | |
757 GFX_write_string(&FontT105,tXc1,text,0); | |
758 tXc1->WindowY0 = tempWinY0; | |
759 } | |
760 else | |
761 { | |
762 GFX_write_string(&FontT105,tXc2,text,0); | |
763 tXc2->WindowY1 = tempWinC2Y1; /* jump to upper of two lines */ | |
764 } | |
38 | 765 |
766 | |
767 snprintf(text,TEXTSIZE,"\020\016%01.1f",unit_depth_float(stateUsed->lifeData.apnea_total_max_depth_meter)); | |
768 t3_basics_colorscheme_mod(text); | |
413 | 769 if(!pSettings->FlipDisplay) |
770 { | |
771 GFX_write_string(&FontT105,tXc1,text,0); | |
772 } | |
773 else | |
774 { | |
775 GFX_write_string(&FontT105,tXc2,text,0); | |
776 } | |
38 | 777 break; |
778 | |
779 case CVIEW_T3_StopWatch: | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
780 |
38 | 781 Stopwatch.Total = timer_Stopwatch_GetTime(); |
782 Stopwatch.Minutes = Stopwatch.Total / 60; | |
783 Stopwatch.Seconds = Stopwatch.Total - ( Stopwatch.Minutes * 60 ); | |
784 fAverageDepth = timer_Stopwatch_GetAvarageDepth_Meter(); | |
785 fAverageDepthAbsolute = stateUsed->lifeData.average_depth_meter; | |
786 | |
787 snprintf(text,TEXTSIZE,"\032\f%c",TXT_AvgDepth); | |
788 GFX_write_string(&FontT42,tXc1,text,0); | |
789 snprintf(text,TEXTSIZE,"\030\003\016%01.1f",unit_depth_float(fAverageDepthAbsolute)); | |
790 GFX_write_string(&FontT105,tXc1,text,0); | |
791 | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
792 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
793 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
794 tXc1->WindowX0 = 480; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
795 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
796 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
797 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
798 tXc1->WindowX1 = 320; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
799 tXc1->WindowY0 = t3c1.WindowY0; /* select customer window */ |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
800 } |
38 | 801 // snprintf(text,TEXTSIZE,"\032\f%c%c - %c",TXT_2BYTE, TXT2BYTE_Clock, TXT_AvgDepth); |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
802 |
38 | 803 snprintf(text,TEXTSIZE,"\032\f%c", TXT_Stopwatch); |
804 GFX_write_string(&FontT42,tXc1,text,0); | |
805 snprintf(text,TEXTSIZE,"\030\016%01.1f",unit_depth_float(fAverageDepth)); | |
806 GFX_write_string(&FontT105,tXc1,text,0); | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
807 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
808 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
809 tXc1->WindowY0 = 100; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
810 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
811 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
812 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
813 tXc1->WindowY1 -= 100; /* jump to upper of two lines */ |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
814 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
815 |
38 | 816 snprintf(text,TEXTSIZE,"\030%u:\016\016%02u",Stopwatch.Minutes, Stopwatch.Seconds); |
817 GFX_write_string(&FontT105,tXc1,text,0); | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
818 |
496 | 819 break; |
38 | 820 |
821 case CVIEW_T3_GasList: | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
822 gasPosIdx = 0; |
38 | 823 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE, TXT2BYTE_Gaslist); |
824 GFX_write_string(&FontT42,tXc1,text,0); | |
825 | |
826 textpointer = 0; | |
827 tXc2->WindowX0 = 0; | |
518 | 828 tXc2->WindowTab = 800/3; // /2 |
38 | 829 |
413 | 830 if(pSettings->FlipDisplay) |
831 { | |
832 tXc2->WindowY1 = 0; | |
833 } | |
834 | |
38 | 835 pGasLine = settingsGetPointer()->gas; |
836 if(actualLeftMaxDepth(stateUsed)) | |
837 fPpO2limitHigh = (float)(settingsGetPointer()->ppO2_max_deco) / 100; | |
838 else | |
839 fPpO2limitHigh = (float)(settingsGetPointer()->ppO2_max_std) / 100; | |
840 fPpO2limitLow = (float)(settingsGetPointer()->ppO2_min) / 100; | |
841 for(int gasId=1;gasId<=NUM_GASES;gasId++) | |
842 { | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
843 #ifdef ENABLE_UNUSED_GAS_HIDING |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
844 if(!pGasLine[gasId].note.ub.off) |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
845 { |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
846 #endif |
38 | 847 textpointer = 0; |
518 | 848 text[textpointer++] = '\003'; |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
849 |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
850 lineNumber = 1; |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
851 |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
852 switch(gasPosIdx) |
38 | 853 { |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
854 case 0: lineNumber = 0; |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
855 case 1: |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
856 break; |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
857 case 4: text[textpointer++] = '\001'; /* display centered */ |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
858 break; |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
859 case 2: lineNumber = 0; |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
860 case 3: text[textpointer++] = '\002'; /* display right aligned */ |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
861 default: |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
862 break; |
38 | 863 } |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
864 gasPosIdx++; |
518 | 865 |
38 | 866 fPpO2ofGasAtThisDepth = (stateUsed->lifeData.pressure_ambient_bar - WATER_VAPOUR_PRESSURE) * pGasLine[gasId].oxygen_percentage / 100; |
867 if(pGasLine[gasId].note.ub.active == 0) | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
868 strcpy(&text[textpointer++],"\031"); |
518 | 869 else if(stateUsed->lifeData.actualGas.GasIdInSettings == gasId) /* actual selected gas */ |
870 { | |
871 strcpy(&text[textpointer++],"\030"); | |
872 } | |
38 | 873 else if((fPpO2ofGasAtThisDepth > fPpO2limitHigh) || (fPpO2ofGasAtThisDepth < fPpO2limitLow)) |
874 strcpy(&text[textpointer++],"\025"); | |
518 | 875 else if(actualBetterGasId() == gasId) |
876 { | |
877 strcpy(&text[textpointer++],"\026"); /* Highlight better gas */ | |
878 } | |
38 | 879 else |
518 | 880 strcpy(&text[textpointer++],"\023"); /* Blue for travel or deco without special state */ |
38 | 881 |
882 text[textpointer++] = ' '; | |
883 oxygen = pGasLine[gasId].oxygen_percentage; | |
884 helium = pGasLine[gasId].helium_percentage; | |
885 textpointer += write_gas(&text[textpointer], oxygen, helium); | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
886 |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
887 if((pGasLine[gasId].depth_meter) && (gasPosIdx < 5)) /* do not show for potential last gas because of formating issues */ |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
888 { |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
889 textpointer += snprintf(&text[textpointer],7,"\016\016%u%c%c",unit_depth_integer(pGasLine[gasId].depth_meter), unit_depth_char1(), unit_depth_char2()); |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
890 } |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
891 text[textpointer++] = 0; |
518 | 892 GFX_write_string(&FontT42, tXc1, text, lineNumber); |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
893 #ifdef ENABLE_UNUSED_GAS_HIDING |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
894 } |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
895 #endif |
38 | 896 } |
897 break; | |
898 | |
899 case CVIEW_T3_Temperature: | |
900 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Temperature); | |
901 GFX_write_string(&FontT42,tXc1,text,0); | |
189
8b8074080d7b
Bugfix: average temperature on arrival from RTE instead of display time
Jan Mulder <jlmulder@xs4all.nl>
parents:
174
diff
changeset
|
902 |
8b8074080d7b
Bugfix: average temperature on arrival from RTE instead of display time
Jan Mulder <jlmulder@xs4all.nl>
parents:
174
diff
changeset
|
903 temperature = unit_temperature_float(stateUsed->lifeData.temperature_celsius); |
38 | 904 textpointer = snprintf(text,TEXTSIZE,"\030\003\016%01.1f \140",temperature); // "\016\016%01.1f `" + C or F |
905 if(settingsGetPointer()->nonMetricalSystem == 0) | |
906 text[textpointer++] = 'C'; | |
907 else | |
908 text[textpointer++] = 'F'; | |
909 text[textpointer++] = 0; | |
910 GFX_write_string(&FontT105,tXc1,text,0); | |
911 break; | |
912 | |
913 case CVIEW_Compass: | |
496 | 914 center.x = 600; |
915 center.y = 116; | |
38 | 916 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE, TXT2BYTE_Compass); |
917 GFX_write_string(&FontT42,tXc1,text,0); | |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
918 snprintf(text,100,"\030\003%03i`",heading); |
38 | 919 GFX_write_string(&FontT105,tXc1,text,0); |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
920 t3_basics_compass(tXscreen, center, heading, stateUsed->diveSettings.compassHeading); |
38 | 921 break; |
922 | |
923 case CVIEW_T3_Decostop: | |
924 default: | |
925 // decostop | |
926 if(pDecoinfo->output_time_to_surface_seconds) | |
927 { | |
928 tHome_findNextStop(pDecoinfo->output_stop_length_seconds, &nextstopDepthMeter, &nextstopLengthSeconds); | |
929 } | |
930 else | |
931 { | |
932 nextstopDepthMeter = 0; | |
933 nextstopLengthSeconds = 0; | |
934 } | |
935 | |
936 SafetyStopTime.Total = timer_Safetystop_GetCountDown(); | |
937 SafetyStopTime.Minutes = SafetyStopTime.Total / 60; | |
938 SafetyStopTime.Seconds = SafetyStopTime.Total - (SafetyStopTime.Minutes * 60); | |
939 | |
940 if(nextstopDepthMeter) | |
941 { | |
942 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Decostop); | |
943 GFX_write_string(&FontT42,tXc1,text,0); | |
944 | |
945 textpointer = 0; | |
946 snprintf(&text[textpointer],TEXTSIZE,"\020\003%u%c%c %u'" | |
947 , unit_depth_integer(nextstopDepthMeter) | |
948 , unit_depth_char1_T105() | |
949 , unit_depth_char2_T105() | |
950 , (nextstopLengthSeconds+59)/60); | |
951 // old without feet hw 170703 snprintf(&text[textpointer],TEXTSIZE,"\020\003%um %u'",nextstopDepthMeter,(nextstopLengthSeconds+59)/60); | |
952 t3_basics_colorscheme_mod(text); | |
496 | 953 GFX_write_string(&FontT105,tXc1,text,0); |
38 | 954 } |
955 else if(SafetyStopTime.Total && (depth > timer_Safetystop_GetDepthUpperLimit())) | |
956 { | |
957 textpointer = 0; | |
958 snprintf(&text[textpointer],TEXTSIZE,"\032\f%c%c",TXT_2BYTE,TXT2BYTE_SafetyStop2); | |
959 GFX_write_string(&FontT42,tXc1,text,0); | |
960 | |
961 textpointer = 0; | |
962 snprintf(&text[textpointer],TEXTSIZE,"\020\003\016%u:%02u",SafetyStopTime.Minutes,SafetyStopTime.Seconds); | |
963 t3_basics_colorscheme_mod(text); | |
496 | 964 GFX_write_string(&FontT105,tXc1,text,0); |
38 | 965 } |
237
ec16fd26e280
Bugfix: do not show NDL in bigscreen mode when zero
Jan Mulder <jlmulder@xs4all.nl>
parents:
214
diff
changeset
|
966 else if(pDecoinfo->output_ndl_seconds) // NDL |
38 | 967 { |
968 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Nullzeit); | |
969 GFX_write_string(&FontT42,tXc1,text,0); | |
970 if(pDecoinfo->output_ndl_seconds < 1000 * 60) | |
971 snprintf(text,TEXTSIZE,"\020\003%i'",pDecoinfo->output_ndl_seconds/60); | |
972 else | |
973 snprintf(text,TEXTSIZE,"\020\003%ih",pDecoinfo->output_ndl_seconds/3600); | |
974 t3_basics_colorscheme_mod(text); | |
496 | 975 GFX_write_string(&FontT105,tXc1,text,0); |
38 | 976 } |
977 break; | |
978 | |
979 case CVIEW_sensors: | |
980 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE,TXT2BYTE_O2monitor); | |
981 GFX_write_string(&FontT42,tXc1,text,0); | |
982 | |
983 for(int i=0;i<3;i++) | |
984 { | |
985 textpointer = 0; | |
986 text[textpointer++] = '\030'; | |
987 if(i==1) | |
988 text[textpointer++] = '\001'; | |
989 else if(i==2) | |
990 text[textpointer++] = '\002'; | |
991 if(stateUsed->diveSettings.ppo2sensors_deactivated & (1<<i)) | |
992 { | |
993 text[textpointer++] = '\031'; | |
994 text[textpointer++] = ' '; | |
995 text[textpointer++] = '-'; | |
996 text[textpointer++] = ' '; | |
997 } | |
998 else | |
999 { | |
1000 if(stateUsed->warnings.sensorOutOfBounds[i]) | |
1001 text[textpointer++] = '\025'; | |
1002 textpointer += snprintf(&text[textpointer],TEXTSIZE,"%.1f",stateUsed->lifeData.ppO2Sensor_bar[i]); | |
1003 } | |
496 | 1004 GFX_write_string(&FontT144,tXc1,text,0); |
38 | 1005 } |
1006 break; | |
1007 | |
1008 case CVIEW_T3_MaxDepth: | |
1009 snprintf(text,TEXTSIZE,"\032\f%c",TXT_MaxDepth); | |
413 | 1010 if(pSettings->FlipDisplay) |
1011 { | |
1012 if(mode == DIVEMODE_Apnea) | |
1013 { | |
1014 GFX_write_string(&FontT42,tXc2,text,0); | |
1015 } | |
1016 else | |
1017 { | |
1018 GFX_write_string(&FontT42,tXc1,text,0); | |
1019 } | |
1020 } | |
1021 else | |
1022 { | |
1023 GFX_write_string(&FontT42,tXc1,text,0); | |
1024 } | |
38 | 1025 snprintf(text,TEXTSIZE,"\020\003\016%01.1f",unit_depth_float(stateUsed->lifeData.max_depth_meter)); |
1026 t3_basics_colorscheme_mod(text); | |
413 | 1027 if(pSettings->FlipDisplay) |
1028 { | |
1029 if(mode == DIVEMODE_Apnea) | |
1030 { | |
1031 GFX_write_string(&FontT105,tXc2,text,0); | |
1032 } | |
1033 else | |
1034 { | |
1035 GFX_write_string(&FontT105,tXc1,text,0); | |
1036 } | |
1037 } | |
1038 else | |
1039 { | |
496 | 1040 GFX_write_string(&FontT105,tXc1,text,0); |
413 | 1041 } |
38 | 1042 break; |
1043 | |
1044 case CVIEW_T3_TTS: | |
1045 snprintf(text,TEXTSIZE,"\032\f%c",TXT_TTS); | |
1046 GFX_write_string(&FontT42,tXc1,text,0); | |
1047 if(pDecoinfo->output_time_to_surface_seconds) | |
1048 { | |
1049 if(pDecoinfo->output_time_to_surface_seconds < 1000 * 60) | |
214
51a3aeffc6b3
Bugfix: handle rounding of TTS and future TTS consistently
Jan Mulder <jlmulder@xs4all.nl>
parents:
189
diff
changeset
|
1050 snprintf(text,TEXTSIZE,"\020\003\002%i'",(pDecoinfo->output_time_to_surface_seconds + 59)/ 60); |
38 | 1051 else |
214
51a3aeffc6b3
Bugfix: handle rounding of TTS and future TTS consistently
Jan Mulder <jlmulder@xs4all.nl>
parents:
189
diff
changeset
|
1052 snprintf(text,TEXTSIZE,"\020\003\002%ih",(pDecoinfo->output_time_to_surface_seconds + 59)/ 3600); |
38 | 1053 t3_basics_colorscheme_mod(text); |
496 | 1054 GFX_write_string(&FontT105,tXc1,text,0); |
38 | 1055 } |
1056 break; | |
1057 | |
1058 case CVIEW_T3_ppO2andGas: | |
1059 snprintf(text,TEXTSIZE,"\032\f%c",TXT_ppO2); | |
1060 GFX_write_string(&FontT42,tXc1,text,0); | |
1061 snprintf(text,TEXTSIZE,"\020\003%01.2f",stateUsed->lifeData.ppO2); | |
1062 t3_basics_colorscheme_mod(text); | |
496 | 1063 GFX_write_string(&FontT105,tXc1,text,0); |
38 | 1064 |
1065 textpointer = 0; | |
1066 text[textpointer++] = '\020'; | |
1067 text[textpointer++] = '\003'; | |
1068 oxygen_percentage = 100; | |
1069 oxygen_percentage -= stateUsed->lifeData.actualGas.nitrogen_percentage; | |
1070 oxygen_percentage -= stateUsed->lifeData.actualGas.helium_percentage; | |
1071 text[textpointer++] = '\002'; | |
1072 tHome_gas_writer(oxygen_percentage,stateUsed->lifeData.actualGas.helium_percentage,&text[textpointer]); | |
1073 //textpointer = snprintf(&text[textpointer],TEXTSIZE,"\020\002%02u/%02u",oxygen_percentage, stateUsed->lifeData.actualGas.helium_percentage); | |
1074 t3_basics_colorscheme_mod(text); | |
496 | 1075 GFX_write_string(&FontT48,tXc1,text,0); |
38 | 1076 break; |
496 | 1077 |
1078 case CVIEW_T3_Navigation: | |
1079 Stopwatch.Total = timer_Stopwatch_GetTime(); | |
1080 Stopwatch.Minutes = Stopwatch.Total / 60; | |
1081 Stopwatch.Seconds = Stopwatch.Total - ( Stopwatch.Minutes * 60 ); | |
1082 fAverageDepth = timer_Stopwatch_GetAvarageDepth_Meter(); | |
1083 | |
1084 if(!pSettings->FlipDisplay) | |
1085 { | |
1086 tXc2->WindowX0 = 550; | |
1087 } | |
1088 else | |
1089 { | |
1090 tXc2->WindowX1 = 800; | |
1091 tXc2->WindowY0 = t3c2.WindowY0; /* select customer window */ | |
1092 } | |
1093 | |
1094 snprintf(text,TEXTSIZE,"\032\002\f%c", TXT_Stopwatch); | |
511 | 1095 GFX_write_string(&FontT42,tXc1,text,0); |
496 | 1096 snprintf(text,TEXTSIZE,"\030\016\002%01.1f",unit_depth_float(fAverageDepth)); |
511 | 1097 GFX_write_string(&FontT105,tXc1,text,0); |
496 | 1098 if(!pSettings->FlipDisplay) |
1099 { | |
1100 tXc2->WindowY0 = 100; | |
1101 } | |
1102 else | |
1103 { | |
1104 tXc2->WindowY1 -= 100; /* jump to upper of two lines */ | |
1105 } | |
1106 | |
1107 snprintf(text,TEXTSIZE,"\030\002%u:\016\016%02u",Stopwatch.Minutes, Stopwatch.Seconds); | |
511 | 1108 GFX_write_string(&FontT105,tXc1,text,1); |
496 | 1109 |
1110 | |
1111 center.x = 400; | |
1112 center.y = 116; | |
1113 | |
1114 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE, TXT2BYTE_Compass); | |
1115 GFX_write_string(&FontT42,tXc1,text,0); | |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
1116 snprintf(text,100,"\030%03i`",heading); |
496 | 1117 GFX_write_string(&FontT144,tXc1,text,0); |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
1118 t3_basics_compass(tXscreen, center, heading, stateUsed->diveSettings.compassHeading); |
496 | 1119 |
1120 break; | |
1121 | |
1122 case CVIEW_T3_DepthData: | |
1123 snprintf(text,TEXTSIZE,"\032\f%c",TXT_MaxDepth); | |
1124 if(pSettings->FlipDisplay) | |
1125 { | |
1126 if(mode == DIVEMODE_Apnea) | |
1127 { | |
1128 GFX_write_string(&FontT42,tXc2,text,0); | |
1129 } | |
1130 else | |
1131 { | |
1132 GFX_write_string(&FontT42,tXc1,text,0); | |
1133 } | |
1134 } | |
1135 else | |
1136 { | |
1137 GFX_write_string(&FontT42,tXc1,text,0); | |
1138 } | |
1139 snprintf(text,TEXTSIZE,"\020\003\016%01.1f",unit_depth_float(stateUsed->lifeData.max_depth_meter)); | |
1140 t3_basics_colorscheme_mod(text); | |
1141 if(pSettings->FlipDisplay) | |
1142 { | |
1143 if(mode == DIVEMODE_Apnea) | |
1144 { | |
1145 GFX_write_string(&FontT105,tXc2,text,0); | |
1146 } | |
1147 else | |
1148 { | |
1149 GFX_write_string(&FontT105,tXc1,text,0); | |
1150 } | |
1151 } | |
1152 else | |
1153 { | |
1154 GFX_write_string(&FontT105,tXc1,text,0); | |
1155 } | |
1156 fAverageDepthAbsolute = stateUsed->lifeData.average_depth_meter; | |
1157 snprintf(text,TEXTSIZE,"\032\002\f%c",TXT_AvgDepth); | |
511 | 1158 GFX_write_string(&FontT42,tXc1,text,0); |
496 | 1159 |
1160 snprintf(text,TEXTSIZE,"\020\003\016\002\%01.1f",unit_depth_float(fAverageDepthAbsolute)); | |
511 | 1161 GFX_write_string(&FontT105,tXc1,text,0); |
496 | 1162 break; |
38 | 1163 } |
496 | 1164 |
1165 | |
1166 | |
38 | 1167 tXc1->WindowX0 = tempWinX0; |
1168 tXc1->WindowY0 = tempWinY0; | |
496 | 1169 tXc1->WindowX1 = tempWinX1; |
1170 tXc1->WindowY1 = tempWinY1; | |
413 | 1171 |
38 | 1172 tXc2->WindowX0 = tempWinC2X0; |
413 | 1173 tXc2->WindowY0 = tempWinC2Y0; |
1174 tXc2->WindowX1 = tempWinC2X1; | |
1175 tXc2->WindowY1 = tempWinC2Y1; | |
38 | 1176 tXc2->WindowTab = tempWinC2Tab; |
1177 } | |
1178 | |
1179 | |
1180 uint8_t t3_test_customview_warnings(void) | |
1181 { | |
1182 uint8_t count = 0; | |
1183 | |
1184 count = 0; | |
1185 count += stateUsed->warnings.decoMissed; | |
1186 count += stateUsed->warnings.ppO2Low; | |
1187 count += stateUsed->warnings.ppO2High; | |
1188 //count += stateUsed->warnings.lowBattery; | |
1189 count += stateUsed->warnings.sensorLinkLost; | |
1190 count += stateUsed->warnings.fallback; | |
1191 | |
1192 return count; | |
1193 } | |
1194 | |
1195 //void t3_show_customview_warnings(GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXl1, GFX_DrawCfgWindow* tXr1, uint8_t mode) | |
1196 void t3_basics_show_customview_warnings(GFX_DrawCfgWindow* tXc1) | |
1197 { | |
1198 char text[256], textMain[256]; | |
1199 uint8_t textpointer, textpointerMain, lineFree, more; | |
1200 | |
1201 snprintf(text,TEXTSIZE,"\025\f%c",TXT_Warning); | |
1202 GFX_write_string(&FontT42,&t3c1,text,0); | |
1203 | |
1204 lineFree = 1; | |
1205 more = 0; | |
1206 | |
1207 textpointerMain = 0; | |
511 | 1208 textMain[textpointerMain++] = '\025'; /* red */ |
1209 textMain[textpointerMain++] = '\003'; /* doublesize */ | |
38 | 1210 |
1211 textpointer = 0; | |
1212 | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1213 text[textpointer++] = '\031'; |
38 | 1214 text[textpointer++] = TXT_2BYTE; |
1215 text[textpointer++] = TXT2BYTE_WarnDecoMissed; | |
1216 if(stateUsed->warnings.decoMissed) | |
1217 { | |
1218 text[textpointer - 3] = '\025'; | |
1219 if(lineFree) | |
1220 { | |
1221 textMain[textpointerMain++] = TXT_2BYTE; | |
1222 textMain[textpointerMain++] = text[textpointer - 1]; | |
1223 textMain[textpointerMain] = 0; | |
1224 lineFree--; | |
1225 } | |
1226 else | |
1227 { | |
1228 more++; | |
1229 } | |
1230 } | |
1231 | |
1232 text[textpointer++] = '\t'; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1233 text[textpointer++] = '\031'; |
38 | 1234 text[textpointer++] = TXT_2BYTE; |
1235 text[textpointer++] = TXT2BYTE_WarnPPO2Low; | |
1236 if(stateUsed->warnings.ppO2Low) | |
1237 { | |
1238 text[textpointer - 3] = '\025'; | |
1239 if(lineFree) | |
1240 { | |
1241 textMain[textpointerMain++] = TXT_2BYTE; | |
1242 textMain[textpointerMain++] = text[textpointer - 1]; | |
1243 textMain[textpointerMain] = 0; | |
1244 lineFree--; | |
1245 } | |
1246 else | |
1247 { | |
1248 more++; | |
1249 } | |
1250 } | |
1251 | |
1252 text[textpointer++] = '\n'; | |
1253 text[textpointer++] = '\r'; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1254 text[textpointer++] = '\031'; |
38 | 1255 text[textpointer++] = TXT_2BYTE; |
1256 text[textpointer++] = TXT2BYTE_WarnPPO2High; | |
1257 if(stateUsed->warnings.ppO2High) | |
1258 { | |
1259 text[textpointer - 3] = '\025'; | |
1260 if(lineFree) | |
1261 { | |
1262 textMain[textpointerMain++] = TXT_2BYTE; | |
1263 textMain[textpointerMain++] = text[textpointer - 1]; | |
1264 textMain[textpointerMain] = 0; | |
1265 lineFree--; | |
1266 } | |
1267 else | |
1268 { | |
1269 more++; | |
1270 } | |
1271 } | |
1272 | |
1273 text[textpointer++] = '\t'; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1274 text[textpointer++] = '\031'; |
38 | 1275 text[textpointer++] = TXT_2BYTE; |
1276 text[textpointer++] = TXT2BYTE_WarnFallback; | |
1277 if(stateUsed->warnings.fallback) | |
1278 { | |
1279 text[textpointer - 3] = '\025'; | |
1280 if(lineFree) | |
1281 { | |
1282 textMain[textpointerMain++] = TXT_2BYTE; | |
1283 textMain[textpointerMain++] = text[textpointer - 1]; | |
1284 textMain[textpointerMain] = 0; | |
1285 lineFree--; | |
1286 } | |
1287 else | |
1288 { | |
1289 more++; | |
1290 } | |
1291 } | |
1292 | |
1293 text[textpointer++] = '\n'; | |
1294 text[textpointer++] = '\r'; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1295 text[textpointer++] = '\031'; |
38 | 1296 text[textpointer++] = TXT_2BYTE; |
1297 text[textpointer++] = TXT2BYTE_WarnSensorLinkLost; | |
1298 if(stateUsed->warnings.sensorLinkLost) | |
1299 { | |
1300 text[textpointer - 3] = '\025'; | |
1301 if(lineFree) | |
1302 { | |
1303 textMain[textpointerMain++] = TXT_2BYTE; | |
1304 textMain[textpointerMain++] = text[textpointer - 1]; | |
1305 textMain[textpointerMain] = 0; | |
1306 lineFree--; | |
1307 } | |
1308 else | |
1309 { | |
1310 more++; | |
1311 } | |
1312 } | |
1313 | |
1314 /* | |
1315 text[textpointer++] = '\t'; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1316 text[textpointer++] = '\031'; |
38 | 1317 text[textpointer++] = TXT_2BYTE; |
1318 text[textpointer++] = TXT2BYTE_WarnBatteryLow; | |
1319 if(stateUsed->warnings.lowBattery) | |
1320 { | |
1321 text[textpointer - 3] = '\025'; | |
1322 if(lineFree) | |
1323 { | |
1324 textMain[textpointerMain++] = TXT_2BYTE; | |
1325 textMain[textpointerMain++] = text[textpointer - 1]; | |
1326 textMain[textpointerMain] = 0; | |
1327 lineFree--; | |
1328 } | |
1329 else | |
1330 { | |
1331 more++; | |
1332 } | |
1333 } | |
1334 */ | |
1335 text[textpointer] = 0; | |
1336 /* | |
1337 if(more) | |
1338 { | |
1339 text[textpointer++] = '\002'; | |
1340 text[textpointer++] = '+'; | |
1341 if(more < 10) | |
1342 text[textpointer++] = '0' + more; | |
1343 else | |
1344 text[textpointer++] = 'X'; | |
1345 text[textpointer] = 0; | |
1346 } | |
1347 */ | |
511 | 1348 GFX_write_string(&FontT48,&t3c1,textMain,0); |
38 | 1349 if(more) |
1350 { | |
511 | 1351 GFX_write_string(&FontT48,&t3c2,text,0); |
38 | 1352 } |
1353 } | |
1354 | |
496 | 1355 uint8_t t3_customview_disabled(uint8_t view) |
1356 { | |
1357 uint8_t i = 0; | |
1358 uint8_t cv_disabled = 0; | |
1359 const uint8_t *pcv_changelist; | |
1360 uint32_t cv_config = settingsGetPointer()->cv_config_BigScreen; | |
1361 | |
511 | 1362 pcv_changelist = cv_changelist_BS; |
496 | 1363 |
1364 while(pcv_changelist[i] != CVIEW_T3_END) | |
1365 { | |
1366 if((view == pcv_changelist[i]) && !CHECK_BIT_THOME(cv_config, pcv_changelist[i])) | |
1367 { | |
1368 cv_disabled = 1; | |
1369 break; | |
1370 } | |
1371 i++; | |
1372 } | |
1373 | |
1374 if (((view == CVIEW_sensors) || (view == CVIEW_sensors_mV)) && | |
1375 ((stateUsed->diveSettings.ppo2sensors_deactivated) || (stateUsed->diveSettings.ccrOption == 0))) | |
1376 { | |
1377 cv_disabled = 1; | |
1378 } | |
1379 | |
1380 return cv_disabled; | |
1381 } | |
38 | 1382 |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1383 void t3_change_customview(uint8_t action) |
38 | 1384 { |
511 | 1385 |
496 | 1386 t3_basics_change_customview(&t3_selection_customview, t3_customviewsStandard, action); |
38 | 1387 } |
1388 | |
1389 | |
511 | 1390 void t3_basics_change_customview(uint8_t *tX_selection_customview,const uint8_t *tX_customviews, uint8_t action) |
38 | 1391 { |
1392 const SDecoinfo * pDecoinfo; | |
1393 if(stateUsed->diveSettings.deco_type.ub.standard == GF_MODE) | |
1394 pDecoinfo = &stateUsed->decolistBuehlmann; | |
1395 else | |
1396 pDecoinfo = &stateUsed->decolistVPM; | |
1397 | |
511 | 1398 uint8_t curViewIdx = 0xff; |
1399 uint8_t index = 0; | |
1400 uint8_t lastViewIdx = 0; | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1401 uint8_t iterate = 0; /* set to 1 if a view has to be skipped */ |
38 | 1402 |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1403 /* set pointer to currently selected view and count number of entries */ |
511 | 1404 while((tX_customviews[index] != CVIEW_T3_END)) |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1405 { |
511 | 1406 if (tX_customviews[index] == *tX_selection_customview) |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1407 { |
511 | 1408 curViewIdx = index; |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1409 } |
511 | 1410 index++; |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1411 } |
511 | 1412 if(curViewIdx == 0xff) /* called with unknown view */ |
496 | 1413 { |
511 | 1414 curViewIdx = 0; |
1415 *tX_selection_customview = tX_customviews[index]; | |
496 | 1416 } |
511 | 1417 lastViewIdx = index; |
1418 index = curViewIdx; | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1419 do |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1420 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1421 iterate = 0; |
496 | 1422 switch(action) |
1423 { | |
1424 case ACTION_BUTTON_ENTER: | |
1425 case ACTION_PITCH_POS: | |
1426 | |
511 | 1427 if(tX_customviews[index] != CVIEW_T3_END) |
496 | 1428 { |
511 | 1429 index++; |
1430 } | |
1431 if(tX_customviews[index] == CVIEW_T3_END) | |
1432 { | |
1433 index = 0; | |
496 | 1434 } |
1435 break; | |
1436 case ACTION_PITCH_NEG: | |
511 | 1437 if(index == 0) |
496 | 1438 { |
511 | 1439 index = lastViewIdx - 1; |
496 | 1440 } |
1441 else | |
1442 { | |
511 | 1443 index--; |
496 | 1444 } |
1445 break; | |
1446 default: | |
1447 break; | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1448 } |
496 | 1449 |
511 | 1450 if(t3_customview_disabled(tX_customviews[index])) |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1451 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1452 iterate = 1; |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1453 } |
529
0e1db77b2aca
Added skip condition in custom view selection:
Ideenmodellierer
parents:
527
diff
changeset
|
1454 if((tX_customviews[index] == CVIEW_T3_TTS) && !pDecoinfo->output_time_to_surface_seconds) /* Skip TTS if value is 0 */ |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1455 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1456 iterate = 1; |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1457 } |
529
0e1db77b2aca
Added skip condition in custom view selection:
Ideenmodellierer
parents:
527
diff
changeset
|
1458 if((tX_customviews[index] == CVIEW_T3_Decostop) && ((!pDecoinfo->output_ndl_seconds) && (!pDecoinfo->output_time_to_surface_seconds) && (timer_Safetystop_GetCountDown() == 0))) /* Skip Deco if NDL is not set */ |
0e1db77b2aca
Added skip condition in custom view selection:
Ideenmodellierer
parents:
527
diff
changeset
|
1459 { |
0e1db77b2aca
Added skip condition in custom view selection:
Ideenmodellierer
parents:
527
diff
changeset
|
1460 iterate = 1; |
0e1db77b2aca
Added skip condition in custom view selection:
Ideenmodellierer
parents:
527
diff
changeset
|
1461 } |
496 | 1462 if((iterate) && (action == ACTION_END)) |
1463 { | |
1464 action = ACTION_BUTTON_ENTER; | |
1465 } | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1466 }while (iterate == 1); |
38 | 1467 |
511 | 1468 *tX_selection_customview = tX_customviews[index]; |
38 | 1469 } |
1470 | |
1471 | |
1472 void t3_basics_colorscheme_mod(char *text) | |
1473 { | |
1474 if((text[0] == '\020') && !GFX_is_colorschemeDiveStandard()) | |
1475 { | |
1476 text[0] = '\027'; | |
1477 } | |
1478 } | |
1479 | |
1480 | |
496 | 1481 point_t t3_compass_circle(uint8_t id, uint16_t degree, point_t center) |
38 | 1482 { |
1483 float fCos, fSin; | |
1484 const float piMult = ((2 * 3.14159) / 360); | |
1485 // const int radius[4] = {95,105,115,60}; | |
1486 const int radius[4] = {85,95,105,90}; | |
496 | 1487 static point_t forcenter = {.x = 900, .y = 500}; /* used to identify change of circle position */ |
38 | 1488 static point_t r[4][360] = { 0 }; |
1489 | |
496 | 1490 if((r[0][0].y == 0) || (forcenter.x != center.x) || (forcenter.y != center.y)) /* calculate values only once during first call or if center position changed */ |
38 | 1491 { |
1492 for(int i=0;i<360;i++) | |
1493 { | |
1494 fCos = cos(i * piMult); | |
1495 fSin = sin(i * piMult); | |
1496 for(int j=0;j<4;j++) | |
1497 { | |
496 | 1498 r[j][i].x = center.x + (int)(fSin * radius[j]); |
1499 r[j][i].y = center.y + (int)(fCos * radius[j]); | |
38 | 1500 } |
1501 } | |
496 | 1502 forcenter.x = center.x; |
1503 forcenter.y = center.y; | |
38 | 1504 } |
1505 if(id > 3) id = 0; | |
1506 if(degree > 359) degree = 0; | |
1507 return r[id][degree]; | |
1508 } | |
1509 | |
1510 | |
496 | 1511 void t3_basics_compass(GFX_DrawCfgScreen *tXscreen, point_t center, uint16_t ActualHeading, uint16_t UserSetHeading) |
38 | 1512 { |
496 | 1513 uint8_t loop = 0; |
38 | 1514 uint16_t LineHeading; |
496 | 1515 |
38 | 1516 static int32_t LastHeading = 0; |
1517 int32_t newHeading = 0; | |
1518 int32_t diff = 0; | |
1519 int32_t diff2 = 0; | |
1520 | |
1521 int32_t diffAbs = 0; | |
1522 int32_t diffAbs2 = 0; | |
1523 | |
1524 newHeading = ActualHeading; | |
1525 | |
1526 diff = newHeading - LastHeading; | |
1527 | |
1528 if(newHeading < LastHeading) | |
1529 diff2 = newHeading + 360 - LastHeading; | |
1530 else | |
1531 diff2 = newHeading - 360 - LastHeading; | |
1532 | |
1533 diffAbs = diff; | |
1534 if(diffAbs < 0) | |
1535 diffAbs *= -1; | |
1536 | |
1537 diffAbs2 = diff2; | |
1538 if(diffAbs2 < 0) | |
1539 diffAbs2 *= -1; | |
1540 | |
1541 if(diffAbs <= diffAbs2) | |
1542 newHeading = LastHeading + (diff / 2); | |
1543 else | |
1544 newHeading = LastHeading + (diff2 / 2); | |
1545 | |
1546 if(newHeading < 0) | |
1547 newHeading += 360; | |
1548 else | |
1549 if(newHeading >= 360) | |
1550 newHeading -= 360; | |
1551 | |
1552 LastHeading = newHeading; | |
1553 ActualHeading = newHeading; | |
1554 | |
1555 if (ActualHeading < 90) | |
1556 ActualHeading += 360; | |
1557 | |
1558 while(ActualHeading > 359) ActualHeading -= 360; | |
1559 | |
1560 LineHeading = 360 - ActualHeading; | |
496 | 1561 |
1562 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(0,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_Font030); // North | |
38 | 1563 LineHeading += 90; |
496 | 1564 |
1565 for (loop = 0; loop < 3; loop++) | |
1566 { | |
1567 if(LineHeading > 359) LineHeading -= 360; | |
1568 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(0,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_Font031); // Main Ticks | |
1569 LineHeading += 90; | |
1570 } | |
38 | 1571 |
1572 LineHeading = 360 - ActualHeading; | |
1573 LineHeading += 45; | |
496 | 1574 |
1575 for (loop = 0; loop < 4; loop++) | |
1576 { | |
1577 if(LineHeading > 359) LineHeading -= 360; | |
1578 GFX_draw_thick_line(5,tXscreen, t3_compass_circle(1,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_Font031); // Subtick | |
1579 LineHeading += 90; | |
1580 } | |
38 | 1581 |
1582 LineHeading = 360 - ActualHeading; | |
1583 LineHeading += 22; | |
496 | 1584 for (loop = 0; loop < 8; loop++) |
1585 { | |
1586 if(LineHeading > 359) LineHeading -= 360; | |
1587 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_Font031); // Subtick | |
1588 LineHeading += 45; | |
1589 } | |
38 | 1590 if(UserSetHeading) |
1591 { | |
1592 LineHeading = UserSetHeading + 360 - ActualHeading; | |
1593 if(LineHeading > 359) LineHeading -= 360; | |
496 | 1594 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(3,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_CompassUserHeadingTick); |
38 | 1595 |
1596 // R�ckpeilung, User Back Heading | |
1597 LineHeading = UserSetHeading + 360 + 180 - ActualHeading; | |
1598 if(LineHeading > 359) LineHeading -= 360; | |
1599 if(LineHeading > 359) LineHeading -= 360; | |
496 | 1600 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(3,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_CompassUserBackHeadingTick); |
38 | 1601 } |
1602 | |
1603 GFX_draw_circle(tXscreen, center, 106, CLUT_Font030); | |
1604 GFX_draw_circle(tXscreen, center, 107, CLUT_Font030); | |
1605 GFX_draw_circle(tXscreen, center, 108, CLUT_Font030); | |
1606 } | |
384
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1607 |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1608 uint8_t t3_GetEnabled_customviews() |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1609 { |
496 | 1610 uint8_t *pViews; |
1611 uint8_t increment = 1; | |
384
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1612 uint8_t enabledViewCnt = 0; |
496 | 1613 |
511 | 1614 pViews = (uint8_t*)t3_customviewsStandard; |
496 | 1615 while((*pViews != CVIEW_T3_END)) |
1616 { | |
1617 increment = 1; | |
1618 /* check if view is enabled */ | |
1619 if(t3_customview_disabled(*pViews)) | |
1620 { | |
1621 increment = 0; | |
1622 } | |
1623 pViews++; | |
1624 enabledViewCnt += increment; | |
1625 } | |
384
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1626 return enabledViewCnt; |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1627 } |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1628 |
518 | 1629 uint8_t t3_getCustomView(void) |
1630 { | |
1631 return t3_selection_customview; | |
1632 } |