Mercurial > public > ostc4
annotate Discovery/Src/t3.c @ 483:90d1f793dcf2 FixLayout_Header_LogView
Development option only read bottledata:
If the header divisor is set (in my case because of switching between development and main versions) the samples need to be read considering the bottle values, too. Divelogs written by a SW not supporting bottle pressure have the divisor set to 0 => no impact to main SW
Bugfix header memory layout:
The batterygaugeregisters were not used and will be reused for other information. To keep the OSTC3 format up and running the datafield is not filled with "0x00"
author | ideenmodellierer |
---|---|
date | Tue, 26 May 2020 21:12:02 +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 |