Mercurial > public > ostc4
annotate Discovery/Src/t3.c @ 682:8775d3dc6325 Betatest
Bugfix low ppO2 warning in bailout mode:
the code has different sources for divesettings (real and simulated). The ppo2 calculation code used the pointer to the real structure. As result in simulation mode an error occured caused by the ppo2 calculation which was not aware that a bailout happened (because the real structure was references instead of the simulator ones). The problem has been fixed by using the "stateUsed" pointer which is refering to the structure currenty in use.
author | Ideenmodellierer |
---|---|
date | Mon, 25 Apr 2022 21:15:01 +0200 |
parents | 1b995079c045 |
children | 8adf9b8fc7fa |
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 { | |
672 case StDBEAR: snprintf(text,TEXTSIZE,"\a\003\001%c%c", TXT_2BYTE, TXT2BYTE_DiveBearingQ); | |
673 GFX_write_string_color(&FontT42,tXr1,text,1,CLUT_WarningYellow); | |
674 break; | |
675 case StDRAVG: snprintf(text,TEXTSIZE,"\a\003\001%c%c", TXT_2BYTE, TXT2BYTE_DiveResetAvgQ); | |
676 GFX_write_string_color(&FontT42,tXr1,text,1,CLUT_WarningYellow); | |
677 break; | |
38 | 678 |
518 | 679 case StDMGAS: |
680 textPointer = 0; | |
681 text[textPointer++] = '\a'; | |
682 text[textPointer++] = '\001'; | |
683 text[textPointer++] = ' '; | |
684 textPointer += tHome_gas_writer(stateUsed->diveSettings.gas[actualBetterGasId()].oxygen_percentage,stateUsed->diveSettings.gas[actualBetterGasId()].helium_percentage,&text[textPointer]); | |
685 text[textPointer++] = '?'; | |
686 text[textPointer++] = ' '; | |
687 text[textPointer++] = 0; | |
688 GFX_write_string_color(&FontT42,tXr1,text,1,CLUT_WarningYellow); | |
689 break; | |
613 | 690 |
691 case StDMARK: snprintf(text,TEXTSIZE,"\a\003\001%c%c", TXT_2BYTE, TXT2BYTE_SetMarkerShort); | |
692 GFX_write_string_color(&FontT42,tXr1,text,1,CLUT_WarningYellow); | |
693 break; | |
694 | |
619
8fa2de4414a8
Added t3 quick menu for marker synchronisation:
Ideenmodellierer
parents:
613
diff
changeset
|
695 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
|
696 GFX_write_string_color(&FontT42,tXr1,text,1,CLUT_WarningYellow); |
8fa2de4414a8
Added t3 quick menu for marker synchronisation:
Ideenmodellierer
parents:
613
diff
changeset
|
697 break; |
8fa2de4414a8
Added t3 quick menu for marker synchronisation:
Ideenmodellierer
parents:
613
diff
changeset
|
698 |
633
68d95049f11a
Added menu structure to allow ppo2 modification in simulator mode:
Ideenmodellierer
parents:
624
diff
changeset
|
699 #ifdef ENABLE_T3_PPO_SIM |
68d95049f11a
Added menu structure to allow ppo2 modification in simulator mode:
Ideenmodellierer
parents:
624
diff
changeset
|
700 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
|
701 GFX_write_string_color(&FontT42,tXr1,text,1,CLUT_WarningYellow); |
68d95049f11a
Added menu structure to allow ppo2 modification in simulator mode:
Ideenmodellierer
parents:
624
diff
changeset
|
702 break; |
68d95049f11a
Added menu structure to allow ppo2 modification in simulator mode:
Ideenmodellierer
parents:
624
diff
changeset
|
703 case StDSIM2: 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 StDSIM3: snprintf(text,TEXTSIZE,"\a\003\001PPO S1 +"); |
68d95049f11a
Added menu structure to allow ppo2 modification in simulator mode:
Ideenmodellierer
parents:
624
diff
changeset
|
707 GFX_write_string_color(&FontT42,tXr1,text,1,CLUT_WarningYellow); |
68d95049f11a
Added menu structure to allow ppo2 modification in simulator mode:
Ideenmodellierer
parents:
624
diff
changeset
|
708 break; |
68d95049f11a
Added menu structure to allow ppo2 modification in simulator mode:
Ideenmodellierer
parents:
624
diff
changeset
|
709 case StDSIM4: 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 StDSIM5: snprintf(text,TEXTSIZE,"\a\003\001PPO S2 +"); |
68d95049f11a
Added menu structure to allow ppo2 modification in simulator mode:
Ideenmodellierer
parents:
624
diff
changeset
|
713 GFX_write_string_color(&FontT42,tXr1,text,1,CLUT_WarningYellow); |
68d95049f11a
Added menu structure to allow ppo2 modification in simulator mode:
Ideenmodellierer
parents:
624
diff
changeset
|
714 break; |
68d95049f11a
Added menu structure to allow ppo2 modification in simulator mode:
Ideenmodellierer
parents:
624
diff
changeset
|
715 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
|
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 #endif |
518 | 719 default: /* show divetime */ |
38 | 720 |
518 | 721 Divetime.Total = stateUsed->lifeData.dive_time_seconds_without_surface_time; |
722 Divetime.Minutes = Divetime.Total / 60; | |
723 Divetime.Seconds = Divetime.Total - ( Divetime.Minutes * 60 ); | |
724 | |
725 snprintf(text,TEXTSIZE,"\032\f\002%c",TXT_Divetime); | |
726 GFX_write_string(&FontT42,tXr1,text,0); | |
727 | |
728 if(Divetime.Minutes < 100) | |
564
5e0a75e2f00b
Bugfix One or more deactivated sensors hide sensor display:
Ideenmodellierer
parents:
553
diff
changeset
|
729 snprintf(text,TEXTSIZE,"\020\003\002\016%u:%02u",Divetime.Minutes, Divetime.Seconds); |
518 | 730 else |
564
5e0a75e2f00b
Bugfix One or more deactivated sensors hide sensor display:
Ideenmodellierer
parents:
553
diff
changeset
|
731 snprintf(text,TEXTSIZE,"\020\003\002\016%u'",Divetime.Minutes); |
518 | 732 |
733 t3_basics_colorscheme_mod(text); | |
734 GFX_write_string(&FontT105,tXr1,text,1); | |
735 break; | |
736 } | |
38 | 737 } |
738 | |
739 return depth; | |
740 } | |
741 | |
742 | |
743 void t3_refresh_divemode(void) | |
744 { | |
745 uint8_t customview_warnings = 0; | |
746 float depth_meter = 0.0; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
747 |
38 | 748 // everything like lines, depth, ascent graph and divetime |
749 depth_meter = t3_basics_lines_depth_and_divetime(&t3screen, &t3l1, &t3r1, 0); // 0 could be stateUsed->diveSettings.diveMode for CCR specials | |
750 | |
751 // customview | |
752 if(stateUsed->warnings.numWarnings) | |
753 customview_warnings = t3_test_customview_warnings(); | |
754 | |
755 if(customview_warnings && warning_count_high_time) | |
756 t3_basics_show_customview_warnings(&t3c1); | |
757 else | |
758 t3_refresh_customview(depth_meter); | |
759 | |
760 if(stateUsed->warnings.lowBattery) | |
496 | 761 t3_basics_battery_low_customview_extra(&t3r1); //t3c1); |
38 | 762 } |
763 | |
764 | |
765 void t3_basics_battery_low_customview_extra(GFX_DrawCfgWindow* tXc1) | |
766 { | |
767 char TextC1[256]; | |
768 | |
496 | 769 TextC1[0] = ' ';//'\002'; |
38 | 770 TextC1[1] = '\f'; |
771 TextC1[2] = '\025'; | |
772 TextC1[3] = '3'; | |
773 TextC1[4] = '1'; | |
774 TextC1[5] = '1'; | |
775 TextC1[6] = '1'; | |
776 TextC1[7] = '1'; | |
777 TextC1[8] = '1'; | |
778 TextC1[9] = '1'; | |
779 TextC1[10] = '1'; | |
780 TextC1[11] = '1'; | |
781 TextC1[12] = '1'; | |
782 TextC1[13] = '1'; | |
783 TextC1[14] = '0'; | |
784 TextC1[15] = 0; | |
785 | |
786 if(!warning_count_high_time) | |
787 TextC1[4] = '2'; | |
788 | |
789 GFX_write_string(&Batt24,tXc1,TextC1,0); | |
790 } | |
791 | |
792 | |
793 | |
794 void t3_refresh_customview(float depth) | |
795 { | |
272
74a8296a2318
cleanup: simplify stateUsed usage
Jan Mulder <jlmulder@xs4all.nl>
parents:
237
diff
changeset
|
796 t3_basics_refresh_customview(depth, t3_selection_customview, &t3screen, &t3c1, &t3c2, stateUsedWrite->diveSettings.diveMode); |
38 | 797 } |
798 | |
799 | |
800 void t3_basics_refresh_apnoeRight(float depth, uint8_t tX_selection_customview, GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXc1, GFX_DrawCfgWindow* tXc2, uint8_t mode) | |
801 { | |
802 char text[512]; | |
803 uint16_t textpointer = 0; | |
804 | |
805 // CVIEW_T3_Temperature | |
806 float temperature; | |
413 | 807 SSettings* pSettings; |
808 pSettings = settingsGetPointer(); | |
38 | 809 |
810 SDivetime TotalDivetime = {0,0,0,0}; | |
811 SDivetime LastDivetime = {0,0,0,0}; | |
812 | |
813 uint16_t tempWinX0; | |
413 | 814 uint16_t tempWinX1; |
38 | 815 uint16_t tempWinY0; |
413 | 816 uint16_t tempWinY1; |
38 | 817 |
818 tempWinX0 = tXc1->WindowX0; | |
413 | 819 tempWinX1 = tXc1->WindowX1; |
38 | 820 tempWinY0 = tXc1->WindowY0; |
413 | 821 tempWinY1 = tXc1->WindowY1; |
38 | 822 |
823 tXc1->WindowX0 = 440; // rechte Seite | |
824 | |
825 switch(tX_selection_customview) | |
826 { | |
827 case CVIEW_T3_Temperature: | |
828 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Temperature); | |
829 GFX_write_string(&FontT42,tXc1,text,0); | |
830 | |
189
8b8074080d7b
Bugfix: average temperature on arrival from RTE instead of display time
Jan Mulder <jlmulder@xs4all.nl>
parents:
174
diff
changeset
|
831 temperature = unit_temperature_float(stateUsed->lifeData.temperature_celsius); |
38 | 832 textpointer = snprintf(text,TEXTSIZE,"\020\003\016%01.0f\016\016\140",temperature); // "\016\016%01.1f `" + C or F |
833 if(settingsGetPointer()->nonMetricalSystem == 0) | |
834 text[textpointer++] = 'C'; | |
835 else | |
836 text[textpointer++] = 'F'; | |
837 text[textpointer++] = 0; | |
838 t3_basics_colorscheme_mod(text); | |
839 GFX_write_string(&FontT105,tXc1,text,1); | |
840 break; | |
841 | |
842 case CVIEW_T3_ApnoeSurfaceInfo: | |
843 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Divetime); | |
844 GFX_write_string(&FontT42,tXc1,text,0); | |
845 | |
846 TotalDivetime.Total = stateUsed->lifeData.dive_time_seconds_without_surface_time; | |
847 TotalDivetime.Minutes = TotalDivetime.Total / 60; | |
848 TotalDivetime.Seconds = TotalDivetime.Total - ( TotalDivetime.Minutes * 60 ); | |
849 | |
850 LastDivetime.Total = stateUsed->lifeData.apnea_last_dive_time_seconds; | |
851 LastDivetime.Minutes = LastDivetime.Total / 60; | |
852 LastDivetime.Seconds = LastDivetime.Total - ( LastDivetime.Minutes * 60 ); | |
853 | |
413 | 854 // tXc1->WindowY0 = 100; // obere Zeile |
855 if(!pSettings->FlipDisplay) | |
856 { | |
857 tXc1->WindowY0 = 100; | |
858 } | |
859 else | |
860 { | |
861 tXc1->WindowY1 -= 100; /* jump to upper of two lines */ | |
862 } | |
38 | 863 |
864 snprintf(text,TEXTSIZE,"\020\016%u:%02u",LastDivetime.Minutes, LastDivetime.Seconds); | |
865 t3_basics_colorscheme_mod(text); | |
866 GFX_write_string(&FontT105,tXc1,text,0); | |
867 | |
413 | 868 if(pSettings->FlipDisplay) |
869 { | |
870 tXc1->WindowX0 = 0; | |
871 | |
872 } | |
38 | 873 snprintf(text,TEXTSIZE,"\032\002%c%c",TXT_2BYTE, TXT2BYTE_ApneaLast); |
874 GFX_write_string(&FontT42,tXc1,text,0); | |
875 | |
413 | 876 if(!pSettings->FlipDisplay) |
877 { | |
878 tXc1->WindowY0 = tempWinY0; | |
879 } | |
880 else | |
881 { | |
882 tXc1->WindowX1 = tempWinX1; | |
883 tXc1->WindowY1 = tempWinY1; /* jump to upper of two lines */ | |
884 } | |
38 | 885 |
886 snprintf(text,TEXTSIZE,"\020\016%u:%02u",TotalDivetime.Minutes, TotalDivetime.Seconds); | |
887 t3_basics_colorscheme_mod(text); | |
888 GFX_write_string(&FontT105,tXc1,text,0); | |
889 | |
890 snprintf(text,TEXTSIZE,"\032\002%c%c",TXT_2BYTE, TXT2BYTE_ApneaTotal); | |
413 | 891 if(pSettings->FlipDisplay) |
892 { | |
893 tXc1->WindowX0 = 0; | |
894 | |
895 } | |
38 | 896 GFX_write_string(&FontT42,tXc1,text,0); |
897 break; | |
898 } | |
899 | |
900 tXc1->WindowX0 = tempWinX0; | |
413 | 901 tXc1->WindowX1 = tempWinX1; |
38 | 902 tXc1->WindowY0 = tempWinY0; |
903 | |
904 } | |
905 | |
906 | |
907 void t3_basics_refresh_customview(float depth, uint8_t tX_selection_customview, GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXc1, GFX_DrawCfgWindow* tXc2, uint8_t mode) | |
908 { | |
582
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
909 static uint8_t last_customview = CVIEW_END; |
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
910 |
38 | 911 char text[512]; |
912 uint16_t textpointer = 0; | |
913 | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
914 SSettings* pSettings; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
915 pSettings = settingsGetPointer(); |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
916 |
38 | 917 // CVIEW_T3_Decostop and CVIEW_T3_TTS |
918 const SDecoinfo * pDecoinfo; | |
919 if(stateUsed->diveSettings.deco_type.ub.standard == GF_MODE) | |
920 pDecoinfo = &stateUsed->decolistBuehlmann; | |
921 else | |
922 pDecoinfo = &stateUsed->decolistVPM; | |
923 | |
924 // CVIEW_T3_Decostop | |
925 uint16_t nextstopLengthSeconds = 0; | |
926 uint8_t nextstopDepthMeter = 0; | |
927 SDivetime SafetyStopTime = {0,0,0,0}; | |
928 | |
929 // CVIEW_T3_ppO2andGas | |
930 uint8_t oxygen_percentage = 0; | |
931 | |
932 // CVIEW_T3_Temperature | |
933 float temperature; | |
934 | |
935 // CVIEW_T3_GasList | |
936 float fPpO2limitHigh, fPpO2limitLow, fPpO2ofGasAtThisDepth; | |
937 const SGasLine * pGasLine; | |
938 uint8_t oxygen, helium; | |
939 uint8_t lineNumber; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
940 uint8_t gasPosIdx; |
38 | 941 |
496 | 942 /* compass position */ |
943 point_t center; | |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
944 uint16_t heading; |
496 | 945 |
38 | 946 // CVIEW_T3_StopWatch |
947 SDivetime Stopwatch = {0,0,0,0}; | |
948 float fAverageDepth, fAverageDepthAbsolute; | |
949 | |
662 | 950 #ifdef ENABLE_PSCR_MODE |
951 uint8_t showSimPPO2 = 1; | |
952 #endif | |
38 | 953 uint16_t tempWinX0; |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
954 uint16_t tempWinX1; |
38 | 955 uint16_t tempWinY0; |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
956 uint16_t tempWinY1; |
38 | 957 uint16_t tempWinC2X0; |
413 | 958 uint16_t tempWinC2Y0; |
959 uint16_t tempWinC2X1; | |
960 uint16_t tempWinC2Y1; | |
38 | 961 uint16_t tempWinC2Tab; |
962 | |
963 tempWinX0 = tXc1->WindowX0; | |
964 tempWinY0 = tXc1->WindowY0; | |
496 | 965 tempWinX1 = tXc1->WindowX1; |
966 tempWinY1 = tXc1->WindowY1; | |
413 | 967 |
38 | 968 tempWinC2X0 = tXc2->WindowX0; |
413 | 969 tempWinC2Y0 = tXc2->WindowY0; |
970 tempWinC2X1 = tXc2->WindowX1; | |
971 tempWinC2Y1 = tXc2->WindowY1; | |
38 | 972 tempWinC2Tab = tXc2->WindowTab; |
973 | |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
974 if(settingsGetPointer()->compassInertia) |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
975 { |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
976 heading = (uint16_t)compass_getCompensated(); |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
977 } |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
978 else |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
979 { |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
980 heading = (uint16_t)stateUsed->lifeData.compass_heading; |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
981 } |
582
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
982 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
|
983 { |
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
984 if(t3_customview_disabled(tX_selection_customview)) |
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
985 { |
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
986 tX_selection_customview = t3_change_customview(ACTION_BUTTON_ENTER); |
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
987 } |
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
988 last_customview = tX_selection_customview; |
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
989 } |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
990 |
38 | 991 switch(tX_selection_customview) |
992 { | |
993 case CVIEW_T3_ApnoeSurfaceInfo: | |
994 snprintf(text,TEXTSIZE,"\032\f%c",TXT_MaxDepth); | |
995 | |
413 | 996 if(!pSettings->FlipDisplay) |
997 { | |
998 GFX_write_string(&FontT42,tXc1,text,0); | |
999 tXc1->WindowY0 = 100; | |
1000 } | |
1001 else | |
1002 { | |
1003 GFX_write_string(&FontT42,tXc2,text,0); | |
1004 tXc2->WindowY1 -= 100; /* jump to upper of two lines */ | |
1005 } | |
38 | 1006 |
1007 snprintf(text,TEXTSIZE,"\020\016%01.1f",unit_depth_float(stateUsed->lifeData.apnea_last_max_depth_meter)); | |
1008 t3_basics_colorscheme_mod(text); | |
413 | 1009 |
1010 if(!pSettings->FlipDisplay) | |
1011 { | |
1012 GFX_write_string(&FontT105,tXc1,text,0); | |
1013 tXc1->WindowY0 = tempWinY0; | |
1014 } | |
1015 else | |
1016 { | |
1017 GFX_write_string(&FontT105,tXc2,text,0); | |
1018 tXc2->WindowY1 = tempWinC2Y1; /* jump to upper of two lines */ | |
1019 } | |
38 | 1020 |
1021 | |
1022 snprintf(text,TEXTSIZE,"\020\016%01.1f",unit_depth_float(stateUsed->lifeData.apnea_total_max_depth_meter)); | |
1023 t3_basics_colorscheme_mod(text); | |
413 | 1024 if(!pSettings->FlipDisplay) |
1025 { | |
1026 GFX_write_string(&FontT105,tXc1,text,0); | |
1027 } | |
1028 else | |
1029 { | |
1030 GFX_write_string(&FontT105,tXc2,text,0); | |
1031 } | |
38 | 1032 break; |
1033 | |
1034 case CVIEW_T3_StopWatch: | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1035 |
38 | 1036 Stopwatch.Total = timer_Stopwatch_GetTime(); |
1037 Stopwatch.Minutes = Stopwatch.Total / 60; | |
1038 Stopwatch.Seconds = Stopwatch.Total - ( Stopwatch.Minutes * 60 ); | |
1039 fAverageDepth = timer_Stopwatch_GetAvarageDepth_Meter(); | |
1040 fAverageDepthAbsolute = stateUsed->lifeData.average_depth_meter; | |
1041 | |
1042 snprintf(text,TEXTSIZE,"\032\f%c",TXT_AvgDepth); | |
1043 GFX_write_string(&FontT42,tXc1,text,0); | |
1044 snprintf(text,TEXTSIZE,"\030\003\016%01.1f",unit_depth_float(fAverageDepthAbsolute)); | |
1045 GFX_write_string(&FontT105,tXc1,text,0); | |
1046 | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1047 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1048 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1049 tXc1->WindowX0 = 480; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1050 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1051 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1052 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1053 tXc1->WindowX1 = 320; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1054 tXc1->WindowY0 = t3c1.WindowY0; /* select customer window */ |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1055 } |
38 | 1056 // 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
|
1057 |
38 | 1058 snprintf(text,TEXTSIZE,"\032\f%c", TXT_Stopwatch); |
1059 GFX_write_string(&FontT42,tXc1,text,0); | |
1060 snprintf(text,TEXTSIZE,"\030\016%01.1f",unit_depth_float(fAverageDepth)); | |
1061 GFX_write_string(&FontT105,tXc1,text,0); | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1062 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1063 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1064 tXc1->WindowY0 = 100; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1065 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1066 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1067 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1068 tXc1->WindowY1 -= 100; /* jump to upper of two lines */ |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1069 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1070 |
38 | 1071 snprintf(text,TEXTSIZE,"\030%u:\016\016%02u",Stopwatch.Minutes, Stopwatch.Seconds); |
1072 GFX_write_string(&FontT105,tXc1,text,0); | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1073 |
496 | 1074 break; |
38 | 1075 |
1076 case CVIEW_T3_GasList: | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1077 gasPosIdx = 0; |
38 | 1078 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE, TXT2BYTE_Gaslist); |
1079 GFX_write_string(&FontT42,tXc1,text,0); | |
1080 | |
1081 textpointer = 0; | |
1082 tXc2->WindowX0 = 0; | |
518 | 1083 tXc2->WindowTab = 800/3; // /2 |
38 | 1084 |
413 | 1085 if(pSettings->FlipDisplay) |
1086 { | |
1087 tXc2->WindowY1 = 0; | |
1088 } | |
1089 | |
38 | 1090 pGasLine = settingsGetPointer()->gas; |
1091 if(actualLeftMaxDepth(stateUsed)) | |
1092 fPpO2limitHigh = (float)(settingsGetPointer()->ppO2_max_deco) / 100; | |
1093 else | |
1094 fPpO2limitHigh = (float)(settingsGetPointer()->ppO2_max_std) / 100; | |
1095 fPpO2limitLow = (float)(settingsGetPointer()->ppO2_min) / 100; | |
1096 for(int gasId=1;gasId<=NUM_GASES;gasId++) | |
1097 { | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1098 #ifdef ENABLE_UNUSED_GAS_HIDING |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1099 if(!pGasLine[gasId].note.ub.off) |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1100 { |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1101 #endif |
38 | 1102 textpointer = 0; |
518 | 1103 text[textpointer++] = '\003'; |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1104 |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1105 lineNumber = 1; |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1106 |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1107 switch(gasPosIdx) |
38 | 1108 { |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1109 case 0: lineNumber = 0; |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1110 case 1: |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1111 break; |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1112 case 4: text[textpointer++] = '\001'; /* display centered */ |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1113 break; |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1114 case 2: lineNumber = 0; |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1115 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
|
1116 default: |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1117 break; |
38 | 1118 } |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1119 gasPosIdx++; |
518 | 1120 |
38 | 1121 fPpO2ofGasAtThisDepth = (stateUsed->lifeData.pressure_ambient_bar - WATER_VAPOUR_PRESSURE) * pGasLine[gasId].oxygen_percentage / 100; |
1122 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
|
1123 strcpy(&text[textpointer++],"\031"); |
518 | 1124 else if(stateUsed->lifeData.actualGas.GasIdInSettings == gasId) /* actual selected gas */ |
1125 { | |
1126 strcpy(&text[textpointer++],"\030"); | |
1127 } | |
38 | 1128 else if((fPpO2ofGasAtThisDepth > fPpO2limitHigh) || (fPpO2ofGasAtThisDepth < fPpO2limitLow)) |
1129 strcpy(&text[textpointer++],"\025"); | |
518 | 1130 else if(actualBetterGasId() == gasId) |
1131 { | |
1132 strcpy(&text[textpointer++],"\026"); /* Highlight better gas */ | |
1133 } | |
38 | 1134 else |
518 | 1135 strcpy(&text[textpointer++],"\023"); /* Blue for travel or deco without special state */ |
38 | 1136 |
1137 text[textpointer++] = ' '; | |
1138 oxygen = pGasLine[gasId].oxygen_percentage; | |
1139 helium = pGasLine[gasId].helium_percentage; | |
1140 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
|
1141 |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1142 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
|
1143 { |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1144 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
|
1145 } |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1146 text[textpointer++] = 0; |
518 | 1147 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
|
1148 #ifdef ENABLE_UNUSED_GAS_HIDING |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1149 } |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1150 #endif |
38 | 1151 } |
1152 break; | |
1153 | |
1154 case CVIEW_T3_Temperature: | |
1155 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Temperature); | |
1156 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
|
1157 |
8b8074080d7b
Bugfix: average temperature on arrival from RTE instead of display time
Jan Mulder <jlmulder@xs4all.nl>
parents:
174
diff
changeset
|
1158 temperature = unit_temperature_float(stateUsed->lifeData.temperature_celsius); |
38 | 1159 textpointer = snprintf(text,TEXTSIZE,"\030\003\016%01.1f \140",temperature); // "\016\016%01.1f `" + C or F |
1160 if(settingsGetPointer()->nonMetricalSystem == 0) | |
1161 text[textpointer++] = 'C'; | |
1162 else | |
1163 text[textpointer++] = 'F'; | |
1164 text[textpointer++] = 0; | |
1165 GFX_write_string(&FontT105,tXc1,text,0); | |
1166 break; | |
1167 | |
1168 case CVIEW_Compass: | |
496 | 1169 center.x = 600; |
1170 center.y = 116; | |
38 | 1171 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE, TXT2BYTE_Compass); |
1172 GFX_write_string(&FontT42,tXc1,text,0); | |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
1173 snprintf(text,100,"\030\003%03i`",heading); |
38 | 1174 GFX_write_string(&FontT105,tXc1,text,0); |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
1175 t3_basics_compass(tXscreen, center, heading, stateUsed->diveSettings.compassHeading); |
38 | 1176 break; |
601 | 1177 #ifdef ENABLE_T3_PROFILE_VIEW |
592
f52bc70e380f
MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents:
582
diff
changeset
|
1178 case CVIEW_T3_Profile: |
599 | 1179 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
|
1180 GFX_write_string(&FontT42,tXc1,text,0); |
f52bc70e380f
MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents:
582
diff
changeset
|
1181 t3_miniLiveLogProfile(); |
f52bc70e380f
MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents:
582
diff
changeset
|
1182 break; |
601 | 1183 #endif |
542
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1184 case CVIEW_T3_DecoTTS: |
38 | 1185 case CVIEW_T3_Decostop: |
1186 default: | |
1187 // decostop | |
1188 if(pDecoinfo->output_time_to_surface_seconds) | |
1189 { | |
1190 tHome_findNextStop(pDecoinfo->output_stop_length_seconds, &nextstopDepthMeter, &nextstopLengthSeconds); | |
1191 } | |
1192 else | |
1193 { | |
1194 nextstopDepthMeter = 0; | |
1195 nextstopLengthSeconds = 0; | |
1196 } | |
1197 | |
1198 SafetyStopTime.Total = timer_Safetystop_GetCountDown(); | |
1199 SafetyStopTime.Minutes = SafetyStopTime.Total / 60; | |
1200 SafetyStopTime.Seconds = SafetyStopTime.Total - (SafetyStopTime.Minutes * 60); | |
1201 | |
1202 if(nextstopDepthMeter) | |
1203 { | |
1204 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Decostop); | |
1205 GFX_write_string(&FontT42,tXc1,text,0); | |
1206 | |
1207 textpointer = 0; | |
1208 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
|
1209 , unit_depth_integer(nextstopDepthMeter) |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1210 , unit_depth_char1_T105() |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1211 , unit_depth_char2_T105() |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1212 , (nextstopLengthSeconds+59)/60); |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1213 t3_basics_colorscheme_mod(text); |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1214 GFX_write_string(&FontT105,tXc1,text,0); |
38 | 1215 } |
1216 else if(SafetyStopTime.Total && (depth > timer_Safetystop_GetDepthUpperLimit())) | |
1217 { | |
1218 textpointer = 0; | |
1219 snprintf(&text[textpointer],TEXTSIZE,"\032\f%c%c",TXT_2BYTE,TXT2BYTE_SafetyStop2); | |
1220 GFX_write_string(&FontT42,tXc1,text,0); | |
1221 | |
1222 textpointer = 0; | |
1223 snprintf(&text[textpointer],TEXTSIZE,"\020\003\016%u:%02u",SafetyStopTime.Minutes,SafetyStopTime.Seconds); | |
1224 t3_basics_colorscheme_mod(text); | |
496 | 1225 GFX_write_string(&FontT105,tXc1,text,0); |
38 | 1226 } |
237
ec16fd26e280
Bugfix: do not show NDL in bigscreen mode when zero
Jan Mulder <jlmulder@xs4all.nl>
parents:
214
diff
changeset
|
1227 else if(pDecoinfo->output_ndl_seconds) // NDL |
38 | 1228 { |
1229 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Nullzeit); | |
1230 GFX_write_string(&FontT42,tXc1,text,0); | |
1231 if(pDecoinfo->output_ndl_seconds < 1000 * 60) | |
1232 snprintf(text,TEXTSIZE,"\020\003%i'",pDecoinfo->output_ndl_seconds/60); | |
1233 else | |
1234 snprintf(text,TEXTSIZE,"\020\003%ih",pDecoinfo->output_ndl_seconds/3600); | |
1235 t3_basics_colorscheme_mod(text); | |
496 | 1236 GFX_write_string(&FontT105,tXc1,text,0); |
38 | 1237 } |
542
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1238 |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1239 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
|
1240 { |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1241 snprintf(text,TEXTSIZE,"\002\032\f%c",TXT_TTS); |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1242 GFX_write_string(&FontT42,tXc1,text,0); |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1243 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
|
1244 { |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1245 if(pDecoinfo->output_time_to_surface_seconds < 100 * 60) |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1246 snprintf(text,TEXTSIZE,"\020\003\002%i'",(pDecoinfo->output_time_to_surface_seconds + 59)/ 60); |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1247 else |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1248 snprintf(text,TEXTSIZE,"\020\003\002%ih",(pDecoinfo->output_time_to_surface_seconds + 59)/ 3600); |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1249 t3_basics_colorscheme_mod(text); |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1250 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
|
1251 } |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1252 } |
38 | 1253 break; |
1254 | |
1255 case CVIEW_sensors: | |
1256 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE,TXT2BYTE_O2monitor); | |
1257 GFX_write_string(&FontT42,tXc1,text,0); | |
1258 | |
1259 for(int i=0;i<3;i++) | |
1260 { | |
1261 textpointer = 0; | |
1262 text[textpointer++] = '\030'; | |
1263 if(i==1) | |
564
5e0a75e2f00b
Bugfix One or more deactivated sensors hide sensor display:
Ideenmodellierer
parents:
553
diff
changeset
|
1264 text[textpointer++] = '\001'; /* center */ |
38 | 1265 else if(i==2) |
564
5e0a75e2f00b
Bugfix One or more deactivated sensors hide sensor display:
Ideenmodellierer
parents:
553
diff
changeset
|
1266 text[textpointer++] = '\002'; /* right */ |
5e0a75e2f00b
Bugfix One or more deactivated sensors hide sensor display:
Ideenmodellierer
parents:
553
diff
changeset
|
1267 |
577
9bb9a52d6ae5
Handle o2 voltage values < 0.5mV as invalid:
Ideenmodellierer
parents:
564
diff
changeset
|
1268 if((stateUsed->diveSettings.ppo2sensors_deactivated & (1<<i)) || (stateUsed->lifeData.ppO2Sensor_bar[i] == 0.0)) |
38 | 1269 { |
662 | 1270 #ifdef ENABLE_PSCR_MODE |
1271 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 */ | |
1272 { | |
1273 text[textpointer++] = '\023'; | |
1274 textpointer += snprintf(&text[textpointer],TEXTSIZE,"%.2f",stateUsed->lifeData.ppo2Simulated_bar); | |
1275 showSimPPO2 = 0; | |
1276 } | |
1277 else | |
1278 #endif | |
1279 { | |
1280 text[textpointer++] = '\031'; | |
1281 text[textpointer++] = ' '; | |
1282 text[textpointer++] = '-'; | |
1283 text[textpointer++] = ' '; | |
1284 text[textpointer++] = 0; | |
1285 } | |
38 | 1286 } |
1287 else | |
1288 { | |
1289 if(stateUsed->warnings.sensorOutOfBounds[i]) | |
1290 text[textpointer++] = '\025'; | |
564
5e0a75e2f00b
Bugfix One or more deactivated sensors hide sensor display:
Ideenmodellierer
parents:
553
diff
changeset
|
1291 textpointer += snprintf(&text[textpointer],TEXTSIZE,"%.2f",stateUsed->lifeData.ppO2Sensor_bar[i]); |
38 | 1292 } |
564
5e0a75e2f00b
Bugfix One or more deactivated sensors hide sensor display:
Ideenmodellierer
parents:
553
diff
changeset
|
1293 GFX_write_string(&FontT105,tXc1,text,0); |
656 | 1294 |
1295 | |
662 | 1296 if((pSettings->scrubTimerMode != SCRUB_TIMER_OFF) && isLoopMode(pSettings->dive_mode)) |
656 | 1297 { |
1298 snprintf(text,TEXTSIZE,"\032\002\f%c",TXT_ScrubTime); | |
1299 GFX_write_string(&FontT42,tXc1,text,0); | |
1300 | |
1301 textpointer = 0; | |
1302 if(settingsGetPointer()->scrubTimerMode == SCRUB_TIMER_MINUTES) | |
1303 { | |
1304 textpointer += snprintf(&text[textpointer],10,"\020\002%3u'", pSettings->scrubTimerCur); | |
1305 } | |
1306 else | |
1307 { | |
1308 textpointer += snprintf(&text[textpointer],20,"\020\002%u\016\016%%\017", (uint16_t)(pSettings->scrubTimerCur * 100 / pSettings->scrubTimerMax)); | |
1309 } | |
1310 GFX_write_string(&FontT105,tXc1,text,1); | |
1311 } | |
38 | 1312 } |
1313 break; | |
1314 | |
1315 case CVIEW_T3_MaxDepth: | |
1316 snprintf(text,TEXTSIZE,"\032\f%c",TXT_MaxDepth); | |
413 | 1317 if(pSettings->FlipDisplay) |
1318 { | |
1319 if(mode == DIVEMODE_Apnea) | |
1320 { | |
1321 GFX_write_string(&FontT42,tXc2,text,0); | |
1322 } | |
1323 else | |
1324 { | |
1325 GFX_write_string(&FontT42,tXc1,text,0); | |
1326 } | |
1327 } | |
1328 else | |
1329 { | |
1330 GFX_write_string(&FontT42,tXc1,text,0); | |
1331 } | |
38 | 1332 snprintf(text,TEXTSIZE,"\020\003\016%01.1f",unit_depth_float(stateUsed->lifeData.max_depth_meter)); |
1333 t3_basics_colorscheme_mod(text); | |
413 | 1334 if(pSettings->FlipDisplay) |
1335 { | |
1336 if(mode == DIVEMODE_Apnea) | |
1337 { | |
1338 GFX_write_string(&FontT105,tXc2,text,0); | |
1339 } | |
1340 else | |
1341 { | |
1342 GFX_write_string(&FontT105,tXc1,text,0); | |
1343 } | |
1344 } | |
1345 else | |
1346 { | |
496 | 1347 GFX_write_string(&FontT105,tXc1,text,0); |
413 | 1348 } |
38 | 1349 break; |
1350 | |
1351 case CVIEW_T3_TTS: | |
1352 snprintf(text,TEXTSIZE,"\032\f%c",TXT_TTS); | |
1353 GFX_write_string(&FontT42,tXc1,text,0); | |
1354 if(pDecoinfo->output_time_to_surface_seconds) | |
1355 { | |
1356 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
|
1357 snprintf(text,TEXTSIZE,"\020\003\002%i'",(pDecoinfo->output_time_to_surface_seconds + 59)/ 60); |
38 | 1358 else |
214
51a3aeffc6b3
Bugfix: handle rounding of TTS and future TTS consistently
Jan Mulder <jlmulder@xs4all.nl>
parents:
189
diff
changeset
|
1359 snprintf(text,TEXTSIZE,"\020\003\002%ih",(pDecoinfo->output_time_to_surface_seconds + 59)/ 3600); |
38 | 1360 t3_basics_colorscheme_mod(text); |
496 | 1361 GFX_write_string(&FontT105,tXc1,text,0); |
38 | 1362 } |
1363 break; | |
1364 | |
1365 case CVIEW_T3_ppO2andGas: | |
1366 snprintf(text,TEXTSIZE,"\032\f%c",TXT_ppO2); | |
1367 GFX_write_string(&FontT42,tXc1,text,0); | |
1368 snprintf(text,TEXTSIZE,"\020\003%01.2f",stateUsed->lifeData.ppO2); | |
1369 t3_basics_colorscheme_mod(text); | |
496 | 1370 GFX_write_string(&FontT105,tXc1,text,0); |
38 | 1371 |
1372 textpointer = 0; | |
1373 text[textpointer++] = '\020'; | |
1374 text[textpointer++] = '\003'; | |
1375 oxygen_percentage = 100; | |
1376 oxygen_percentage -= stateUsed->lifeData.actualGas.nitrogen_percentage; | |
1377 oxygen_percentage -= stateUsed->lifeData.actualGas.helium_percentage; | |
1378 text[textpointer++] = '\002'; | |
1379 tHome_gas_writer(oxygen_percentage,stateUsed->lifeData.actualGas.helium_percentage,&text[textpointer]); | |
1380 //textpointer = snprintf(&text[textpointer],TEXTSIZE,"\020\002%02u/%02u",oxygen_percentage, stateUsed->lifeData.actualGas.helium_percentage); | |
1381 t3_basics_colorscheme_mod(text); | |
496 | 1382 GFX_write_string(&FontT48,tXc1,text,0); |
38 | 1383 break; |
496 | 1384 |
1385 case CVIEW_T3_Navigation: | |
1386 Stopwatch.Total = timer_Stopwatch_GetTime(); | |
1387 Stopwatch.Minutes = Stopwatch.Total / 60; | |
1388 Stopwatch.Seconds = Stopwatch.Total - ( Stopwatch.Minutes * 60 ); | |
1389 fAverageDepth = timer_Stopwatch_GetAvarageDepth_Meter(); | |
1390 | |
1391 if(!pSettings->FlipDisplay) | |
1392 { | |
1393 tXc2->WindowX0 = 550; | |
1394 } | |
1395 else | |
1396 { | |
1397 tXc2->WindowX1 = 800; | |
1398 tXc2->WindowY0 = t3c2.WindowY0; /* select customer window */ | |
1399 } | |
1400 | |
1401 snprintf(text,TEXTSIZE,"\032\002\f%c", TXT_Stopwatch); | |
511 | 1402 GFX_write_string(&FontT42,tXc1,text,0); |
564
5e0a75e2f00b
Bugfix One or more deactivated sensors hide sensor display:
Ideenmodellierer
parents:
553
diff
changeset
|
1403 snprintf(text,TEXTSIZE,"\030\002\016%01.1f",unit_depth_float(fAverageDepth)); |
511 | 1404 GFX_write_string(&FontT105,tXc1,text,0); |
496 | 1405 if(!pSettings->FlipDisplay) |
1406 { | |
1407 tXc2->WindowY0 = 100; | |
1408 } | |
1409 else | |
1410 { | |
1411 tXc2->WindowY1 -= 100; /* jump to upper of two lines */ | |
1412 } | |
1413 | |
1414 snprintf(text,TEXTSIZE,"\030\002%u:\016\016%02u",Stopwatch.Minutes, Stopwatch.Seconds); | |
511 | 1415 GFX_write_string(&FontT105,tXc1,text,1); |
496 | 1416 |
1417 | |
1418 center.x = 400; | |
1419 center.y = 116; | |
1420 | |
1421 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE, TXT2BYTE_Compass); | |
1422 GFX_write_string(&FontT42,tXc1,text,0); | |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
1423 snprintf(text,100,"\030%03i`",heading); |
496 | 1424 GFX_write_string(&FontT144,tXc1,text,0); |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
1425 t3_basics_compass(tXscreen, center, heading, stateUsed->diveSettings.compassHeading); |
496 | 1426 |
1427 break; | |
1428 | |
1429 case CVIEW_T3_DepthData: | |
1430 snprintf(text,TEXTSIZE,"\032\f%c",TXT_MaxDepth); | |
1431 if(pSettings->FlipDisplay) | |
1432 { | |
1433 if(mode == DIVEMODE_Apnea) | |
1434 { | |
1435 GFX_write_string(&FontT42,tXc2,text,0); | |
1436 } | |
1437 else | |
1438 { | |
1439 GFX_write_string(&FontT42,tXc1,text,0); | |
1440 } | |
1441 } | |
1442 else | |
1443 { | |
1444 GFX_write_string(&FontT42,tXc1,text,0); | |
1445 } | |
1446 snprintf(text,TEXTSIZE,"\020\003\016%01.1f",unit_depth_float(stateUsed->lifeData.max_depth_meter)); | |
1447 t3_basics_colorscheme_mod(text); | |
1448 if(pSettings->FlipDisplay) | |
1449 { | |
1450 if(mode == DIVEMODE_Apnea) | |
1451 { | |
1452 GFX_write_string(&FontT105,tXc2,text,0); | |
1453 } | |
1454 else | |
1455 { | |
1456 GFX_write_string(&FontT105,tXc1,text,0); | |
1457 } | |
1458 } | |
1459 else | |
1460 { | |
1461 GFX_write_string(&FontT105,tXc1,text,0); | |
1462 } | |
1463 fAverageDepthAbsolute = stateUsed->lifeData.average_depth_meter; | |
1464 snprintf(text,TEXTSIZE,"\032\002\f%c",TXT_AvgDepth); | |
511 | 1465 GFX_write_string(&FontT42,tXc1,text,0); |
496 | 1466 |
564
5e0a75e2f00b
Bugfix One or more deactivated sensors hide sensor display:
Ideenmodellierer
parents:
553
diff
changeset
|
1467 snprintf(text,TEXTSIZE,"\020\003\002\016\%01.1f",unit_depth_float(fAverageDepthAbsolute)); |
511 | 1468 GFX_write_string(&FontT105,tXc1,text,0); |
496 | 1469 break; |
38 | 1470 } |
496 | 1471 |
1472 | |
1473 | |
38 | 1474 tXc1->WindowX0 = tempWinX0; |
1475 tXc1->WindowY0 = tempWinY0; | |
496 | 1476 tXc1->WindowX1 = tempWinX1; |
1477 tXc1->WindowY1 = tempWinY1; | |
413 | 1478 |
38 | 1479 tXc2->WindowX0 = tempWinC2X0; |
413 | 1480 tXc2->WindowY0 = tempWinC2Y0; |
1481 tXc2->WindowX1 = tempWinC2X1; | |
1482 tXc2->WindowY1 = tempWinC2Y1; | |
38 | 1483 tXc2->WindowTab = tempWinC2Tab; |
1484 } | |
1485 | |
1486 | |
1487 uint8_t t3_test_customview_warnings(void) | |
1488 { | |
1489 uint8_t count = 0; | |
1490 | |
1491 count = 0; | |
1492 count += stateUsed->warnings.decoMissed; | |
1493 count += stateUsed->warnings.ppO2Low; | |
1494 count += stateUsed->warnings.ppO2High; | |
1495 //count += stateUsed->warnings.lowBattery; | |
1496 count += stateUsed->warnings.sensorLinkLost; | |
1497 count += stateUsed->warnings.fallback; | |
1498 | |
1499 return count; | |
1500 } | |
1501 | |
1502 //void t3_show_customview_warnings(GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXl1, GFX_DrawCfgWindow* tXr1, uint8_t mode) | |
1503 void t3_basics_show_customview_warnings(GFX_DrawCfgWindow* tXc1) | |
1504 { | |
1505 char text[256], textMain[256]; | |
1506 uint8_t textpointer, textpointerMain, lineFree, more; | |
1507 | |
1508 snprintf(text,TEXTSIZE,"\025\f%c",TXT_Warning); | |
1509 GFX_write_string(&FontT42,&t3c1,text,0); | |
1510 | |
1511 lineFree = 1; | |
1512 more = 0; | |
1513 | |
1514 textpointerMain = 0; | |
511 | 1515 textMain[textpointerMain++] = '\025'; /* red */ |
1516 textMain[textpointerMain++] = '\003'; /* doublesize */ | |
38 | 1517 |
1518 textpointer = 0; | |
1519 | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1520 text[textpointer++] = '\031'; |
38 | 1521 text[textpointer++] = TXT_2BYTE; |
1522 text[textpointer++] = TXT2BYTE_WarnDecoMissed; | |
1523 if(stateUsed->warnings.decoMissed) | |
1524 { | |
1525 text[textpointer - 3] = '\025'; | |
1526 if(lineFree) | |
1527 { | |
1528 textMain[textpointerMain++] = TXT_2BYTE; | |
1529 textMain[textpointerMain++] = text[textpointer - 1]; | |
1530 textMain[textpointerMain] = 0; | |
1531 lineFree--; | |
1532 } | |
1533 else | |
1534 { | |
1535 more++; | |
1536 } | |
1537 } | |
1538 | |
1539 text[textpointer++] = '\t'; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1540 text[textpointer++] = '\031'; |
38 | 1541 text[textpointer++] = TXT_2BYTE; |
1542 text[textpointer++] = TXT2BYTE_WarnPPO2Low; | |
1543 if(stateUsed->warnings.ppO2Low) | |
1544 { | |
1545 text[textpointer - 3] = '\025'; | |
1546 if(lineFree) | |
1547 { | |
1548 textMain[textpointerMain++] = TXT_2BYTE; | |
1549 textMain[textpointerMain++] = text[textpointer - 1]; | |
1550 textMain[textpointerMain] = 0; | |
1551 lineFree--; | |
1552 } | |
1553 else | |
1554 { | |
1555 more++; | |
1556 } | |
1557 } | |
1558 | |
1559 text[textpointer++] = '\n'; | |
1560 text[textpointer++] = '\r'; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1561 text[textpointer++] = '\031'; |
38 | 1562 text[textpointer++] = TXT_2BYTE; |
1563 text[textpointer++] = TXT2BYTE_WarnPPO2High; | |
1564 if(stateUsed->warnings.ppO2High) | |
1565 { | |
1566 text[textpointer - 3] = '\025'; | |
1567 if(lineFree) | |
1568 { | |
1569 textMain[textpointerMain++] = TXT_2BYTE; | |
1570 textMain[textpointerMain++] = text[textpointer - 1]; | |
1571 textMain[textpointerMain] = 0; | |
1572 lineFree--; | |
1573 } | |
1574 else | |
1575 { | |
1576 more++; | |
1577 } | |
1578 } | |
1579 | |
1580 text[textpointer++] = '\t'; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1581 text[textpointer++] = '\031'; |
38 | 1582 text[textpointer++] = TXT_2BYTE; |
1583 text[textpointer++] = TXT2BYTE_WarnFallback; | |
1584 if(stateUsed->warnings.fallback) | |
1585 { | |
1586 text[textpointer - 3] = '\025'; | |
1587 if(lineFree) | |
1588 { | |
1589 textMain[textpointerMain++] = TXT_2BYTE; | |
1590 textMain[textpointerMain++] = text[textpointer - 1]; | |
1591 textMain[textpointerMain] = 0; | |
1592 lineFree--; | |
1593 } | |
1594 else | |
1595 { | |
1596 more++; | |
1597 } | |
1598 } | |
1599 | |
1600 text[textpointer++] = '\n'; | |
1601 text[textpointer++] = '\r'; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1602 text[textpointer++] = '\031'; |
38 | 1603 text[textpointer++] = TXT_2BYTE; |
1604 text[textpointer++] = TXT2BYTE_WarnSensorLinkLost; | |
1605 if(stateUsed->warnings.sensorLinkLost) | |
1606 { | |
1607 text[textpointer - 3] = '\025'; | |
1608 if(lineFree) | |
1609 { | |
1610 textMain[textpointerMain++] = TXT_2BYTE; | |
1611 textMain[textpointerMain++] = text[textpointer - 1]; | |
1612 textMain[textpointerMain] = 0; | |
1613 lineFree--; | |
1614 } | |
1615 else | |
1616 { | |
1617 more++; | |
1618 } | |
1619 } | |
1620 | |
1621 /* | |
1622 text[textpointer++] = '\t'; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1623 text[textpointer++] = '\031'; |
38 | 1624 text[textpointer++] = TXT_2BYTE; |
1625 text[textpointer++] = TXT2BYTE_WarnBatteryLow; | |
1626 if(stateUsed->warnings.lowBattery) | |
1627 { | |
1628 text[textpointer - 3] = '\025'; | |
1629 if(lineFree) | |
1630 { | |
1631 textMain[textpointerMain++] = TXT_2BYTE; | |
1632 textMain[textpointerMain++] = text[textpointer - 1]; | |
1633 textMain[textpointerMain] = 0; | |
1634 lineFree--; | |
1635 } | |
1636 else | |
1637 { | |
1638 more++; | |
1639 } | |
1640 } | |
1641 */ | |
1642 text[textpointer] = 0; | |
1643 /* | |
1644 if(more) | |
1645 { | |
1646 text[textpointer++] = '\002'; | |
1647 text[textpointer++] = '+'; | |
1648 if(more < 10) | |
1649 text[textpointer++] = '0' + more; | |
1650 else | |
1651 text[textpointer++] = 'X'; | |
1652 text[textpointer] = 0; | |
1653 } | |
1654 */ | |
511 | 1655 GFX_write_string(&FontT48,&t3c1,textMain,0); |
38 | 1656 if(more) |
1657 { | |
511 | 1658 GFX_write_string(&FontT48,&t3c2,text,0); |
38 | 1659 } |
1660 } | |
1661 | |
496 | 1662 uint8_t t3_customview_disabled(uint8_t view) |
1663 { | |
1664 uint8_t i = 0; | |
1665 uint8_t cv_disabled = 0; | |
1666 const uint8_t *pcv_changelist; | |
1667 uint32_t cv_config = settingsGetPointer()->cv_config_BigScreen; | |
1668 | |
511 | 1669 pcv_changelist = cv_changelist_BS; |
496 | 1670 |
1671 while(pcv_changelist[i] != CVIEW_T3_END) | |
1672 { | |
1673 if((view == pcv_changelist[i]) && !CHECK_BIT_THOME(cv_config, pcv_changelist[i])) | |
1674 { | |
1675 cv_disabled = 1; | |
1676 break; | |
1677 } | |
1678 i++; | |
1679 } | |
1680 | |
1681 if (((view == CVIEW_sensors) || (view == CVIEW_sensors_mV)) && | |
582
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
1682 ((stateUsed->diveSettings.ppo2sensors_deactivated == 0x07) || (stateUsed->diveSettings.ccrOption == 0) || stateUsed->warnings.fallback)) |
496 | 1683 { |
1684 cv_disabled = 1; | |
1685 } | |
1686 | |
1687 return cv_disabled; | |
1688 } | |
38 | 1689 |
582
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
1690 uint8_t t3_change_customview(uint8_t action) |
38 | 1691 { |
511 | 1692 |
496 | 1693 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
|
1694 return t3_selection_customview; |
38 | 1695 } |
1696 | |
1697 | |
511 | 1698 void t3_basics_change_customview(uint8_t *tX_selection_customview,const uint8_t *tX_customviews, uint8_t action) |
38 | 1699 { |
1700 const SDecoinfo * pDecoinfo; | |
1701 if(stateUsed->diveSettings.deco_type.ub.standard == GF_MODE) | |
1702 pDecoinfo = &stateUsed->decolistBuehlmann; | |
1703 else | |
1704 pDecoinfo = &stateUsed->decolistVPM; | |
1705 | |
511 | 1706 uint8_t curViewIdx = 0xff; |
1707 uint8_t index = 0; | |
599 | 1708 uint8_t indexOverrun = 0; |
511 | 1709 uint8_t lastViewIdx = 0; |
599 | 1710 uint8_t iterate = 0; /* set to 1 if a view has to be skipped */ |
1711 uint8_t useFallback = 0; /* is set if the current view is disabled */ | |
1712 uint8_t fallbackSelection = CVIEW_noneOrDebug; /* show "None" view per default */ | |
38 | 1713 |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1714 /* set pointer to currently selected view and count number of entries */ |
511 | 1715 while((tX_customviews[index] != CVIEW_T3_END)) |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1716 { |
511 | 1717 if (tX_customviews[index] == *tX_selection_customview) |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1718 { |
511 | 1719 curViewIdx = index; |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1720 } |
511 | 1721 index++; |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1722 } |
511 | 1723 if(curViewIdx == 0xff) /* called with unknown view */ |
496 | 1724 { |
511 | 1725 curViewIdx = 0; |
599 | 1726 *tX_selection_customview = CVIEW_noneOrDebug; /* show "None" view per default */ |
496 | 1727 } |
511 | 1728 lastViewIdx = index; |
1729 index = curViewIdx; | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1730 do |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1731 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1732 iterate = 0; |
496 | 1733 switch(action) |
1734 { | |
1735 case ACTION_BUTTON_ENTER: | |
1736 case ACTION_PITCH_POS: | |
1737 | |
511 | 1738 if(tX_customviews[index] != CVIEW_T3_END) |
496 | 1739 { |
511 | 1740 index++; |
1741 } | |
1742 if(tX_customviews[index] == CVIEW_T3_END) | |
1743 { | |
1744 index = 0; | |
599 | 1745 indexOverrun = 1; |
496 | 1746 } |
1747 break; | |
1748 case ACTION_PITCH_NEG: | |
511 | 1749 if(index == 0) |
496 | 1750 { |
511 | 1751 index = lastViewIdx - 1; |
599 | 1752 indexOverrun = 1; |
496 | 1753 } |
1754 else | |
1755 { | |
511 | 1756 index--; |
496 | 1757 } |
1758 break; | |
1759 default: | |
1760 break; | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1761 } |
496 | 1762 |
511 | 1763 if(t3_customview_disabled(tX_customviews[index])) |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1764 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1765 iterate = 1; |
599 | 1766 if(*tX_selection_customview == tX_customviews[index]) |
1767 { | |
1768 useFallback = 1; /* the provided view is disabled => use fallback */ | |
1769 } | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1770 } |
599 | 1771 else /* special case which are enabled but not to be displayed at the moment */ |
1772 { | |
1773 if(settingsGetPointer()->MotionDetection != MOTION_DETECT_SECTOR) /* no hiding in case of active sector view option (fixed mapping would change during dive) */ | |
1774 { | |
601 | 1775 /* Skip TTS if value is 0 */ |
1776 if((tX_customviews[index] == CVIEW_T3_TTS) && (!pDecoinfo->output_time_to_surface_seconds)) | |
599 | 1777 { |
601 | 1778 if(*tX_selection_customview == tX_customviews[index]) |
1779 { | |
1780 useFallback = 1; /* the provided view is disabled => use fallback */ | |
1781 } | |
599 | 1782 iterate = 1; |
601 | 1783 if(fallbackSelection == CVIEW_noneOrDebug) |
1784 { | |
1785 fallbackSelection = CVIEW_T3_TTS; | |
1786 } | |
599 | 1787 } |
601 | 1788 /* Skip Deco if NDL is not set */ |
1789 if((tX_customviews[index] == CVIEW_T3_Decostop) && ((!pDecoinfo->output_ndl_seconds) && (!pDecoinfo->output_time_to_surface_seconds) && (timer_Safetystop_GetCountDown() == 0))) | |
599 | 1790 { |
601 | 1791 if(*tX_selection_customview == tX_customviews[index]) |
1792 { | |
1793 useFallback = 1; /* the provided view is disabled => use fallback */ | |
1794 } | |
1795 fallbackSelection = CVIEW_T3_Decostop; | |
599 | 1796 iterate = 1; |
1797 } | |
1798 } | |
1799 } | |
1800 if((iterate) && (action == ACTION_END)) /* ACTION_END is used to check the enable state of the provided view. If it is enable the function will return without change */ | |
496 | 1801 { |
1802 action = ACTION_BUTTON_ENTER; | |
1803 } | |
599 | 1804 }while ((iterate == 1) && (!((indexOverrun == 1) && (*tX_selection_customview == tX_customviews[index])))); /* no other available view found => use fallback */ |
38 | 1805 |
599 | 1806 if(*tX_selection_customview == tX_customviews[index]) |
1807 { | |
1808 if(useFallback) | |
1809 { | |
1810 *tX_selection_customview = fallbackSelection; /* no active view found => keep actual view or change to fallback if actual view is deactivated */ | |
1811 } | |
1812 } | |
1813 else | |
1814 { | |
1815 *tX_selection_customview = tX_customviews[index]; | |
1816 } | |
38 | 1817 } |
1818 | |
1819 | |
1820 void t3_basics_colorscheme_mod(char *text) | |
1821 { | |
1822 if((text[0] == '\020') && !GFX_is_colorschemeDiveStandard()) | |
1823 { | |
1824 text[0] = '\027'; | |
1825 } | |
1826 } | |
1827 | |
1828 | |
496 | 1829 point_t t3_compass_circle(uint8_t id, uint16_t degree, point_t center) |
38 | 1830 { |
1831 float fCos, fSin; | |
1832 const float piMult = ((2 * 3.14159) / 360); | |
1833 // const int radius[4] = {95,105,115,60}; | |
1834 const int radius[4] = {85,95,105,90}; | |
496 | 1835 static point_t forcenter = {.x = 900, .y = 500}; /* used to identify change of circle position */ |
38 | 1836 static point_t r[4][360] = { 0 }; |
1837 | |
496 | 1838 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 | 1839 { |
1840 for(int i=0;i<360;i++) | |
1841 { | |
1842 fCos = cos(i * piMult); | |
1843 fSin = sin(i * piMult); | |
1844 for(int j=0;j<4;j++) | |
1845 { | |
496 | 1846 r[j][i].x = center.x + (int)(fSin * radius[j]); |
1847 r[j][i].y = center.y + (int)(fCos * radius[j]); | |
38 | 1848 } |
1849 } | |
496 | 1850 forcenter.x = center.x; |
1851 forcenter.y = center.y; | |
38 | 1852 } |
1853 if(id > 3) id = 0; | |
1854 if(degree > 359) degree = 0; | |
1855 return r[id][degree]; | |
1856 } | |
1857 | |
1858 | |
496 | 1859 void t3_basics_compass(GFX_DrawCfgScreen *tXscreen, point_t center, uint16_t ActualHeading, uint16_t UserSetHeading) |
38 | 1860 { |
496 | 1861 uint8_t loop = 0; |
38 | 1862 uint16_t LineHeading; |
496 | 1863 |
38 | 1864 static int32_t LastHeading = 0; |
1865 int32_t newHeading = 0; | |
1866 int32_t diff = 0; | |
1867 int32_t diff2 = 0; | |
1868 | |
1869 int32_t diffAbs = 0; | |
1870 int32_t diffAbs2 = 0; | |
1871 | |
1872 newHeading = ActualHeading; | |
1873 | |
1874 diff = newHeading - LastHeading; | |
1875 | |
1876 if(newHeading < LastHeading) | |
1877 diff2 = newHeading + 360 - LastHeading; | |
1878 else | |
1879 diff2 = newHeading - 360 - LastHeading; | |
1880 | |
1881 diffAbs = diff; | |
1882 if(diffAbs < 0) | |
1883 diffAbs *= -1; | |
1884 | |
1885 diffAbs2 = diff2; | |
1886 if(diffAbs2 < 0) | |
1887 diffAbs2 *= -1; | |
1888 | |
1889 if(diffAbs <= diffAbs2) | |
1890 newHeading = LastHeading + (diff / 2); | |
1891 else | |
1892 newHeading = LastHeading + (diff2 / 2); | |
1893 | |
1894 if(newHeading < 0) | |
1895 newHeading += 360; | |
1896 else | |
1897 if(newHeading >= 360) | |
1898 newHeading -= 360; | |
1899 | |
1900 LastHeading = newHeading; | |
1901 ActualHeading = newHeading; | |
1902 | |
1903 if (ActualHeading < 90) | |
1904 ActualHeading += 360; | |
1905 | |
1906 while(ActualHeading > 359) ActualHeading -= 360; | |
1907 | |
1908 LineHeading = 360 - ActualHeading; | |
496 | 1909 |
1910 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(0,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_Font030); // North | |
38 | 1911 LineHeading += 90; |
496 | 1912 |
1913 for (loop = 0; loop < 3; loop++) | |
1914 { | |
1915 if(LineHeading > 359) LineHeading -= 360; | |
1916 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(0,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_Font031); // Main Ticks | |
1917 LineHeading += 90; | |
1918 } | |
38 | 1919 |
1920 LineHeading = 360 - ActualHeading; | |
1921 LineHeading += 45; | |
496 | 1922 |
1923 for (loop = 0; loop < 4; loop++) | |
1924 { | |
1925 if(LineHeading > 359) LineHeading -= 360; | |
1926 GFX_draw_thick_line(5,tXscreen, t3_compass_circle(1,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_Font031); // Subtick | |
1927 LineHeading += 90; | |
1928 } | |
38 | 1929 |
1930 LineHeading = 360 - ActualHeading; | |
1931 LineHeading += 22; | |
496 | 1932 for (loop = 0; loop < 8; loop++) |
1933 { | |
1934 if(LineHeading > 359) LineHeading -= 360; | |
1935 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_Font031); // Subtick | |
1936 LineHeading += 45; | |
1937 } | |
38 | 1938 if(UserSetHeading) |
1939 { | |
1940 LineHeading = UserSetHeading + 360 - ActualHeading; | |
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_CompassUserHeadingTick); |
38 | 1943 |
1944 // R�ckpeilung, User Back Heading | |
1945 LineHeading = UserSetHeading + 360 + 180 - ActualHeading; | |
1946 if(LineHeading > 359) LineHeading -= 360; | |
1947 if(LineHeading > 359) LineHeading -= 360; | |
496 | 1948 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(3,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_CompassUserBackHeadingTick); |
38 | 1949 } |
1950 | |
1951 GFX_draw_circle(tXscreen, center, 106, CLUT_Font030); | |
1952 GFX_draw_circle(tXscreen, center, 107, CLUT_Font030); | |
1953 GFX_draw_circle(tXscreen, center, 108, CLUT_Font030); | |
1954 } | |
384
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1955 |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1956 uint8_t t3_GetEnabled_customviews() |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1957 { |
496 | 1958 uint8_t *pViews; |
1959 uint8_t increment = 1; | |
384
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1960 uint8_t enabledViewCnt = 0; |
496 | 1961 |
511 | 1962 pViews = (uint8_t*)t3_customviewsStandard; |
496 | 1963 while((*pViews != CVIEW_T3_END)) |
1964 { | |
1965 increment = 1; | |
1966 /* check if view is enabled */ | |
1967 if(t3_customview_disabled(*pViews)) | |
1968 { | |
1969 increment = 0; | |
1970 } | |
1971 pViews++; | |
1972 enabledViewCnt += increment; | |
1973 } | |
384
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1974 return enabledViewCnt; |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1975 } |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1976 |
518 | 1977 uint8_t t3_getCustomView(void) |
1978 { | |
1979 return t3_selection_customview; | |
1980 } |