# HG changeset patch
# User heinrichsweikamp
# Date 1738673383 -3600
# Node ID 7149f372b0ba70aa25152f52981afc25f0ee2118
# Parent  e7cd7ffd1879c9c4637699fed4ed975aad6e6e2d
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)

diff -r e7cd7ffd1879 -r 7149f372b0ba Discovery/Inc/t3.h
--- 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 */
diff -r e7cd7ffd1879 -r 7149f372b0ba Discovery/Src/simulation.c
--- 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);
     	}
     }
 
diff -r e7cd7ffd1879 -r 7149f372b0ba Discovery/Src/t3.c
--- 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';
diff -r e7cd7ffd1879 -r 7149f372b0ba Discovery/Src/t7.c
--- 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);
diff -r e7cd7ffd1879 -r 7149f372b0ba Discovery/Src/tCCR.c
--- 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);
+            }
+        }
     }
 }