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