diff 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
line wrap: on
line diff
--- a/Discovery/Src/tMenuEditXtra.c	Wed Apr 23 14:47:42 2025 +0200
+++ b/Discovery/Src/tMenuEditXtra.c	Wed Apr 23 14:52:03 2025 +0200
@@ -62,6 +62,7 @@
 static uint8_t OnAction_ScrubberTimerMax(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
 static uint8_t OnAction_ScrubberReset(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
 static uint8_t OnAction_ScrubberMode(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
+static uint8_t OnAction_ScrubberActive(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
 #ifdef ENABLE_PSCR_MODE
 static uint8_t OnAction_PSCRO2Drop(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
 static uint8_t OnAction_PSCRLungRation(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action);
@@ -69,6 +70,7 @@
 
 /* Exported functions --------------------------------------------------------*/
 
+static uint8_t scrubberMenuId = 0;
 
 void openEdit_Xtra(uint8_t line)
 {
@@ -194,9 +196,9 @@
 }
 
 
-static void printScrubberResetText(char *text, SSettings *settings)
+static void printScrubberResetText(char *text, SSettings *settings, uint8_t scrubberId)
 {
-    int16_t currentTimerMinutes = settings->scrubberData[settings->scubberActiveId].TimerCur;
+    int16_t currentTimerMinutes = settings->scrubberData[scrubberId].TimerCur;
     char colour = '\020';
     if (currentTimerMinutes <= 0) {
         colour = '\025';
@@ -215,7 +217,7 @@
 
     SSettings *pSettings = settingsGetPointer();
 
-    localScrubTimer =  pSettings->scrubberData[pSettings->scubberActiveId].TimerMax;
+    localScrubTimer =  pSettings->scrubberData[scrubberMenuId].TimerMax;
 
 	resetMenuEdit(CLUT_MenuPageXtra);
 
@@ -224,34 +226,44 @@
     write_topline(text);
 
 
-    snprintf(&text[0], 32,"%c \002#%d",TXT_ScrubTime,pSettings->scubberActiveId);
+    snprintf(&text[0], 32,"%c \002#%d",TXT_ScrubTime,scrubberMenuId);
     write_field_button(StMXTRA_ScrubTimer, 20, 780, ME_Y_LINE1,  &FontT48, text);
 
+    if(pSettings->scubberActiveId & (1 << scrubberMenuId))
+    {
+    	snprintf(&text[0], 32,"%c %c \002\005", TXT_ScrubTime, TXT_Active);
+    }
+    else
+    {
+      	snprintf(&text[0], 32,"%c %c \002\006", TXT_ScrubTime, TXT_Active);
+    }
+    write_field_button(StMXTRA_ScrubTimer_Active, 20, 780, ME_Y_LINE2,  &FontT48, text);
+
     snprintf(&text[textIndex], 32,\
         "%c"
     	"\016\016(%c)\017"
         ,TXT_ScrubTime
 		,TXT_Maximum);
 
-    write_label_var(  20, 340, ME_Y_LINE2, &FontT48, text);
+    write_label_var(  20, 340, ME_Y_LINE3, &FontT48, text);
     snprintf(&text[textIndex], 32, "\002###\016\016 %c\017",TXT_Minutes);
 
-    write_field_udigit(StMXTRA_ScrubTimer_Max,	 610, 780, ME_Y_LINE2,  &FontT48, text,localScrubTimer, 0, 0, 0);
+    write_field_udigit(StMXTRA_ScrubTimer_Max,	 610, 780, ME_Y_LINE3,  &FontT48, text,localScrubTimer, 0, 0, 0);
 
-    printScrubberResetText(text, pSettings);
-    write_field_button(StMXTRA_ScrubTimer_Reset, 20, 780, ME_Y_LINE3,  &FontT48, text);
+    printScrubberResetText(text, pSettings, scrubberMenuId);
+    write_field_button(StMXTRA_ScrubTimer_Reset, 20, 780, ME_Y_LINE4,  &FontT48, text);
 
-    if(pSettings->scrubberData[pSettings->scubberActiveId].lastDive.WeekDay != 0)
+    if(pSettings->scrubberData[scrubberMenuId].lastDive.WeekDay != 0)
     {
-    	snprintf(&text[0], 32,"%c%c\002       %02d.%02d.%02d", TXT_2BYTE, TXT2BYTE_SimDiveTime, 	pSettings->scrubberData[pSettings->scubberActiveId].lastDive.Date,
-																				pSettings->scrubberData[pSettings->scubberActiveId].lastDive.Month,
-																				pSettings->scrubberData[pSettings->scubberActiveId].lastDive.Year);
+    	snprintf(&text[0], 32,"%c%c\002       %02d.%02d.%02d", TXT_2BYTE, TXT2BYTE_SimDiveTime, 	pSettings->scrubberData[scrubberMenuId].lastDive.Date,
+																				pSettings->scrubberData[scrubberMenuId].lastDive.Month,
+																				pSettings->scrubberData[scrubberMenuId].lastDive.Year);
     }
     else
     {
        	snprintf(&text[0], 32,"%c%c\002       --.--.--", TXT_2BYTE, TXT2BYTE_SimDiveTime);
     }
-	write_label_var(  20, 780, ME_Y_LINE4, &FontT48, text);
+	write_label_var(  20, 780, ME_Y_LINE5, &FontT48, text);
 
    	switch(pSettings->scrubTimerMode)
     	{
@@ -263,13 +275,15 @@
     		case SCRUB_TIMER_PERCENT: snprintf(&text[0], 32,"%c\002%c",TXT_ScrubTimeMode, TXT_Percent );
     			break;
     	}
-    write_field_button(StMXTRA_ScrubTimer_OP_Mode,	 20, 780, ME_Y_LINE5,  &FontT48, text);
+    write_field_button(StMXTRA_ScrubTimer_OP_Mode,	 20, 780, ME_Y_LINE6,  &FontT48, text);
 
     setEvent(StMXTRA_ScrubTimer, (uint32_t)OnAction_ScrubberTimerId);
+    setEvent(StMXTRA_ScrubTimer_Active, (uint32_t)OnAction_ScrubberActive);
     setEvent(StMXTRA_ScrubTimer_Max, (uint32_t)OnAction_ScrubberTimerMax);
     setEvent(StMXTRA_ScrubTimer_Reset, (uint32_t)OnAction_ScrubberReset);
     setEvent(StMXTRA_ScrubTimer_OP_Mode, (uint32_t)OnAction_ScrubberMode);
 
+
     write_buttonTextline(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_ButtonNext);
 
 }
@@ -464,36 +478,46 @@
 	SSettings *pSettings;
     pSettings = settingsGetPointer();
 
-    if(pSettings->scubberActiveId == 0)
+
+    if(scrubberMenuId == 0)
     {
-    	pSettings->scubberActiveId = 1;
+    	scrubberMenuId = 1;
     }
     else
     {
-       	pSettings->scubberActiveId = 0;
+    	scrubberMenuId = 0;
     }
 
-
-    snprintf(&text[0], 32,"%c \002#%d",TXT_ScrubTime,pSettings->scubberActiveId);
+    snprintf(&text[0], 32,"%c \002#%d",TXT_ScrubTime,scrubberMenuId);
     tMenuEdit_newButtonText(StMXTRA_ScrubTimer, text);
 
-    printScrubberResetText(text, pSettings);
+    printScrubberResetText(text, pSettings, scrubberMenuId);
     tMenuEdit_newButtonText(StMXTRA_ScrubTimer_Reset, text);
 
-    tMenuEdit_newInput(StMXTRA_ScrubTimer_Max, pSettings->scrubberData[pSettings->scubberActiveId].TimerMax,  0,  0, 0);
+    tMenuEdit_newInput(StMXTRA_ScrubTimer_Max, pSettings->scrubberData[scrubberMenuId].TimerMax,  0,  0, 0);
 
-    if(pSettings->scrubberData[pSettings->scubberActiveId].lastDive.WeekDay != 0)
+    if(pSettings->scrubberData[scrubberMenuId].lastDive.WeekDay != 0)
     {
-    	snprintf(&text[0], 32,"%c%c\002   %02d.%02d.%02d", TXT_2BYTE, TXT2BYTE_SimDiveTime, 	pSettings->scrubberData[pSettings->scubberActiveId].lastDive.Date,
-																				pSettings->scrubberData[pSettings->scubberActiveId].lastDive.Month,
-																				pSettings->scrubberData[pSettings->scubberActiveId].lastDive.Year);
+    	snprintf(&text[0], 32,"%c%c\002   %02d.%02d.%02d", TXT_2BYTE, TXT2BYTE_SimDiveTime, 	pSettings->scrubberData[scrubberMenuId].lastDive.Date,
+																				pSettings->scrubberData[scrubberMenuId].lastDive.Month,
+																				pSettings->scrubberData[scrubberMenuId].lastDive.Year);
     }
     else
     {
        	snprintf(&text[0], 32,"%c%c\002   --.--.--", TXT_2BYTE, TXT2BYTE_SimDiveTime);
     }
-    clean_content(  20, 780, ME_Y_LINE4, &FontT48);
-	write_label_var(  20, 780, ME_Y_LINE4, &FontT48, text);
+    clean_content(  20, 780, ME_Y_LINE5, &FontT48);
+	write_label_var(  20, 780, ME_Y_LINE5, &FontT48, text);
+
+    if(pSettings->scubberActiveId & (1 << scrubberMenuId))
+    {
+    	snprintf(&text[0], 32,"%c %c \002\005", TXT_ScrubTime, TXT_Active);
+    }
+    else
+    {
+      	snprintf(&text[0], 32,"%c %c \002\006", TXT_ScrubTime, TXT_Active);
+    }
+    tMenuEdit_newButtonText(StMXTRA_ScrubTimer_Active, text);
 
     return UNSPECIFIC_RETURN;
 }
@@ -516,10 +540,10 @@
         	newScrubberTime = MAX_SCRUBBER_TIME;
 
         pSettings = settingsGetPointer();
-        pSettings->scrubberData[pSettings->scubberActiveId].TimerMax = newScrubberTime;
-        if(pSettings->scrubberData[pSettings->scubberActiveId].TimerCur > newScrubberTime)
+        pSettings->scrubberData[scrubberMenuId].TimerMax = newScrubberTime;
+        if(pSettings->scrubberData[scrubberMenuId].TimerCur > newScrubberTime)
         {
-        	pSettings->scrubberData[pSettings->scubberActiveId].TimerCur = newScrubberTime;
+        	pSettings->scrubberData[scrubberMenuId].TimerCur = newScrubberTime;
         }
 
         tMenuEdit_newInput(editId, newScrubberTime, 0, 0, 0);
@@ -545,16 +569,15 @@
 	char text[32];
 	SSettings *pSettings;
     pSettings = settingsGetPointer();
-    pSettings->scrubberData[pSettings->scubberActiveId].TimerCur = pSettings->scrubberData[pSettings->scubberActiveId].TimerMax;
-    pSettings->scrubberData[pSettings->scubberActiveId].lastDive.WeekDay = 0;	/* invalidate date */
+    pSettings->scrubberData[scrubberMenuId].TimerCur = pSettings->scrubberData[scrubberMenuId].TimerMax;
+    pSettings->scrubberData[scrubberMenuId].lastDive.WeekDay = 0;	/* invalidate date */
 
-    printScrubberResetText(text, pSettings);
+    printScrubberResetText(text, pSettings, scrubberMenuId);
     tMenuEdit_newButtonText(StMXTRA_ScrubTimer_Reset, text);
 
    	snprintf(&text[0], 32,"%c%c\002   --.--.--", TXT_2BYTE, TXT2BYTE_SimDiveTime);
-   	clean_content(  20, 780, ME_Y_LINE4, &FontT48);
-	write_label_var(  20, 780, ME_Y_LINE4, &FontT48, text);
-
+   	clean_content(  20, 780, ME_Y_LINE5, &FontT48);
+	write_label_var(  20, 780, ME_Y_LINE5, &FontT48, text);
 
     return UNSPECIFIC_RETURN;
 }
@@ -587,6 +610,28 @@
     return UNSPECIFIC_RETURN;
 }
 
+uint8_t OnAction_ScrubberActive(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
+{
+	char text[32];
+	SSettings *pSettings;
+    pSettings = settingsGetPointer();
+
+    if(pSettings->scubberActiveId & (1 << scrubberMenuId))
+    {
+    	pSettings->scubberActiveId &= ~(1 << scrubberMenuId);
+    	snprintf(&text[0], 32,"%c %c \002\006", TXT_ScrubTime, TXT_Active);
+    }
+    else
+    {
+       	pSettings->scubberActiveId |= (1 << scrubberMenuId);
+       	snprintf(&text[0], 32,"%c %c \002\005", TXT_ScrubTime, TXT_Active);
+    }
+
+    tMenuEdit_newButtonText(StMXTRA_ScrubTimer_Active, text);
+
+    return UNSPECIFIC_RETURN;
+}
+
 #ifdef ENABLE_PSCR_MODE
 static uint8_t OnAction_PSCRO2Drop(uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action)
 {