changeset 980:7149f372b0ba Evo_2_23

Fix a couple of bugs in the scrubber timer: - double speed scrubber countdown in simulator mode - unwanted updating of last scrubber use date in simulator mode - invalid remaining scrubber display in surface mode (mikeller)
author heinrichsweikamp
date Tue, 04 Feb 2025 13:49:43 +0100 (5 weeks ago)
parents e7cd7ffd1879
children c6c781a2e85b
files Discovery/Inc/t3.h Discovery/Src/simulation.c Discovery/Src/t3.c Discovery/Src/t7.c Discovery/Src/tCCR.c
diffstat 5 files changed, 24 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/Discovery/Inc/t3.h	Tue Feb 04 13:48:53 2025 +0100
+++ b/Discovery/Inc/t3.h	Tue Feb 04 13:49:43 2025 +0100
@@ -44,6 +44,6 @@
 uint8_t t3_customview_disabled(uint8_t view);
 void t3_handleAutofocus(void);
 
-int printScrubberText(char *text, size_t size, SSettings *settings);
+int printScrubberText(char *text, size_t size, const SScrubberData *scrubberData, SSettings *settings);
 
 #endif /* T3_H */
--- a/Discovery/Src/simulation.c	Tue Feb 04 13:48:53 2025 +0100
+++ b/Discovery/Src/simulation.c	Tue Feb 04 13:49:43 2025 +0100
@@ -254,7 +254,7 @@
     		{
     			pDiveState->scrubberDataDive[pSettings->scubberActiveId].TimerCur--;
     		}
-    		translateDate(stateUsed->lifeData.dateBinaryFormat, &stateUsedWrite->scrubberDataDive[pSettings->scubberActiveId].lastDive);
+            translateDate(stateUsed->lifeData.dateBinaryFormat, &pDiveState->scrubberDataDive[pSettings->scubberActiveId].lastDive);
     	}
     }
 
--- a/Discovery/Src/t3.c	Tue Feb 04 13:48:53 2025 +0100
+++ b/Discovery/Src/t3.c	Tue Feb 04 13:49:43 2025 +0100
@@ -1341,7 +1341,7 @@
 
                 textpointer = 0;
                 text[textpointer++] = '\002';
-                textpointer += printScrubberText(&text[textpointer], 10, pSettings);
+                textpointer += printScrubberText(&text[textpointer], 10, stateUsed->scrubberDataDive, pSettings);
                 GFX_write_string(&FontT105,tXc1,text,1);
             }
         }
@@ -1996,9 +1996,9 @@
     return t3_selection_customview;
 }
 
-int printScrubberText(char *text, size_t size, SSettings *settings)
+int printScrubberText(char *text, size_t size, const SScrubberData *scrubberData, SSettings *settings)
 {
-    int16_t currentTimerMinutes = stateUsed->scrubberDataDive[settings->scubberActiveId].TimerCur;
+    int16_t currentTimerMinutes = scrubberData[settings->scubberActiveId].TimerCur;
     char colour = '\020';
     if (currentTimerMinutes <= 0) {
         colour = '\025';
--- a/Discovery/Src/t7.c	Tue Feb 04 13:48:53 2025 +0100
+++ b/Discovery/Src/t7.c	Tue Feb 04 13:49:43 2025 +0100
@@ -1962,7 +1962,7 @@
         data[dataIndex++] = '\n';
         data[dataIndex++] = '\r';
         data[dataIndex++] = '\t';
-        dataIndex += printScrubberText(&data[dataIndex], 10, settings);
+        dataIndex += printScrubberText(&data[dataIndex], 10, settings->scrubberData, settings);
     }
 
     heading[headingIndex++] = '\017';
@@ -3396,7 +3396,7 @@
     	tinyHeaderFont = 1;
         headerText[2] = TXT_ScrubTime;
 
-        printScrubberText(text, TEXTSIZE, pSettings);
+        printScrubberText(text, TEXTSIZE, stateUsed->scrubberDataDive, pSettings);
 
 		break;
 #ifdef ENABLE_PSCR_MODE
@@ -4247,7 +4247,7 @@
         text[textpointer++] = '\r';
         text[textpointer++] = '\t';
 
-        textpointer += printScrubberText(&text[textpointer], 10, pSettings);
+        textpointer += printScrubberText(&text[textpointer], 10, stateUsed->scrubberDataDive, pSettings);
     }
     text[textpointer++] = 0;
     Gfx_colorsscheme_mod(text, 0);
--- a/Discovery/Src/tCCR.c	Tue Feb 04 13:48:53 2025 +0100
+++ b/Discovery/Src/tCCR.c	Tue Feb 04 13:49:43 2025 +0100
@@ -337,19 +337,22 @@
 		}
 	}
 
-	/* decrease scrubber timer only if we are not bailed out */
-    if((pSettings->scrubTimerMode != SCRUB_TIMER_OFF) && (isLoopMode(pSettings->dive_mode)) && (stateUsed->mode == MODE_DIVE) && isLoopMode(stateUsed->diveSettings.diveMode))
-    {
-    	ScrubberTimeoutCount++;
-    	if(ScrubberTimeoutCount >= 600)		/* resolution is minutes */
-    	{
-    		ScrubberTimeoutCount = 0;
-    		if(stateUsed->scrubberDataDive[pSettings->scubberActiveId].TimerCur > MIN_SCRUBBER_TIME)
-    		{
-    			stateUsedWrite->scrubberDataDive[pSettings->scubberActiveId].TimerCur--;
-    		}
-    		translateDate(stateUsed->lifeData.dateBinaryFormat, &stateUsedWrite->scrubberDataDive[pSettings->scubberActiveId].lastDive);
-    	}
+    // If we are in the simulator the counter is updated in `simulator.c`
+    if (!is_stateUsedSetToSim()) {
+        /* decrease scrubber timer only if we are not bailed out */
+        if((pSettings->scrubTimerMode != SCRUB_TIMER_OFF) && (isLoopMode(pSettings->dive_mode)) && (stateUsed->mode == MODE_DIVE) && isLoopMode(stateUsed->diveSettings.diveMode))
+        {
+            ScrubberTimeoutCount++;
+            if(ScrubberTimeoutCount >= 600)		/* resolution is minutes */
+            {
+                ScrubberTimeoutCount = 0;
+                if(stateUsed->scrubberDataDive[pSettings->scubberActiveId].TimerCur > MIN_SCRUBBER_TIME)
+                {
+                    stateUsedWrite->scrubberDataDive[pSettings->scubberActiveId].TimerCur--;
+                }
+                translateDate(stateUsed->lifeData.dateBinaryFormat, &stateUsedWrite->scrubberDataDive[pSettings->scubberActiveId].lastDive);
+            }
+        }
     }
 }