Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -r0c599603188536e9d329fbd60a8768affd0c49a2 -r7c99c8a08fdd3747c298d04a6995b325bb986097 --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 0c599603188536e9d329fbd60a8768affd0c49a2) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 7c99c8a08fdd3747c298d04a6995b325bb986097) @@ -249,23 +249,23 @@ { requestNewOperationMode( DG_MODE_GENE ); } + } - if ( TRUE == isEmptyAcidBottle() ) // is acid volume < 10% - { - setThisFisrtFillFlag( TRUE ); // indicates bottles need prime - activateAlarmNoData( ALARM_ID_DG_ACID_BOTTLE_LOW_VOLUME ); // trigger empty acid bottle alarm - } - else if ( TRUE == isEmptyBicarbBottle() ) // is bicarb volume < 10% - { - setThisFisrtFillFlag( TRUE ); // indicates bottles need prime - activateAlarmNoData( ALARM_ID_DG_BICARB_BOTTLE_LOW_VOLUME ); // trigger empty bicarb bottle alarm - } - else if ( ( FALSE == isAlarmActive( ALARM_ID_DG_ACID_BOTTLE_LOW_VOLUME ) ) || - ( FALSE == isAlarmActive( ALARM_ID_DG_BICARB_BOTTLE_LOW_VOLUME ) ) ) - { - requestNewOperationMode( DG_MODE_FILL ); - } + // check for empty bottles at the end of drain + if ( TRUE == isEmptyAcidBottle() ) // is acid volume < 10% + { + setThisFisrtFillFlag( TRUE ); // indicates bottles need prime + activateAlarmNoData( ALARM_ID_DG_ACID_BOTTLE_LOW_VOLUME ); // trigger empty acid bottle alarm } + else if ( TRUE == isEmptyBicarbBottle() ) // is bicarb volume < 10% + { + setThisFisrtFillFlag( TRUE ); // indicates bottles need prime + activateAlarmNoData( ALARM_ID_DG_BICARB_BOTTLE_LOW_VOLUME ); // trigger empty bicarb bottle alarm + } + else + { + requestNewOperationMode( DG_MODE_GENE ); // TODO: in idle, reject moving from idle to fill if alarm is active + } // Drain timed out raise the alarm if ( TRUE == didTimeout( dialysateDrainStartTime, DIALYSATE_DRAIN_TIME_OUT ) ) Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -r0c599603188536e9d329fbd60a8768affd0c49a2 -r7c99c8a08fdd3747c298d04a6995b325bb986097 --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 0c599603188536e9d329fbd60a8768affd0c49a2) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 7c99c8a08fdd3747c298d04a6995b325bb986097) @@ -204,7 +204,7 @@ initPersistentAlarm( ALARM_ID_DG_ACID_BOTTLE_LOW_VOLUME, 0, EMPTY_BOTTLE_DETECT_PERSISTENT_PERIOD_MS ); initPersistentAlarm( ALARM_ID_DG_BICARB_BOTTLE_LOW_VOLUME, 0, EMPTY_BOTTLE_DETECT_PERSISTENT_PERIOD_MS ); - initPersistentAlarm( ALARM_ID_DG_DIALYSATE_TEMPERATURE_SENSORS_DRFIT_TIMEOUT, 0, DIALYSATE_TEMPERATURE_SENSORS_DRIFT_TIMEOUT_MS ); + initPersistentAlarm( ALARM_ID_DG_DIALYSATE_TEMPERATURE_SENSORS_DRIFT_TIMEOUT, 0, DIALYSATE_TEMPERATURE_SENSORS_DRIFT_TIMEOUT_MS ); } /*********************************************************************//** Index: firmware/App/Modes/ModeGenIdle.c =================================================================== diff -u -r0c599603188536e9d329fbd60a8768affd0c49a2 -r7c99c8a08fdd3747c298d04a6995b325bb986097 --- firmware/App/Modes/ModeGenIdle.c (.../ModeGenIdle.c) (revision 0c599603188536e9d329fbd60a8768affd0c49a2) +++ firmware/App/Modes/ModeGenIdle.c (.../ModeGenIdle.c) (revision 7c99c8a08fdd3747c298d04a6995b325bb986097) @@ -53,6 +53,7 @@ static DG_GEN_IDLE_MODE_STATE_T genIdleState; ///< Currently active generation idle state. static DG_GEN_IDLE_MODE_BAD_FILL_STATE_T badFillState; ///< Current active bad fill state. static U32 hdLostCommStartTime_ms = 0; ///< Lost communication with HD start time in ms. +static U32 targetFillVolumeML; ///< Save the target fill volume before calling startFillCmd() // ********** private function prototypes ********** @@ -78,6 +79,7 @@ genIdleState = DG_GEN_IDLE_MODE_STATE_START; // badFillState = DG_HANDLE_BAD_FILL_STATE_FIRST_DRAIN; hdLostCommStartTime_ms = 0; + targetFillVolumeML = 0; } /*********************************************************************//** @@ -320,11 +322,12 @@ static DG_GEN_IDLE_MODE_BAD_FILL_STATE_T handleFlushFillState( void ) { DG_GEN_IDLE_MODE_BAD_FILL_STATE_T result = DG_HANDLE_BAD_FILL_STATE_FLUSH_FILL; + U32 fillToVolumeML = 1000; if ( FALSE == isAlarmActive( ALARM_ID_FILL_CONDUCTIVITY_OUT_OF_RANGE ) ) // alarm is no longer active - cleared by user { - // TODO fill only up to 1000 mL not 1500 mL - requestNewOperationMode( DG_MODE_FILL ); // When fill is completed, it goes to generation idle mode (DG_GEN_IDLE_MODE_STATE_START) + targetFillVolumeML = getTargetFillVolumeML(); // save the HD target fill volume before command 1000 mL fill volume + startFillCmd( fillToVolumeML, getTargetFillFlowRateLPM() ); if ( TRUE == isAvgConductivityOutOfRange() ) { @@ -368,10 +371,8 @@ { DG_GEN_IDLE_MODE_BAD_FILL_STATE_T result = DG_HANDLE_BAD_FILL_STATE_CLEAR_ALARM; // (idle 1.4) - // TODO fill only up to 1500 mL not 1000 mL + startFillCmd( targetFillVolumeML, getTargetFillFlowRateLPM() ); // refill to the saved target fill volume (~1500 mL) - requestNewOperationMode( DG_MODE_FILL ); - return result; }