Mercurial > public > ostc4
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 |
