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