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