Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -r87380906a35227f899a3bee2f6574983ea5131cf -re0f0e562f964f53ac9b9bd62ff2092c0b12e202b --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 87380906a35227f899a3bee2f6574983ea5131cf) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision e0f0e562f964f53ac9b9bd62ff2092c0b12e202b) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2019-2023 Diality Inc. - All Rights Reserved. +* Copyright (c) 2019-2024 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file ModeDrain.c * * @author (last) Dara Navaei -* @date (last) 20-Jul-2023 +* @date (last) 23-Oct-2024 * * @author (original) Leonardo Baloa * @date (original) 20-Dec-2019 @@ -66,15 +66,8 @@ #define ACID_PERCENT_FILL 0.02222F ///< Acid volume percentage of reservoir volume. #define DATA_PUBLISH_COUNTER_START_COUNT 70 ///< Data publish counter start count. #define DRAIN_MODE_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the drain mode data is published on the CAN bus. +#define MIN_CONCENTRATE_VOLUME_ML 500.0F ///< Minimum concentrate volume in milliliters. -///< Concentrate bottle acid low volume in mL. -static const F32 CONCENTRATE_BOTTLE_ACID_LOW_VOLUME_ML = ( CONCENTRATE_BOTTLE_PRIMING_VOL_ML + - ( CONCENTRATE_BOTTLE_RESERVOIOR_VOL_ML * CONCENTRATE_BOTTLE_RESERVOIOR_FILLS * ACID_PERCENT_FILL) ); - -///< Concentrate bottle bicarb low volume in mL. -static const F32 CONCENTRATE_BOTTLE_BICARB_LOW_VOLUME_ML = ( CONCENTRATE_BOTTLE_PRIMING_VOL_ML + - ( CONCENTRATE_BOTTLE_RESERVOIOR_VOL_ML * CONCENTRATE_BOTTLE_RESERVOIOR_FILLS * BICARB_PERCENT_FILL) ); - // ********** private data ********** static DG_DRAIN_STATE_T drainState; ///< Currently active drain state. @@ -308,19 +301,27 @@ if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_EMPTY_BOTTLES_ALARM ) != SW_CONFIG_ENABLE_VALUE ) #endif { + HD_MODE_SUB_MODE_T hdMode; + + getHDOperationMode( &hdMode ); + // Detect empty bottles using integrated volumes - if ( ( acidBottleVolML - getChemicalUsedVolumeML( ACID ) ) <= CONCENTRATE_BOTTLE_ACID_LOW_VOLUME_ML ) // SRSDG 836 + if ( ( ( acidBottleVolML - getChemicalUsedVolumeML( ACID ) ) <= MIN_CONCENTRATE_VOLUME_ML ) && // SRSDG 836 + ( hdMode.hdMode != MODE_POST ) && // don't care about concentrates after treatment complete + ( getTestConfigStatus( TEST_CONFIG_MIX_WITH_WATER ) != TRUE ) ) { resetChemicalUsedVolumeML( ACID ); - setThisFisrtFillFlag( TRUE ); // indicates bottles need prime + setThisFirstFillFlag( TRUE ); // indicates bottles need prime activateAlarmNoData( ALARM_ID_DG_ACID_BOTTLE_LOW_VOLUME ); activateAlarmNoData ( ALARM_ID_DG_CREATING_DIALYSATE_PLEASE_WAIT ); } - if ( ( bicarbBottleVolML - getChemicalUsedVolumeML( BICARB ) ) <= CONCENTRATE_BOTTLE_BICARB_LOW_VOLUME_ML ) // SRSDG 837 + if ( ( ( bicarbBottleVolML - getChemicalUsedVolumeML( BICARB ) ) <= MIN_CONCENTRATE_VOLUME_ML ) && // SRSDG 837 + ( hdMode.hdMode != MODE_POST ) && // don't care about concentrates after treatment complete + ( getTestConfigStatus( TEST_CONFIG_MIX_WITH_WATER ) != TRUE ) ) { resetChemicalUsedVolumeML( BICARB ); - setThisFisrtFillFlag( TRUE ); + setThisFirstFillFlag( TRUE ); activateAlarmNoData( ALARM_ID_DG_BICARB_BOTTLE_LOW_VOLUME ); activateAlarmNoData ( ALARM_ID_DG_CREATING_DIALYSATE_PLEASE_WAIT ); } @@ -446,7 +447,7 @@ * drain mode data publish interval. * @details Inputs: drainModeDataPublishInterval * @details Outputs: drainModeDataPublishInterval - * @param: value override drain mode data publish interval with (in ms) + * @param value override drain mode data publish interval with (in ms) * @return TRUE if override successful, FALSE if not *************************************************************************/ BOOL testSetDrainModeDataPublishIntervalOverride( U32 value )