comparison Discovery/Src/tMenuEditXtra.c @ 662:1b995079c045 Betatest

PSCR Mode
author heinrichs weikamp
date Tue, 14 Dec 2021 15:36:10 +0100
parents 890440ab993a
children e81afd727993
comparison
equal deleted inserted replaced
661:87bee7cc77b3 662:1b995079c045
33 #include "simulation.h" 33 #include "simulation.h"
34 #include "timer.h" 34 #include "timer.h"
35 #include "tMenuEdit.h" 35 #include "tMenuEdit.h"
36 #include "data_exchange_main.h" 36 #include "data_exchange_main.h"
37 #include "motion.h" 37 #include "motion.h"
38 #include "configuration.h"
38 39
39 40
40 /* Private function prototypes -----------------------------------------------*/ 41 /* Private function prototypes -----------------------------------------------*/
41 void openEdit_CompassHeading(void); 42 void openEdit_CompassHeading(void);
42 void openEdit_ResetStopwatch(void); 43 void openEdit_ResetStopwatch(void);
45 void openEdit_SetEndDive(void); 46 void openEdit_SetEndDive(void);
46 void openEdit_CalibViewport(void); 47 void openEdit_CalibViewport(void);
47 static void openEdit_ScrubberTimer(uint8_t line); 48 static void openEdit_ScrubberTimer(uint8_t line);
48 static void openEdit_ScrubberReset(void); 49 static void openEdit_ScrubberReset(void);
49 static void openEdit_ScrubberTimerMode(void); 50 static void openEdit_ScrubberTimerMode(void);
51 #ifdef ENABLE_PSCR_MODE
52 static void openEdit_PSCRO2Drop(uint8_t line);
53 static void openEdit_PSCRLungRatio(uint8_t line);
54 #endif
55 #ifdef ENABLE_CO2_SUPPORT
56 static void openEdit_CO2Sensor(void);
57 #endif
50 58
51 /* Announced function prototypes -----------------------------------------------*/ 59 /* Announced function prototypes -----------------------------------------------*/
52 uint8_t OnAction_CompassHeading (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 60 uint8_t OnAction_CompassHeading (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
53 static uint8_t OnAction_ScrubberTimer(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 61 static uint8_t OnAction_ScrubberTimer(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
62 #ifdef ENABLE_PSCR_MODE
63 static uint8_t OnAction_PSCRO2Drop(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
64 static uint8_t OnAction_PSCRLungRation(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
65 #endif
66
67 #ifdef ENABLE_CO2_SUPPORT
68 static uint8_t OnAction_CO2OnOff(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
69 static uint8_t OnAction_CO2Calib(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
70 #endif
54 71
55 /* Exported functions --------------------------------------------------------*/ 72 /* Exported functions --------------------------------------------------------*/
56 73
57 void openEdit_Xtra(uint8_t line) 74 void openEdit_Xtra(uint8_t line)
58 { 75 {
89 break; 106 break;
90 } 107 }
91 } 108 }
92 else /* surface mode */ 109 else /* surface mode */
93 { 110 {
111 if((settingsGetPointer()->dive_mode != DIVEMODE_PSCR) && (line > 3)) /* PSCR items are only optional */
112 {
113 line = 6;
114 }
115
94 switch(line) 116 switch(line)
95 { 117 {
96 case 1: openEdit_ScrubberTimer(line); 118 case 1: openEdit_ScrubberTimer(line);
97 break; 119 break;
98 case 2: openEdit_ScrubberReset(); 120 case 2: openEdit_ScrubberReset();
99 break; 121 break;
100 case 3: openEdit_ScrubberTimerMode(); 122 case 3: openEdit_ScrubberTimerMode();
101 break; 123 break;
124 #ifdef ENABLE_PSCR_MODE
125 case 4: openEdit_PSCRO2Drop(line);
126 break;
127 case 5: openEdit_PSCRLungRatio(line);
128 break;
129 #endif
130 #ifdef ENABLE_CO2_SUPPORT
131 case 6: openEdit_CO2Sensor();
132 break;
133 #endif
102 default: 134 default:
103 break; 135 break;
104 } 136 }
105 } 137 }
106 } 138 }
189 } 221 }
190 pSettings->scrubTimerMode = newMode; 222 pSettings->scrubTimerMode = newMode;
191 exitMenuEdit_to_Menu_with_Menu_Update(); 223 exitMenuEdit_to_Menu_with_Menu_Update();
192 } 224 }
193 225
226 #ifdef ENABLE_PSCR_MODE
227 static void openEdit_PSCRO2Drop(uint8_t line)
228 {
229 uint8_t localO2Drop;
230 uint16_t y_line;
231
232 char text[32];
233 SSettings *pSettings = settingsGetPointer();
234 localO2Drop = pSettings->pscr_o2_drop;
235
236 y_line = ME_Y_LINE_BASE + (line * ME_Y_LINE_STEP);
237
238 text[0] = '\001';
239 text[1] = TXT_PSCRO2Drop;
240 text[2] = 0;
241 write_topline(text);
242
243 text[0] = '\002';
244 text[1] = '\016';
245 text[2] = '\016';
246 text[3] = '%';
247 text[4] = 0;
248 write_label_fix( 20, 800, y_line, &FontT48, TXT_PSCRO2Drop);
249 write_label_var( 435, 780, y_line, &FontT48, text);
250 write_field_udigit(StMXTRA_PSCR_O2_Drop, 710, 779, y_line, &FontT48, "##", (uint32_t)localO2Drop, 0, 0, 0);
251
252 write_buttonTextline(TXT2BYTE_ButtonMinus,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonPlus);
253
254 setEvent(StMXTRA_PSCR_O2_Drop, (uint32_t)OnAction_PSCRO2Drop);
255 startEdit();
256 }
257
258 static void openEdit_PSCRLungRatio(uint8_t line)
259 {
260 uint8_t localLungRatio;
261 uint16_t y_line;
262
263 char text[32];
264 SSettings *pSettings = settingsGetPointer();
265 localLungRatio = pSettings->pscr_lung_ratio;
266
267 y_line = ME_Y_LINE_BASE + (line * ME_Y_LINE_STEP);
268
269 text[0] = '\001';
270 text[1] = TXT_PSCRO2Drop;
271 text[2] = 0;
272 write_topline(text);
273
274 text[0] = '\002';
275 text[1] = '1';
276 text[2] = '/';
277 text[3] = 0;
278
279 write_label_fix( 20, 800, y_line, &FontT48, TXT_PSCRLungRatio);
280 write_label_var( 435, 710, y_line, &FontT48, text);
281 write_field_udigit(StMXTRA_PSCR_LUNG_RATIO, 710, 779, y_line, &FontT48, "##", (uint32_t)localLungRatio, 0, 0, 0);
282
283 write_buttonTextline(TXT2BYTE_ButtonMinus,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonPlus);
284
285 setEvent(StMXTRA_PSCR_LUNG_RATIO, (uint32_t)OnAction_PSCRLungRation);
286 startEdit();
287 }
288 #endif
289
290 #ifdef ENABLE_CO2_SUPPORT
291 static void openEdit_CO2Sensor()
292 {
293 char text[32];
294 snprintf(text,32,"\001%c",TXT_CO2Sensor);
295 write_topline(text);
296
297 refresh_CO2Data();
298 if(settingsGetPointer()->co2_sensor_active)
299 {
300 text[0] = '\005';
301 }
302 else
303 {
304 text[0] = '\006';
305 }
306 text[0] = TXT_CO2Sensor;
307 text[1] = 0;
308
309 write_field_on_off(StMXTRA_CO2_Sensor, 30, 95, ME_Y_LINE3, &FontT48, text, settingsGetPointer()->co2_sensor_active);
310
311 text[0] = TXT_2BYTE;
312 text[1] = TXT2BYTE_O2Calib;
313 text[2] = 0;
314 write_field_button(StMXTRA_CO2_Sensor_Calib,30, 800, ME_Y_LINE4, &FontT48, text);
315
316 setEvent(StMXTRA_CO2_Sensor, (uint32_t)OnAction_CO2OnOff);
317 setEvent(StMXTRA_CO2_Sensor_Calib, (uint32_t)OnAction_CO2Calib);
318
319 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);
320 }
321 #endif
322
194 void refresh_CompassHeading(void) 323 void refresh_CompassHeading(void)
195 { 324 {
196 uint16_t heading; 325 uint16_t heading;
197 char text[32]; 326 char text[32];
198 327
205 heading = (uint16_t)stateUsed->lifeData.compass_heading; 334 heading = (uint16_t)stateUsed->lifeData.compass_heading;
206 snprintf(text,32,"\001%03i`",heading); 335 snprintf(text,32,"\001%03i`",heading);
207 write_label_var( 0, 800, ME_Y_LINE1, &FontT54, text); 336 write_label_var( 0, 800, ME_Y_LINE1, &FontT54, text);
208 337
209 tMenuEdit_refresh_field(StMXTRA_CompassHeading); 338 tMenuEdit_refresh_field(StMXTRA_CompassHeading);
339 }
340
341 void refresh_CO2Data(void)
342 {
343 char text[32];
344
345 snprintf(text,32,"\001%c",TXT_CO2Sensor);
346 write_topline(text);
347
348 snprintf(text,32,"CO2: %d ppm",stateUsed->lifeData.CO2_data.CO2_ppm);
349 write_label_var( 30, 800, ME_Y_LINE1, &FontT48, text);
350
351 snprintf(text,32,"Signal: %d",stateUsed->lifeData.CO2_data.signalStrength);
352 write_label_var( 30, 800, ME_Y_LINE2, &FontT48, text);
353
354 tMenuEdit_refresh_field(StMXTRA_CO2_Sensor);
355 tMenuEdit_refresh_field(StMXTRA_CO2_Sensor_Calib);
210 } 356 }
211 357
212 void openEdit_CompassHeading(void) 358 void openEdit_CompassHeading(void)
213 { 359 {
214 360
265 if(digitContentNew < '0') 411 if(digitContentNew < '0')
266 digitContentNew = '9'; 412 digitContentNew = '9';
267 } 413 }
268 return digitContentNew; 414 return digitContentNew;
269 } 415 }
270 416 #ifdef ENABLE_PSCR_MODE
417 static uint8_t OnAction_PSCRO2Drop(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
418 {
419 SSettings *pSettings;
420 uint8_t digitContentNew = EXIT_TO_MENU;
421 uint32_t newO2Drop;
422
423 if(action == ACTION_BUTTON_ENTER)
424 {
425 return digitContent;
426 }
427 if(action == ACTION_BUTTON_ENTER_FINAL)
428 {
429 evaluateNewString(editId, &newO2Drop, 0, 0, 0);
430
431 if(newO2Drop > PSCR_MAX_O2_DROP)
432 newO2Drop = PSCR_MAX_O2_DROP;
433
434 pSettings = settingsGetPointer();
435 pSettings->pscr_o2_drop = newO2Drop;
436
437 tMenuEdit_newInput(editId, newO2Drop, 0, 0, 0);
438 digitContentNew = UPDATE_AND_EXIT_TO_MENU;
439 }
440 if(action == ACTION_BUTTON_NEXT)
441 {
442 digitContentNew = digitContent + 1;
443 if(digitContentNew > '9')
444 digitContentNew = '0';
445 }
446 if(action == ACTION_BUTTON_BACK)
447 {
448 digitContentNew = digitContent - 1;
449 if(digitContentNew < '0')
450 digitContentNew = '9';
451 }
452 return digitContentNew;
453 }
454
455 static uint8_t OnAction_PSCRLungRation(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
456 {
457 SSettings *pSettings;
458 uint8_t digitContentNew = EXIT_TO_MENU;
459 uint32_t newLungRatio;
460
461 if(action == ACTION_BUTTON_ENTER)
462 {
463 return digitContent;
464 }
465 if(action == ACTION_BUTTON_ENTER_FINAL)
466 {
467 evaluateNewString(editId, &newLungRatio, 0, 0, 0);
468
469 if(newLungRatio > PSCR_MAX_LUNG_RATIO)
470 newLungRatio = PSCR_MAX_LUNG_RATIO;
471
472 if(newLungRatio < PSCR_MIN_LUNG_RATIO)
473 newLungRatio = PSCR_MIN_LUNG_RATIO;
474
475 pSettings = settingsGetPointer();
476 pSettings->pscr_lung_ratio = newLungRatio;
477
478 tMenuEdit_newInput(editId, newLungRatio, 0, 0, 0);
479 digitContentNew = UPDATE_AND_EXIT_TO_MENU;
480 }
481 if(action == ACTION_BUTTON_NEXT)
482 {
483 digitContentNew = digitContent + 1;
484 if(digitContentNew > '9')
485 digitContentNew = '0';
486 }
487 if(action == ACTION_BUTTON_BACK)
488 {
489 digitContentNew = digitContent - 1;
490 if(digitContentNew < '0')
491 digitContentNew = '9';
492 }
493 return digitContentNew;
494 }
495 #endif
496
497 #ifdef ENABLE_CO2_SUPPORT
498 static uint8_t OnAction_CO2OnOff(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
499 {
500 SSettings *pSettings = settingsGetPointer();
501 if(pSettings->co2_sensor_active)
502 {
503 pSettings->co2_sensor_active = 0;
504 tMenuEdit_set_on_off(StMXTRA_CO2_Sensor,0);
505 }
506 else
507 {
508 pSettings->co2_sensor_active = 1;
509 tMenuEdit_set_on_off(StMXTRA_CO2_Sensor,1);
510 }
511 return UPDATE_DIVESETTINGS;
512 }
513
514 static uint8_t OnAction_CO2Calib(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
515 {
516 DataEX_setExtInterface_Cmd(EXT_INTERFACE_CO2_CALIB);
517 return UPDATE_DIVESETTINGS;
518 }
519 #endif