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;