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