Mercurial > public > ostc4
diff Discovery/Src/tCCR.c @ 635:66c8a4ff9fc4
Debounce fallback warning:
In previous versions the fallback option (automatical setting of a fixed setpoint) was only done for communication timeout scenario in combination with a HUD. It is now also applied in case all sensors are rated as out of bounds. The signaling of the fallback warning (including optional automatic setpoint change) is now done taking a 5 seconds debounds time into account.
In case a fallback warning is active, then the only way to reset it is by selecting a new setpoint or by changing the sensor configuration (no change compared to previous implementation
author | Ideenmodellierer |
---|---|
date | Wed, 24 Feb 2021 21:03:22 +0100 |
parents | 7c73f066cd16 |
children | 980b4aa60a0e |
line wrap: on
line diff
--- a/Discovery/Src/tCCR.c Wed Feb 24 19:18:26 2021 +0100 +++ b/Discovery/Src/tCCR.c Wed Feb 24 21:03:22 2021 +0100 @@ -82,7 +82,7 @@ /* Private variables with external access via get_xxx() function -------------*/ /* Private function prototypes -----------------------------------------------*/ -static void tCCR_fallbackToFixedSetpoint(void); +static uint8_t tCCR_fallbackToFixedSetpoint(void); #ifndef USART_IR_HUD @@ -252,7 +252,7 @@ } } - +/* this function is called out of the 100ms callback => to be considered for debouncing */ uint8_t get_ppO2SensorWeightedResult_cbar(void) { static uint8_t lastValidValue = 0; @@ -273,13 +273,21 @@ } if(count == 0) /* all sensors out of bounds! => return last valid value as workaround till diver takes action */ { - set_warning_fallback(); - retVal = lastValidValue; + if(debounce_warning_fallback(100)) + { + set_warning_fallback(); + retVal = tCCR_fallbackToFixedSetpoint(); /* this function only changes setpoint if option is enabled */ + } + if(retVal == 0) + { + retVal = lastValidValue; + } } else { - retVal = (uint8_t)(result / count); - lastValidValue = retVal; + reset_debounce_warning_fallback(); + retVal = (uint8_t)(result / count); + lastValidValue = retVal; } return retVal; } @@ -416,8 +424,9 @@ #endif /* Private functions ---------------------------------------------------------*/ -static void tCCR_fallbackToFixedSetpoint(void) +static uint8_t tCCR_fallbackToFixedSetpoint(void) { + uint8_t retVal = 0; if((stateUsed->mode == MODE_DIVE) && (stateUsed->diveSettings.diveMode == DIVEMODE_CCR) && (stateUsed->diveSettings.CCR_Mode == CCRMODE_Sensors) && (stateUsed->diveSettings.fallbackOption)) { uint8_t setpointCbar, actualGasID; @@ -429,5 +438,7 @@ setActualGas_DM(&stateUsedWrite->lifeData,actualGasID,setpointCbar); set_warning_fallback(); + retVal = stateUsed->diveSettings.setpoint[1].setpoint_cbar; } + return retVal; }