Mercurial > public > ostc4
annotate Discovery/Src/t3.c @ 646:0fc1b47d2482
Remove battery charge counter from information menu:
Due to long timeouts during charging (e.g. temperature break) multiple charge cycles could be counted without removment of the charger. To avoid confusions the visualization of this parameter has been removed.
author | Ideenmodellierer |
---|---|
date | Tue, 13 Apr 2021 19:21:14 +0200 |
parents | c737cf5d9067 |
children | 3ccf13af4651 |
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 | |
950 uint16_t tempWinX0; | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
951 uint16_t tempWinX1; |
38 | 952 uint16_t tempWinY0; |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
953 uint16_t tempWinY1; |
38 | 954 uint16_t tempWinC2X0; |
413 | 955 uint16_t tempWinC2Y0; |
956 uint16_t tempWinC2X1; | |
957 uint16_t tempWinC2Y1; | |
38 | 958 uint16_t tempWinC2Tab; |
959 | |
960 tempWinX0 = tXc1->WindowX0; | |
961 tempWinY0 = tXc1->WindowY0; | |
496 | 962 tempWinX1 = tXc1->WindowX1; |
963 tempWinY1 = tXc1->WindowY1; | |
413 | 964 |
38 | 965 tempWinC2X0 = tXc2->WindowX0; |
413 | 966 tempWinC2Y0 = tXc2->WindowY0; |
967 tempWinC2X1 = tXc2->WindowX1; | |
968 tempWinC2Y1 = tXc2->WindowY1; | |
38 | 969 tempWinC2Tab = tXc2->WindowTab; |
970 | |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
971 if(settingsGetPointer()->compassInertia) |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
972 { |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
973 heading = (uint16_t)compass_getCompensated(); |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
974 } |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
975 else |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
976 { |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
977 heading = (uint16_t)stateUsed->lifeData.compass_heading; |
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
978 } |
582
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
979 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
|
980 { |
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
981 if(t3_customview_disabled(tX_selection_customview)) |
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
982 { |
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
983 tX_selection_customview = t3_change_customview(ACTION_BUTTON_ENTER); |
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
984 } |
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
985 last_customview = tX_selection_customview; |
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
986 } |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
987 |
38 | 988 switch(tX_selection_customview) |
989 { | |
990 case CVIEW_T3_ApnoeSurfaceInfo: | |
991 snprintf(text,TEXTSIZE,"\032\f%c",TXT_MaxDepth); | |
992 | |
413 | 993 if(!pSettings->FlipDisplay) |
994 { | |
995 GFX_write_string(&FontT42,tXc1,text,0); | |
996 tXc1->WindowY0 = 100; | |
997 } | |
998 else | |
999 { | |
1000 GFX_write_string(&FontT42,tXc2,text,0); | |
1001 tXc2->WindowY1 -= 100; /* jump to upper of two lines */ | |
1002 } | |
38 | 1003 |
1004 snprintf(text,TEXTSIZE,"\020\016%01.1f",unit_depth_float(stateUsed->lifeData.apnea_last_max_depth_meter)); | |
1005 t3_basics_colorscheme_mod(text); | |
413 | 1006 |
1007 if(!pSettings->FlipDisplay) | |
1008 { | |
1009 GFX_write_string(&FontT105,tXc1,text,0); | |
1010 tXc1->WindowY0 = tempWinY0; | |
1011 } | |
1012 else | |
1013 { | |
1014 GFX_write_string(&FontT105,tXc2,text,0); | |
1015 tXc2->WindowY1 = tempWinC2Y1; /* jump to upper of two lines */ | |
1016 } | |
38 | 1017 |
1018 | |
1019 snprintf(text,TEXTSIZE,"\020\016%01.1f",unit_depth_float(stateUsed->lifeData.apnea_total_max_depth_meter)); | |
1020 t3_basics_colorscheme_mod(text); | |
413 | 1021 if(!pSettings->FlipDisplay) |
1022 { | |
1023 GFX_write_string(&FontT105,tXc1,text,0); | |
1024 } | |
1025 else | |
1026 { | |
1027 GFX_write_string(&FontT105,tXc2,text,0); | |
1028 } | |
38 | 1029 break; |
1030 | |
1031 case CVIEW_T3_StopWatch: | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1032 |
38 | 1033 Stopwatch.Total = timer_Stopwatch_GetTime(); |
1034 Stopwatch.Minutes = Stopwatch.Total / 60; | |
1035 Stopwatch.Seconds = Stopwatch.Total - ( Stopwatch.Minutes * 60 ); | |
1036 fAverageDepth = timer_Stopwatch_GetAvarageDepth_Meter(); | |
1037 fAverageDepthAbsolute = stateUsed->lifeData.average_depth_meter; | |
1038 | |
1039 snprintf(text,TEXTSIZE,"\032\f%c",TXT_AvgDepth); | |
1040 GFX_write_string(&FontT42,tXc1,text,0); | |
1041 snprintf(text,TEXTSIZE,"\030\003\016%01.1f",unit_depth_float(fAverageDepthAbsolute)); | |
1042 GFX_write_string(&FontT105,tXc1,text,0); | |
1043 | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1044 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1045 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1046 tXc1->WindowX0 = 480; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1047 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1048 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1049 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1050 tXc1->WindowX1 = 320; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1051 tXc1->WindowY0 = t3c1.WindowY0; /* select customer window */ |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1052 } |
38 | 1053 // 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
|
1054 |
38 | 1055 snprintf(text,TEXTSIZE,"\032\f%c", TXT_Stopwatch); |
1056 GFX_write_string(&FontT42,tXc1,text,0); | |
1057 snprintf(text,TEXTSIZE,"\030\016%01.1f",unit_depth_float(fAverageDepth)); | |
1058 GFX_write_string(&FontT105,tXc1,text,0); | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1059 if(!pSettings->FlipDisplay) |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1060 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1061 tXc1->WindowY0 = 100; |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1062 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1063 else |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1064 { |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1065 tXc1->WindowY1 -= 100; /* jump to upper of two lines */ |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1066 } |
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1067 |
38 | 1068 snprintf(text,TEXTSIZE,"\030%u:\016\016%02u",Stopwatch.Minutes, Stopwatch.Seconds); |
1069 GFX_write_string(&FontT105,tXc1,text,0); | |
110
cc8e24374b83
Added option to handled mirrored display to existing functions
Ideenmodellierer
parents:
38
diff
changeset
|
1070 |
496 | 1071 break; |
38 | 1072 |
1073 case CVIEW_T3_GasList: | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1074 gasPosIdx = 0; |
38 | 1075 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE, TXT2BYTE_Gaslist); |
1076 GFX_write_string(&FontT42,tXc1,text,0); | |
1077 | |
1078 textpointer = 0; | |
1079 tXc2->WindowX0 = 0; | |
518 | 1080 tXc2->WindowTab = 800/3; // /2 |
38 | 1081 |
413 | 1082 if(pSettings->FlipDisplay) |
1083 { | |
1084 tXc2->WindowY1 = 0; | |
1085 } | |
1086 | |
38 | 1087 pGasLine = settingsGetPointer()->gas; |
1088 if(actualLeftMaxDepth(stateUsed)) | |
1089 fPpO2limitHigh = (float)(settingsGetPointer()->ppO2_max_deco) / 100; | |
1090 else | |
1091 fPpO2limitHigh = (float)(settingsGetPointer()->ppO2_max_std) / 100; | |
1092 fPpO2limitLow = (float)(settingsGetPointer()->ppO2_min) / 100; | |
1093 for(int gasId=1;gasId<=NUM_GASES;gasId++) | |
1094 { | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1095 #ifdef ENABLE_UNUSED_GAS_HIDING |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1096 if(!pGasLine[gasId].note.ub.off) |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1097 { |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1098 #endif |
38 | 1099 textpointer = 0; |
518 | 1100 text[textpointer++] = '\003'; |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1101 |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1102 lineNumber = 1; |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1103 |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1104 switch(gasPosIdx) |
38 | 1105 { |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1106 case 0: lineNumber = 0; |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1107 case 1: |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1108 break; |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1109 case 4: text[textpointer++] = '\001'; /* display centered */ |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1110 break; |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1111 case 2: lineNumber = 0; |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1112 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
|
1113 default: |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1114 break; |
38 | 1115 } |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1116 gasPosIdx++; |
518 | 1117 |
38 | 1118 fPpO2ofGasAtThisDepth = (stateUsed->lifeData.pressure_ambient_bar - WATER_VAPOUR_PRESSURE) * pGasLine[gasId].oxygen_percentage / 100; |
1119 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
|
1120 strcpy(&text[textpointer++],"\031"); |
518 | 1121 else if(stateUsed->lifeData.actualGas.GasIdInSettings == gasId) /* actual selected gas */ |
1122 { | |
1123 strcpy(&text[textpointer++],"\030"); | |
1124 } | |
38 | 1125 else if((fPpO2ofGasAtThisDepth > fPpO2limitHigh) || (fPpO2ofGasAtThisDepth < fPpO2limitLow)) |
1126 strcpy(&text[textpointer++],"\025"); | |
518 | 1127 else if(actualBetterGasId() == gasId) |
1128 { | |
1129 strcpy(&text[textpointer++],"\026"); /* Highlight better gas */ | |
1130 } | |
38 | 1131 else |
518 | 1132 strcpy(&text[textpointer++],"\023"); /* Blue for travel or deco without special state */ |
38 | 1133 |
1134 text[textpointer++] = ' '; | |
1135 oxygen = pGasLine[gasId].oxygen_percentage; | |
1136 helium = pGasLine[gasId].helium_percentage; | |
1137 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
|
1138 |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1139 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
|
1140 { |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1141 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
|
1142 } |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1143 text[textpointer++] = 0; |
518 | 1144 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
|
1145 #ifdef ENABLE_UNUSED_GAS_HIDING |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1146 } |
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1147 #endif |
38 | 1148 } |
1149 break; | |
1150 | |
1151 case CVIEW_T3_Temperature: | |
1152 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Temperature); | |
1153 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
|
1154 |
8b8074080d7b
Bugfix: average temperature on arrival from RTE instead of display time
Jan Mulder <jlmulder@xs4all.nl>
parents:
174
diff
changeset
|
1155 temperature = unit_temperature_float(stateUsed->lifeData.temperature_celsius); |
38 | 1156 textpointer = snprintf(text,TEXTSIZE,"\030\003\016%01.1f \140",temperature); // "\016\016%01.1f `" + C or F |
1157 if(settingsGetPointer()->nonMetricalSystem == 0) | |
1158 text[textpointer++] = 'C'; | |
1159 else | |
1160 text[textpointer++] = 'F'; | |
1161 text[textpointer++] = 0; | |
1162 GFX_write_string(&FontT105,tXc1,text,0); | |
1163 break; | |
1164 | |
1165 case CVIEW_Compass: | |
496 | 1166 center.x = 600; |
1167 center.y = 116; | |
38 | 1168 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE, TXT2BYTE_Compass); |
1169 GFX_write_string(&FontT42,tXc1,text,0); | |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
1170 snprintf(text,100,"\030\003%03i`",heading); |
38 | 1171 GFX_write_string(&FontT105,tXc1,text,0); |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
1172 t3_basics_compass(tXscreen, center, heading, stateUsed->diveSettings.compassHeading); |
38 | 1173 break; |
601 | 1174 #ifdef ENABLE_T3_PROFILE_VIEW |
592
f52bc70e380f
MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents:
582
diff
changeset
|
1175 case CVIEW_T3_Profile: |
599 | 1176 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
|
1177 GFX_write_string(&FontT42,tXc1,text,0); |
f52bc70e380f
MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents:
582
diff
changeset
|
1178 t3_miniLiveLogProfile(); |
f52bc70e380f
MotionCtrl - Sectorview Map sectors directly to custom views:
Ideenmodellierer
parents:
582
diff
changeset
|
1179 break; |
601 | 1180 #endif |
542
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1181 case CVIEW_T3_DecoTTS: |
38 | 1182 case CVIEW_T3_Decostop: |
1183 default: | |
1184 // decostop | |
1185 if(pDecoinfo->output_time_to_surface_seconds) | |
1186 { | |
1187 tHome_findNextStop(pDecoinfo->output_stop_length_seconds, &nextstopDepthMeter, &nextstopLengthSeconds); | |
1188 } | |
1189 else | |
1190 { | |
1191 nextstopDepthMeter = 0; | |
1192 nextstopLengthSeconds = 0; | |
1193 } | |
1194 | |
1195 SafetyStopTime.Total = timer_Safetystop_GetCountDown(); | |
1196 SafetyStopTime.Minutes = SafetyStopTime.Total / 60; | |
1197 SafetyStopTime.Seconds = SafetyStopTime.Total - (SafetyStopTime.Minutes * 60); | |
1198 | |
1199 if(nextstopDepthMeter) | |
1200 { | |
1201 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Decostop); | |
1202 GFX_write_string(&FontT42,tXc1,text,0); | |
1203 | |
1204 textpointer = 0; | |
1205 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
|
1206 , unit_depth_integer(nextstopDepthMeter) |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1207 , unit_depth_char1_T105() |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1208 , unit_depth_char2_T105() |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1209 , (nextstopLengthSeconds+59)/60); |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1210 t3_basics_colorscheme_mod(text); |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1211 GFX_write_string(&FontT105,tXc1,text,0); |
38 | 1212 } |
1213 else if(SafetyStopTime.Total && (depth > timer_Safetystop_GetDepthUpperLimit())) | |
1214 { | |
1215 textpointer = 0; | |
1216 snprintf(&text[textpointer],TEXTSIZE,"\032\f%c%c",TXT_2BYTE,TXT2BYTE_SafetyStop2); | |
1217 GFX_write_string(&FontT42,tXc1,text,0); | |
1218 | |
1219 textpointer = 0; | |
1220 snprintf(&text[textpointer],TEXTSIZE,"\020\003\016%u:%02u",SafetyStopTime.Minutes,SafetyStopTime.Seconds); | |
1221 t3_basics_colorscheme_mod(text); | |
496 | 1222 GFX_write_string(&FontT105,tXc1,text,0); |
38 | 1223 } |
237
ec16fd26e280
Bugfix: do not show NDL in bigscreen mode when zero
Jan Mulder <jlmulder@xs4all.nl>
parents:
214
diff
changeset
|
1224 else if(pDecoinfo->output_ndl_seconds) // NDL |
38 | 1225 { |
1226 snprintf(text,TEXTSIZE,"\032\f%c",TXT_Nullzeit); | |
1227 GFX_write_string(&FontT42,tXc1,text,0); | |
1228 if(pDecoinfo->output_ndl_seconds < 1000 * 60) | |
1229 snprintf(text,TEXTSIZE,"\020\003%i'",pDecoinfo->output_ndl_seconds/60); | |
1230 else | |
1231 snprintf(text,TEXTSIZE,"\020\003%ih",pDecoinfo->output_ndl_seconds/3600); | |
1232 t3_basics_colorscheme_mod(text); | |
496 | 1233 GFX_write_string(&FontT105,tXc1,text,0); |
38 | 1234 } |
542
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1235 |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1236 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
|
1237 { |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1238 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
|
1239 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
|
1240 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
|
1241 { |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1242 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
|
1243 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
|
1244 else |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1245 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
|
1246 t3_basics_colorscheme_mod(text); |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1247 GFX_write_string(&FontT105,tXc1,text,0); |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1248 } |
6960df7ddb09
Added new t3 view showing first deco stop and tts in parallel:
Ideenmodellierer
parents:
541
diff
changeset
|
1249 } |
38 | 1250 break; |
1251 | |
1252 case CVIEW_sensors: | |
1253 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE,TXT2BYTE_O2monitor); | |
1254 GFX_write_string(&FontT42,tXc1,text,0); | |
1255 | |
1256 for(int i=0;i<3;i++) | |
1257 { | |
1258 textpointer = 0; | |
1259 text[textpointer++] = '\030'; | |
1260 if(i==1) | |
564
5e0a75e2f00b
Bugfix One or more deactivated sensors hide sensor display:
Ideenmodellierer
parents:
553
diff
changeset
|
1261 text[textpointer++] = '\001'; /* center */ |
38 | 1262 else if(i==2) |
564
5e0a75e2f00b
Bugfix One or more deactivated sensors hide sensor display:
Ideenmodellierer
parents:
553
diff
changeset
|
1263 text[textpointer++] = '\002'; /* right */ |
5e0a75e2f00b
Bugfix One or more deactivated sensors hide sensor display:
Ideenmodellierer
parents:
553
diff
changeset
|
1264 |
577
9bb9a52d6ae5
Handle o2 voltage values < 0.5mV as invalid:
Ideenmodellierer
parents:
564
diff
changeset
|
1265 if((stateUsed->diveSettings.ppo2sensors_deactivated & (1<<i)) || (stateUsed->lifeData.ppO2Sensor_bar[i] == 0.0)) |
38 | 1266 { |
1267 text[textpointer++] = '\031'; | |
1268 text[textpointer++] = ' '; | |
1269 text[textpointer++] = '-'; | |
1270 text[textpointer++] = ' '; | |
633
68d95049f11a
Added menu structure to allow ppo2 modification in simulator mode:
Ideenmodellierer
parents:
624
diff
changeset
|
1271 text[textpointer++] = 0; |
38 | 1272 } |
1273 else | |
1274 { | |
1275 if(stateUsed->warnings.sensorOutOfBounds[i]) | |
1276 text[textpointer++] = '\025'; | |
564
5e0a75e2f00b
Bugfix One or more deactivated sensors hide sensor display:
Ideenmodellierer
parents:
553
diff
changeset
|
1277 textpointer += snprintf(&text[textpointer],TEXTSIZE,"%.2f",stateUsed->lifeData.ppO2Sensor_bar[i]); |
38 | 1278 } |
564
5e0a75e2f00b
Bugfix One or more deactivated sensors hide sensor display:
Ideenmodellierer
parents:
553
diff
changeset
|
1279 GFX_write_string(&FontT105,tXc1,text,0); |
38 | 1280 } |
1281 break; | |
1282 | |
1283 case CVIEW_T3_MaxDepth: | |
1284 snprintf(text,TEXTSIZE,"\032\f%c",TXT_MaxDepth); | |
413 | 1285 if(pSettings->FlipDisplay) |
1286 { | |
1287 if(mode == DIVEMODE_Apnea) | |
1288 { | |
1289 GFX_write_string(&FontT42,tXc2,text,0); | |
1290 } | |
1291 else | |
1292 { | |
1293 GFX_write_string(&FontT42,tXc1,text,0); | |
1294 } | |
1295 } | |
1296 else | |
1297 { | |
1298 GFX_write_string(&FontT42,tXc1,text,0); | |
1299 } | |
38 | 1300 snprintf(text,TEXTSIZE,"\020\003\016%01.1f",unit_depth_float(stateUsed->lifeData.max_depth_meter)); |
1301 t3_basics_colorscheme_mod(text); | |
413 | 1302 if(pSettings->FlipDisplay) |
1303 { | |
1304 if(mode == DIVEMODE_Apnea) | |
1305 { | |
1306 GFX_write_string(&FontT105,tXc2,text,0); | |
1307 } | |
1308 else | |
1309 { | |
1310 GFX_write_string(&FontT105,tXc1,text,0); | |
1311 } | |
1312 } | |
1313 else | |
1314 { | |
496 | 1315 GFX_write_string(&FontT105,tXc1,text,0); |
413 | 1316 } |
38 | 1317 break; |
1318 | |
1319 case CVIEW_T3_TTS: | |
1320 snprintf(text,TEXTSIZE,"\032\f%c",TXT_TTS); | |
1321 GFX_write_string(&FontT42,tXc1,text,0); | |
1322 if(pDecoinfo->output_time_to_surface_seconds) | |
1323 { | |
1324 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
|
1325 snprintf(text,TEXTSIZE,"\020\003\002%i'",(pDecoinfo->output_time_to_surface_seconds + 59)/ 60); |
38 | 1326 else |
214
51a3aeffc6b3
Bugfix: handle rounding of TTS and future TTS consistently
Jan Mulder <jlmulder@xs4all.nl>
parents:
189
diff
changeset
|
1327 snprintf(text,TEXTSIZE,"\020\003\002%ih",(pDecoinfo->output_time_to_surface_seconds + 59)/ 3600); |
38 | 1328 t3_basics_colorscheme_mod(text); |
496 | 1329 GFX_write_string(&FontT105,tXc1,text,0); |
38 | 1330 } |
1331 break; | |
1332 | |
1333 case CVIEW_T3_ppO2andGas: | |
1334 snprintf(text,TEXTSIZE,"\032\f%c",TXT_ppO2); | |
1335 GFX_write_string(&FontT42,tXc1,text,0); | |
1336 snprintf(text,TEXTSIZE,"\020\003%01.2f",stateUsed->lifeData.ppO2); | |
1337 t3_basics_colorscheme_mod(text); | |
496 | 1338 GFX_write_string(&FontT105,tXc1,text,0); |
38 | 1339 |
1340 textpointer = 0; | |
1341 text[textpointer++] = '\020'; | |
1342 text[textpointer++] = '\003'; | |
1343 oxygen_percentage = 100; | |
1344 oxygen_percentage -= stateUsed->lifeData.actualGas.nitrogen_percentage; | |
1345 oxygen_percentage -= stateUsed->lifeData.actualGas.helium_percentage; | |
1346 text[textpointer++] = '\002'; | |
1347 tHome_gas_writer(oxygen_percentage,stateUsed->lifeData.actualGas.helium_percentage,&text[textpointer]); | |
1348 //textpointer = snprintf(&text[textpointer],TEXTSIZE,"\020\002%02u/%02u",oxygen_percentage, stateUsed->lifeData.actualGas.helium_percentage); | |
1349 t3_basics_colorscheme_mod(text); | |
496 | 1350 GFX_write_string(&FontT48,tXc1,text,0); |
38 | 1351 break; |
496 | 1352 |
1353 case CVIEW_T3_Navigation: | |
1354 Stopwatch.Total = timer_Stopwatch_GetTime(); | |
1355 Stopwatch.Minutes = Stopwatch.Total / 60; | |
1356 Stopwatch.Seconds = Stopwatch.Total - ( Stopwatch.Minutes * 60 ); | |
1357 fAverageDepth = timer_Stopwatch_GetAvarageDepth_Meter(); | |
1358 | |
1359 if(!pSettings->FlipDisplay) | |
1360 { | |
1361 tXc2->WindowX0 = 550; | |
1362 } | |
1363 else | |
1364 { | |
1365 tXc2->WindowX1 = 800; | |
1366 tXc2->WindowY0 = t3c2.WindowY0; /* select customer window */ | |
1367 } | |
1368 | |
1369 snprintf(text,TEXTSIZE,"\032\002\f%c", TXT_Stopwatch); | |
511 | 1370 GFX_write_string(&FontT42,tXc1,text,0); |
564
5e0a75e2f00b
Bugfix One or more deactivated sensors hide sensor display:
Ideenmodellierer
parents:
553
diff
changeset
|
1371 snprintf(text,TEXTSIZE,"\030\002\016%01.1f",unit_depth_float(fAverageDepth)); |
511 | 1372 GFX_write_string(&FontT105,tXc1,text,0); |
496 | 1373 if(!pSettings->FlipDisplay) |
1374 { | |
1375 tXc2->WindowY0 = 100; | |
1376 } | |
1377 else | |
1378 { | |
1379 tXc2->WindowY1 -= 100; /* jump to upper of two lines */ | |
1380 } | |
1381 | |
1382 snprintf(text,TEXTSIZE,"\030\002%u:\016\016%02u",Stopwatch.Minutes, Stopwatch.Seconds); | |
511 | 1383 GFX_write_string(&FontT105,tXc1,text,1); |
496 | 1384 |
1385 | |
1386 center.x = 400; | |
1387 center.y = 116; | |
1388 | |
1389 snprintf(text,TEXTSIZE,"\032\f%c%c",TXT_2BYTE, TXT2BYTE_Compass); | |
1390 GFX_write_string(&FontT42,tXc1,text,0); | |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
1391 snprintf(text,100,"\030%03i`",heading); |
496 | 1392 GFX_write_string(&FontT144,tXc1,text,0); |
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
529
diff
changeset
|
1393 t3_basics_compass(tXscreen, center, heading, stateUsed->diveSettings.compassHeading); |
496 | 1394 |
1395 break; | |
1396 | |
1397 case CVIEW_T3_DepthData: | |
1398 snprintf(text,TEXTSIZE,"\032\f%c",TXT_MaxDepth); | |
1399 if(pSettings->FlipDisplay) | |
1400 { | |
1401 if(mode == DIVEMODE_Apnea) | |
1402 { | |
1403 GFX_write_string(&FontT42,tXc2,text,0); | |
1404 } | |
1405 else | |
1406 { | |
1407 GFX_write_string(&FontT42,tXc1,text,0); | |
1408 } | |
1409 } | |
1410 else | |
1411 { | |
1412 GFX_write_string(&FontT42,tXc1,text,0); | |
1413 } | |
1414 snprintf(text,TEXTSIZE,"\020\003\016%01.1f",unit_depth_float(stateUsed->lifeData.max_depth_meter)); | |
1415 t3_basics_colorscheme_mod(text); | |
1416 if(pSettings->FlipDisplay) | |
1417 { | |
1418 if(mode == DIVEMODE_Apnea) | |
1419 { | |
1420 GFX_write_string(&FontT105,tXc2,text,0); | |
1421 } | |
1422 else | |
1423 { | |
1424 GFX_write_string(&FontT105,tXc1,text,0); | |
1425 } | |
1426 } | |
1427 else | |
1428 { | |
1429 GFX_write_string(&FontT105,tXc1,text,0); | |
1430 } | |
1431 fAverageDepthAbsolute = stateUsed->lifeData.average_depth_meter; | |
1432 snprintf(text,TEXTSIZE,"\032\002\f%c",TXT_AvgDepth); | |
511 | 1433 GFX_write_string(&FontT42,tXc1,text,0); |
496 | 1434 |
564
5e0a75e2f00b
Bugfix One or more deactivated sensors hide sensor display:
Ideenmodellierer
parents:
553
diff
changeset
|
1435 snprintf(text,TEXTSIZE,"\020\003\002\016\%01.1f",unit_depth_float(fAverageDepthAbsolute)); |
511 | 1436 GFX_write_string(&FontT105,tXc1,text,0); |
496 | 1437 break; |
38 | 1438 } |
496 | 1439 |
1440 | |
1441 | |
38 | 1442 tXc1->WindowX0 = tempWinX0; |
1443 tXc1->WindowY0 = tempWinY0; | |
496 | 1444 tXc1->WindowX1 = tempWinX1; |
1445 tXc1->WindowY1 = tempWinY1; | |
413 | 1446 |
38 | 1447 tXc2->WindowX0 = tempWinC2X0; |
413 | 1448 tXc2->WindowY0 = tempWinC2Y0; |
1449 tXc2->WindowX1 = tempWinC2X1; | |
1450 tXc2->WindowY1 = tempWinC2Y1; | |
38 | 1451 tXc2->WindowTab = tempWinC2Tab; |
1452 } | |
1453 | |
1454 | |
1455 uint8_t t3_test_customview_warnings(void) | |
1456 { | |
1457 uint8_t count = 0; | |
1458 | |
1459 count = 0; | |
1460 count += stateUsed->warnings.decoMissed; | |
1461 count += stateUsed->warnings.ppO2Low; | |
1462 count += stateUsed->warnings.ppO2High; | |
1463 //count += stateUsed->warnings.lowBattery; | |
1464 count += stateUsed->warnings.sensorLinkLost; | |
1465 count += stateUsed->warnings.fallback; | |
1466 | |
1467 return count; | |
1468 } | |
1469 | |
1470 //void t3_show_customview_warnings(GFX_DrawCfgScreen *tXscreen, GFX_DrawCfgWindow* tXl1, GFX_DrawCfgWindow* tXr1, uint8_t mode) | |
1471 void t3_basics_show_customview_warnings(GFX_DrawCfgWindow* tXc1) | |
1472 { | |
1473 char text[256], textMain[256]; | |
1474 uint8_t textpointer, textpointerMain, lineFree, more; | |
1475 | |
1476 snprintf(text,TEXTSIZE,"\025\f%c",TXT_Warning); | |
1477 GFX_write_string(&FontT42,&t3c1,text,0); | |
1478 | |
1479 lineFree = 1; | |
1480 more = 0; | |
1481 | |
1482 textpointerMain = 0; | |
511 | 1483 textMain[textpointerMain++] = '\025'; /* red */ |
1484 textMain[textpointerMain++] = '\003'; /* doublesize */ | |
38 | 1485 |
1486 textpointer = 0; | |
1487 | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1488 text[textpointer++] = '\031'; |
38 | 1489 text[textpointer++] = TXT_2BYTE; |
1490 text[textpointer++] = TXT2BYTE_WarnDecoMissed; | |
1491 if(stateUsed->warnings.decoMissed) | |
1492 { | |
1493 text[textpointer - 3] = '\025'; | |
1494 if(lineFree) | |
1495 { | |
1496 textMain[textpointerMain++] = TXT_2BYTE; | |
1497 textMain[textpointerMain++] = text[textpointer - 1]; | |
1498 textMain[textpointerMain] = 0; | |
1499 lineFree--; | |
1500 } | |
1501 else | |
1502 { | |
1503 more++; | |
1504 } | |
1505 } | |
1506 | |
1507 text[textpointer++] = '\t'; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1508 text[textpointer++] = '\031'; |
38 | 1509 text[textpointer++] = TXT_2BYTE; |
1510 text[textpointer++] = TXT2BYTE_WarnPPO2Low; | |
1511 if(stateUsed->warnings.ppO2Low) | |
1512 { | |
1513 text[textpointer - 3] = '\025'; | |
1514 if(lineFree) | |
1515 { | |
1516 textMain[textpointerMain++] = TXT_2BYTE; | |
1517 textMain[textpointerMain++] = text[textpointer - 1]; | |
1518 textMain[textpointerMain] = 0; | |
1519 lineFree--; | |
1520 } | |
1521 else | |
1522 { | |
1523 more++; | |
1524 } | |
1525 } | |
1526 | |
1527 text[textpointer++] = '\n'; | |
1528 text[textpointer++] = '\r'; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1529 text[textpointer++] = '\031'; |
38 | 1530 text[textpointer++] = TXT_2BYTE; |
1531 text[textpointer++] = TXT2BYTE_WarnPPO2High; | |
1532 if(stateUsed->warnings.ppO2High) | |
1533 { | |
1534 text[textpointer - 3] = '\025'; | |
1535 if(lineFree) | |
1536 { | |
1537 textMain[textpointerMain++] = TXT_2BYTE; | |
1538 textMain[textpointerMain++] = text[textpointer - 1]; | |
1539 textMain[textpointerMain] = 0; | |
1540 lineFree--; | |
1541 } | |
1542 else | |
1543 { | |
1544 more++; | |
1545 } | |
1546 } | |
1547 | |
1548 text[textpointer++] = '\t'; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1549 text[textpointer++] = '\031'; |
38 | 1550 text[textpointer++] = TXT_2BYTE; |
1551 text[textpointer++] = TXT2BYTE_WarnFallback; | |
1552 if(stateUsed->warnings.fallback) | |
1553 { | |
1554 text[textpointer - 3] = '\025'; | |
1555 if(lineFree) | |
1556 { | |
1557 textMain[textpointerMain++] = TXT_2BYTE; | |
1558 textMain[textpointerMain++] = text[textpointer - 1]; | |
1559 textMain[textpointerMain] = 0; | |
1560 lineFree--; | |
1561 } | |
1562 else | |
1563 { | |
1564 more++; | |
1565 } | |
1566 } | |
1567 | |
1568 text[textpointer++] = '\n'; | |
1569 text[textpointer++] = '\r'; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1570 text[textpointer++] = '\031'; |
38 | 1571 text[textpointer++] = TXT_2BYTE; |
1572 text[textpointer++] = TXT2BYTE_WarnSensorLinkLost; | |
1573 if(stateUsed->warnings.sensorLinkLost) | |
1574 { | |
1575 text[textpointer - 3] = '\025'; | |
1576 if(lineFree) | |
1577 { | |
1578 textMain[textpointerMain++] = TXT_2BYTE; | |
1579 textMain[textpointerMain++] = text[textpointer - 1]; | |
1580 textMain[textpointerMain] = 0; | |
1581 lineFree--; | |
1582 } | |
1583 else | |
1584 { | |
1585 more++; | |
1586 } | |
1587 } | |
1588 | |
1589 /* | |
1590 text[textpointer++] = '\t'; | |
527
962d7b2c18c6
Do not show gases in "Off" state in custom gas list:
Ideenmodellierer
parents:
518
diff
changeset
|
1591 text[textpointer++] = '\031'; |
38 | 1592 text[textpointer++] = TXT_2BYTE; |
1593 text[textpointer++] = TXT2BYTE_WarnBatteryLow; | |
1594 if(stateUsed->warnings.lowBattery) | |
1595 { | |
1596 text[textpointer - 3] = '\025'; | |
1597 if(lineFree) | |
1598 { | |
1599 textMain[textpointerMain++] = TXT_2BYTE; | |
1600 textMain[textpointerMain++] = text[textpointer - 1]; | |
1601 textMain[textpointerMain] = 0; | |
1602 lineFree--; | |
1603 } | |
1604 else | |
1605 { | |
1606 more++; | |
1607 } | |
1608 } | |
1609 */ | |
1610 text[textpointer] = 0; | |
1611 /* | |
1612 if(more) | |
1613 { | |
1614 text[textpointer++] = '\002'; | |
1615 text[textpointer++] = '+'; | |
1616 if(more < 10) | |
1617 text[textpointer++] = '0' + more; | |
1618 else | |
1619 text[textpointer++] = 'X'; | |
1620 text[textpointer] = 0; | |
1621 } | |
1622 */ | |
511 | 1623 GFX_write_string(&FontT48,&t3c1,textMain,0); |
38 | 1624 if(more) |
1625 { | |
511 | 1626 GFX_write_string(&FontT48,&t3c2,text,0); |
38 | 1627 } |
1628 } | |
1629 | |
496 | 1630 uint8_t t3_customview_disabled(uint8_t view) |
1631 { | |
1632 uint8_t i = 0; | |
1633 uint8_t cv_disabled = 0; | |
1634 const uint8_t *pcv_changelist; | |
1635 uint32_t cv_config = settingsGetPointer()->cv_config_BigScreen; | |
1636 | |
511 | 1637 pcv_changelist = cv_changelist_BS; |
496 | 1638 |
1639 while(pcv_changelist[i] != CVIEW_T3_END) | |
1640 { | |
1641 if((view == pcv_changelist[i]) && !CHECK_BIT_THOME(cv_config, pcv_changelist[i])) | |
1642 { | |
1643 cv_disabled = 1; | |
1644 break; | |
1645 } | |
1646 i++; | |
1647 } | |
1648 | |
1649 if (((view == CVIEW_sensors) || (view == CVIEW_sensors_mV)) && | |
582
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
1650 ((stateUsed->diveSettings.ppo2sensors_deactivated == 0x07) || (stateUsed->diveSettings.ccrOption == 0) || stateUsed->warnings.fallback)) |
496 | 1651 { |
1652 cv_disabled = 1; | |
1653 } | |
1654 | |
1655 return cv_disabled; | |
1656 } | |
38 | 1657 |
582
64bf41faab83
Show Fallback if no valid sensor value is available:
Ideenmodellierer
parents:
577
diff
changeset
|
1658 uint8_t t3_change_customview(uint8_t action) |
38 | 1659 { |
511 | 1660 |
496 | 1661 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
|
1662 return t3_selection_customview; |
38 | 1663 } |
1664 | |
1665 | |
511 | 1666 void t3_basics_change_customview(uint8_t *tX_selection_customview,const uint8_t *tX_customviews, uint8_t action) |
38 | 1667 { |
1668 const SDecoinfo * pDecoinfo; | |
1669 if(stateUsed->diveSettings.deco_type.ub.standard == GF_MODE) | |
1670 pDecoinfo = &stateUsed->decolistBuehlmann; | |
1671 else | |
1672 pDecoinfo = &stateUsed->decolistVPM; | |
1673 | |
511 | 1674 uint8_t curViewIdx = 0xff; |
1675 uint8_t index = 0; | |
599 | 1676 uint8_t indexOverrun = 0; |
511 | 1677 uint8_t lastViewIdx = 0; |
599 | 1678 uint8_t iterate = 0; /* set to 1 if a view has to be skipped */ |
1679 uint8_t useFallback = 0; /* is set if the current view is disabled */ | |
1680 uint8_t fallbackSelection = CVIEW_noneOrDebug; /* show "None" view per default */ | |
38 | 1681 |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1682 /* set pointer to currently selected view and count number of entries */ |
511 | 1683 while((tX_customviews[index] != CVIEW_T3_END)) |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1684 { |
511 | 1685 if (tX_customviews[index] == *tX_selection_customview) |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1686 { |
511 | 1687 curViewIdx = index; |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1688 } |
511 | 1689 index++; |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1690 } |
511 | 1691 if(curViewIdx == 0xff) /* called with unknown view */ |
496 | 1692 { |
511 | 1693 curViewIdx = 0; |
599 | 1694 *tX_selection_customview = CVIEW_noneOrDebug; /* show "None" view per default */ |
496 | 1695 } |
511 | 1696 lastViewIdx = index; |
1697 index = curViewIdx; | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1698 do |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1699 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1700 iterate = 0; |
496 | 1701 switch(action) |
1702 { | |
1703 case ACTION_BUTTON_ENTER: | |
1704 case ACTION_PITCH_POS: | |
1705 | |
511 | 1706 if(tX_customviews[index] != CVIEW_T3_END) |
496 | 1707 { |
511 | 1708 index++; |
1709 } | |
1710 if(tX_customviews[index] == CVIEW_T3_END) | |
1711 { | |
1712 index = 0; | |
599 | 1713 indexOverrun = 1; |
496 | 1714 } |
1715 break; | |
1716 case ACTION_PITCH_NEG: | |
511 | 1717 if(index == 0) |
496 | 1718 { |
511 | 1719 index = lastViewIdx - 1; |
599 | 1720 indexOverrun = 1; |
496 | 1721 } |
1722 else | |
1723 { | |
511 | 1724 index--; |
496 | 1725 } |
1726 break; | |
1727 default: | |
1728 break; | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1729 } |
496 | 1730 |
511 | 1731 if(t3_customview_disabled(tX_customviews[index])) |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1732 { |
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1733 iterate = 1; |
599 | 1734 if(*tX_selection_customview == tX_customviews[index]) |
1735 { | |
1736 useFallback = 1; /* the provided view is disabled => use fallback */ | |
1737 } | |
386
39c147e47c1c
Added key direction awarness to t3, t5 and t6 views:
ideenmodellierer
parents:
384
diff
changeset
|
1738 } |
599 | 1739 else /* special case which are enabled but not to be displayed at the moment */ |
1740 { | |
1741 if(settingsGetPointer()->MotionDetection != MOTION_DETECT_SECTOR) /* no hiding in case of active sector view option (fixed mapping would change during dive) */ | |
1742 { | |
601 | 1743 /* Skip TTS if value is 0 */ |
1744 if((tX_customviews[index] == CVIEW_T3_TTS) && (!pDecoinfo->output_time_to_surface_seconds)) | |
599 | 1745 { |
601 | 1746 if(*tX_selection_customview == tX_customviews[index]) |
1747 { | |
1748 useFallback = 1; /* the provided view is disabled => use fallback */ | |
1749 } | |
599 | 1750 iterate = 1; |
601 | 1751 if(fallbackSelection == CVIEW_noneOrDebug) |
1752 { | |
1753 fallbackSelection = CVIEW_T3_TTS; | |
1754 } | |
599 | 1755 } |
601 | 1756 /* Skip Deco if NDL is not set */ |
1757 if((tX_customviews[index] == CVIEW_T3_Decostop) && ((!pDecoinfo->output_ndl_seconds) && (!pDecoinfo->output_time_to_surface_seconds) && (timer_Safetystop_GetCountDown() == 0))) | |
599 | 1758 { |
601 | 1759 if(*tX_selection_customview == tX_customviews[index]) |
1760 { | |
1761 useFallback = 1; /* the provided view is disabled => use fallback */ | |
1762 } | |
1763 fallbackSelection = CVIEW_T3_Decostop; | |
599 | 1764 iterate = 1; |
1765 } | |
1766 } | |
1767 } | |
1768 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 | 1769 { |
1770 action = ACTION_BUTTON_ENTER; | |
1771 } | |
599 | 1772 }while ((iterate == 1) && (!((indexOverrun == 1) && (*tX_selection_customview == tX_customviews[index])))); /* no other available view found => use fallback */ |
38 | 1773 |
599 | 1774 if(*tX_selection_customview == tX_customviews[index]) |
1775 { | |
1776 if(useFallback) | |
1777 { | |
1778 *tX_selection_customview = fallbackSelection; /* no active view found => keep actual view or change to fallback if actual view is deactivated */ | |
1779 } | |
1780 } | |
1781 else | |
1782 { | |
1783 *tX_selection_customview = tX_customviews[index]; | |
1784 } | |
38 | 1785 } |
1786 | |
1787 | |
1788 void t3_basics_colorscheme_mod(char *text) | |
1789 { | |
1790 if((text[0] == '\020') && !GFX_is_colorschemeDiveStandard()) | |
1791 { | |
1792 text[0] = '\027'; | |
1793 } | |
1794 } | |
1795 | |
1796 | |
496 | 1797 point_t t3_compass_circle(uint8_t id, uint16_t degree, point_t center) |
38 | 1798 { |
1799 float fCos, fSin; | |
1800 const float piMult = ((2 * 3.14159) / 360); | |
1801 // const int radius[4] = {95,105,115,60}; | |
1802 const int radius[4] = {85,95,105,90}; | |
496 | 1803 static point_t forcenter = {.x = 900, .y = 500}; /* used to identify change of circle position */ |
38 | 1804 static point_t r[4][360] = { 0 }; |
1805 | |
496 | 1806 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 | 1807 { |
1808 for(int i=0;i<360;i++) | |
1809 { | |
1810 fCos = cos(i * piMult); | |
1811 fSin = sin(i * piMult); | |
1812 for(int j=0;j<4;j++) | |
1813 { | |
496 | 1814 r[j][i].x = center.x + (int)(fSin * radius[j]); |
1815 r[j][i].y = center.y + (int)(fCos * radius[j]); | |
38 | 1816 } |
1817 } | |
496 | 1818 forcenter.x = center.x; |
1819 forcenter.y = center.y; | |
38 | 1820 } |
1821 if(id > 3) id = 0; | |
1822 if(degree > 359) degree = 0; | |
1823 return r[id][degree]; | |
1824 } | |
1825 | |
1826 | |
496 | 1827 void t3_basics_compass(GFX_DrawCfgScreen *tXscreen, point_t center, uint16_t ActualHeading, uint16_t UserSetHeading) |
38 | 1828 { |
496 | 1829 uint8_t loop = 0; |
38 | 1830 uint16_t LineHeading; |
496 | 1831 |
38 | 1832 static int32_t LastHeading = 0; |
1833 int32_t newHeading = 0; | |
1834 int32_t diff = 0; | |
1835 int32_t diff2 = 0; | |
1836 | |
1837 int32_t diffAbs = 0; | |
1838 int32_t diffAbs2 = 0; | |
1839 | |
1840 newHeading = ActualHeading; | |
1841 | |
1842 diff = newHeading - LastHeading; | |
1843 | |
1844 if(newHeading < LastHeading) | |
1845 diff2 = newHeading + 360 - LastHeading; | |
1846 else | |
1847 diff2 = newHeading - 360 - LastHeading; | |
1848 | |
1849 diffAbs = diff; | |
1850 if(diffAbs < 0) | |
1851 diffAbs *= -1; | |
1852 | |
1853 diffAbs2 = diff2; | |
1854 if(diffAbs2 < 0) | |
1855 diffAbs2 *= -1; | |
1856 | |
1857 if(diffAbs <= diffAbs2) | |
1858 newHeading = LastHeading + (diff / 2); | |
1859 else | |
1860 newHeading = LastHeading + (diff2 / 2); | |
1861 | |
1862 if(newHeading < 0) | |
1863 newHeading += 360; | |
1864 else | |
1865 if(newHeading >= 360) | |
1866 newHeading -= 360; | |
1867 | |
1868 LastHeading = newHeading; | |
1869 ActualHeading = newHeading; | |
1870 | |
1871 if (ActualHeading < 90) | |
1872 ActualHeading += 360; | |
1873 | |
1874 while(ActualHeading > 359) ActualHeading -= 360; | |
1875 | |
1876 LineHeading = 360 - ActualHeading; | |
496 | 1877 |
1878 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(0,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_Font030); // North | |
38 | 1879 LineHeading += 90; |
496 | 1880 |
1881 for (loop = 0; loop < 3; loop++) | |
1882 { | |
1883 if(LineHeading > 359) LineHeading -= 360; | |
1884 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(0,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_Font031); // Main Ticks | |
1885 LineHeading += 90; | |
1886 } | |
38 | 1887 |
1888 LineHeading = 360 - ActualHeading; | |
1889 LineHeading += 45; | |
496 | 1890 |
1891 for (loop = 0; loop < 4; loop++) | |
1892 { | |
1893 if(LineHeading > 359) LineHeading -= 360; | |
1894 GFX_draw_thick_line(5,tXscreen, t3_compass_circle(1,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_Font031); // Subtick | |
1895 LineHeading += 90; | |
1896 } | |
38 | 1897 |
1898 LineHeading = 360 - ActualHeading; | |
1899 LineHeading += 22; | |
496 | 1900 for (loop = 0; loop < 8; loop++) |
1901 { | |
1902 if(LineHeading > 359) LineHeading -= 360; | |
1903 GFX_draw_thick_line(3,tXscreen, t3_compass_circle(1,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_Font031); // Subtick | |
1904 LineHeading += 45; | |
1905 } | |
38 | 1906 if(UserSetHeading) |
1907 { | |
1908 LineHeading = UserSetHeading + 360 - ActualHeading; | |
1909 if(LineHeading > 359) LineHeading -= 360; | |
496 | 1910 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(3,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_CompassUserHeadingTick); |
38 | 1911 |
1912 // R�ckpeilung, User Back Heading | |
1913 LineHeading = UserSetHeading + 360 + 180 - ActualHeading; | |
1914 if(LineHeading > 359) LineHeading -= 360; | |
1915 if(LineHeading > 359) LineHeading -= 360; | |
496 | 1916 GFX_draw_thick_line(9,tXscreen, t3_compass_circle(3,LineHeading, center), t3_compass_circle(2,LineHeading, center), CLUT_CompassUserBackHeadingTick); |
38 | 1917 } |
1918 | |
1919 GFX_draw_circle(tXscreen, center, 106, CLUT_Font030); | |
1920 GFX_draw_circle(tXscreen, center, 107, CLUT_Font030); | |
1921 GFX_draw_circle(tXscreen, center, 108, CLUT_Font030); | |
1922 } | |
384
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1923 |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1924 uint8_t t3_GetEnabled_customviews() |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1925 { |
496 | 1926 uint8_t *pViews; |
1927 uint8_t increment = 1; | |
384
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1928 uint8_t enabledViewCnt = 0; |
496 | 1929 |
511 | 1930 pViews = (uint8_t*)t3_customviewsStandard; |
496 | 1931 while((*pViews != CVIEW_T3_END)) |
1932 { | |
1933 increment = 1; | |
1934 /* check if view is enabled */ | |
1935 if(t3_customview_disabled(*pViews)) | |
1936 { | |
1937 increment = 0; | |
1938 } | |
1939 pViews++; | |
1940 enabledViewCnt += increment; | |
1941 } | |
384
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1942 return enabledViewCnt; |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1943 } |
427ae9f8e28e
Consider number of available t3 views in sector handling:
ideenmodellierer
parents:
272
diff
changeset
|
1944 |
518 | 1945 uint8_t t3_getCustomView(void) |
1946 { | |
1947 return t3_selection_customview; | |
1948 } |