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