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