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