comparison Discovery/Src/tMenuEditXtra.c @ 981:c6c781a2e85b default

Merge into default
author heinrichsweikamp
date Tue, 11 Feb 2025 18:12:00 +0100
parents 9b418e63dbc2
children 5a690195b6b7
comparison
equal deleted inserted replaced
871:f7318457df4d 981:c6c781a2e85b
36 #include "timer.h" 36 #include "timer.h"
37 #include "tMenuEdit.h" 37 #include "tMenuEdit.h"
38 #include "data_exchange_main.h" 38 #include "data_exchange_main.h"
39 #include "motion.h" 39 #include "motion.h"
40 #include "configuration.h" 40 #include "configuration.h"
41 #include "tInfoPreDive.h"
41 42
42 43
43 /* Private function prototypes -----------------------------------------------*/ 44 /* Private function prototypes -----------------------------------------------*/
44 void openEdit_CompassHeading(void); 45 void openEdit_CompassHeading(void);
45 void openEdit_ResetStopwatch(void); 46 void openEdit_ResetStopwatch(void);
51 static void openEdit_CCRModeSensorOrFixedSP(void); 52 static void openEdit_CCRModeSensorOrFixedSP(void);
52 static void openEdit_Fallback(void); 53 static void openEdit_Fallback(void);
53 static void openEdit_Scrubber(void); 54 static void openEdit_Scrubber(void);
54 #ifdef ENABLE_PSCR_MODE 55 #ifdef ENABLE_PSCR_MODE
55 static void openEdit_PSCR(void); 56 static void openEdit_PSCR(void);
56 #endif
57 #ifdef ENABLE_CO2_SUPPORT
58 static void openEdit_CO2Sensor(void);
59 #endif 57 #endif
60 58
61 /* Announced function prototypes -----------------------------------------------*/ 59 /* Announced function prototypes -----------------------------------------------*/
62 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);
63 uint8_t OnAction_ScrubberTimerId(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 61 uint8_t OnAction_ScrubberTimerId(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
67 #ifdef ENABLE_PSCR_MODE 65 #ifdef ENABLE_PSCR_MODE
68 static uint8_t OnAction_PSCRO2Drop(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 66 static uint8_t OnAction_PSCRO2Drop(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
69 static uint8_t OnAction_PSCRLungRation(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); 67 static uint8_t OnAction_PSCRLungRation(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
70 #endif 68 #endif
71 69
72 #ifdef ENABLE_CO2_SUPPORT
73 static uint8_t OnAction_CO2OnOff(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
74 static uint8_t OnAction_CO2Calib(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
75 #endif
76
77 /* Exported functions --------------------------------------------------------*/ 70 /* Exported functions --------------------------------------------------------*/
78 71
79 72
80 void openEdit_Xtra(uint8_t line) 73 void openEdit_Xtra(uint8_t line)
81 { 74 {
96 openEdit_CompassHeading(); 89 openEdit_CompassHeading();
97 break; 90 break;
98 case 3: 91 case 3:
99 openEdit_SetManualMarker(); 92 openEdit_SetManualMarker();
100 break; 93 break;
94 #ifdef ENABLE_MOTION_CONTROL
101 case 4: 95 case 4:
102 openEdit_CalibViewport(); 96 openEdit_CalibViewport();
103 break; 97 break;
104 case 5: 98 case 5:
99 #else
100 case 4:
101 #endif
105 if(is_stateUsedSetToSim()) 102 if(is_stateUsedSetToSim())
106 { 103 {
107 openEdit_SimFollowDecostops(); 104 openEdit_SimFollowDecostops();
108 } 105 }
109 else 106 else
113 break; 110 break;
114 } 111 }
115 } 112 }
116 else /* surface mode */ 113 else /* surface mode */
117 { 114 {
118 if((settingsGetPointer()->dive_mode != DIVEMODE_PSCR) && (line > 3)) /* PSCR items are only optional */
119 {
120 line = 6;
121 }
122
123 switch(line) 115 switch(line)
124 { 116 {
125 case 1: openEdit_CCRModeSensorOrFixedSP(); 117 case 1: openEdit_CCRModeSensorOrFixedSP();
126 break; 118 break;
127 case 2: openEdit_Fallback(); 119 case 2: openEdit_Fallback();
130 break; 122 break;
131 #ifdef ENABLE_PSCR_MODE 123 #ifdef ENABLE_PSCR_MODE
132 case 4: openEdit_PSCR(); 124 case 4: openEdit_PSCR();
133 break; 125 break;
134 #endif 126 #endif
135 #ifdef ENABLE_CO2_SUPPORT 127 #ifdef ENABLE_PREDIVE_CHECK
136 case 6: openEdit_CO2Sensor(); 128 case 5: openInfo_PreDive();
137 break; 129 break;
138 #endif 130 #endif
139 default: 131 default:
140 break; 132 break;
141 } 133 }
319 setEvent(StMXTRA_PSCR_O2_Drop, (uint32_t)OnAction_PSCRO2Drop); 311 setEvent(StMXTRA_PSCR_O2_Drop, (uint32_t)OnAction_PSCRO2Drop);
320 setEvent(StMXTRA_PSCR_LUNG_RATIO, (uint32_t)OnAction_PSCRLungRation); 312 setEvent(StMXTRA_PSCR_LUNG_RATIO, (uint32_t)OnAction_PSCRLungRation);
321 } 313 }
322 314
323 315
324 #ifdef ENABLE_CO2_SUPPORT 316
325 static void openEdit_CO2Sensor() 317 static uint8_t OnAction_CompassHeadingReverse(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
326 { 318 {
327 char text[32]; 319 setCompassHeading((stateUsed->diveSettings.compassHeading + 180) % 360);
328 320
329 resetMenuEdit(CLUT_MenuPageXtra); 321 exitMenuEdit_to_Home_with_Menu_Update();
330 322
331 snprintf(text,32,"\001%c",TXT_CO2Sensor); 323 return EXIT_TO_HOME;
332 write_topline(text); 324 }
333
334 refresh_CO2Data();
335 if(settingsGetPointer()->co2_sensor_active)
336 {
337 text[0] = '\005';
338 }
339 else
340 {
341 text[0] = '\006';
342 }
343 text[0] = TXT_CO2Sensor;
344 text[1] = 0;
345
346 write_field_on_off(StMXTRA_CO2_Sensor, 30, 95, ME_Y_LINE3, &FontT48, text, settingsGetPointer()->co2_sensor_active);
347
348 text[0] = TXT_2BYTE;
349 text[1] = TXT2BYTE_O2Calib;
350 text[2] = 0;
351 write_field_button(StMXTRA_CO2_Sensor_Calib,30, 800, ME_Y_LINE4, &FontT48, text);
352
353 setEvent(StMXTRA_CO2_Sensor, (uint32_t)OnAction_CO2OnOff);
354 setEvent(StMXTRA_CO2_Sensor_Calib, (uint32_t)OnAction_CO2Calib);
355
356 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);
357 }
358 #endif
359 325
360 326
361 static uint8_t OnAction_CompassHeadingClear(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) 327 static uint8_t OnAction_CompassHeadingClear(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
362 { 328 {
363 stateUsedWrite->diveSettings.compassHeading = 0; 329 clearCompassHeading();
364 330
365 exitMenuEdit_to_Home_with_Menu_Update(); 331 exitMenuEdit_to_Home_with_Menu_Update();
366 332
367 return EXIT_TO_HOME; 333 return EXIT_TO_HOME;
368 } 334 }
369 335
370 336
371 static uint8_t OnAction_CompassHeadingReset(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) 337 static uint8_t OnAction_CompassHeadingReset(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
372 { 338 {
373 stateUsedWrite->diveSettings.compassHeading = settingsGetPointer()->compassBearing; 339 setCompassHeading(settingsGetPointer()->compassBearing);
340
341 exitMenuEdit_to_Home_with_Menu_Update();
342
343 return EXIT_TO_HOME;
344 }
345
346
347 static uint8_t OnAction_CompassHeadingLog(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
348 {
349 logCompassHeading((uint16_t)stateUsed->lifeData.compass_heading);
374 350
375 exitMenuEdit_to_Home_with_Menu_Update(); 351 exitMenuEdit_to_Home_with_Menu_Update();
376 352
377 return EXIT_TO_HOME; 353 return EXIT_TO_HOME;
378 } 354 }
383 SSettings *settings = settingsGetPointer(); 359 SSettings *settings = settingsGetPointer();
384 360
385 char text[32]; 361 char text[32];
386 snprintf(text, 32, "\001%c%c", TXT_2BYTE, TXT2BYTE_CompassHeading); 362 snprintf(text, 32, "\001%c%c", TXT_2BYTE, TXT2BYTE_CompassHeading);
387 write_topline(text); 363 write_topline(text);
364
365 if (!isRefresh) {
366 snprintf(text, 32, "%c%c", TXT_2BYTE, TXT2BYTE_Set);
367 write_field_button(StMXTRA_CompassHeading, 20, 800, ME_Y_LINE1, &FontT48, text);
368 } else {
369 tMenuEdit_refresh_field(StMXTRA_CompassHeading);
370 }
388 371
389 uint16_t heading; 372 uint16_t heading;
390 if (settings->compassInertia) { 373 if (settings->compassInertia) {
391 heading = (uint16_t)compass_getCompensated(); 374 heading = (uint16_t)compass_getCompensated();
392 } else { 375 } else {
393 heading = (uint16_t)stateUsed->lifeData.compass_heading; 376 heading = (uint16_t)stateUsed->lifeData.compass_heading;
394 } 377 }
395 snprintf(text,32,"\001%03i`",heading); 378 snprintf(text,32,"\001%03i`",heading);
396 write_label_var(0, 800, ME_Y_LINE1, &FontT54, text); 379 write_label_var(0, 800, ME_Y_LINE1, &FontT54, text);
397 380
398 if (!isRefresh) { 381 bool headingIsSet = stateUsed->diveSettings.compassHeading;
399 snprintf(text, 32, "%c%c", TXT_2BYTE, TXT2BYTE_Set); 382 snprintf(text, 32, "%s%c%c", makeGrey(!headingIsSet), TXT_2BYTE, TXT2BYTE_Reverse);
400 write_field_button(StMXTRA_CompassHeading, 20, 800, ME_Y_LINE2, &FontT48, text); 383 if (headingIsSet) {
384 if (!isRefresh) {
385 write_field_button(StMXTRA_CompassHeadingReverse, 20, 800, ME_Y_LINE2, &FontT48, text);
386 } else {
387 tMenuEdit_refresh_field(StMXTRA_CompassHeadingReverse);
388 }
401 } else { 389 } else {
402 tMenuEdit_refresh_field(StMXTRA_CompassHeading); 390 write_label_var(20, 800, ME_Y_LINE2, &FontT48, text);
403 } 391 }
404 392
405 bool headingIsSet = stateUsed->diveSettings.compassHeading;
406 snprintf(text, 32, "%s%c%c", makeGrey(!headingIsSet), TXT_2BYTE, TXT2BYTE_Clear); 393 snprintf(text, 32, "%s%c%c", makeGrey(!headingIsSet), TXT_2BYTE, TXT2BYTE_Clear);
407 if (headingIsSet) { 394 if (headingIsSet) {
408 if (!isRefresh) { 395 if (!isRefresh) {
409 write_field_button(StMXTRA_CompassHeadingClear, 20, 800, ME_Y_LINE3, &FontT48, text); 396 write_field_button(StMXTRA_CompassHeadingClear, 20, 800, ME_Y_LINE3, &FontT48, text);
410 } else { 397 } else {
425 } 412 }
426 } else { 413 } else {
427 write_label_var(20, 800, ME_Y_LINE4, &FontT48, text); 414 write_label_var(20, 800, ME_Y_LINE4, &FontT48, text);
428 } 415 }
429 416
417 snprintf(text, 32, "%c%c", TXT_2BYTE, TXT2BYTE_Log);
418 if (!isRefresh) {
419 write_field_button(StMXTRA_CompassHeadingLog, 20, 800, ME_Y_LINE5, &FontT48, text);
420 } else {
421 tMenuEdit_refresh_field(StMXTRA_CompassHeadingLog);
422 }
423
424 if (headingIsSet) {
425 snprintf(text, 32, "%s%c%c (%03u`)", makeGrey(true), TXT_2BYTE, TXT2BYTE_Current, stateUsed->diveSettings.compassHeading);
426 write_label_var(20, 800, ME_Y_LINE6, &FontT48, text);
427 }
428
430 if (!isRefresh) { 429 if (!isRefresh) {
431 setEvent(StMXTRA_CompassHeading, (uint32_t)OnAction_CompassHeading); 430 setEvent(StMXTRA_CompassHeading, (uint32_t)OnAction_CompassHeading);
431 setEvent(StMXTRA_CompassHeadingReverse, (uint32_t)OnAction_CompassHeadingReverse);
432 setEvent(StMXTRA_CompassHeadingClear, (uint32_t)OnAction_CompassHeadingClear); 432 setEvent(StMXTRA_CompassHeadingClear, (uint32_t)OnAction_CompassHeadingClear);
433 setEvent(StMXTRA_CompassHeadingReset, (uint32_t)OnAction_CompassHeadingReset); 433 setEvent(StMXTRA_CompassHeadingReset, (uint32_t)OnAction_CompassHeadingReset);
434 setEvent(StMXTRA_CompassHeadingLog, (uint32_t)OnAction_CompassHeadingLog);
434 } 435 }
435 436
436 write_buttonTextline(TXT2BYTE_ButtonBack, TXT2BYTE_ButtonEnter, TXT2BYTE_ButtonNext); 437 write_buttonTextline(TXT2BYTE_ButtonBack, TXT2BYTE_ButtonEnter, TXT2BYTE_ButtonNext);
437 } 438 }
438 439
440 void refresh_CompassHeading(void) 441 void refresh_CompassHeading(void)
441 { 442 {
442 drawCompassHeadingMenu(true); 443 drawCompassHeadingMenu(true);
443 } 444 }
444 445
445
446 void refresh_CO2Data(void)
447 {
448 char text[32];
449
450 snprintf(text,32,"\001%c",TXT_CO2Sensor);
451 write_topline(text);
452
453 snprintf(text,32,"CO2: %ld ppm",stateUsed->lifeData.CO2_data.CO2_ppm);
454 write_label_var( 30, 800, ME_Y_LINE1, &FontT48, text);
455
456 snprintf(text,32,"Signal: %d",stateUsed->lifeData.CO2_data.signalStrength);
457 write_label_var( 30, 800, ME_Y_LINE2, &FontT48, text);
458
459 tMenuEdit_refresh_field(StMXTRA_CO2_Sensor);
460 tMenuEdit_refresh_field(StMXTRA_CO2_Sensor_Calib);
461 }
462 446
463 void openEdit_CompassHeading(void) 447 void openEdit_CompassHeading(void)
464 { 448 {
465 drawCompassHeadingMenu(false); 449 drawCompassHeadingMenu(false);
466 } 450 }
682 } 666 }
683 return digitContentNew; 667 return digitContentNew;
684 } 668 }
685 #endif 669 #endif
686 670
687 #ifdef ENABLE_CO2_SUPPORT 671
688 static uint8_t OnAction_CO2OnOff(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
689 {
690 SSettings *pSettings = settingsGetPointer();
691 if(pSettings->co2_sensor_active)
692 {
693 pSettings->co2_sensor_active = 0;
694 tMenuEdit_set_on_off(StMXTRA_CO2_Sensor,0);
695 }
696 else
697 {
698 pSettings->co2_sensor_active = 1;
699 tMenuEdit_set_on_off(StMXTRA_CO2_Sensor,1);
700 }
701 return UPDATE_DIVESETTINGS;
702 }
703
704 static uint8_t OnAction_CO2Calib(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
705 {
706 DataEX_setExtInterface_Cmd(EXT_INTERFACE_CO2_CALIB);
707 return UPDATE_DIVESETTINGS;
708 }
709 #endif