Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -ra36a3feca5d35137f1db0293882af0f49ebb9f03 -rfb714597ad515d3774d69b94808f065788504724 --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision a36a3feca5d35137f1db0293882af0f49ebb9f03) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision fb714597ad515d3774d69b94808f065788504724) @@ -96,6 +96,7 @@ static F32 previousUFFlowMLP; ///< Previous ultrafiltration flow rate in mL/min. static DG_MIXING_RATIOS_T ratios; ///< Mixing ratios and fill prep time in milliseconds structure. static U32 prevTargetFillVolumeML[ NUM_OF_DG_RESERVOIRS ]; ///< Previous target fill volume in milliliters. +static BOOL hasReservoirBeenSwitched; ///< Flag to indicate reservoir has been recently switched. static const F32 RESERVOIR_DILUTION_RATIO = MAX_RESERVOIR_DILUTION / ( 1.0 - MAX_RESERVOIR_DILUTION ); ///< Reservoir dilution ratio. @@ -127,7 +128,7 @@ * volSpentMl, reservoirsPublicationCounter, dilutionLevelPct, dgOpMode, dgSubMode, * timeReservoirInUse, volSpentUFML, activeReservoir, recirculationLevelPct, * reservoirSwitchStartTimeMS, timeWaitToFillMS, targetFillFlowLPM, ratios - * previousDialysateFlowRate, prevTargetFillVolumeML + * previousDialysateFlowRate, prevTargetFillVolumeML, hasReservoirBeenSwitched * @return none *************************************************************************/ void initReservoirs( void ) @@ -155,6 +156,7 @@ ratios.acidMixingRatio = 0.0F; ratios.bicarbMixingRatio = 0.0F; ratios.timeFillPrepMS = 0; + hasReservoirBeenSwitched = FALSE; // Initialize the previous reservoir fill volume prevTargetFillVolumeML[ DG_RESERVOIR_1 ] = FILL_RESERVOIR_TO_VOLUME_ML; @@ -270,6 +272,32 @@ timeReservoirInUF += TASK_GENERAL_INTERVAL; } +/*********************************************************************//** + * @brief + * The checkHasReservoirBeenSwitched function returns the reservoir has been + * switched flag. + * @details Inputs: hasReservoirBeenSwitched + * @details Outputs: hasReservoirBeenSwitched + * @return reservoir has been switched flag + *************************************************************************/ +BOOL checkHasReservoirBeenSwitched( void ) +{ + return hasReservoirBeenSwitched; +} + +/*********************************************************************//** + * @brief + * The resetReservoirSwitchFlag function resets the reservoir has been + * switched flag. + * @details Inputs: none + * @details Outputs: hasReservoirBeenSwitched + * @return none + *************************************************************************/ +void resetReservoirSwitchFlag( void ) +{ + hasReservoirBeenSwitched = FALSE; +} + // ********** private functions ********** /*********************************************************************//** @@ -675,7 +703,8 @@ * The handleReservoirMgmtWaitForSwitchSettleState function executes the reservoir * management wait for switch to settle state. * @details Inputs: reservoirSwitchStartTimeMS - * @details Outputs: timeReservoirInUse + * @details Outputs: timeReservoirInUse, lastTimeReservoirInUF, timeReservoirInUF + * hasReservoirBeenSwitched * @return next reservoir management state of the state machine *************************************************************************/ static TREATMENT_RESERVOIR_MGMT_STATE_T handleReservoirMgmtWaitForSwitchSettleState( void ) @@ -685,9 +714,10 @@ if ( TRUE == didTimeout( reservoirSwitchStartTimeMS, RESERVOIR_USED_SETTLE_TIME_MS ) ) { // Switching the active reservoir so reset the reservoir in use timer - lastTimeReservoirInUF = timeReservoirInUF; - timeReservoirInUF = 0; - timeReservoirInUse = 0; + lastTimeReservoirInUF = timeReservoirInUF; + timeReservoirInUF = 0; + timeReservoirInUse = 0; + hasReservoirBeenSwitched = TRUE; // Signal dialysis sub-mode to capture final volume of prior reservoir after settling. setFinalReservoirVolume();