Mercurial > public > ostc4
diff Discovery/Src/simulation.c @ 1014:8c0134a287da GasConsumption
Add a log data event to the scrubber timer at the start of the dive and every time the timer (in minutes)
is decremented. The event contains a 12 bit signed integer for the remaining scrubber duration, and two
flags for scrubber warning (0x2000, <= 30 minutes remaining) and scrubber error (0x4000, <= 0 minutes remaining).
(mikeller)
| author | heinrichsweikamp |
|---|---|
| date | Sun, 11 May 2025 16:18:20 +0200 |
| parents | 5a690195b6b7 |
| children |
line wrap: on
line diff
--- a/Discovery/Src/simulation.c Sat May 10 21:27:06 2025 +0200 +++ b/Discovery/Src/simulation.c Sun May 11 16:18:20 2025 +0200 @@ -43,6 +43,7 @@ #include "vpm.h" #include "buehlmann.h" #include "logbook_miniLive.h" +#include "logbook.h" #include "configuration.h" @@ -111,7 +112,8 @@ stateSim.lifeData.apnea_total_max_depth_meter = 0; - memcpy(stateSim.scrubberDataDive, settingsGetPointer()->scrubberData, sizeof(stateSim.scrubberDataDive)); + SSettings *settings = settingsGetPointer(); + memcpy(stateSim.scrubberDataDive, settings->scrubberData, sizeof(stateSim.scrubberDataDive)); memset(simSensmVOffset,0,sizeof(simSensmVOffset)); if(getReplayOffset() != 0xFFFF) { @@ -151,7 +153,6 @@ SDiveState * pDiveState = &stateSim; const SDiveState * pRealState = stateRealGetPointer(); SSettings *pSettings; - uint8_t timerId = 0; static int last_second = -1; static _Bool two_second = 0; @@ -245,27 +246,35 @@ pDiveState->lifeData.ascent_rate_meter_per_min = 0; } - if((pSettings->scrubTimerMode != SCRUB_TIMER_OFF) && (isLoopMode(pSettings->dive_mode)) && (pDiveState->mode == MODE_DIVE) && isLoopMode(pDiveState->diveSettings.diveMode)) - { - simScrubberTimeoutCount++; - if(simScrubberTimeoutCount >= 60) /* resolution is minutes */ - { - simScrubberTimeoutCount = 0; - for(timerId = 0; timerId < 2; timerId++) - { - if(pSettings->scubberActiveId & (1 << timerId)) - { - if(pDiveState->scrubberDataDive[timerId].TimerCur > MIN_SCRUBBER_TIME) - { - pDiveState->scrubberDataDive[timerId].TimerCur--; - } - translateDate(stateUsed->lifeData.dateBinaryFormat, &pDiveState->scrubberDataDive[timerId].lastDive); - } - } - } + if (isScrubberTimerRunning(pDiveState, pSettings)) { + simScrubberTimeoutCount++; + + if (simScrubberTimeoutCount >= 60) { + /* resolution is minutes */ + simScrubberTimeoutCount = 0; + + int16_t maxScrubberTime = INT16_MIN; + SScrubberData *longestScrubberData = NULL; + for (unsigned timerId = 0; timerId < 2; timerId++) { + if (pSettings->scrubberActiveId & (1 << timerId)) { + SScrubberData *scrubberData = &pDiveState->scrubberDataDive[timerId]; + if (scrubberData->TimerCur > MIN_SCRUBBER_TIME) { + scrubberData->TimerCur--; + } + + if (scrubberData->TimerCur > maxScrubberTime) { + maxScrubberTime = scrubberData->TimerCur; + longestScrubberData = scrubberData; + } + + translateDate(stateUsed->lifeData.dateBinaryFormat, &scrubberData->lastDive); + } + } + + logScrubberState(longestScrubberData); + } } - if(lastPressure_bar > 0) { //1 second * 60 == 1 minute, bar * 10 = meter
