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