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