Index: firmware/App/Modes/Rinseback.c =================================================================== diff -u -r2f9807457197c347c20a24c64492edcf063f3daa -r8d3dbd25627fb7e993409eb47b2575e0430afddd --- firmware/App/Modes/Rinseback.c (.../Rinseback.c) (revision 2f9807457197c347c20a24c64492edcf063f3daa) +++ firmware/App/Modes/Rinseback.c (.../Rinseback.c) (revision 8d3dbd25627fb7e993409eb47b2575e0430afddd) @@ -82,6 +82,7 @@ static BOOL recircRequested; ///< Flag indicates user requesting to begin re-circulation (confirming disconnection and shunt). static BOOL backToTreatmentRequested; ///< Flag indicates user requesting to go back to treatment (confirming still connected). static BOOL endTreatmentRequested; ///< Flag indicates user requesting to end treatment. +static BOOL airTrapFillInProgress; ///< Flag indicates an air trap fill is in progress. // ********** private function prototypes ********** @@ -133,6 +134,7 @@ rinsebackAdditionalTimerCtr = 0; rinsebackPublishTimerCtr = 0; resetRinsebackFlags(); + airTrapFillInProgress = FALSE; // set to false initially - so keep after call to reset function } /*********************************************************************//** @@ -154,6 +156,7 @@ recircRequested = FALSE; backToTreatmentRequested = FALSE; endTreatmentRequested = FALSE; + airTrapFillInProgress = isAirTrapFillInProgress(); } /*********************************************************************//** @@ -405,8 +408,13 @@ * @brief * The handleRinsebackRunState function handles the rinseback run state * operations. - * @details Inputs: flags - * @details Outputs: cumulativeRinsebackVolume_mL, flags handled + * @details Inputs: endRinsebackRequested, pauseRinsebackRequested, + * airTrapFillInProgress, rinsebackRate_mL_min, incrRinsebackFlowRateRequested, + * decrRinsebackFlowRateRequested + * @details Outputs: cumulativeRinsebackVolume_mL, rinsebackTimerCtr, + * targetRinsebackVolumePlusAdditional_mL, rinsebackRate_mL_min, + * incrRinsebackFlowRateRequested, decrRinsebackFlowRateRequested, + * targetRinsebackVolumePlusAdditional_mL, rinsebackRate_mL_min * @return next rinseback state *************************************************************************/ static RINSEBACK_STATE_T handleRinsebackRunState( void ) @@ -453,9 +461,25 @@ setupForRinsebackStopOrPause(); result = RINSEBACK_PAUSED_STATE; } + // if an air trap fill has started, set BP rate and VBV state accordingly + else if ( ( airTrapFillInProgress != TRUE ) && ( TRUE == isAirTrapFillInProgress() ) ) + { + // set BP to air trap fill rate if air trap fill has been initiated + setBloodPumpTargetFlowRate( AIR_TRAP_FILL_BLOOD_FLOW_RATE, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + // close VBV for fill + setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); + } // Otherwise, continue rinseback else - { // Has user requested rate change? + { + if ( ( TRUE == airTrapFillInProgress ) && ( isAirTrapFillInProgress() != TRUE ) ) + { + // re-open VBV after fill + setValvePosition( VBV, VALVE_POSITION_B_OPEN ); + // restore BP to rinseback blood flow rate + setBloodPumpTargetFlowRate( rinsebackRate_mL_min, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + } + // Has user requested rate change? if ( ( TRUE == incrRinsebackFlowRateRequested ) || ( TRUE == decrRinsebackFlowRateRequested ) ) { U32 rbRate = rinsebackRate_mL_min; @@ -576,8 +600,10 @@ * @brief * The handleRinsebackRunAdditionalState function handles the rinseback additional * state operations. - * @details Inputs: flags - * @details Outputs: flags handled + * @details Inputs: additionalRinsebackVolume_mL, rinsebackAdditionalTimerCtr + * @details Outputs: rinsebackTimerCtr, additionalRinsebackVolume_mL, + * totalAdditionalRinsebackVolume_mL, cumulativeRinsebackVolume_mL, + * rinsebackAdditionalTimerCtr * @return next rinseback state *************************************************************************/ static RINSEBACK_STATE_T handleRinsebackRunAdditionalState( void ) @@ -629,6 +655,22 @@ setRinsebackIsCompleted( TRUE ); } } + // if an air trap fill has started, set BP rate and VBV state accordingly + else if ( ( airTrapFillInProgress != TRUE ) && ( TRUE == isAirTrapFillInProgress() ) ) + { + // set BP to air trap fill rate if air trap fill has been initiated + setBloodPumpTargetFlowRate( AIR_TRAP_FILL_BLOOD_FLOW_RATE, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + // close VBV for fill + setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); + } + // re-open VBV and restore BP rate after air trap fill + else if ( ( TRUE == airTrapFillInProgress ) && ( isAirTrapFillInProgress() != TRUE ) ) + { + // re-open VBV after fill + setValvePosition( VBV, VALVE_POSITION_B_OPEN ); + // restore BP to rinseback blood flow rate + setBloodPumpTargetFlowRate( rinsebackRate_mL_min, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + } return result; }