Mercurial > public > ostc4
comparison Discovery/Src/tMenuEditXtra.c @ 998:5a690195b6b7 GasConsumption
Added dual operation of scrubber timers:
In the previous version only one scrubber timer could be selected for operation. In the new version the activation of both timers is possible. In that case both timers will be displayed as well. To enable this a new activation item has been added to the scrubber menu.
| author | Ideenmodellierer |
|---|---|
| date | Wed, 23 Apr 2025 14:52:03 +0200 |
| parents | 9b418e63dbc2 |
| children | 8c0134a287da |
comparison
equal
deleted
inserted
replaced
| 997:2f7531a8e922 | 998:5a690195b6b7 |
|---|---|
| 60 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); |
| 61 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); |
| 62 static uint8_t OnAction_ScrubberTimerMax(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 62 static uint8_t OnAction_ScrubberTimerMax(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
| 63 static uint8_t OnAction_ScrubberReset(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 63 static uint8_t OnAction_ScrubberReset(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
| 64 static uint8_t OnAction_ScrubberMode(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 64 static uint8_t OnAction_ScrubberMode(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
| 65 static uint8_t OnAction_ScrubberActive(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | |
| 65 #ifdef ENABLE_PSCR_MODE | 66 #ifdef ENABLE_PSCR_MODE |
| 66 static uint8_t OnAction_PSCRO2Drop(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); | 67 static uint8_t OnAction_PSCRO2Drop(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); | 68 static uint8_t OnAction_PSCRLungRation(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
| 68 #endif | 69 #endif |
| 69 | 70 |
| 70 /* Exported functions --------------------------------------------------------*/ | 71 /* Exported functions --------------------------------------------------------*/ |
| 71 | 72 |
| 73 static uint8_t scrubberMenuId = 0; | |
| 72 | 74 |
| 73 void openEdit_Xtra(uint8_t line) | 75 void openEdit_Xtra(uint8_t line) |
| 74 { | 76 { |
| 75 set_globalState_Menu_Line(line); | 77 set_globalState_Menu_Line(line); |
| 76 | 78 |
| 192 | 194 |
| 193 exitMenuEdit_to_Menu_with_Menu_Update_do_not_write_settings_for_this_only(); | 195 exitMenuEdit_to_Menu_with_Menu_Update_do_not_write_settings_for_this_only(); |
| 194 } | 196 } |
| 195 | 197 |
| 196 | 198 |
| 197 static void printScrubberResetText(char *text, SSettings *settings) | 199 static void printScrubberResetText(char *text, SSettings *settings, uint8_t scrubberId) |
| 198 { | 200 { |
| 199 int16_t currentTimerMinutes = settings->scrubberData[settings->scubberActiveId].TimerCur; | 201 int16_t currentTimerMinutes = settings->scrubberData[scrubberId].TimerCur; |
| 200 char colour = '\020'; | 202 char colour = '\020'; |
| 201 if (currentTimerMinutes <= 0) { | 203 if (currentTimerMinutes <= 0) { |
| 202 colour = '\025'; | 204 colour = '\025'; |
| 203 } else if (currentTimerMinutes <= 30) { | 205 } else if (currentTimerMinutes <= 30) { |
| 204 colour = '\024'; | 206 colour = '\024'; |
| 213 uint8_t textIndex = 0; | 215 uint8_t textIndex = 0; |
| 214 uint16_t localScrubTimer; | 216 uint16_t localScrubTimer; |
| 215 | 217 |
| 216 SSettings *pSettings = settingsGetPointer(); | 218 SSettings *pSettings = settingsGetPointer(); |
| 217 | 219 |
| 218 localScrubTimer = pSettings->scrubberData[pSettings->scubberActiveId].TimerMax; | 220 localScrubTimer = pSettings->scrubberData[scrubberMenuId].TimerMax; |
| 219 | 221 |
| 220 resetMenuEdit(CLUT_MenuPageXtra); | 222 resetMenuEdit(CLUT_MenuPageXtra); |
| 221 | 223 |
| 222 | 224 |
| 223 snprintf(&text[0], 32,"\001%c",TXT_ScrubTime); | 225 snprintf(&text[0], 32,"\001%c",TXT_ScrubTime); |
| 224 write_topline(text); | 226 write_topline(text); |
| 225 | 227 |
| 226 | 228 |
| 227 snprintf(&text[0], 32,"%c \002#%d",TXT_ScrubTime,pSettings->scubberActiveId); | 229 snprintf(&text[0], 32,"%c \002#%d",TXT_ScrubTime,scrubberMenuId); |
| 228 write_field_button(StMXTRA_ScrubTimer, 20, 780, ME_Y_LINE1, &FontT48, text); | 230 write_field_button(StMXTRA_ScrubTimer, 20, 780, ME_Y_LINE1, &FontT48, text); |
| 231 | |
| 232 if(pSettings->scubberActiveId & (1 << scrubberMenuId)) | |
| 233 { | |
| 234 snprintf(&text[0], 32,"%c %c \002\005", TXT_ScrubTime, TXT_Active); | |
| 235 } | |
| 236 else | |
| 237 { | |
| 238 snprintf(&text[0], 32,"%c %c \002\006", TXT_ScrubTime, TXT_Active); | |
| 239 } | |
| 240 write_field_button(StMXTRA_ScrubTimer_Active, 20, 780, ME_Y_LINE2, &FontT48, text); | |
| 229 | 241 |
| 230 snprintf(&text[textIndex], 32,\ | 242 snprintf(&text[textIndex], 32,\ |
| 231 "%c" | 243 "%c" |
| 232 "\016\016(%c)\017" | 244 "\016\016(%c)\017" |
| 233 ,TXT_ScrubTime | 245 ,TXT_ScrubTime |
| 234 ,TXT_Maximum); | 246 ,TXT_Maximum); |
| 235 | 247 |
| 236 write_label_var( 20, 340, ME_Y_LINE2, &FontT48, text); | 248 write_label_var( 20, 340, ME_Y_LINE3, &FontT48, text); |
| 237 snprintf(&text[textIndex], 32, "\002###\016\016 %c\017",TXT_Minutes); | 249 snprintf(&text[textIndex], 32, "\002###\016\016 %c\017",TXT_Minutes); |
| 238 | 250 |
| 239 write_field_udigit(StMXTRA_ScrubTimer_Max, 610, 780, ME_Y_LINE2, &FontT48, text,localScrubTimer, 0, 0, 0); | 251 write_field_udigit(StMXTRA_ScrubTimer_Max, 610, 780, ME_Y_LINE3, &FontT48, text,localScrubTimer, 0, 0, 0); |
| 240 | 252 |
| 241 printScrubberResetText(text, pSettings); | 253 printScrubberResetText(text, pSettings, scrubberMenuId); |
| 242 write_field_button(StMXTRA_ScrubTimer_Reset, 20, 780, ME_Y_LINE3, &FontT48, text); | 254 write_field_button(StMXTRA_ScrubTimer_Reset, 20, 780, ME_Y_LINE4, &FontT48, text); |
| 243 | 255 |
| 244 if(pSettings->scrubberData[pSettings->scubberActiveId].lastDive.WeekDay != 0) | 256 if(pSettings->scrubberData[scrubberMenuId].lastDive.WeekDay != 0) |
| 245 { | 257 { |
| 246 snprintf(&text[0], 32,"%c%c\002 %02d.%02d.%02d", TXT_2BYTE, TXT2BYTE_SimDiveTime, pSettings->scrubberData[pSettings->scubberActiveId].lastDive.Date, | 258 snprintf(&text[0], 32,"%c%c\002 %02d.%02d.%02d", TXT_2BYTE, TXT2BYTE_SimDiveTime, pSettings->scrubberData[scrubberMenuId].lastDive.Date, |
| 247 pSettings->scrubberData[pSettings->scubberActiveId].lastDive.Month, | 259 pSettings->scrubberData[scrubberMenuId].lastDive.Month, |
| 248 pSettings->scrubberData[pSettings->scubberActiveId].lastDive.Year); | 260 pSettings->scrubberData[scrubberMenuId].lastDive.Year); |
| 249 } | 261 } |
| 250 else | 262 else |
| 251 { | 263 { |
| 252 snprintf(&text[0], 32,"%c%c\002 --.--.--", TXT_2BYTE, TXT2BYTE_SimDiveTime); | 264 snprintf(&text[0], 32,"%c%c\002 --.--.--", TXT_2BYTE, TXT2BYTE_SimDiveTime); |
| 253 } | 265 } |
| 254 write_label_var( 20, 780, ME_Y_LINE4, &FontT48, text); | 266 write_label_var( 20, 780, ME_Y_LINE5, &FontT48, text); |
| 255 | 267 |
| 256 switch(pSettings->scrubTimerMode) | 268 switch(pSettings->scrubTimerMode) |
| 257 { | 269 { |
| 258 case SCRUB_TIMER_OFF: | 270 case SCRUB_TIMER_OFF: |
| 259 default: snprintf(&text[0], 32,"%c\002%c%c",TXT_ScrubTimeMode, TXT_2BYTE, TXT2BYTE_MoCtrlNone ); | 271 default: snprintf(&text[0], 32,"%c\002%c%c",TXT_ScrubTimeMode, TXT_2BYTE, TXT2BYTE_MoCtrlNone ); |
| 261 case SCRUB_TIMER_MINUTES: snprintf(&text[0], 32,"%c\002%c",TXT_ScrubTimeMode, TXT_Minutes ); | 273 case SCRUB_TIMER_MINUTES: snprintf(&text[0], 32,"%c\002%c",TXT_ScrubTimeMode, TXT_Minutes ); |
| 262 break; | 274 break; |
| 263 case SCRUB_TIMER_PERCENT: snprintf(&text[0], 32,"%c\002%c",TXT_ScrubTimeMode, TXT_Percent ); | 275 case SCRUB_TIMER_PERCENT: snprintf(&text[0], 32,"%c\002%c",TXT_ScrubTimeMode, TXT_Percent ); |
| 264 break; | 276 break; |
| 265 } | 277 } |
| 266 write_field_button(StMXTRA_ScrubTimer_OP_Mode, 20, 780, ME_Y_LINE5, &FontT48, text); | 278 write_field_button(StMXTRA_ScrubTimer_OP_Mode, 20, 780, ME_Y_LINE6, &FontT48, text); |
| 267 | 279 |
| 268 setEvent(StMXTRA_ScrubTimer, (uint32_t)OnAction_ScrubberTimerId); | 280 setEvent(StMXTRA_ScrubTimer, (uint32_t)OnAction_ScrubberTimerId); |
| 281 setEvent(StMXTRA_ScrubTimer_Active, (uint32_t)OnAction_ScrubberActive); | |
| 269 setEvent(StMXTRA_ScrubTimer_Max, (uint32_t)OnAction_ScrubberTimerMax); | 282 setEvent(StMXTRA_ScrubTimer_Max, (uint32_t)OnAction_ScrubberTimerMax); |
| 270 setEvent(StMXTRA_ScrubTimer_Reset, (uint32_t)OnAction_ScrubberReset); | 283 setEvent(StMXTRA_ScrubTimer_Reset, (uint32_t)OnAction_ScrubberReset); |
| 271 setEvent(StMXTRA_ScrubTimer_OP_Mode, (uint32_t)OnAction_ScrubberMode); | 284 setEvent(StMXTRA_ScrubTimer_OP_Mode, (uint32_t)OnAction_ScrubberMode); |
| 285 | |
| 272 | 286 |
| 273 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); | 287 write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext); |
| 274 | 288 |
| 275 } | 289 } |
| 276 | 290 |
| 462 { | 476 { |
| 463 char text[32]; | 477 char text[32]; |
| 464 SSettings *pSettings; | 478 SSettings *pSettings; |
| 465 pSettings = settingsGetPointer(); | 479 pSettings = settingsGetPointer(); |
| 466 | 480 |
| 467 if(pSettings->scubberActiveId == 0) | 481 |
| 468 { | 482 if(scrubberMenuId == 0) |
| 469 pSettings->scubberActiveId = 1; | 483 { |
| 484 scrubberMenuId = 1; | |
| 470 } | 485 } |
| 471 else | 486 else |
| 472 { | 487 { |
| 473 pSettings->scubberActiveId = 0; | 488 scrubberMenuId = 0; |
| 474 } | 489 } |
| 475 | 490 |
| 476 | 491 snprintf(&text[0], 32,"%c \002#%d",TXT_ScrubTime,scrubberMenuId); |
| 477 snprintf(&text[0], 32,"%c \002#%d",TXT_ScrubTime,pSettings->scubberActiveId); | |
| 478 tMenuEdit_newButtonText(StMXTRA_ScrubTimer, text); | 492 tMenuEdit_newButtonText(StMXTRA_ScrubTimer, text); |
| 479 | 493 |
| 480 printScrubberResetText(text, pSettings); | 494 printScrubberResetText(text, pSettings, scrubberMenuId); |
| 481 tMenuEdit_newButtonText(StMXTRA_ScrubTimer_Reset, text); | 495 tMenuEdit_newButtonText(StMXTRA_ScrubTimer_Reset, text); |
| 482 | 496 |
| 483 tMenuEdit_newInput(StMXTRA_ScrubTimer_Max, pSettings->scrubberData[pSettings->scubberActiveId].TimerMax, 0, 0, 0); | 497 tMenuEdit_newInput(StMXTRA_ScrubTimer_Max, pSettings->scrubberData[scrubberMenuId].TimerMax, 0, 0, 0); |
| 484 | 498 |
| 485 if(pSettings->scrubberData[pSettings->scubberActiveId].lastDive.WeekDay != 0) | 499 if(pSettings->scrubberData[scrubberMenuId].lastDive.WeekDay != 0) |
| 486 { | 500 { |
| 487 snprintf(&text[0], 32,"%c%c\002 %02d.%02d.%02d", TXT_2BYTE, TXT2BYTE_SimDiveTime, pSettings->scrubberData[pSettings->scubberActiveId].lastDive.Date, | 501 snprintf(&text[0], 32,"%c%c\002 %02d.%02d.%02d", TXT_2BYTE, TXT2BYTE_SimDiveTime, pSettings->scrubberData[scrubberMenuId].lastDive.Date, |
| 488 pSettings->scrubberData[pSettings->scubberActiveId].lastDive.Month, | 502 pSettings->scrubberData[scrubberMenuId].lastDive.Month, |
| 489 pSettings->scrubberData[pSettings->scubberActiveId].lastDive.Year); | 503 pSettings->scrubberData[scrubberMenuId].lastDive.Year); |
| 490 } | 504 } |
| 491 else | 505 else |
| 492 { | 506 { |
| 493 snprintf(&text[0], 32,"%c%c\002 --.--.--", TXT_2BYTE, TXT2BYTE_SimDiveTime); | 507 snprintf(&text[0], 32,"%c%c\002 --.--.--", TXT_2BYTE, TXT2BYTE_SimDiveTime); |
| 494 } | 508 } |
| 495 clean_content( 20, 780, ME_Y_LINE4, &FontT48); | 509 clean_content( 20, 780, ME_Y_LINE5, &FontT48); |
| 496 write_label_var( 20, 780, ME_Y_LINE4, &FontT48, text); | 510 write_label_var( 20, 780, ME_Y_LINE5, &FontT48, text); |
| 511 | |
| 512 if(pSettings->scubberActiveId & (1 << scrubberMenuId)) | |
| 513 { | |
| 514 snprintf(&text[0], 32,"%c %c \002\005", TXT_ScrubTime, TXT_Active); | |
| 515 } | |
| 516 else | |
| 517 { | |
| 518 snprintf(&text[0], 32,"%c %c \002\006", TXT_ScrubTime, TXT_Active); | |
| 519 } | |
| 520 tMenuEdit_newButtonText(StMXTRA_ScrubTimer_Active, text); | |
| 497 | 521 |
| 498 return UNSPECIFIC_RETURN; | 522 return UNSPECIFIC_RETURN; |
| 499 } | 523 } |
| 500 | 524 |
| 501 static uint8_t OnAction_ScrubberTimerMax(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | 525 static uint8_t OnAction_ScrubberTimerMax(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) |
| 514 | 538 |
| 515 if(newScrubberTime > MAX_SCRUBBER_TIME) | 539 if(newScrubberTime > MAX_SCRUBBER_TIME) |
| 516 newScrubberTime = MAX_SCRUBBER_TIME; | 540 newScrubberTime = MAX_SCRUBBER_TIME; |
| 517 | 541 |
| 518 pSettings = settingsGetPointer(); | 542 pSettings = settingsGetPointer(); |
| 519 pSettings->scrubberData[pSettings->scubberActiveId].TimerMax = newScrubberTime; | 543 pSettings->scrubberData[scrubberMenuId].TimerMax = newScrubberTime; |
| 520 if(pSettings->scrubberData[pSettings->scubberActiveId].TimerCur > newScrubberTime) | 544 if(pSettings->scrubberData[scrubberMenuId].TimerCur > newScrubberTime) |
| 521 { | 545 { |
| 522 pSettings->scrubberData[pSettings->scubberActiveId].TimerCur = newScrubberTime; | 546 pSettings->scrubberData[scrubberMenuId].TimerCur = newScrubberTime; |
| 523 } | 547 } |
| 524 | 548 |
| 525 tMenuEdit_newInput(editId, newScrubberTime, 0, 0, 0); | 549 tMenuEdit_newInput(editId, newScrubberTime, 0, 0, 0); |
| 526 digitContentNew = UNSPECIFIC_RETURN; | 550 digitContentNew = UNSPECIFIC_RETURN; |
| 527 } | 551 } |
| 543 uint8_t OnAction_ScrubberReset(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | 567 uint8_t OnAction_ScrubberReset(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) |
| 544 { | 568 { |
| 545 char text[32]; | 569 char text[32]; |
| 546 SSettings *pSettings; | 570 SSettings *pSettings; |
| 547 pSettings = settingsGetPointer(); | 571 pSettings = settingsGetPointer(); |
| 548 pSettings->scrubberData[pSettings->scubberActiveId].TimerCur = pSettings->scrubberData[pSettings->scubberActiveId].TimerMax; | 572 pSettings->scrubberData[scrubberMenuId].TimerCur = pSettings->scrubberData[scrubberMenuId].TimerMax; |
| 549 pSettings->scrubberData[pSettings->scubberActiveId].lastDive.WeekDay = 0; /* invalidate date */ | 573 pSettings->scrubberData[scrubberMenuId].lastDive.WeekDay = 0; /* invalidate date */ |
| 550 | 574 |
| 551 printScrubberResetText(text, pSettings); | 575 printScrubberResetText(text, pSettings, scrubberMenuId); |
| 552 tMenuEdit_newButtonText(StMXTRA_ScrubTimer_Reset, text); | 576 tMenuEdit_newButtonText(StMXTRA_ScrubTimer_Reset, text); |
| 553 | 577 |
| 554 snprintf(&text[0], 32,"%c%c\002 --.--.--", TXT_2BYTE, TXT2BYTE_SimDiveTime); | 578 snprintf(&text[0], 32,"%c%c\002 --.--.--", TXT_2BYTE, TXT2BYTE_SimDiveTime); |
| 555 clean_content( 20, 780, ME_Y_LINE4, &FontT48); | 579 clean_content( 20, 780, ME_Y_LINE5, &FontT48); |
| 556 write_label_var( 20, 780, ME_Y_LINE4, &FontT48, text); | 580 write_label_var( 20, 780, ME_Y_LINE5, &FontT48, text); |
| 557 | |
| 558 | 581 |
| 559 return UNSPECIFIC_RETURN; | 582 return UNSPECIFIC_RETURN; |
| 560 } | 583 } |
| 561 | 584 |
| 562 uint8_t OnAction_ScrubberMode(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | 585 uint8_t OnAction_ScrubberMode(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) |
| 585 tMenuEdit_newButtonText(StMXTRA_ScrubTimer_OP_Mode, text); | 608 tMenuEdit_newButtonText(StMXTRA_ScrubTimer_OP_Mode, text); |
| 586 | 609 |
| 587 return UNSPECIFIC_RETURN; | 610 return UNSPECIFIC_RETURN; |
| 588 } | 611 } |
| 589 | 612 |
| 613 uint8_t OnAction_ScrubberActive(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | |
| 614 { | |
| 615 char text[32]; | |
| 616 SSettings *pSettings; | |
| 617 pSettings = settingsGetPointer(); | |
| 618 | |
| 619 if(pSettings->scubberActiveId & (1 << scrubberMenuId)) | |
| 620 { | |
| 621 pSettings->scubberActiveId &= ~(1 << scrubberMenuId); | |
| 622 snprintf(&text[0], 32,"%c %c \002\006", TXT_ScrubTime, TXT_Active); | |
| 623 } | |
| 624 else | |
| 625 { | |
| 626 pSettings->scubberActiveId |= (1 << scrubberMenuId); | |
| 627 snprintf(&text[0], 32,"%c %c \002\005", TXT_ScrubTime, TXT_Active); | |
| 628 } | |
| 629 | |
| 630 tMenuEdit_newButtonText(StMXTRA_ScrubTimer_Active, text); | |
| 631 | |
| 632 return UNSPECIFIC_RETURN; | |
| 633 } | |
| 634 | |
| 590 #ifdef ENABLE_PSCR_MODE | 635 #ifdef ENABLE_PSCR_MODE |
| 591 static uint8_t OnAction_PSCRO2Drop(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) | 636 static uint8_t OnAction_PSCRO2Drop(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action) |
| 592 { | 637 { |
| 593 SSettings *pSettings; | 638 SSettings *pSettings; |
| 594 uint8_t digitContentNew = EXIT_TO_MENU; | 639 uint8_t digitContentNew = EXIT_TO_MENU; |
