Mercurial > public > ostc4
annotate Discovery/Src/t3.c @ 481:89f6857276f8 Improve_Button_Sleep
Bugfix calculation of string center position:
Strings shown on the right side at surface mode use special characters ('\016' and '\017') to switch font size. Headline strings like "Desaturation" could also be set to the target font directly, because they do not contain mixed font sizes, but nethertheless they are using the special characters.
The function calculating the offset needed to display the strinter with center alignment did not consider the small font size => misalignment during string display. To avoid this an evaluation of the special characters has been added to the helper function.
author | ideenmodellierer |
---|---|
date | Mon, 18 May 2020 21:51:08 +0200 |
parents | 65c7b009136f |
children | 9623f166b0c0 |
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 | |
55 uint8_t t3_selection_customview = 0; | |
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, | |
72 CVIEW_T3_END | |
73 }; | |
74 | |
75 | |
76 const uint8_t *t3_customviews = t3_customviewsStandard; | |
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); | |
83 void t3_basics_compass(GFX_DrawCfgScreen *tXscreen, uint16_t ActualHeading, uint16_t UserSetHeading); | |
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 |
38 | 92 t3_selection_customview = t3_customviews[0]; |
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 | |
137 t3c1.Image = &t3screen; | |
138 t3c1.WindowNumberOfTextLines = 2; | |
139 t3c1.WindowLineSpacing = t3l1.WindowLineSpacing; | |
140 t3c1.WindowX0 = 0; | |
141 t3c1.WindowX1 = 799; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
142 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
143 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
144 t3c1.WindowY0 = 0; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
145 t3c1.WindowY1 = BigFontSeperationTopBottom - 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
146 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
147 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
148 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
149 t3c1.WindowY0 = 480 - BigFontSeperationTopBottom + 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
150 t3c1.WindowY1 = 479; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
151 } |
38 | 152 |
153 t3c2.Image = &t3screen; | |
154 t3c2.WindowNumberOfTextLines = 3; | |
155 t3c2.WindowLineSpacing = 58; | |
156 t3c2.WindowX0 = 370; | |
157 t3c2.WindowX1 = 799; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
158 t3c2.WindowY0 = t3c1.WindowY0; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
159 t3c2.WindowY1 = t3c1.WindowY1; |
38 | 160 t3c2.WindowTab = 600; |
161 } | |
162 | |
163 | |
164 void t3_refresh(void) | |
165 { | |
166 SStateList status; | |
167 get_globalStateList(&status); | |
168 | |
169 if(stateUsed->mode != MODE_DIVE) | |
170 { | |
171 settingsGetPointer()->design = 7; | |
172 return; | |
173 } | |
174 | |
175 if(status.base != BaseHome) | |
176 return; | |
177 | |
178 t3screen.FBStartAdress = getFrame(24); | |
179 t3_refresh_divemode(); | |
166
255eedad4155
cleanup: get rid of some compile warnings
Jan Mulder <jlmulder@xs4all.nl>
parents:
138
diff
changeset
|
180 GFX_SetFramesTopBottom(t3screen.FBStartAdress, 0,480); |
38 | 181 releaseAllFramesExcept(24,t3screen.FBStartAdress); |
182 } | |
183 | |
184 | |
185 /* Private functions ---------------------------------------------------------*/ | |
186 | |
187 float t3_basics_lines_depth_and_divetime(GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXl1, GFX_DrawCfgWindow* tXr1, uint8_t mode) | |
188 { | |
189 char text[512]; | |
190 uint8_t color; | |
191 uint8_t depthChangeRate; | |
192 uint8_t depthChangeAscent; | |
193 point_t start, stop, startZeroLine; | |
194 | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
195 SSettings* pSettings; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
196 pSettings = settingsGetPointer(); |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
197 |
38 | 198 start.x = 0; |
199 stop.x = 799; | |
200 stop.y = start.y = BigFontSeperationTopBottom; | |
201 GFX_draw_line(tXscreen, start, stop, CLUT_Font020); | |
202 | |
203 start.y = BigFontSeperationTopBottom; | |
204 stop.y = 479; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
205 |
38 | 206 stop.x = start.x = BigFontSeperationLeftRight; |
207 GFX_draw_line(tXscreen, start, stop, CLUT_Font020); | |
208 | |
209 /* depth */ | |
174
ecb71521d004
Bugfix: make max depth move with current depth (part 2)
Jan Mulder <jlmulder@xs4all.nl>
parents:
166
diff
changeset
|
210 float depth = unit_depth_float(stateUsed->lifeData.depth_meter); |
38 | 211 |
212 if(depth <= 0.3f) | |
213 depth = 0; | |
214 | |
215 if(settingsGetPointer()->nonMetricalSystem) | |
216 snprintf(text,TEXTSIZE,"\032\f[feet]"); | |
217 else | |
218 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Depth); | |
219 GFX_write_string(&FontT42,tXl1,text,0); | |
220 | |
221 if( ((mode == DIVEMODE_Apnea) && ((stateUsed->lifeData.ascent_rate_meter_per_min > 4) || (stateUsed->lifeData.ascent_rate_meter_per_min < -4 ))) | |
222 || ((mode != DIVEMODE_Apnea) && ((stateUsed->lifeData.ascent_rate_meter_per_min > 8) || (stateUsed->lifeData.ascent_rate_meter_per_min < -10))) | |
223 ) | |
224 { | |
225 snprintf(text,TEXTSIZE,"\f\002%.0f %c%c/min " | |
226 , unit_depth_float(stateUsed->lifeData.ascent_rate_meter_per_min) | |
227 , unit_depth_char1() | |
228 , unit_depth_char2() | |
229 ); | |
230 GFX_write_string(&FontT42,tXl1,text,0); | |
231 } | |
232 | |
233 if( depth < 100) | |
234 snprintf(text,TEXTSIZE,"\020\003\016%01.1f",depth); | |
235 else | |
236 snprintf(text,TEXTSIZE,"\020\003\016%01.0f",depth); | |
237 | |
238 t3_basics_colorscheme_mod(text); | |
239 GFX_write_string(&FontT105,tXl1,text,1); | |
240 | |
241 | |
242 /* ascentrate graph */ | |
243 if(mode == DIVEMODE_Apnea) | |
244 { | |
245 /* ascentrate graph - apnea mode */ | |
246 if(stateUsed->lifeData.ascent_rate_meter_per_min > 0) | |
247 { | |
248 depthChangeAscent = 1; | |
249 if(stateUsed->lifeData.ascent_rate_meter_per_min < 200) | |
250 depthChangeRate = (uint8_t)stateUsed->lifeData.ascent_rate_meter_per_min; | |
251 else | |
252 depthChangeRate = 200; | |
253 } | |
254 else | |
255 { | |
256 depthChangeAscent = 0; | |
257 if(stateUsed->lifeData.ascent_rate_meter_per_min > -200) | |
258 depthChangeRate = (uint8_t)(0 - stateUsed->lifeData.ascent_rate_meter_per_min); | |
259 else | |
260 depthChangeRate = 200; | |
261 } | |
413 | 262 |
263 if(!pSettings->FlipDisplay) | |
264 { | |
265 start.y = tXl1->WindowY0 - 1; | |
266 } | |
267 else | |
268 { | |
269 start.y = tXl1->WindowY1 + 1; | |
270 } | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
271 startZeroLine.y = start.y; |
38 | 272 for(int i = 0; i<5;i++) |
273 { | |
274 start.y += 40; | |
275 stop.y = start.y; | |
413 | 276 if(!pSettings->FlipDisplay) |
277 { | |
278 start.x = tXl1->WindowX1 - 1; | |
279 } | |
280 else | |
281 { | |
282 start.x = tXr1->WindowX1 - 1; | |
283 } | |
38 | 284 stop.x = start.x - 17; |
285 | |
286 if(depthChangeRate <= 6) | |
287 { | |
288 if(i == 2) | |
289 { | |
290 startZeroLine.y = start.y; | |
291 stop.x = start.x - 34; | |
292 } | |
293 } | |
294 else | |
295 { | |
296 if(((i == 1) && depthChangeAscent) || ((i == 3) && !depthChangeAscent)) | |
297 { | |
298 startZeroLine.y = start.y; | |
299 stop.x = start.x - 34; | |
300 } | |
301 } | |
302 GFX_draw_line(tXscreen, start, stop, 0); | |
303 } | |
304 // new thick bar design Sept. 2015 | |
305 if((stateUsed->lifeData.ascent_rate_meter_per_min > 4) || (stateUsed->lifeData.ascent_rate_meter_per_min < -4)) | |
306 { | |
307 start.y = startZeroLine.y; | |
308 if(depthChangeAscent) | |
309 { | |
310 color = CLUT_EverythingOkayGreen; | |
311 start.y += 7; // starte etwas weiter oben | |
312 stop.y = start.y + (uint16_t)(depthChangeRate * 4) - 9; // - x; // wegen der Liniendicke | |
313 if(stop.y > 475) | |
314 stop.y = 475; | |
315 } | |
316 else | |
317 { | |
318 color = CLUT_Font023; | |
319 start.y -= 7; | |
320 stop.y = start.y - (uint16_t)(depthChangeRate * 4) + 9; | |
321 if(stop.y <= tXl1->WindowY0) | |
322 stop.y = tXl1->WindowY0 + 1; | |
323 } | |
413 | 324 if(!pSettings->FlipDisplay) |
325 { | |
326 start.x = tXl1->WindowX1 - 3 - 5; | |
327 } | |
328 else | |
329 { | |
330 start.x = tXr1->WindowX1 - 3 - 5; | |
331 } | |
332 | |
333 stop.x = start.x; | |
38 | 334 GFX_draw_thick_line(12,tXscreen, start, stop, color); |
335 } | |
336 } | |
337 else | |
338 { | |
339 /* ascentrate graph -standard mode */ | |
340 if(stateUsed->lifeData.ascent_rate_meter_per_min > 0) | |
341 { | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
342 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
343 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
344 start.y = tXl1->WindowY0 - 1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
345 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
346 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
347 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
348 start.y = tXl1->WindowY1 + 1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
349 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
350 |
38 | 351 for(int i = 0; i<4;i++) |
352 { | |
353 start.y += 5*8; | |
354 stop.y = start.y; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
355 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
356 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
357 start.x = tXl1->WindowX1 - 1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
358 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
359 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
360 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
361 start.x = tXr1->WindowX1 - 1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
362 } |
38 | 363 stop.x = start.x - 17; |
364 GFX_draw_line(tXscreen, start, stop, 0); | |
365 } | |
366 // new thick bar design Sept. 2015 | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
367 if(!pSettings->FlipDisplay) |
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 start.x = tXl1->WindowX1 - 3 - 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
370 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
371 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
372 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
373 start.x = tXr1->WindowX1 - 3 - 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
374 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
375 |
38 | 376 stop.x = start.x; |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
377 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
378 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
379 start.y = tXl1->WindowY0 - 1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
380 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
381 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
382 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
383 start.y = tXl1->WindowY1 + 1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
384 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
385 |
38 | 386 stop.y = start.y + (uint16_t)(stateUsed->lifeData.ascent_rate_meter_per_min * 8); |
387 stop.y -= 3; // wegen der Liniendicke von 12 anstelle von 9 | |
388 if(stop.y >= 470) | |
389 stop.y = 470; | |
390 start.y += 7; // starte etwas weiter oben | |
391 if(stateUsed->lifeData.ascent_rate_meter_per_min <= 10) | |
392 color = CLUT_EverythingOkayGreen; | |
393 else | |
394 if(stateUsed->lifeData.ascent_rate_meter_per_min <= 15) | |
395 color = CLUT_WarningYellow; | |
396 else | |
397 color = CLUT_WarningRed; | |
398 | |
399 GFX_draw_thick_line(12,tXscreen, start, stop, color); | |
400 } | |
401 } | |
402 | |
403 // divetime | |
404 if(mode == DIVEMODE_Apnea) | |
405 { | |
406 if(stateUsed->lifeData.counterSecondsShallowDepth) | |
407 { | |
408 SDivetime SurfaceBreakTime = {0,0,0,0}; | |
409 | |
410 SurfaceBreakTime.Total = stateUsed->lifeData.counterSecondsShallowDepth; | |
411 SurfaceBreakTime.Minutes = SurfaceBreakTime.Total / 60; | |
412 SurfaceBreakTime.Seconds = SurfaceBreakTime.Total - (SurfaceBreakTime.Minutes * 60); | |
413 | |
414 snprintf(text,TEXTSIZE,"\032\f\002%c%c", TXT_2BYTE,TXT2BYTE_ApneaSurface); | |
415 GFX_write_string(&FontT42,tXr1,text,0); | |
416 | |
417 snprintf(text,TEXTSIZE,"\020\003\016\002%u:%02u",SurfaceBreakTime.Minutes, SurfaceBreakTime.Seconds); | |
418 } | |
419 else | |
420 { | |
421 SDivetime Divetime = {0,0,0, 0}; | |
422 | |
423 Divetime.Total = stateUsed->lifeData.dive_time_seconds; | |
424 Divetime.Minutes = Divetime.Total / 60; | |
425 Divetime.Seconds = Divetime.Total - ( Divetime.Minutes * 60 ); | |
426 | |
427 snprintf(text,TEXTSIZE,"\032\f\002%c",TXT_Divetime); | |
428 GFX_write_string(&FontT42,tXr1,text,0); | |
429 | |
430 if(Divetime.Minutes < 100) | |
431 snprintf(text,TEXTSIZE,"\020\003\016\002%u:%02u",Divetime.Minutes, Divetime.Seconds); | |
432 else | |
433 snprintf(text,TEXTSIZE,"\020\003\016\002%u'",Divetime.Minutes); | |
434 } | |
435 } | |
436 else | |
437 { | |
438 SDivetime Divetime = {0,0,0, 0}; | |
439 | |
440 Divetime.Total = stateUsed->lifeData.dive_time_seconds_without_surface_time; | |
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 } | |
452 t3_basics_colorscheme_mod(text); | |
453 GFX_write_string(&FontT105,tXr1,text,1); | |
454 | |
455 return depth; | |
456 } | |
457 | |
458 | |
459 void t3_refresh_divemode(void) | |
460 { | |
461 uint8_t customview_warnings = 0; | |
462 float depth_meter = 0.0; | |
463 | |
464 // everything like lines, depth, ascent graph and divetime | |
465 depth_meter = t3_basics_lines_depth_and_divetime(&t3screen, &t3l1, &t3r1, 0); // 0 could be stateUsed->diveSettings.diveMode for CCR specials | |
466 | |
467 // customview | |
468 if(stateUsed->warnings.numWarnings) | |
469 customview_warnings = t3_test_customview_warnings(); | |
470 | |
471 if(customview_warnings && warning_count_high_time) | |
472 t3_basics_show_customview_warnings(&t3c1); | |
473 else | |
474 t3_refresh_customview(depth_meter); | |
475 | |
476 if(stateUsed->warnings.lowBattery) | |
477 t3_basics_battery_low_customview_extra(&t3c1); | |
478 } | |
479 | |
480 | |
481 void t3_basics_battery_low_customview_extra(GFX_DrawCfgWindow* tXc1) | |
482 { | |
483 char TextC1[256]; | |
484 | |
485 TextC1[0] = '\002'; | |
486 TextC1[1] = '\f'; | |
487 TextC1[2] = '\025'; | |
488 TextC1[3] = '3'; | |
489 TextC1[4] = '1'; | |
490 TextC1[5] = '1'; | |
491 TextC1[6] = '1'; | |
492 TextC1[7] = '1'; | |
493 TextC1[8] = '1'; | |
494 TextC1[9] = '1'; | |
495 TextC1[10] = '1'; | |
496 TextC1[11] = '1'; | |
497 TextC1[12] = '1'; | |
498 TextC1[13] = '1'; | |
499 TextC1[14] = '0'; | |
500 TextC1[15] = 0; | |
501 | |
502 if(!warning_count_high_time) | |
503 TextC1[4] = '2'; | |
504 | |
505 GFX_write_string(&Batt24,tXc1,TextC1,0); | |
506 } | |
507 | |
508 | |
509 | |
510 void t3_refresh_customview(float depth) | |
511 { | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
512 #if 0 |
38 | 513 if((t3_selection_customview == CVIEW_sensors) &&(stateUsed->diveSettings.ccrOption == 0)) |
514 t3_change_customview(); | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
515 #endif |
272
74a8296a2318
cleanup: simplify stateUsed usage
Jan Mulder <jlmulder@xs4all.nl>
parents:
237
diff
changeset
|
516 t3_basics_refresh_customview(depth, t3_selection_customview, &t3screen, &t3c1, &t3c2, stateUsedWrite->diveSettings.diveMode); |
38 | 517 } |
518 | |
519 | |
520 void t3_basics_refresh_apnoeRight(float depth, uint8_t tX_selection_customview, GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXc1, GFX_DrawCfgWindow* tXc2, uint8_t mode) | |
521 { | |
522 char text[512]; | |
523 uint16_t textpointer = 0; | |
524 | |
525 // CVIEW_T3_Temperature | |
526 float temperature; | |
413 | 527 SSettings* pSettings; |
528 pSettings = settingsGetPointer(); | |
38 | 529 |
530 SDivetime TotalDivetime = {0,0,0,0}; | |
531 SDivetime LastDivetime = {0,0,0,0}; | |
532 | |
533 uint16_t tempWinX0; | |
413 | 534 uint16_t tempWinX1; |
38 | 535 uint16_t tempWinY0; |
413 | 536 uint16_t tempWinY1; |
38 | 537 |
538 tempWinX0 = tXc1->WindowX0; | |
413 | 539 tempWinX1 = tXc1->WindowX1; |
38 | 540 tempWinY0 = tXc1->WindowY0; |
413 | 541 tempWinY1 = tXc1->WindowY1; |
38 | 542 |
543 tXc1->WindowX0 = 440; // rechte Seite | |
544 | |
545 switch(tX_selection_customview) | |
546 { | |
547 case CVIEW_T3_Temperature: | |
548 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Temperature); | |
549 GFX_write_string(&FontT42,tXc1,text,0); | |
550 | |
189
8b8074080d7b
Bugfix: average temperature on arrival from RTE instead of display time
Jan Mulder <jlmulder@xs4all.nl>
parents:
174
diff
changeset
|
551 temperature = unit_temperature_float(stateUsed->lifeData.temperature_celsius); |
38 | 552 textpointer = snprintf(text,TEXTSIZE,"\020\003\016%01.0f\016\016\140",temperature); // "\016\016%01.1f `" + C or F |
553 if(settingsGetPointer()->nonMetricalSystem == 0) | |
554 text[textpointer++] = 'C'; | |
555 else | |
556 text[textpointer++] = 'F'; | |
557 text[textpointer++] = 0; | |
558 t3_basics_colorscheme_mod(text); | |
559 GFX_write_string(&FontT105,tXc1,text,1); | |
560 break; | |
561 | |
562 case CVIEW_T3_ApnoeSurfaceInfo: | |
563 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Divetime); | |
564 GFX_write_string(&FontT42,tXc1,text,0); | |
565 | |
566 TotalDivetime.Total = stateUsed->lifeData.dive_time_seconds_without_surface_time; | |
567 TotalDivetime.Minutes = TotalDivetime.Total / 60; | |
568 TotalDivetime.Seconds = TotalDivetime.Total - ( TotalDivetime.Minutes * 60 ); | |
569 | |
570 LastDivetime.Total = stateUsed->lifeData.apnea_last_dive_time_seconds; | |
571 LastDivetime.Minutes = LastDivetime.Total / 60; | |
572 LastDivetime.Seconds = LastDivetime.Total - ( LastDivetime.Minutes * 60 ); | |
573 | |
413 | 574 // tXc1->WindowY0 = 100; // obere Zeile |
575 if(!pSettings->FlipDisplay) | |
576 { | |
577 tXc1->WindowY0 = 100; | |
578 } | |
579 else | |
580 { | |
581 tXc1->WindowY1 -= 100; /* jump to upper of two lines */ | |
582 } | |
38 | 583 |
584 snprintf(text,TEXTSIZE,"\020\016%u:%02u",LastDivetime.Minutes, LastDivetime.Seconds); | |
585 t3_basics_colorscheme_mod(text); | |
586 GFX_write_string(&FontT105,tXc1,text,0); | |
587 | |
413 | 588 if(pSettings->FlipDisplay) |
589 { | |
590 tXc1->WindowX0 = 0; | |
591 | |
592 } | |
38 | 593 snprintf(text,TEXTSIZE,"\032\002%c%c",TXT_2BYTE, TXT2BYTE_ApneaLast); |
594 GFX_write_string(&FontT42,tXc1,text,0); | |
595 | |
413 | 596 if(!pSettings->FlipDisplay) |
597 { | |
598 tXc1->WindowY0 = tempWinY0; | |
599 } | |
600 else | |
601 { | |
602 tXc1->WindowX1 = tempWinX1; | |
603 tXc1->WindowY1 = tempWinY1; /* jump to upper of two lines */ | |
604 } | |
38 | 605 |
606 snprintf(text,TEXTSIZE,"\020\016%u:%02u",TotalDivetime.Minutes, TotalDivetime.Seconds); | |
607 t3_basics_colorscheme_mod(text); | |
608 GFX_write_string(&FontT105,tXc1,text,0); | |
609 | |
610 snprintf(text,TEXTSIZE,"\032\002%c%c",TXT_2BYTE, TXT2BYTE_ApneaTotal); | |
413 | 611 if(pSettings->FlipDisplay) |
612 { | |
613 tXc1->WindowX0 = 0; | |
614 | |
615 } | |
38 | 616 GFX_write_string(&FontT42,tXc1,text,0); |
617 break; | |
618 } | |
619 | |
620 tXc1->WindowX0 = tempWinX0; | |
413 | 621 tXc1->WindowX1 = tempWinX1; |
38 | 622 tXc1->WindowY0 = tempWinY0; |
623 | |
624 } | |
625 | |
626 | |
627 void t3_basics_refresh_customview(float depth, uint8_t tX_selection_customview, GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXc1, GFX_DrawCfgWindow* tXc2, uint8_t mode) | |
628 { | |
629 char text[512]; | |
630 uint16_t textpointer = 0; | |
631 | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
632 SSettings* pSettings; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
633 pSettings = settingsGetPointer(); |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
634 |
38 | 635 // CVIEW_T3_Decostop and CVIEW_T3_TTS |
636 const SDecoinfo * pDecoinfo; | |
637 if(stateUsed->diveSettings.deco_type.ub.standard == GF_MODE) | |
638 pDecoinfo = &stateUsed->decolistBuehlmann; | |
639 else | |
640 pDecoinfo = &stateUsed->decolistVPM; | |
641 | |
642 // CVIEW_T3_Decostop | |
643 uint16_t nextstopLengthSeconds = 0; | |
644 uint8_t nextstopDepthMeter = 0; | |
645 SDivetime SafetyStopTime = {0,0,0,0}; | |
646 | |
647 // CVIEW_T3_ppO2andGas | |
648 uint8_t oxygen_percentage = 0; | |
649 | |
650 // CVIEW_T3_Temperature | |
651 float temperature; | |
652 | |
653 // CVIEW_T3_GasList | |
654 float fPpO2limitHigh, fPpO2limitLow, fPpO2ofGasAtThisDepth; | |
655 const SGasLine * pGasLine; | |
656 uint8_t oxygen, helium; | |
657 uint8_t lineNumber; | |
658 | |
659 // CVIEW_T3_StopWatch | |
660 SDivetime Stopwatch = {0,0,0,0}; | |
661 float fAverageDepth, fAverageDepthAbsolute; | |
662 | |
663 uint16_t tempWinX0; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
664 uint16_t tempWinX1; |
38 | 665 uint16_t tempWinY0; |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
666 uint16_t tempWinY1; |
38 | 667 uint16_t tempWinC2X0; |
413 | 668 uint16_t tempWinC2Y0; |
669 uint16_t tempWinC2X1; | |
670 uint16_t tempWinC2Y1; | |
38 | 671 uint16_t tempWinC2Tab; |
672 | |
673 tempWinX0 = tXc1->WindowX0; | |
674 tempWinY0 = tXc1->WindowY0; | |
413 | 675 |
38 | 676 tempWinC2X0 = tXc2->WindowX0; |
413 | 677 tempWinC2Y0 = tXc2->WindowY0; |
678 tempWinC2X1 = tXc2->WindowX1; | |
679 tempWinC2Y1 = tXc2->WindowY1; | |
38 | 680 tempWinC2Tab = tXc2->WindowTab; |
681 | |
682 switch(tX_selection_customview) | |
683 { | |
684 case CVIEW_T3_ApnoeSurfaceInfo: | |
685 snprintf(text,TEXTSIZE,"\032\f%c",TXT_MaxDepth); | |
686 | |
413 | 687 if(!pSettings->FlipDisplay) |
688 { | |
689 GFX_write_string(&FontT42,tXc1,text,0); | |
690 tXc1->WindowY0 = 100; | |
691 } | |
692 else | |
693 { | |
694 GFX_write_string(&FontT42,tXc2,text,0); | |
695 tXc2->WindowY1 -= 100; /* jump to upper of two lines */ | |
696 } | |
38 | 697 |
698 snprintf(text,TEXTSIZE,"\020\016%01.1f",unit_depth_float(stateUsed->lifeData.apnea_last_max_depth_meter)); | |
699 t3_basics_colorscheme_mod(text); | |
413 | 700 |
701 if(!pSettings->FlipDisplay) | |
702 { | |
703 GFX_write_string(&FontT105,tXc1,text,0); | |
704 tXc1->WindowY0 = tempWinY0; | |
705 } | |
706 else | |
707 { | |
708 GFX_write_string(&FontT105,tXc2,text,0); | |
709 tXc2->WindowY1 = tempWinC2Y1; /* jump to upper of two lines */ | |
710 } | |
38 | 711 |
712 | |
713 snprintf(text,TEXTSIZE,"\020\016%01.1f",unit_depth_float(stateUsed->lifeData.apnea_total_max_depth_meter)); | |
714 t3_basics_colorscheme_mod(text); | |
413 | 715 if(!pSettings->FlipDisplay) |
716 { | |
717 GFX_write_string(&FontT105,tXc1,text,0); | |
718 } | |
719 else | |
720 { | |
721 GFX_write_string(&FontT105,tXc2,text,0); | |
722 } | |
38 | 723 break; |
724 | |
725 case CVIEW_T3_StopWatch: | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
726 |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
727 tempWinX0 = tXc1->WindowX0; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
728 tempWinY0 = tXc1->WindowY0; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
729 tempWinX1 = tXc1->WindowX1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
730 tempWinY1 = tXc1->WindowY1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
731 |
38 | 732 Stopwatch.Total = timer_Stopwatch_GetTime(); |
733 Stopwatch.Minutes = Stopwatch.Total / 60; | |
734 Stopwatch.Seconds = Stopwatch.Total - ( Stopwatch.Minutes * 60 ); | |
735 fAverageDepth = timer_Stopwatch_GetAvarageDepth_Meter(); | |
736 fAverageDepthAbsolute = stateUsed->lifeData.average_depth_meter; | |
737 | |
738 snprintf(text,TEXTSIZE,"\032\f%c",TXT_AvgDepth); | |
739 GFX_write_string(&FontT42,tXc1,text,0); | |
740 snprintf(text,TEXTSIZE,"\030\003\016%01.1f",unit_depth_float(fAverageDepthAbsolute)); | |
741 GFX_write_string(&FontT105,tXc1,text,0); | |
742 | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
743 |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
744 |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
745 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
746 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
747 tXc1->WindowX0 = 480; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
748 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
749 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
750 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
751 tXc1->WindowX1 = 320; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
752 tXc1->WindowY0 = t3c1.WindowY0; /* select customer window */ |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
753 } |
38 | 754 // 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
|
755 |
38 | 756 snprintf(text,TEXTSIZE,"\032\f%c", TXT_Stopwatch); |
757 GFX_write_string(&FontT42,tXc1,text,0); | |
758 snprintf(text,TEXTSIZE,"\030\016%01.1f",unit_depth_float(fAverageDepth)); | |
759 GFX_write_string(&FontT105,tXc1,text,0); | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
760 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
761 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
762 tXc1->WindowY0 = 100; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
763 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
764 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
765 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
766 tXc1->WindowY1 -= 100; /* jump to upper of two lines */ |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
767 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
768 |
38 | 769 snprintf(text,TEXTSIZE,"\030%u:\016\016%02u",Stopwatch.Minutes, Stopwatch.Seconds); |
770 GFX_write_string(&FontT105,tXc1,text,0); | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
771 |
38 | 772 tXc1->WindowX0 = tempWinX0; |
773 tXc1->WindowY0 = tempWinY0; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
774 tXc1->WindowX1 = tempWinX1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
775 tXc1->WindowY1 = tempWinY1; |
38 | 776 break; |
777 | |
778 case CVIEW_T3_GasList: | |
779 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE, TXT2BYTE_Gaslist); | |
780 GFX_write_string(&FontT42,tXc1,text,0); | |
781 | |
782 textpointer = 0; | |
783 tempWinC2X0 = tXc2->WindowX0; | |
784 tempWinC2Tab = tXc2->WindowTab; | |
785 tXc2->WindowX0 = 0; | |
786 tXc2->WindowTab = 800/2; | |
787 | |
413 | 788 if(pSettings->FlipDisplay) |
789 { | |
790 tXc2->WindowY1 = 0; | |
791 } | |
792 | |
38 | 793 pGasLine = settingsGetPointer()->gas; |
794 if(actualLeftMaxDepth(stateUsed)) | |
795 fPpO2limitHigh = (float)(settingsGetPointer()->ppO2_max_deco) / 100; | |
796 else | |
797 fPpO2limitHigh = (float)(settingsGetPointer()->ppO2_max_std) / 100; | |
798 fPpO2limitLow = (float)(settingsGetPointer()->ppO2_min) / 100; | |
799 for(int gasId=1;gasId<=NUM_GASES;gasId++) | |
800 { | |
801 textpointer = 0; | |
802 lineNumber = gasId; | |
803 if(gasId > 3) | |
804 { | |
805 text[textpointer++] = '\t'; | |
806 lineNumber = gasId - 3; | |
807 } | |
808 fPpO2ofGasAtThisDepth = (stateUsed->lifeData.pressure_ambient_bar - WATER_VAPOUR_PRESSURE) * pGasLine[gasId].oxygen_percentage / 100; | |
809 if(pGasLine[gasId].note.ub.active == 0) | |
810 strcpy(&text[textpointer++],"\021"); | |
811 else if((fPpO2ofGasAtThisDepth > fPpO2limitHigh) || (fPpO2ofGasAtThisDepth < fPpO2limitLow)) | |
812 strcpy(&text[textpointer++],"\025"); | |
813 else | |
814 strcpy(&text[textpointer++],"\030"); | |
815 | |
816 text[textpointer++] = ' '; | |
817 oxygen = pGasLine[gasId].oxygen_percentage; | |
818 helium = pGasLine[gasId].helium_percentage; | |
819 textpointer += write_gas(&text[textpointer], oxygen, helium); | |
820 GFX_write_string(&FontT42, tXc2, text, lineNumber); | |
821 } | |
822 break; | |
823 | |
824 case CVIEW_T3_Temperature: | |
825 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Temperature); | |
826 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
|
827 |
8b8074080d7b
Bugfix: average temperature on arrival from RTE instead of display time
Jan Mulder <jlmulder@xs4all.nl>
parents:
174
diff
changeset
|
828 temperature = unit_temperature_float(stateUsed->lifeData.temperature_celsius); |
38 | 829 textpointer = snprintf(text,TEXTSIZE,"\030\003\016%01.1f \140",temperature); // "\016\016%01.1f `" + C or F |
830 if(settingsGetPointer()->nonMetricalSystem == 0) | |
831 text[textpointer++] = 'C'; | |
832 else | |
833 text[textpointer++] = 'F'; | |
834 text[textpointer++] = 0; | |
835 GFX_write_string(&FontT105,tXc1,text,0); | |
836 break; | |
837 | |
838 case CVIEW_Compass: | |
839 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE, TXT2BYTE_Compass); | |
840 GFX_write_string(&FontT42,tXc1,text,0); | |
841 snprintf(text,100,"\030\003%03i`",(uint16_t)stateUsed->lifeData.compass_heading); | |
842 GFX_write_string(&FontT105,tXc1,text,0); | |
843 t3_basics_compass(tXscreen, (uint16_t)stateUsed->lifeData.compass_heading, stateUsed->diveSettings.compassHeading); | |
844 break; | |
845 | |
846 case CVIEW_T3_Decostop: | |
847 default: | |
848 // decostop | |
849 if(pDecoinfo->output_time_to_surface_seconds) | |
850 { | |
851 tHome_findNextStop(pDecoinfo->output_stop_length_seconds, &nextstopDepthMeter, &nextstopLengthSeconds); | |
852 } | |
853 else | |
854 { | |
855 nextstopDepthMeter = 0; | |
856 nextstopLengthSeconds = 0; | |
857 } | |
858 | |
859 SafetyStopTime.Total = timer_Safetystop_GetCountDown(); | |
860 SafetyStopTime.Minutes = SafetyStopTime.Total / 60; | |
861 SafetyStopTime.Seconds = SafetyStopTime.Total - (SafetyStopTime.Minutes * 60); | |
862 | |
863 if(nextstopDepthMeter) | |
864 { | |
865 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Decostop); | |
866 GFX_write_string(&FontT42,tXc1,text,0); | |
867 | |
868 textpointer = 0; | |
869 snprintf(&text[textpointer],TEXTSIZE,"\020\003%u%c%c %u'" | |
870 , unit_depth_integer(nextstopDepthMeter) | |
871 , unit_depth_char1_T105() | |
872 , unit_depth_char2_T105() | |
873 , (nextstopLengthSeconds+59)/60); | |
874 // old without feet hw 170703 snprintf(&text[textpointer],TEXTSIZE,"\020\003%um %u'",nextstopDepthMeter,(nextstopLengthSeconds+59)/60); | |
875 t3_basics_colorscheme_mod(text); | |
876 GFX_write_string(&FontT105,tXc1,text,1); | |
877 } | |
878 else if(SafetyStopTime.Total && (depth > timer_Safetystop_GetDepthUpperLimit())) | |
879 { | |
880 textpointer = 0; | |
881 snprintf(&text[textpointer],TEXTSIZE,"\032\f%c%c",TXT_2BYTE,TXT2BYTE_SafetyStop2); | |
882 GFX_write_string(&FontT42,tXc1,text,0); | |
883 | |
884 textpointer = 0; | |
885 snprintf(&text[textpointer],TEXTSIZE,"\020\003\016%u:%02u",SafetyStopTime.Minutes,SafetyStopTime.Seconds); | |
886 t3_basics_colorscheme_mod(text); | |
887 GFX_write_string(&FontT105,tXc1,text,1); | |
888 } | |
237
ec16fd26e280
Bugfix: do not show NDL in bigscreen mode when zero
Jan Mulder <jlmulder@xs4all.nl>
parents:
214
diff
changeset
|
889 else if(pDecoinfo->output_ndl_seconds) // NDL |
38 | 890 { |
891 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Nullzeit); | |
892 GFX_write_string(&FontT42,tXc1,text,0); | |
893 if(pDecoinfo->output_ndl_seconds < 1000 * 60) | |
894 snprintf(text,TEXTSIZE,"\020\003%i'",pDecoinfo->output_ndl_seconds/60); | |
895 else | |
896 snprintf(text,TEXTSIZE,"\020\003%ih",pDecoinfo->output_ndl_seconds/3600); | |
897 t3_basics_colorscheme_mod(text); | |
898 GFX_write_string(&FontT105,tXc1,text,1); | |
899 } | |
900 break; | |
901 | |
902 case CVIEW_sensors: | |
903 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE,TXT2BYTE_O2monitor); | |
904 GFX_write_string(&FontT42,tXc1,text,0); | |
905 | |
906 for(int i=0;i<3;i++) | |
907 { | |
908 textpointer = 0; | |
909 text[textpointer++] = '\030'; | |
910 if(i==1) | |
911 text[textpointer++] = '\001'; | |
912 else if(i==2) | |
913 text[textpointer++] = '\002'; | |
914 if(stateUsed->diveSettings.ppo2sensors_deactivated & (1<<i)) | |
915 { | |
916 text[textpointer++] = '\031'; | |
917 text[textpointer++] = ' '; | |
918 text[textpointer++] = '-'; | |
919 text[textpointer++] = ' '; | |
920 } | |
921 else | |
922 { | |
923 if(stateUsed->warnings.sensorOutOfBounds[i]) | |
924 text[textpointer++] = '\025'; | |
925 textpointer += snprintf(&text[textpointer],TEXTSIZE,"%.1f",stateUsed->lifeData.ppO2Sensor_bar[i]); | |
926 } | |
927 GFX_write_string(&FontT144,tXc1,text,1); | |
928 } | |
929 break; | |
930 | |
931 case CVIEW_T3_MaxDepth: | |
932 snprintf(text,TEXTSIZE,"\032\f%c",TXT_MaxDepth); | |
413 | 933 if(pSettings->FlipDisplay) |
934 { | |
935 if(mode == DIVEMODE_Apnea) | |
936 { | |
937 GFX_write_string(&FontT42,tXc2,text,0); | |
938 } | |
939 else | |
940 { | |
941 GFX_write_string(&FontT42,tXc1,text,0); | |
942 } | |
943 } | |
944 else | |
945 { | |
946 GFX_write_string(&FontT42,tXc1,text,0); | |
947 } | |
38 | 948 snprintf(text,TEXTSIZE,"\020\003\016%01.1f",unit_depth_float(stateUsed->lifeData.max_depth_meter)); |
949 t3_basics_colorscheme_mod(text); | |
413 | 950 if(pSettings->FlipDisplay) |
951 { | |
952 if(mode == DIVEMODE_Apnea) | |
953 { | |
954 GFX_write_string(&FontT105,tXc2,text,0); | |
955 } | |
956 else | |
957 { | |
958 GFX_write_string(&FontT105,tXc1,text,0); | |
959 } | |
960 } | |
961 else | |
962 { | |
963 GFX_write_string(&FontT105,tXc1,text,1); | |
964 } | |
38 | 965 break; |
966 | |
967 case CVIEW_T3_TTS: | |
968 snprintf(text,TEXTSIZE,"\032\f%c",TXT_TTS); | |
969 GFX_write_string(&FontT42,tXc1,text,0); | |
970 if(pDecoinfo->output_time_to_surface_seconds) | |
971 { | |
972 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
|
973 snprintf(text,TEXTSIZE,"\020\003\002%i'",(pDecoinfo->output_time_to_surface_seconds + 59)/ 60); |
38 | 974 else |
214
51a3aeffc6b3
Bugfix: handle rounding of TTS and future TTS consistently
Jan Mulder <jlmulder@xs4all.nl>
parents:
189
diff
changeset
|
975 snprintf(text,TEXTSIZE,"\020\003\002%ih",(pDecoinfo->output_time_to_surface_seconds + 59)/ 3600); |
38 | 976 t3_basics_colorscheme_mod(text); |
977 GFX_write_string(&FontT105,tXc1,text,1); | |
978 } | |
979 break; | |
980 | |
981 case CVIEW_T3_ppO2andGas: | |
982 snprintf(text,TEXTSIZE,"\032\f%c",TXT_ppO2); | |
983 GFX_write_string(&FontT42,tXc1,text,0); | |
984 snprintf(text,TEXTSIZE,"\020\003%01.2f",stateUsed->lifeData.ppO2); | |
985 t3_basics_colorscheme_mod(text); | |
986 GFX_write_string(&FontT105,tXc1,text,1); | |
987 | |
988 textpointer = 0; | |
989 text[textpointer++] = '\020'; | |
990 text[textpointer++] = '\003'; | |
991 oxygen_percentage = 100; | |
992 oxygen_percentage -= stateUsed->lifeData.actualGas.nitrogen_percentage; | |
993 oxygen_percentage -= stateUsed->lifeData.actualGas.helium_percentage; | |
994 text[textpointer++] = '\002'; | |
995 tHome_gas_writer(oxygen_percentage,stateUsed->lifeData.actualGas.helium_percentage,&text[textpointer]); | |
996 //textpointer = snprintf(&text[textpointer],TEXTSIZE,"\020\002%02u/%02u",oxygen_percentage, stateUsed->lifeData.actualGas.helium_percentage); | |
997 t3_basics_colorscheme_mod(text); | |
998 GFX_write_string(&FontT48,tXc1,text,1); | |
999 break; | |
1000 } | |
1001 tXc1->WindowX0 = tempWinX0; | |
1002 tXc1->WindowY0 = tempWinY0; | |
413 | 1003 |
38 | 1004 tXc2->WindowX0 = tempWinC2X0; |
413 | 1005 tXc2->WindowY0 = tempWinC2Y0; |
1006 tXc2->WindowX1 = tempWinC2X1; | |
1007 tXc2->WindowY1 = tempWinC2Y1; | |
38 | 1008 tXc2->WindowTab = tempWinC2Tab; |
1009 } | |
1010 | |
1011 | |
1012 uint8_t t3_test_customview_warnings(void) | |
1013 { | |
1014 uint8_t count = 0; | |
1015 | |
1016 count = 0; | |
1017 count += stateUsed->warnings.decoMissed; | |
1018 count += stateUsed->warnings.ppO2Low; | |
1019 count += stateUsed->warnings.ppO2High; | |
1020 //count += stateUsed->warnings.lowBattery; | |
1021 count += stateUsed->warnings.sensorLinkLost; | |
1022 count += stateUsed->warnings.fallback; | |
1023 | |
1024 return count; | |
1025 } | |
1026 | |
1027 //void t3_show_customview_warnings(GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXl1, GFX_DrawCfgWindow* tXr1, uint8_t mode) | |
1028 void t3_basics_show_customview_warnings(GFX_DrawCfgWindow* tXc1) | |
1029 { | |
1030 char text[256], textMain[256]; | |
1031 uint8_t textpointer, textpointerMain, lineFree, more; | |
1032 | |
1033 snprintf(text,TEXTSIZE,"\025\f%c",TXT_Warning); | |
1034 GFX_write_string(&FontT42,&t3c1,text,0); | |
1035 | |
1036 lineFree = 1; | |
1037 more = 0; | |
1038 | |
1039 textpointerMain = 0; | |
1040 textMain[textpointerMain++] = '\025'; | |
1041 textMain[textpointerMain++] = '\003'; | |
1042 | |
1043 textpointer = 0; | |
1044 | |
1045 text[textpointer++] = '\021'; | |
1046 text[textpointer++] = TXT_2BYTE; | |
1047 text[textpointer++] = TXT2BYTE_WarnDecoMissed; | |
1048 if(stateUsed->warnings.decoMissed) | |
1049 { | |
1050 text[textpointer - 3] = '\025'; | |
1051 if(lineFree) | |
1052 { | |
1053 textMain[textpointerMain++] = TXT_2BYTE; | |
1054 textMain[textpointerMain++] = text[textpointer - 1]; | |
1055 textMain[textpointerMain] = 0; | |
1056 lineFree--; | |
1057 } | |
1058 else | |
1059 { | |
1060 more++; | |
1061 } | |
1062 } | |
1063 | |
1064 text[textpointer++] = '\t'; | |
1065 text[textpointer++] = '\021'; | |
1066 text[textpointer++] = TXT_2BYTE; | |
1067 text[textpointer++] = TXT2BYTE_WarnPPO2Low; | |
1068 if(stateUsed->warnings.ppO2Low) | |
1069 { | |
1070 text[textpointer - 3] = '\025'; | |
1071 if(lineFree) | |
1072 { | |
1073 textMain[textpointerMain++] = TXT_2BYTE; | |
1074 textMain[textpointerMain++] = text[textpointer - 1]; | |
1075 textMain[textpointerMain] = 0; | |
1076 lineFree--; | |
1077 } | |
1078 else | |
1079 { | |
1080 more++; | |
1081 } | |
1082 } | |
1083 | |
1084 text[textpointer++] = '\n'; | |
1085 text[textpointer++] = '\r'; | |
1086 text[textpointer++] = '\021'; | |
1087 text[textpointer++] = TXT_2BYTE; | |
1088 text[textpointer++] = TXT2BYTE_WarnPPO2High; | |
1089 if(stateUsed->warnings.ppO2High) | |
1090 { | |
1091 text[textpointer - 3] = '\025'; | |
1092 if(lineFree) | |
1093 { | |
1094 textMain[textpointerMain++] = TXT_2BYTE; | |
1095 textMain[textpointerMain++] = text[textpointer - 1]; | |
1096 textMain[textpointerMain] = 0; | |
1097 lineFree--; | |
1098 } | |
1099 else | |
1100 { | |
1101 more++; | |
1102 } | |
1103 } | |
1104 | |
1105 text[textpointer++] = '\t'; | |
1106 text[textpointer++] = '\021'; | |
1107 text[textpointer++] = TXT_2BYTE; | |
1108 text[textpointer++] = TXT2BYTE_WarnFallback; | |
1109 if(stateUsed->warnings.fallback) | |
1110 { | |
1111 text[textpointer - 3] = '\025'; | |
1112 if(lineFree) | |
1113 { | |
1114 textMain[textpointerMain++] = TXT_2BYTE; | |
1115 textMain[textpointerMain++] = text[textpointer - 1]; | |
1116 textMain[textpointerMain] = 0; | |
1117 lineFree--; | |
1118 } | |
1119 else | |
1120 { | |
1121 more++; | |
1122 } | |
1123 } | |
1124 | |
1125 text[textpointer++] = '\n'; | |
1126 text[textpointer++] = '\r'; | |
1127 text[textpointer++] = '\021'; | |
1128 text[textpointer++] = TXT_2BYTE; | |
1129 text[textpointer++] = TXT2BYTE_WarnSensorLinkLost; | |
1130 if(stateUsed->warnings.sensorLinkLost) | |
1131 { | |
1132 text[textpointer - 3] = '\025'; | |
1133 if(lineFree) | |
1134 { | |
1135 textMain[textpointerMain++] = TXT_2BYTE; | |
1136 textMain[textpointerMain++] = text[textpointer - 1]; | |
1137 textMain[textpointerMain] = 0; | |
1138 lineFree--; | |
1139 } | |
1140 else | |
1141 { | |
1142 more++; | |
1143 } | |
1144 } | |
1145 | |
1146 /* | |
1147 text[textpointer++] = '\t'; | |
1148 text[textpointer++] = '\021'; | |
1149 text[textpointer++] = TXT_2BYTE; | |
1150 text[textpointer++] = TXT2BYTE_WarnBatteryLow; | |
1151 if(stateUsed->warnings.lowBattery) | |
1152 { | |
1153 text[textpointer - 3] = '\025'; | |
1154 if(lineFree) | |
1155 { | |
1156 textMain[textpointerMain++] = TXT_2BYTE; | |
1157 textMain[textpointerMain++] = text[textpointer - 1]; | |
1158 textMain[textpointerMain] = 0; | |
1159 lineFree--; | |
1160 } | |
1161 else | |
1162 { | |
1163 more++; | |
1164 } | |
1165 } | |
1166 */ | |
1167 text[textpointer] = 0; | |
1168 /* | |
1169 if(more) | |
1170 { | |
1171 text[textpointer++] = '\002'; | |
1172 text[textpointer++] = '+'; | |
1173 if(more < 10) | |
1174 text[textpointer++] = '0' + more; | |
1175 else | |
1176 text[textpointer++] = 'X'; | |
1177 text[textpointer] = 0; | |
1178 } | |
1179 */ | |
1180 GFX_write_string(&FontT48,&t3c1,textMain,1); | |
1181 if(more) | |
1182 { | |
1183 GFX_write_string(&FontT48,&t3c2,text,1); | |
1184 } | |
1185 } | |
1186 | |
1187 | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1188 void t3_change_customview(uint8_t action) |
38 | 1189 { |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1190 t3_basics_change_customview(&t3_selection_customview, t3_customviews, action); |
38 | 1191 } |
1192 | |
1193 | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1194 void t3_basics_change_customview(uint8_t *tX_selection_customview, const uint8_t *tX_customviews, uint8_t action) |
38 | 1195 { |
1196 const SDecoinfo * pDecoinfo; | |
1197 if(stateUsed->diveSettings.deco_type.ub.standard == GF_MODE) | |
1198 pDecoinfo = &stateUsed->decolistBuehlmann; | |
1199 else | |
1200 pDecoinfo = &stateUsed->decolistVPM; | |
1201 | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1202 uint8_t *pViews; |
38 | 1203 pViews = tX_customviews; |
1204 | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1205 uint8_t *pStartView,*pCurView, *pLastView; |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1206 uint8_t iterate = 0; /* set to 1 if a view has to be skipped */ |
38 | 1207 |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1208 pStartView = pViews; |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1209 /* set pointer to currently selected view and count number of entries */ |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1210 while((*pViews != CVIEW_T3_END)) |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1211 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1212 if (*pViews == *tX_selection_customview) |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1213 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1214 pCurView = pViews; |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1215 } |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1216 pViews++; |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1217 } |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1218 pLastView = pViews; |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1219 pViews = pCurView; |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1220 |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1221 do |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1222 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1223 iterate = 0; |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1224 if((action == ACTION_BUTTON_ENTER) || (action == ACTION_PITCH_POS)) |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1225 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1226 if(*pViews != CVIEW_T3_END) |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1227 pViews++; |
38 | 1228 |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1229 if(*pViews == CVIEW_T3_END) |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1230 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1231 pViews = pStartView; |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1232 } |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1233 } |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1234 else |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1235 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1236 if(pViews == pStartView) |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1237 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1238 pViews = pLastView - 1; |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1239 } |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1240 else |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1241 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1242 pViews--; |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1243 } |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1244 } |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1245 if((*pViews == CVIEW_sensors) &&(stateUsed->diveSettings.ccrOption == 0)) |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1246 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1247 iterate = 1; |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1248 } |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1249 if((*pViews == CVIEW_T3_TTS) && !pDecoinfo->output_time_to_surface_seconds) |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1250 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1251 iterate = 1; |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1252 } |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1253 }while (iterate == 1); |
38 | 1254 |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1255 *tX_selection_customview = *pViews; |
38 | 1256 } |
1257 | |
1258 | |
1259 void t3_basics_colorscheme_mod(char *text) | |
1260 { | |
1261 if((text[0] == '\020') && !GFX_is_colorschemeDiveStandard()) | |
1262 { | |
1263 text[0] = '\027'; | |
1264 } | |
1265 } | |
1266 | |
1267 | |
1268 point_t t3_compass_circle(uint8_t id, uint16_t degree) | |
1269 { | |
1270 float fCos, fSin; | |
1271 const float piMult = ((2 * 3.14159) / 360); | |
1272 // const int radius[4] = {95,105,115,60}; | |
1273 const int radius[4] = {85,95,105,90}; | |
1274 const point_t offset = {.x = 600, .y = 116}; | |
1275 | |
1276 static point_t r[4][360] = { 0 }; | |
1277 | |
1278 if(r[0][0].y == 0) | |
1279 { | |
1280 for(int i=0;i<360;i++) | |
1281 { | |
1282 fCos = cos(i * piMult); | |
1283 fSin = sin(i * piMult); | |
1284 for(int j=0;j<4;j++) | |
1285 { | |
1286 r[j][i].x = offset.x + (int)(fSin * radius[j]); | |
1287 r[j][i].y = offset.y + (int)(fCos * radius[j]); | |
1288 } | |
1289 } | |
1290 } | |
1291 if(id > 3) id = 0; | |
1292 if(degree > 359) degree = 0; | |
1293 return r[id][degree]; | |
1294 } | |
1295 | |
1296 | |
1297 void t3_basics_compass(GFX_DrawCfgScreen *tXscreen, uint16_t ActualHeading, uint16_t UserSetHeading) | |
1298 { | |
1299 uint16_t LineHeading; | |
1300 point_t center; | |
1301 static int32_t LastHeading = 0; | |
1302 int32_t newHeading = 0; | |
1303 int32_t diff = 0; | |
1304 int32_t diff2 = 0; | |
1305 | |
1306 int32_t diffAbs = 0; | |
1307 int32_t diffAbs2 = 0; | |
1308 | |
1309 newHeading = ActualHeading; | |
1310 | |
1311 diff = newHeading - LastHeading; | |
1312 | |
1313 if(newHeading < LastHeading) | |
1314 diff2 = newHeading + 360 - LastHeading; | |
1315 else | |
1316 diff2 = newHeading - 360 - LastHeading; | |
1317 | |
1318 diffAbs = diff; | |
1319 if(diffAbs < 0) | |
1320 diffAbs *= -1; | |
1321 | |
1322 diffAbs2 = diff2; | |
1323 if(diffAbs2 < 0) | |
1324 diffAbs2 *= -1; | |
1325 | |
1326 if(diffAbs <= diffAbs2) | |
1327 newHeading = LastHeading + (diff / 2); | |
1328 else | |
1329 newHeading = LastHeading + (diff2 / 2); | |
1330 | |
1331 if(newHeading < 0) | |
1332 newHeading += 360; | |
1333 else | |
1334 if(newHeading >= 360) | |
1335 newHeading -= 360; | |
1336 | |
1337 LastHeading = newHeading; | |
1338 ActualHeading = newHeading; | |
1339 | |
1340 if (ActualHeading < 90) | |
1341 ActualHeading += 360; | |
1342 | |
1343 while(ActualHeading > 359) ActualHeading -= 360; | |
1344 | |
1345 LineHeading = 360 - ActualHeading; | |
1346 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(0,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font030); // North | |
1347 LineHeading += 90; | |
1348 if(LineHeading > 359) LineHeading -= 360; | |
1349 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); // Maintick | |
1350 LineHeading += 90; | |
1351 if(LineHeading > 359) LineHeading -= 360; | |
1352 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1353 LineHeading += 90; | |
1354 if(LineHeading > 359) LineHeading -= 360; | |
1355 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1356 | |
1357 LineHeading = 360 - ActualHeading; | |
1358 LineHeading += 45; | |
1359 if(LineHeading > 359) LineHeading -= 360; | |
1360 GFX_draw_thick_line(5,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); // Subtick | |
1361 LineHeading += 90; | |
1362 if(LineHeading > 359) LineHeading -= 360; | |
1363 GFX_draw_thick_line(5,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1364 LineHeading += 90; | |
1365 if(LineHeading > 359) LineHeading -= 360; | |
1366 GFX_draw_thick_line(5,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1367 LineHeading += 90; | |
1368 if(LineHeading > 359) LineHeading -= 360; | |
1369 GFX_draw_thick_line(5,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1370 | |
1371 LineHeading = 360 - ActualHeading; | |
1372 LineHeading += 22; | |
1373 if(LineHeading > 359) LineHeading -= 360; | |
1374 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); // Subtick | |
1375 LineHeading += 45; | |
1376 if(LineHeading > 359) LineHeading -= 360; | |
1377 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1378 LineHeading += 45; | |
1379 if(LineHeading > 359) LineHeading -= 360; | |
1380 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1381 LineHeading += 45; | |
1382 if(LineHeading > 359) LineHeading -= 360; | |
1383 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1384 LineHeading += 45; | |
1385 if(LineHeading > 359) LineHeading -= 360; | |
1386 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); // Subtick | |
1387 LineHeading += 45; | |
1388 if(LineHeading > 359) LineHeading -= 360; | |
1389 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1390 LineHeading += 45; | |
1391 if(LineHeading > 359) LineHeading -= 360; | |
1392 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1393 LineHeading += 45; | |
1394 if(LineHeading > 359) LineHeading -= 360; | |
1395 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1396 | |
1397 if(UserSetHeading) | |
1398 { | |
1399 LineHeading = UserSetHeading + 360 - ActualHeading; | |
1400 if(LineHeading > 359) LineHeading -= 360; | |
1401 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(3,LineHeading), t3_compass_circle(2,LineHeading), CLUT_CompassUserHeadingTick); | |
1402 | |
1403 // R�ckpeilung, User Back Heading | |
1404 LineHeading = UserSetHeading + 360 + 180 - ActualHeading; | |
1405 if(LineHeading > 359) LineHeading -= 360; | |
1406 if(LineHeading > 359) LineHeading -= 360; | |
1407 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(3,LineHeading), t3_compass_circle(2,LineHeading), CLUT_CompassUserBackHeadingTick); | |
1408 } | |
1409 | |
1410 center.x = 600; | |
1411 center.y = 116; | |
1412 GFX_draw_circle(tXscreen, center, 106, CLUT_Font030); | |
1413 GFX_draw_circle(tXscreen, center, 107, CLUT_Font030); | |
1414 GFX_draw_circle(tXscreen, center, 108, CLUT_Font030); | |
1415 } | |
384
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1416 |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1417 uint8_t t3_GetEnabled_customviews() |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1418 { |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1419 int8_t i; |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1420 uint8_t enabledViewCnt = 0; |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1421 uint32_t cv_config = settingsGetPointer()->cv_configuration; |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1422 |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1423 i=0; |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1424 do |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1425 { |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1426 if(cv_changelist[i] == CVIEW_sensors) /* at the moment specific big font view may not be selected. Only sensor setting is taken from t7 configuration */ |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1427 { |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1428 if(!CHECK_BIT_THOME(cv_config, cv_changelist[i])) |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1429 { |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1430 enabledViewCnt = NUMBER_OF_VIEWS - 1; /* sensor shall not be displayed */ |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1431 } |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1432 else |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1433 { |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1434 enabledViewCnt = NUMBER_OF_VIEWS; /* enable all possible views */ |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1435 } |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1436 break; |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1437 } |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1438 i++; |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1439 } while(cv_changelist[i] != CVIEW_END); |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1440 if ((stateUsed->diveSettings.ppo2sensors_deactivated) || (stateUsed->diveSettings.ccrOption == 0)) |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1441 { |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1442 enabledViewCnt = NUMBER_OF_VIEWS - 1; /* sensor shall not be displayed */ |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1443 } |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1444 |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1445 return enabledViewCnt; |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1446 } |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1447 |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1448 |