Mercurial > public > ostc4
annotate Discovery/Src/t3.c @ 169:842f57bbaaad cleanup-1
Bugfix: highlight the menu underline correctly on selected state
This fixes an optical bug. In dive and simulation mode, the
underline in the top menu was not highlighted correctly for the
DECO ans SYS submenu's. The check when to highlight simply was not
correct. And, yes, this part of the code is rather obfuscated, and
deserves some attention later on.
Reported-by: Matthias Heinrichs <matthias.heinrichs@heinrichsweikamp.com>
Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
author | Jan Mulder <jlmulder@xs4all.nl> |
---|---|
date | Sun, 10 Mar 2019 10:09:58 +0100 |
parents | 255eedad4155 |
children | ecb71521d004 |
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 | |
40 //* Importend function prototypes ---------------------------------------------*/ | |
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 extern float depthLastCall[9]; | |
56 extern uint8_t idDepthLastCall; | |
57 extern float temperatureLastCall[3]; | |
58 extern uint8_t idTemperatureLastCall; | |
59 | |
60 uint8_t t3_selection_customview = 0; | |
61 | |
62 /* TEM HAS TO MOVE TO GLOBAL--------------------------------------------------*/ | |
63 | |
64 /* Private types -------------------------------------------------------------*/ | |
65 #define TEXTSIZE 16 | |
66 | |
67 const uint8_t t3_customviewsStandard[] = | |
68 { | |
69 CVIEW_T3_Decostop, | |
70 CVIEW_sensors, | |
71 CVIEW_Compass, | |
72 CVIEW_T3_MaxDepth, | |
73 CVIEW_T3_StopWatch, | |
74 CVIEW_T3_TTS, | |
75 CVIEW_T3_ppO2andGas, | |
76 CVIEW_T3_END | |
77 }; | |
78 | |
79 | |
80 const uint8_t *t3_customviews = t3_customviewsStandard; | |
81 | |
82 /* Private function prototypes -----------------------------------------------*/ | |
83 void t3_refresh_divemode(void); | |
84 | |
85 uint8_t t3_test_customview_warnings(void); | |
86 void t3_refresh_customview(float depth); | |
87 void t3_basics_compass(GFX_DrawCfgScreen *tXscreen, uint16_t ActualHeading, uint16_t UserSetHeading); | |
88 | |
89 /* Exported functions --------------------------------------------------------*/ | |
90 | |
91 void t3_init(void) | |
92 { | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
93 SSettings* pSettings; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
94 pSettings = settingsGetPointer(); |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
95 |
38 | 96 t3_selection_customview = t3_customviews[0]; |
97 | |
98 t3screen.FBStartAdress = 0; | |
99 t3screen.ImageHeight = 480; | |
100 t3screen.ImageWidth = 800; | |
101 t3screen.LayerIndex = 1; | |
102 | |
103 t3l1.Image = &t3screen; | |
104 t3l1.WindowNumberOfTextLines = 2; | |
105 t3l1.WindowLineSpacing = 19; // Abstand von Y0 | |
106 t3l1.WindowTab = 100; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
107 |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
108 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
109 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
110 t3l1.WindowX0 = 0; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
111 t3l1.WindowX1 = BigFontSeperationLeftRight - 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
112 t3l1.WindowY0 = BigFontSeperationTopBottom + 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
113 t3l1.WindowY1 = 479; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
114 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
115 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
116 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
117 t3l1.WindowX0 = 800 - BigFontSeperationLeftRight + 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
118 t3l1.WindowX1 = 799; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
119 t3l1.WindowY0 = 0; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
120 t3l1.WindowY1 = 479 - BigFontSeperationTopBottom + 5 ; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
121 } |
38 | 122 |
123 t3r1.Image = &t3screen; | |
124 t3r1.WindowNumberOfTextLines = t3l1.WindowNumberOfTextLines; | |
125 t3r1.WindowLineSpacing = t3l1.WindowLineSpacing; | |
126 t3r1.WindowTab = t3l1.WindowTab; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
127 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
128 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
129 t3r1.WindowX0 = BigFontSeperationLeftRight + 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
130 t3r1.WindowX1 = 799; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
131 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
132 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
133 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
134 t3r1.WindowX0 = 0; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
135 t3r1.WindowX1 = BigFontSeperationLeftRight - 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
136 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
137 |
38 | 138 t3r1.WindowY0 = t3l1.WindowY0; |
139 t3r1.WindowY1 = t3l1.WindowY1; | |
140 | |
141 t3c1.Image = &t3screen; | |
142 t3c1.WindowNumberOfTextLines = 2; | |
143 t3c1.WindowLineSpacing = t3l1.WindowLineSpacing; | |
144 t3c1.WindowX0 = 0; | |
145 t3c1.WindowX1 = 799; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
146 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
147 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
148 t3c1.WindowY0 = 0; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
149 t3c1.WindowY1 = BigFontSeperationTopBottom - 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
150 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
151 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
152 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
153 t3c1.WindowY0 = 480 - BigFontSeperationTopBottom + 5; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
154 t3c1.WindowY1 = 479; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
155 } |
38 | 156 |
157 t3c2.Image = &t3screen; | |
158 t3c2.WindowNumberOfTextLines = 3; | |
159 t3c2.WindowLineSpacing = 58; | |
160 t3c2.WindowX0 = 370; | |
161 t3c2.WindowX1 = 799; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
162 t3c2.WindowY0 = t3c1.WindowY0; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
163 t3c2.WindowY1 = t3c1.WindowY1; |
38 | 164 t3c2.WindowTab = 600; |
165 } | |
166 | |
167 | |
168 void t3_refresh(void) | |
169 { | |
170 SStateList status; | |
171 get_globalStateList(&status); | |
172 | |
173 if(stateUsed->mode != MODE_DIVE) | |
174 { | |
175 settingsGetPointer()->design = 7; | |
176 return; | |
177 } | |
178 | |
179 if(status.base != BaseHome) | |
180 return; | |
181 | |
182 t3screen.FBStartAdress = getFrame(24); | |
183 t3_refresh_divemode(); | |
166
255eedad4155
cleanup: get rid of some compile warnings
Jan Mulder <jlmulder@xs4all.nl>
parents:
138
diff
changeset
|
184 GFX_SetFramesTopBottom(t3screen.FBStartAdress, 0,480); |
38 | 185 releaseAllFramesExcept(24,t3screen.FBStartAdress); |
186 } | |
187 | |
188 | |
189 /* Private functions ---------------------------------------------------------*/ | |
190 | |
191 float t3_basics_lines_depth_and_divetime(GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXl1, GFX_DrawCfgWindow* tXr1, uint8_t mode) | |
192 { | |
193 char text[512]; | |
194 uint8_t color; | |
195 uint8_t depthChangeRate; | |
196 uint8_t depthChangeAscent; | |
197 point_t start, stop, startZeroLine; | |
198 | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
199 SSettings* pSettings; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
200 pSettings = settingsGetPointer(); |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
201 |
38 | 202 start.x = 0; |
203 stop.x = 799; | |
204 stop.y = start.y = BigFontSeperationTopBottom; | |
205 GFX_draw_line(tXscreen, start, stop, CLUT_Font020); | |
206 | |
207 start.y = BigFontSeperationTopBottom; | |
208 stop.y = 479; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
209 |
38 | 210 stop.x = start.x = BigFontSeperationLeftRight; |
211 GFX_draw_line(tXscreen, start, stop, CLUT_Font020); | |
212 | |
213 | |
214 /* depth */ | |
215 float depth = 0; | |
216 float depthThisCall = unit_depth_float(stateUsed->lifeData.depth_meter); | |
217 if(is_stateUsedSetToSim()) | |
218 { | |
219 depth = (depthThisCall + depthLastCall[0] + depthLastCall[1] + depthLastCall[2] + depthLastCall[3] + depthLastCall[4] + depthLastCall[5] + depthLastCall[6] + depthLastCall[7] + depthLastCall[8]) / 10.0f; | |
220 | |
221 idDepthLastCall++; | |
222 if(idDepthLastCall >= 9) | |
223 idDepthLastCall = 0; | |
224 depthLastCall[idDepthLastCall] = depthThisCall; | |
225 } | |
226 else | |
227 { | |
228 depth = (depthThisCall + depthLastCall[0] + depthLastCall[1] + depthLastCall[2]) / 4.0f; | |
229 | |
230 idDepthLastCall++; | |
231 if(idDepthLastCall >= 3) | |
232 idDepthLastCall = 0; | |
233 depthLastCall[idDepthLastCall] = depthThisCall; | |
234 } | |
235 | |
236 if(depth <= 0.3f) | |
237 depth = 0; | |
238 | |
239 if(settingsGetPointer()->nonMetricalSystem) | |
240 snprintf(text,TEXTSIZE,"\032\f[feet]"); | |
241 else | |
242 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Depth); | |
243 GFX_write_string(&FontT42,tXl1,text,0); | |
244 | |
245 if( ((mode == DIVEMODE_Apnea) && ((stateUsed->lifeData.ascent_rate_meter_per_min > 4) || (stateUsed->lifeData.ascent_rate_meter_per_min < -4 ))) | |
246 || ((mode != DIVEMODE_Apnea) && ((stateUsed->lifeData.ascent_rate_meter_per_min > 8) || (stateUsed->lifeData.ascent_rate_meter_per_min < -10))) | |
247 ) | |
248 { | |
249 snprintf(text,TEXTSIZE,"\f\002%.0f %c%c/min " | |
250 , unit_depth_float(stateUsed->lifeData.ascent_rate_meter_per_min) | |
251 , unit_depth_char1() | |
252 , unit_depth_char2() | |
253 ); | |
254 GFX_write_string(&FontT42,tXl1,text,0); | |
255 } | |
256 | |
257 if( depth < 100) | |
258 snprintf(text,TEXTSIZE,"\020\003\016%01.1f",depth); | |
259 else | |
260 snprintf(text,TEXTSIZE,"\020\003\016%01.0f",depth); | |
261 | |
262 t3_basics_colorscheme_mod(text); | |
263 GFX_write_string(&FontT105,tXl1,text,1); | |
264 | |
265 | |
266 /* ascentrate graph */ | |
267 if(mode == DIVEMODE_Apnea) | |
268 { | |
269 /* ascentrate graph - apnea mode */ | |
270 if(stateUsed->lifeData.ascent_rate_meter_per_min > 0) | |
271 { | |
272 depthChangeAscent = 1; | |
273 if(stateUsed->lifeData.ascent_rate_meter_per_min < 200) | |
274 depthChangeRate = (uint8_t)stateUsed->lifeData.ascent_rate_meter_per_min; | |
275 else | |
276 depthChangeRate = 200; | |
277 } | |
278 else | |
279 { | |
280 depthChangeAscent = 0; | |
281 if(stateUsed->lifeData.ascent_rate_meter_per_min > -200) | |
282 depthChangeRate = (uint8_t)(0 - stateUsed->lifeData.ascent_rate_meter_per_min); | |
283 else | |
284 depthChangeRate = 200; | |
285 } | |
286 start.y = tXl1->WindowY0 - 1; | |
287 for(int i = 0; i<5;i++) | |
288 { | |
289 start.y += 40; | |
290 stop.y = start.y; | |
291 start.x = tXl1->WindowX1 - 1; | |
292 stop.x = start.x - 17; | |
293 | |
294 if(depthChangeRate <= 6) | |
295 { | |
296 if(i == 2) | |
297 { | |
298 startZeroLine.y = start.y; | |
299 stop.x = start.x - 34; | |
300 } | |
301 } | |
302 else | |
303 { | |
304 if(((i == 1) && depthChangeAscent) || ((i == 3) && !depthChangeAscent)) | |
305 { | |
306 startZeroLine.y = start.y; | |
307 stop.x = start.x - 34; | |
308 } | |
309 } | |
310 GFX_draw_line(tXscreen, start, stop, 0); | |
311 } | |
312 // new thick bar design Sept. 2015 | |
313 if((stateUsed->lifeData.ascent_rate_meter_per_min > 4) || (stateUsed->lifeData.ascent_rate_meter_per_min < -4)) | |
314 { | |
315 start.y = startZeroLine.y; | |
316 | |
317 if(depthChangeAscent) | |
318 { | |
319 color = CLUT_EverythingOkayGreen; | |
320 start.y += 7; // starte etwas weiter oben | |
321 stop.y = start.y + (uint16_t)(depthChangeRate * 4) - 9; // - x; // wegen der Liniendicke | |
322 if(stop.y > 475) | |
323 stop.y = 475; | |
324 } | |
325 else | |
326 { | |
327 color = CLUT_Font023; | |
328 start.y -= 7; | |
329 stop.y = start.y - (uint16_t)(depthChangeRate * 4) + 9; | |
330 if(stop.y <= tXl1->WindowY0) | |
331 stop.y = tXl1->WindowY0 + 1; | |
332 } | |
333 stop.x = start.x = tXl1->WindowX1 - 8; | |
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 { | |
512 if((t3_selection_customview == CVIEW_sensors) &&(stateUsed->diveSettings.ccrOption == 0)) | |
513 t3_change_customview(); | |
514 | |
515 SDiveState * pDiveState; | |
516 | |
517 if(stateUsed == stateRealGetPointer()) | |
518 pDiveState = stateRealGetPointerWrite(); | |
519 else | |
520 pDiveState = stateSimGetPointerWrite(); | |
521 | |
522 t3_basics_refresh_customview(depth, t3_selection_customview, &t3screen, &t3c1, &t3c2, pDiveState->diveSettings.diveMode); | |
523 } | |
524 | |
525 | |
526 void t3_basics_refresh_apnoeRight(float depth, uint8_t tX_selection_customview, GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXc1, GFX_DrawCfgWindow* tXc2, uint8_t mode) | |
527 { | |
528 char text[512]; | |
529 uint16_t textpointer = 0; | |
530 | |
531 // CVIEW_T3_Temperature | |
532 float temperatureThisCall; | |
533 float temperature; | |
534 | |
535 SDivetime TotalDivetime = {0,0,0,0}; | |
536 SDivetime LastDivetime = {0,0,0,0}; | |
537 | |
538 uint16_t tempWinX0; | |
539 uint16_t tempWinY0; | |
540 | |
541 tempWinX0 = tXc1->WindowX0; | |
542 tempWinY0 = tXc1->WindowY0; | |
543 | |
544 tXc1->WindowX0 = 440; // rechte Seite | |
545 | |
546 switch(tX_selection_customview) | |
547 { | |
548 case CVIEW_T3_Temperature: | |
549 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Temperature); | |
550 GFX_write_string(&FontT42,tXc1,text,0); | |
551 | |
552 // mean value | |
553 temperatureThisCall = unit_temperature_float(stateUsed->lifeData.temperature_celsius); | |
554 temperature = (temperatureThisCall + temperatureLastCall[0] + temperatureLastCall[1] + temperatureLastCall[2]) / 4.0f; | |
555 idTemperatureLastCall++; | |
556 if(idTemperatureLastCall >= 3) | |
557 idTemperatureLastCall = 0; | |
558 temperatureLastCall[idTemperatureLastCall] = temperatureThisCall; | |
559 textpointer = snprintf(text,TEXTSIZE,"\020\003\016%01.0f\016\016\140",temperature); // "\016\016%01.1f `" + C or F | |
560 if(settingsGetPointer()->nonMetricalSystem == 0) | |
561 text[textpointer++] = 'C'; | |
562 else | |
563 text[textpointer++] = 'F'; | |
564 text[textpointer++] = 0; | |
565 t3_basics_colorscheme_mod(text); | |
566 GFX_write_string(&FontT105,tXc1,text,1); | |
567 break; | |
568 | |
569 case CVIEW_T3_ApnoeSurfaceInfo: | |
570 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Divetime); | |
571 GFX_write_string(&FontT42,tXc1,text,0); | |
572 | |
573 TotalDivetime.Total = stateUsed->lifeData.dive_time_seconds_without_surface_time; | |
574 TotalDivetime.Minutes = TotalDivetime.Total / 60; | |
575 TotalDivetime.Seconds = TotalDivetime.Total - ( TotalDivetime.Minutes * 60 ); | |
576 | |
577 LastDivetime.Total = stateUsed->lifeData.apnea_last_dive_time_seconds; | |
578 LastDivetime.Minutes = LastDivetime.Total / 60; | |
579 LastDivetime.Seconds = LastDivetime.Total - ( LastDivetime.Minutes * 60 ); | |
580 | |
581 tXc1->WindowY0 = 100; // obere Zeile | |
582 | |
583 snprintf(text,TEXTSIZE,"\020\016%u:%02u",LastDivetime.Minutes, LastDivetime.Seconds); | |
584 t3_basics_colorscheme_mod(text); | |
585 GFX_write_string(&FontT105,tXc1,text,0); | |
586 | |
587 snprintf(text,TEXTSIZE,"\032\002%c%c",TXT_2BYTE, TXT2BYTE_ApneaLast); | |
588 GFX_write_string(&FontT42,tXc1,text,0); | |
589 | |
590 tXc1->WindowY0 = tempWinY0; // wieder unten | |
591 | |
592 snprintf(text,TEXTSIZE,"\020\016%u:%02u",TotalDivetime.Minutes, TotalDivetime.Seconds); | |
593 t3_basics_colorscheme_mod(text); | |
594 GFX_write_string(&FontT105,tXc1,text,0); | |
595 | |
596 snprintf(text,TEXTSIZE,"\032\002%c%c",TXT_2BYTE, TXT2BYTE_ApneaTotal); | |
597 GFX_write_string(&FontT42,tXc1,text,0); | |
598 break; | |
599 } | |
600 | |
601 tXc1->WindowX0 = tempWinX0; | |
602 tXc1->WindowY0 = tempWinY0; | |
603 | |
604 } | |
605 | |
606 | |
607 void t3_basics_refresh_customview(float depth, uint8_t tX_selection_customview, GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXc1, GFX_DrawCfgWindow* tXc2, uint8_t mode) | |
608 { | |
609 char text[512]; | |
610 uint16_t textpointer = 0; | |
611 | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
612 SSettings* pSettings; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
613 pSettings = settingsGetPointer(); |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
614 |
38 | 615 // CVIEW_T3_Decostop and CVIEW_T3_TTS |
616 const SDecoinfo * pDecoinfo; | |
617 if(stateUsed->diveSettings.deco_type.ub.standard == GF_MODE) | |
618 pDecoinfo = &stateUsed->decolistBuehlmann; | |
619 else | |
620 pDecoinfo = &stateUsed->decolistVPM; | |
621 | |
622 // CVIEW_T3_Decostop | |
623 uint16_t nextstopLengthSeconds = 0; | |
624 uint8_t nextstopDepthMeter = 0; | |
625 SDivetime SafetyStopTime = {0,0,0,0}; | |
626 | |
627 // CVIEW_T3_ppO2andGas | |
628 uint8_t oxygen_percentage = 0; | |
629 | |
630 // CVIEW_T3_Temperature | |
631 float temperatureThisCall; | |
632 float temperature; | |
633 | |
634 // CVIEW_T3_GasList | |
635 float fPpO2limitHigh, fPpO2limitLow, fPpO2ofGasAtThisDepth; | |
636 const SGasLine * pGasLine; | |
637 uint8_t oxygen, helium; | |
638 uint8_t lineNumber; | |
639 | |
640 // CVIEW_T3_StopWatch | |
641 SDivetime Stopwatch = {0,0,0,0}; | |
642 float fAverageDepth, fAverageDepthAbsolute; | |
643 | |
644 | |
645 uint16_t tempWinX0; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
646 uint16_t tempWinX1; |
38 | 647 uint16_t tempWinY0; |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
648 uint16_t tempWinY1; |
38 | 649 uint16_t tempWinC2X0; |
650 uint16_t tempWinC2Tab; | |
651 | |
652 tempWinX0 = tXc1->WindowX0; | |
653 tempWinY0 = tXc1->WindowY0; | |
654 tempWinC2X0 = tXc2->WindowX0; | |
655 tempWinC2Tab = tXc2->WindowTab; | |
656 | |
657 switch(tX_selection_customview) | |
658 { | |
659 case CVIEW_T3_ApnoeSurfaceInfo: | |
660 snprintf(text,TEXTSIZE,"\032\f%c",TXT_MaxDepth); | |
661 GFX_write_string(&FontT42,tXc1,text,0); | |
662 | |
663 tXc1->WindowY0 = 100; // obere Zeile | |
664 | |
665 snprintf(text,TEXTSIZE,"\020\016%01.1f",unit_depth_float(stateUsed->lifeData.apnea_last_max_depth_meter)); | |
666 t3_basics_colorscheme_mod(text); | |
667 GFX_write_string(&FontT105,tXc1,text,0); | |
668 | |
669 tXc1->WindowY0 = tempWinY0; // wieder unten | |
670 | |
671 snprintf(text,TEXTSIZE,"\020\016%01.1f",unit_depth_float(stateUsed->lifeData.apnea_total_max_depth_meter)); | |
672 t3_basics_colorscheme_mod(text); | |
673 GFX_write_string(&FontT105,tXc1,text,0); | |
674 break; | |
675 | |
676 case CVIEW_T3_StopWatch: | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
677 |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
678 tempWinX0 = tXc1->WindowX0; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
679 tempWinY0 = tXc1->WindowY0; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
680 tempWinX1 = tXc1->WindowX1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
681 tempWinY1 = tXc1->WindowY1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
682 |
38 | 683 Stopwatch.Total = timer_Stopwatch_GetTime(); |
684 Stopwatch.Minutes = Stopwatch.Total / 60; | |
685 Stopwatch.Seconds = Stopwatch.Total - ( Stopwatch.Minutes * 60 ); | |
686 fAverageDepth = timer_Stopwatch_GetAvarageDepth_Meter(); | |
687 fAverageDepthAbsolute = stateUsed->lifeData.average_depth_meter; | |
688 | |
689 snprintf(text,TEXTSIZE,"\032\f%c",TXT_AvgDepth); | |
690 GFX_write_string(&FontT42,tXc1,text,0); | |
691 snprintf(text,TEXTSIZE,"\030\003\016%01.1f",unit_depth_float(fAverageDepthAbsolute)); | |
692 GFX_write_string(&FontT105,tXc1,text,0); | |
693 | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
694 |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
695 |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
696 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
697 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
698 tXc1->WindowX0 = 480; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
699 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
700 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
701 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
702 tXc1->WindowX1 = 320; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
703 tXc1->WindowY0 = t3c1.WindowY0; /* select customer window */ |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
704 } |
38 | 705 // 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
|
706 |
38 | 707 snprintf(text,TEXTSIZE,"\032\f%c", TXT_Stopwatch); |
708 GFX_write_string(&FontT42,tXc1,text,0); | |
709 snprintf(text,TEXTSIZE,"\030\016%01.1f",unit_depth_float(fAverageDepth)); | |
710 GFX_write_string(&FontT105,tXc1,text,0); | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
711 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
712 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
713 tXc1->WindowY0 = 100; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
714 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
715 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
716 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
717 tXc1->WindowY1 -= 100; /* jump to upper of two lines */ |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
718 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
719 |
38 | 720 snprintf(text,TEXTSIZE,"\030%u:\016\016%02u",Stopwatch.Minutes, Stopwatch.Seconds); |
721 GFX_write_string(&FontT105,tXc1,text,0); | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
722 |
38 | 723 tXc1->WindowX0 = tempWinX0; |
724 tXc1->WindowY0 = tempWinY0; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
725 tXc1->WindowX1 = tempWinX1; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
726 tXc1->WindowY1 = tempWinY1; |
38 | 727 break; |
728 | |
729 case CVIEW_T3_GasList: | |
730 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE, TXT2BYTE_Gaslist); | |
731 GFX_write_string(&FontT42,tXc1,text,0); | |
732 | |
733 textpointer = 0; | |
734 tempWinC2X0 = tXc2->WindowX0; | |
735 tempWinC2Tab = tXc2->WindowTab; | |
736 | |
737 tXc2->WindowX0 = 0; | |
738 tXc2->WindowTab = 800/2; | |
739 | |
740 pGasLine = settingsGetPointer()->gas; | |
741 if(actualLeftMaxDepth(stateUsed)) | |
742 fPpO2limitHigh = (float)(settingsGetPointer()->ppO2_max_deco) / 100; | |
743 else | |
744 fPpO2limitHigh = (float)(settingsGetPointer()->ppO2_max_std) / 100; | |
745 fPpO2limitLow = (float)(settingsGetPointer()->ppO2_min) / 100; | |
746 for(int gasId=1;gasId<=NUM_GASES;gasId++) | |
747 { | |
748 textpointer = 0; | |
749 lineNumber = gasId; | |
750 if(gasId > 3) | |
751 { | |
752 text[textpointer++] = '\t'; | |
753 lineNumber = gasId - 3; | |
754 } | |
755 fPpO2ofGasAtThisDepth = (stateUsed->lifeData.pressure_ambient_bar - WATER_VAPOUR_PRESSURE) * pGasLine[gasId].oxygen_percentage / 100; | |
756 if(pGasLine[gasId].note.ub.active == 0) | |
757 strcpy(&text[textpointer++],"\021"); | |
758 else if((fPpO2ofGasAtThisDepth > fPpO2limitHigh) || (fPpO2ofGasAtThisDepth < fPpO2limitLow)) | |
759 strcpy(&text[textpointer++],"\025"); | |
760 else | |
761 strcpy(&text[textpointer++],"\030"); | |
762 | |
763 text[textpointer++] = ' '; | |
764 oxygen = pGasLine[gasId].oxygen_percentage; | |
765 helium = pGasLine[gasId].helium_percentage; | |
766 textpointer += write_gas(&text[textpointer], oxygen, helium); | |
767 GFX_write_string(&FontT42, tXc2, text, lineNumber); | |
768 } | |
769 break; | |
770 | |
771 case CVIEW_T3_Temperature: | |
772 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Temperature); | |
773 GFX_write_string(&FontT42,tXc1,text,0); | |
774 // mean value | |
775 temperatureThisCall = unit_temperature_float(stateUsed->lifeData.temperature_celsius); | |
776 temperature = (temperatureThisCall + temperatureLastCall[0] + temperatureLastCall[1] + temperatureLastCall[2]) / 4.0f; | |
777 idTemperatureLastCall++; | |
778 if(idTemperatureLastCall >= 3) | |
779 idTemperatureLastCall = 0; | |
780 temperatureLastCall[idTemperatureLastCall] = temperatureThisCall; | |
781 textpointer = snprintf(text,TEXTSIZE,"\030\003\016%01.1f \140",temperature); // "\016\016%01.1f `" + C or F | |
782 if(settingsGetPointer()->nonMetricalSystem == 0) | |
783 text[textpointer++] = 'C'; | |
784 else | |
785 text[textpointer++] = 'F'; | |
786 text[textpointer++] = 0; | |
787 GFX_write_string(&FontT105,tXc1,text,0); | |
788 break; | |
789 | |
790 case CVIEW_Compass: | |
791 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE, TXT2BYTE_Compass); | |
792 GFX_write_string(&FontT42,tXc1,text,0); | |
793 snprintf(text,100,"\030\003%03i`",(uint16_t)stateUsed->lifeData.compass_heading); | |
794 GFX_write_string(&FontT105,tXc1,text,0); | |
795 t3_basics_compass(tXscreen, (uint16_t)stateUsed->lifeData.compass_heading, stateUsed->diveSettings.compassHeading); | |
796 break; | |
797 | |
798 case CVIEW_T3_Decostop: | |
799 default: | |
800 // decostop | |
801 if(pDecoinfo->output_time_to_surface_seconds) | |
802 { | |
803 tHome_findNextStop(pDecoinfo->output_stop_length_seconds, &nextstopDepthMeter, &nextstopLengthSeconds); | |
804 } | |
805 else | |
806 { | |
807 nextstopDepthMeter = 0; | |
808 nextstopLengthSeconds = 0; | |
809 } | |
810 | |
811 SafetyStopTime.Total = timer_Safetystop_GetCountDown(); | |
812 SafetyStopTime.Minutes = SafetyStopTime.Total / 60; | |
813 SafetyStopTime.Seconds = SafetyStopTime.Total - (SafetyStopTime.Minutes * 60); | |
814 | |
815 if(nextstopDepthMeter) | |
816 { | |
817 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Decostop); | |
818 GFX_write_string(&FontT42,tXc1,text,0); | |
819 | |
820 textpointer = 0; | |
821 snprintf(&text[textpointer],TEXTSIZE,"\020\003%u%c%c %u'" | |
822 , unit_depth_integer(nextstopDepthMeter) | |
823 , unit_depth_char1_T105() | |
824 , unit_depth_char2_T105() | |
825 , (nextstopLengthSeconds+59)/60); | |
826 // old without feet hw 170703 snprintf(&text[textpointer],TEXTSIZE,"\020\003%um %u'",nextstopDepthMeter,(nextstopLengthSeconds+59)/60); | |
827 t3_basics_colorscheme_mod(text); | |
828 GFX_write_string(&FontT105,tXc1,text,1); | |
829 } | |
830 else if(SafetyStopTime.Total && (depth > timer_Safetystop_GetDepthUpperLimit())) | |
831 { | |
832 textpointer = 0; | |
833 snprintf(&text[textpointer],TEXTSIZE,"\032\f%c%c",TXT_2BYTE,TXT2BYTE_SafetyStop2); | |
834 GFX_write_string(&FontT42,tXc1,text,0); | |
835 | |
836 textpointer = 0; | |
837 snprintf(&text[textpointer],TEXTSIZE,"\020\003\016%u:%02u",SafetyStopTime.Minutes,SafetyStopTime.Seconds); | |
838 t3_basics_colorscheme_mod(text); | |
839 GFX_write_string(&FontT105,tXc1,text,1); | |
840 } | |
841 else // NDL | |
842 { | |
843 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Nullzeit); | |
844 GFX_write_string(&FontT42,tXc1,text,0); | |
845 if(pDecoinfo->output_ndl_seconds < 1000 * 60) | |
846 snprintf(text,TEXTSIZE,"\020\003%i'",pDecoinfo->output_ndl_seconds/60); | |
847 else | |
848 snprintf(text,TEXTSIZE,"\020\003%ih",pDecoinfo->output_ndl_seconds/3600); | |
849 t3_basics_colorscheme_mod(text); | |
850 GFX_write_string(&FontT105,tXc1,text,1); | |
851 } | |
852 break; | |
853 | |
854 case CVIEW_sensors: | |
855 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE,TXT2BYTE_O2monitor); | |
856 GFX_write_string(&FontT42,tXc1,text,0); | |
857 | |
858 for(int i=0;i<3;i++) | |
859 { | |
860 textpointer = 0; | |
861 text[textpointer++] = '\030'; | |
862 if(i==1) | |
863 text[textpointer++] = '\001'; | |
864 else if(i==2) | |
865 text[textpointer++] = '\002'; | |
866 if(stateUsed->diveSettings.ppo2sensors_deactivated & (1<<i)) | |
867 { | |
868 text[textpointer++] = '\031'; | |
869 text[textpointer++] = ' '; | |
870 text[textpointer++] = '-'; | |
871 text[textpointer++] = ' '; | |
872 } | |
873 else | |
874 { | |
875 if(stateUsed->warnings.sensorOutOfBounds[i]) | |
876 text[textpointer++] = '\025'; | |
877 textpointer += snprintf(&text[textpointer],TEXTSIZE,"%.1f",stateUsed->lifeData.ppO2Sensor_bar[i]); | |
878 } | |
879 GFX_write_string(&FontT144,tXc1,text,1); | |
880 } | |
881 break; | |
882 | |
883 case CVIEW_T3_MaxDepth: | |
884 snprintf(text,TEXTSIZE,"\032\f%c",TXT_MaxDepth); | |
885 GFX_write_string(&FontT42,tXc1,text,0); | |
886 snprintf(text,TEXTSIZE,"\020\003\016%01.1f",unit_depth_float(stateUsed->lifeData.max_depth_meter)); | |
887 t3_basics_colorscheme_mod(text); | |
888 GFX_write_string(&FontT105,tXc1,text,1); | |
889 break; | |
890 | |
891 case CVIEW_T3_TTS: | |
892 snprintf(text,TEXTSIZE,"\032\f%c",TXT_TTS); | |
893 GFX_write_string(&FontT42,tXc1,text,0); | |
894 if(pDecoinfo->output_time_to_surface_seconds) | |
895 { | |
896 if(pDecoinfo->output_time_to_surface_seconds < 1000 * 60) | |
897 snprintf(text,TEXTSIZE,"\020\003\002%i'",(pDecoinfo->output_time_to_surface_seconds + 30)/ 60); | |
898 else | |
899 snprintf(text,TEXTSIZE,"\020\003\002%ih",pDecoinfo->output_time_to_surface_seconds / 3600); | |
900 t3_basics_colorscheme_mod(text); | |
901 GFX_write_string(&FontT105,tXc1,text,1); | |
902 } | |
903 break; | |
904 | |
905 case CVIEW_T3_ppO2andGas: | |
906 snprintf(text,TEXTSIZE,"\032\f%c",TXT_ppO2); | |
907 GFX_write_string(&FontT42,tXc1,text,0); | |
908 snprintf(text,TEXTSIZE,"\020\003%01.2f",stateUsed->lifeData.ppO2); | |
909 t3_basics_colorscheme_mod(text); | |
910 GFX_write_string(&FontT105,tXc1,text,1); | |
911 | |
912 textpointer = 0; | |
913 text[textpointer++] = '\020'; | |
914 text[textpointer++] = '\003'; | |
915 oxygen_percentage = 100; | |
916 oxygen_percentage -= stateUsed->lifeData.actualGas.nitrogen_percentage; | |
917 oxygen_percentage -= stateUsed->lifeData.actualGas.helium_percentage; | |
918 text[textpointer++] = '\002'; | |
919 tHome_gas_writer(oxygen_percentage,stateUsed->lifeData.actualGas.helium_percentage,&text[textpointer]); | |
920 //textpointer = snprintf(&text[textpointer],TEXTSIZE,"\020\002%02u/%02u",oxygen_percentage, stateUsed->lifeData.actualGas.helium_percentage); | |
921 t3_basics_colorscheme_mod(text); | |
922 GFX_write_string(&FontT48,tXc1,text,1); | |
923 break; | |
924 } | |
925 tXc1->WindowX0 = tempWinX0; | |
926 tXc1->WindowY0 = tempWinY0; | |
927 tXc2->WindowX0 = tempWinC2X0; | |
928 tXc2->WindowTab = tempWinC2Tab; | |
929 } | |
930 | |
931 | |
932 uint8_t t3_test_customview_warnings(void) | |
933 { | |
934 uint8_t count = 0; | |
935 | |
936 count = 0; | |
937 count += stateUsed->warnings.decoMissed; | |
938 count += stateUsed->warnings.ppO2Low; | |
939 count += stateUsed->warnings.ppO2High; | |
940 //count += stateUsed->warnings.lowBattery; | |
941 count += stateUsed->warnings.sensorLinkLost; | |
942 count += stateUsed->warnings.fallback; | |
943 | |
944 return count; | |
945 } | |
946 | |
947 //void t3_show_customview_warnings(GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXl1, GFX_DrawCfgWindow* tXr1, uint8_t mode) | |
948 void t3_basics_show_customview_warnings(GFX_DrawCfgWindow* tXc1) | |
949 { | |
950 char text[256], textMain[256]; | |
951 uint8_t textpointer, textpointerMain, lineFree, more; | |
952 | |
953 snprintf(text,TEXTSIZE,"\025\f%c",TXT_Warning); | |
954 GFX_write_string(&FontT42,&t3c1,text,0); | |
955 | |
956 lineFree = 1; | |
957 more = 0; | |
958 | |
959 textpointerMain = 0; | |
960 textMain[textpointerMain++] = '\025'; | |
961 textMain[textpointerMain++] = '\003'; | |
962 | |
963 textpointer = 0; | |
964 | |
965 text[textpointer++] = '\021'; | |
966 text[textpointer++] = TXT_2BYTE; | |
967 text[textpointer++] = TXT2BYTE_WarnDecoMissed; | |
968 if(stateUsed->warnings.decoMissed) | |
969 { | |
970 text[textpointer - 3] = '\025'; | |
971 if(lineFree) | |
972 { | |
973 textMain[textpointerMain++] = TXT_2BYTE; | |
974 textMain[textpointerMain++] = text[textpointer - 1]; | |
975 textMain[textpointerMain] = 0; | |
976 lineFree--; | |
977 } | |
978 else | |
979 { | |
980 more++; | |
981 } | |
982 } | |
983 | |
984 text[textpointer++] = '\t'; | |
985 text[textpointer++] = '\021'; | |
986 text[textpointer++] = TXT_2BYTE; | |
987 text[textpointer++] = TXT2BYTE_WarnPPO2Low; | |
988 if(stateUsed->warnings.ppO2Low) | |
989 { | |
990 text[textpointer - 3] = '\025'; | |
991 if(lineFree) | |
992 { | |
993 textMain[textpointerMain++] = TXT_2BYTE; | |
994 textMain[textpointerMain++] = text[textpointer - 1]; | |
995 textMain[textpointerMain] = 0; | |
996 lineFree--; | |
997 } | |
998 else | |
999 { | |
1000 more++; | |
1001 } | |
1002 } | |
1003 | |
1004 text[textpointer++] = '\n'; | |
1005 text[textpointer++] = '\r'; | |
1006 text[textpointer++] = '\021'; | |
1007 text[textpointer++] = TXT_2BYTE; | |
1008 text[textpointer++] = TXT2BYTE_WarnPPO2High; | |
1009 if(stateUsed->warnings.ppO2High) | |
1010 { | |
1011 text[textpointer - 3] = '\025'; | |
1012 if(lineFree) | |
1013 { | |
1014 textMain[textpointerMain++] = TXT_2BYTE; | |
1015 textMain[textpointerMain++] = text[textpointer - 1]; | |
1016 textMain[textpointerMain] = 0; | |
1017 lineFree--; | |
1018 } | |
1019 else | |
1020 { | |
1021 more++; | |
1022 } | |
1023 } | |
1024 | |
1025 text[textpointer++] = '\t'; | |
1026 text[textpointer++] = '\021'; | |
1027 text[textpointer++] = TXT_2BYTE; | |
1028 text[textpointer++] = TXT2BYTE_WarnFallback; | |
1029 if(stateUsed->warnings.fallback) | |
1030 { | |
1031 text[textpointer - 3] = '\025'; | |
1032 if(lineFree) | |
1033 { | |
1034 textMain[textpointerMain++] = TXT_2BYTE; | |
1035 textMain[textpointerMain++] = text[textpointer - 1]; | |
1036 textMain[textpointerMain] = 0; | |
1037 lineFree--; | |
1038 } | |
1039 else | |
1040 { | |
1041 more++; | |
1042 } | |
1043 } | |
1044 | |
1045 text[textpointer++] = '\n'; | |
1046 text[textpointer++] = '\r'; | |
1047 text[textpointer++] = '\021'; | |
1048 text[textpointer++] = TXT_2BYTE; | |
1049 text[textpointer++] = TXT2BYTE_WarnSensorLinkLost; | |
1050 if(stateUsed->warnings.sensorLinkLost) | |
1051 { | |
1052 text[textpointer - 3] = '\025'; | |
1053 if(lineFree) | |
1054 { | |
1055 textMain[textpointerMain++] = TXT_2BYTE; | |
1056 textMain[textpointerMain++] = text[textpointer - 1]; | |
1057 textMain[textpointerMain] = 0; | |
1058 lineFree--; | |
1059 } | |
1060 else | |
1061 { | |
1062 more++; | |
1063 } | |
1064 } | |
1065 | |
1066 /* | |
1067 text[textpointer++] = '\t'; | |
1068 text[textpointer++] = '\021'; | |
1069 text[textpointer++] = TXT_2BYTE; | |
1070 text[textpointer++] = TXT2BYTE_WarnBatteryLow; | |
1071 if(stateUsed->warnings.lowBattery) | |
1072 { | |
1073 text[textpointer - 3] = '\025'; | |
1074 if(lineFree) | |
1075 { | |
1076 textMain[textpointerMain++] = TXT_2BYTE; | |
1077 textMain[textpointerMain++] = text[textpointer - 1]; | |
1078 textMain[textpointerMain] = 0; | |
1079 lineFree--; | |
1080 } | |
1081 else | |
1082 { | |
1083 more++; | |
1084 } | |
1085 } | |
1086 */ | |
1087 text[textpointer] = 0; | |
1088 /* | |
1089 if(more) | |
1090 { | |
1091 text[textpointer++] = '\002'; | |
1092 text[textpointer++] = '+'; | |
1093 if(more < 10) | |
1094 text[textpointer++] = '0' + more; | |
1095 else | |
1096 text[textpointer++] = 'X'; | |
1097 text[textpointer] = 0; | |
1098 } | |
1099 */ | |
1100 GFX_write_string(&FontT48,&t3c1,textMain,1); | |
1101 if(more) | |
1102 { | |
1103 GFX_write_string(&FontT48,&t3c2,text,1); | |
1104 } | |
1105 } | |
1106 | |
1107 | |
1108 void t3_change_customview(void) | |
1109 { | |
1110 t3_basics_change_customview(&t3_selection_customview, t3_customviews); | |
1111 } | |
1112 | |
1113 | |
1114 void t3_basics_change_customview(uint8_t *tX_selection_customview, const uint8_t *tX_customviews) | |
1115 { | |
1116 const SDecoinfo * pDecoinfo; | |
1117 if(stateUsed->diveSettings.deco_type.ub.standard == GF_MODE) | |
1118 pDecoinfo = &stateUsed->decolistBuehlmann; | |
1119 else | |
1120 pDecoinfo = &stateUsed->decolistVPM; | |
1121 | |
1122 const uint8_t *pViews; | |
1123 pViews = tX_customviews; | |
1124 | |
1125 while((*pViews != CVIEW_T3_END) && (*pViews != *tX_selection_customview)) | |
1126 {pViews++;} | |
1127 | |
1128 if(*pViews < CVIEW_T3_END) | |
1129 pViews++; | |
1130 | |
1131 if((*pViews == CVIEW_T3_TTS) && !pDecoinfo->output_time_to_surface_seconds) | |
1132 pViews++; | |
1133 | |
1134 if(*pViews == CVIEW_T3_END) | |
1135 { | |
1136 *tX_selection_customview = tX_customviews[0]; | |
1137 } | |
1138 else | |
1139 *tX_selection_customview = *pViews; | |
1140 } | |
1141 | |
1142 | |
1143 void t3_basics_colorscheme_mod(char *text) | |
1144 { | |
1145 if((text[0] == '\020') && !GFX_is_colorschemeDiveStandard()) | |
1146 { | |
1147 text[0] = '\027'; | |
1148 } | |
1149 } | |
1150 | |
1151 | |
1152 point_t t3_compass_circle(uint8_t id, uint16_t degree) | |
1153 { | |
1154 float fCos, fSin; | |
1155 const float piMult = ((2 * 3.14159) / 360); | |
1156 // const int radius[4] = {95,105,115,60}; | |
1157 const int radius[4] = {85,95,105,90}; | |
1158 const point_t offset = {.x = 600, .y = 116}; | |
1159 | |
1160 static point_t r[4][360] = { 0 }; | |
1161 | |
1162 if(r[0][0].y == 0) | |
1163 { | |
1164 for(int i=0;i<360;i++) | |
1165 { | |
1166 fCos = cos(i * piMult); | |
1167 fSin = sin(i * piMult); | |
1168 for(int j=0;j<4;j++) | |
1169 { | |
1170 r[j][i].x = offset.x + (int)(fSin * radius[j]); | |
1171 r[j][i].y = offset.y + (int)(fCos * radius[j]); | |
1172 } | |
1173 } | |
1174 } | |
1175 if(id > 3) id = 0; | |
1176 if(degree > 359) degree = 0; | |
1177 return r[id][degree]; | |
1178 } | |
1179 | |
1180 | |
1181 void t3_basics_compass(GFX_DrawCfgScreen *tXscreen, uint16_t ActualHeading, uint16_t UserSetHeading) | |
1182 { | |
1183 uint16_t LineHeading; | |
1184 point_t center; | |
1185 static int32_t LastHeading = 0; | |
1186 int32_t newHeading = 0; | |
1187 int32_t diff = 0; | |
1188 int32_t diff2 = 0; | |
1189 | |
1190 int32_t diffAbs = 0; | |
1191 int32_t diffAbs2 = 0; | |
1192 | |
1193 newHeading = ActualHeading; | |
1194 | |
1195 diff = newHeading - LastHeading; | |
1196 | |
1197 if(newHeading < LastHeading) | |
1198 diff2 = newHeading + 360 - LastHeading; | |
1199 else | |
1200 diff2 = newHeading - 360 - LastHeading; | |
1201 | |
1202 diffAbs = diff; | |
1203 if(diffAbs < 0) | |
1204 diffAbs *= -1; | |
1205 | |
1206 diffAbs2 = diff2; | |
1207 if(diffAbs2 < 0) | |
1208 diffAbs2 *= -1; | |
1209 | |
1210 if(diffAbs <= diffAbs2) | |
1211 newHeading = LastHeading + (diff / 2); | |
1212 else | |
1213 newHeading = LastHeading + (diff2 / 2); | |
1214 | |
1215 if(newHeading < 0) | |
1216 newHeading += 360; | |
1217 else | |
1218 if(newHeading >= 360) | |
1219 newHeading -= 360; | |
1220 | |
1221 LastHeading = newHeading; | |
1222 ActualHeading = newHeading; | |
1223 | |
1224 if (ActualHeading < 90) | |
1225 ActualHeading += 360; | |
1226 | |
1227 while(ActualHeading > 359) ActualHeading -= 360; | |
1228 | |
1229 LineHeading = 360 - ActualHeading; | |
1230 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(0,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font030); // North | |
1231 LineHeading += 90; | |
1232 if(LineHeading > 359) LineHeading -= 360; | |
1233 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); // Maintick | |
1234 LineHeading += 90; | |
1235 if(LineHeading > 359) LineHeading -= 360; | |
1236 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1237 LineHeading += 90; | |
1238 if(LineHeading > 359) LineHeading -= 360; | |
1239 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1240 | |
1241 LineHeading = 360 - ActualHeading; | |
1242 LineHeading += 45; | |
1243 if(LineHeading > 359) LineHeading -= 360; | |
1244 GFX_draw_thick_line(5,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); // Subtick | |
1245 LineHeading += 90; | |
1246 if(LineHeading > 359) LineHeading -= 360; | |
1247 GFX_draw_thick_line(5,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1248 LineHeading += 90; | |
1249 if(LineHeading > 359) LineHeading -= 360; | |
1250 GFX_draw_thick_line(5,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1251 LineHeading += 90; | |
1252 if(LineHeading > 359) LineHeading -= 360; | |
1253 GFX_draw_thick_line(5,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1254 | |
1255 LineHeading = 360 - ActualHeading; | |
1256 LineHeading += 22; | |
1257 if(LineHeading > 359) LineHeading -= 360; | |
1258 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); // Subtick | |
1259 LineHeading += 45; | |
1260 if(LineHeading > 359) LineHeading -= 360; | |
1261 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1262 LineHeading += 45; | |
1263 if(LineHeading > 359) LineHeading -= 360; | |
1264 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1265 LineHeading += 45; | |
1266 if(LineHeading > 359) LineHeading -= 360; | |
1267 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1268 LineHeading += 45; | |
1269 if(LineHeading > 359) LineHeading -= 360; | |
1270 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); // Subtick | |
1271 LineHeading += 45; | |
1272 if(LineHeading > 359) LineHeading -= 360; | |
1273 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1274 LineHeading += 45; | |
1275 if(LineHeading > 359) LineHeading -= 360; | |
1276 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1277 LineHeading += 45; | |
1278 if(LineHeading > 359) LineHeading -= 360; | |
1279 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading), t3_compass_circle(2,LineHeading), CLUT_Font031); | |
1280 | |
1281 if(UserSetHeading) | |
1282 { | |
1283 LineHeading = UserSetHeading + 360 - ActualHeading; | |
1284 if(LineHeading > 359) LineHeading -= 360; | |
1285 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(3,LineHeading), t3_compass_circle(2,LineHeading), CLUT_CompassUserHeadingTick); | |
1286 | |
1287 // R�ckpeilung, User Back Heading | |
1288 LineHeading = UserSetHeading + 360 + 180 - ActualHeading; | |
1289 if(LineHeading > 359) LineHeading -= 360; | |
1290 if(LineHeading > 359) LineHeading -= 360; | |
1291 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(3,LineHeading), t3_compass_circle(2,LineHeading), CLUT_CompassUserBackHeadingTick); | |
1292 } | |
1293 | |
1294 center.x = 600; | |
1295 center.y = 116; | |
1296 GFX_draw_circle(tXscreen, center, 106, CLUT_Font030); | |
1297 GFX_draw_circle(tXscreen, center, 107, CLUT_Font030); | |
1298 GFX_draw_circle(tXscreen, center, 108, CLUT_Font030); | |
1299 } |