comparison Discovery/Src/tMenuEditHardware.c @ 999:ac25c35a3c97 GasConsumption

New Tab for dynamic configuration: since more and more functions are added to the OSTC the space in the menus is getting short. To avoid problems a new Tab within the SYS menu has been added which shall focus an functions / views which are configuration dependend. In future this menu may have dynamic content dependend on which views are active or which sensors are connected. The Cview for compass and Timer have been moved to the new tab in the first step
author Ideenmodellierer
date Mon, 28 Apr 2025 19:47:41 +0200
parents df052f0347fb
children 21142f4fa968
comparison
equal deleted inserted replaced
998:5a690195b6b7 999:ac25c35a3c97
32 32
33 #include "externCPU2bootloader.h" 33 #include "externCPU2bootloader.h"
34 #include "gfx_fonts.h" 34 #include "gfx_fonts.h"
35 #include "ostc.h" 35 #include "ostc.h"
36 #include "tCCR.h" 36 #include "tCCR.h"
37 #include "tMenuEdit.h"
38 #include "tHome.h"
39 #include "tInfo.h"
40 #include "tInfoLog.h"
41 #include "tInfoSensor.h"
37 #include "tComm.h" 42 #include "tComm.h"
38 #include "data_exchange_main.h" 43 #include "data_exchange_main.h"
39 44
45
46 extern void tM_build_pages(void);
40 47
41 /* Private function prototypes -----------------------------------------------*/ 48 /* Private function prototypes -----------------------------------------------*/
42 void openEdit_Bluetooth(void); 49 void openEdit_Bluetooth(void);
43 void openEdit_Compass(void); 50 void openEdit_Compass(void);
44 void openEdit_O2Sensors(void); 51 void openEdit_O2Sensors(void);
46 //void openEdit_Luftintegration(void); 53 //void openEdit_Luftintegration(void);
47 void openEdit_ButtonSens(void); 54 void openEdit_ButtonSens(void);
48 void openEdit_FlipDisplay(void); 55 void openEdit_FlipDisplay(void);
49 56
50 /* Announced function prototypes -----------------------------------------------*/ 57 /* Announced function prototypes -----------------------------------------------*/
51 uint8_t OnAction_Compass (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
52 uint8_t OnAction_Bearing (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
53 uint8_t OnAction_BearingClear (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
54 uint8_t OnAction_InertiaLevel (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
55 //uint8_t OnAction_ExitHardw (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
56 uint8_t OnAction_Sensor1 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 58 uint8_t OnAction_Sensor1 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
57 uint8_t OnAction_Sensor2 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 59 uint8_t OnAction_Sensor2 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
58 uint8_t OnAction_Sensor3 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 60 uint8_t OnAction_Sensor3 (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
59 uint8_t OnAction_O2_Calibrate (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 61 uint8_t OnAction_O2_Calibrate (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
60 //uint8_t OnAction_O2_Source (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
61 uint8_t OnAction_Sensor_Info (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 62 uint8_t OnAction_Sensor_Info (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
62 uint8_t OnAction_Sensor_Detect (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 63 uint8_t OnAction_Sensor_Detect (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
63 uint8_t OnAction_Button (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 64 uint8_t OnAction_Button (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
64 uint8_t OnAction_ButtonBalance (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 65 uint8_t OnAction_ButtonBalance (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
65 uint8_t OnAction_ButtonLock (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 66 uint8_t OnAction_ButtonLock (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
66 // not required uint8_t OnAction_Bluetooth (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
67 67
68 /* Exported functions --------------------------------------------------------*/ 68 /* Exported functions --------------------------------------------------------*/
69 69
70 70
71 #define O2_CALIB_FRACTION_AIR (0.209F) 71 #define O2_CALIB_FRACTION_AIR (0.209F)
133 setFlipDisplay(!oldValue); 133 setFlipDisplay(!oldValue);
134 134
135 exitEditWithUpdate(); 135 exitEditWithUpdate();
136 exitMenuEdit_to_Home(); 136 exitMenuEdit_to_Home();
137 } 137 }
138
139 static uint8_t OnAction_CompassDeclination(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
140 {
141 SSettings *settings = settingsGetPointer();
142 uint8_t digitContentNew;
143 switch (action) {
144 case ACTION_BUTTON_ENTER:
145
146 return digitContent;
147 case ACTION_BUTTON_ENTER_FINAL:
148 {
149 int32_t compassDeclinationDeg;
150 evaluateNewString(editId, (uint32_t *)&compassDeclinationDeg, NULL, NULL, NULL);
151
152 if (compassDeclinationDeg > MAX_COMPASS_DECLINATION_DEG) {
153 compassDeclinationDeg = MAX_COMPASS_DECLINATION_DEG;
154 } else if (compassDeclinationDeg < -MAX_COMPASS_DECLINATION_DEG) {
155 compassDeclinationDeg = -MAX_COMPASS_DECLINATION_DEG;
156 }
157
158 settings->compassDeclinationDeg = compassDeclinationDeg;
159
160 tMenuEdit_newInput(editId, ((input_u)compassDeclinationDeg).uint32, 0, 0, 0);
161 }
162
163 break;
164 case ACTION_BUTTON_NEXT:
165 if (digitNumber == 0) {
166 digitContentNew = togglePlusMinus(digitContent);
167 } else {
168 digitContentNew = digitContent + 1;
169 if (digitContentNew > '9') {
170 digitContentNew = '0';
171 }
172 }
173
174 return digitContentNew;
175 case ACTION_BUTTON_BACK:
176 if (digitNumber == 0) {
177 digitContentNew = togglePlusMinus(digitContent);
178 } else {
179 digitContentNew = digitContent - 1;
180 if (digitContentNew < '0') {
181 digitContentNew = '9';
182 }
183 }
184
185 return digitContentNew;
186 }
187
188 return UNSPECIFIC_RETURN;
189 }
190
191
192 static void showCompassDeclination(SSettings *settings, bool isRefresh)
193 {
194 char text[16];
195 snprintf(text, 16, "%c%c:", TXT_2BYTE, TXT2BYTE_CompassDeclination);
196 write_label_var(30, 800, ME_Y_LINE6, &FontT48, text);
197 if (isRefresh) {
198 tMenuEdit_refresh_field(StMHARD2_Compass_Declination);
199 } else {
200 write_field_sdigit(StMHARD2_Compass_Declination, 500, 800, ME_Y_LINE6, &FontT48, "\034###`", settings->compassDeclinationDeg, 0, 0, 0);
201 }
202 }
203
204
205 void refresh_CompassEdit(void)
206 {
207 SSettings *settings = settingsGetPointer();
208
209 uint16_t heading;
210 char text[32];
211 uint8_t textIndex = 0;
212
213 text[0] = '\001';
214 text[1] = TXT_2BYTE;
215 text[2] = TXT2BYTE_Compass;
216 text[3] = 0;
217 write_topline(text);
218
219 if(settings->compassInertia)
220 {
221 heading = (uint16_t)compass_getCompensated();
222 }
223 else
224 {
225 heading = (uint16_t)stateUsed->lifeData.compass_heading;
226 }
227 snprintf(text,32,"\001%03i`",heading);
228 write_label_var( 0, 800, ME_Y_LINE1, &FontT54, text);
229
230 tMenuEdit_refresh_field(StMHARD2_Compass_SetCourse);
231 tMenuEdit_refresh_field(StMHARD2_Compass_Calibrate);
232 tMenuEdit_refresh_field(StMHARD2_Compass_ResetCourse);
233 text[textIndex++] = TXT_2BYTE;
234 text[textIndex++] = TXT2BYTE_CompassInertia;
235 text[textIndex++] = ':';
236 text[textIndex++] = ' ';
237 text[textIndex++] = '0' + settings->compassInertia;
238
239 write_label_var(30, 800, ME_Y_LINE5, &FontT48, text);
240
241 showCompassDeclination(settings, true);
242
243 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);
244 }
245
246
247 void openEdit_Compass(void)
248 {
249 SSettings *settings = settingsGetPointer();
250
251 char text[10];
252 uint8_t textIndex = 0;
253
254
255 set_globalState(StMHARD2_Compass);
256 resetMenuEdit(CLUT_MenuPageHardware);
257
258 text[textIndex++] = '\001';
259 text[textIndex++] = TXT_2BYTE;
260 text[textIndex++] = TXT2BYTE_Compass;
261 text[textIndex++] = 0;
262 write_topline(text);
263
264 text[0] = TXT_2BYTE;
265 text[2] = 0;
266
267 text[1] = TXT2BYTE_SetBearing;
268 write_field_button(StMHARD2_Compass_SetCourse, 30, 800, ME_Y_LINE2, &FontT48, text);
269
270 text[1] = TXT2BYTE_ResetBearing;
271 write_field_button(StMHARD2_Compass_ResetCourse, 30, 800, ME_Y_LINE3, &FontT48, text);
272
273 text[1] = TXT2BYTE_CompassCalib;
274 write_field_button(StMHARD2_Compass_Calibrate, 30, 800, ME_Y_LINE4, &FontT48, text);
275
276 text[1] = TXT2BYTE_CompassInertia;
277 textIndex = 2;
278 text[textIndex++] = ':';
279 text[textIndex++] = ' ';
280 text[textIndex++] = '0' + settings->compassInertia;
281 text[textIndex++] = 0;
282
283 write_field_button(StMHARD2_Compass_Inertia, 30, 800, ME_Y_LINE5, &FontT48, text);
284
285 showCompassDeclination(settings, false);
286
287 setEvent(StMHARD2_Compass_SetCourse, (uint32_t)OnAction_Bearing);
288 setEvent(StMHARD2_Compass_ResetCourse, (uint32_t)OnAction_BearingClear);
289 setEvent(StMHARD2_Compass_Calibrate, (uint32_t)OnAction_Compass);
290 setEvent(StMHARD2_Compass_Inertia, (uint32_t)OnAction_InertiaLevel);
291 setEvent(StMHARD2_Compass_Declination, (uint32_t)OnAction_CompassDeclination);
292
293 tMenuEdit_select(StMHARD2_Compass_SetCourse);
294
295 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);
296 }
297
298
299 uint8_t OnAction_Compass (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
300 {
301 calibrateCompass();
302 return EXIT_TO_INFO_COMPASS;
303 }
304
305
306 uint8_t OnAction_Bearing (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
307 {
308 if((int16_t)stateUsed->lifeData.compass_heading != -1)
309 {
310 settingsGetPointer()->compassBearing = (int16_t)stateUsed->lifeData.compass_heading;
311 }
312 else
313 {
314 settingsGetPointer()->compassBearing = 0;
315 }
316
317 if(settingsGetPointer()->compassBearing == 0)
318 settingsGetPointer()->compassBearing = 360;
319 return UPDATE_AND_EXIT_TO_MENU;
320 }
321
322
323 uint8_t OnAction_BearingClear (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
324 {
325 settingsGetPointer()->compassBearing = 0;
326 return UPDATE_AND_EXIT_TO_MENU;
327 }
328
329
330 uint8_t OnAction_InertiaLevel (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
331 {
332 uint8_t newLevel = 0;
333
334 newLevel = settingsGetPointer()->compassInertia + 1;
335 if(newLevel > MAX_COMPASS_COMP)
336 {
337 newLevel = 0;
338 }
339 settingsGetPointer()->compassInertia = newLevel;
340 return UPDATE_DIVESETTINGS;
341 }
342
343 /*
344 uint8_t OnAction_ExitHardw (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
345 {
346 return EXIT_TO_MENU;
347 }
348 */
349 138
350 void refresh_O2Sensors(void) 139 void refresh_O2Sensors(void)
351 { 140 {
352 char strSensorId[20]; 141 char strSensorId[20];
353 char strSensorValue[20]; 142 char strSensorValue[20];