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