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