Index: firmware/App/Modes/Prime.c =================================================================== diff -u -rb29da200407a214659556e9996a4a8de77c5b147 -r6eca5afbe0ffc3e613ff743208d046a57b3408c6 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision b29da200407a214659556e9996a4a8de77c5b147) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision 6eca5afbe0ffc3e613ff743208d046a57b3408c6) @@ -65,6 +65,7 @@ #define BUBBLE_CLEAR_WAIT_TIME_INITIAL_MS ( 10 * MS_PER_SECOND ) ///< Time in msec to wait for initial bubble clear pressure. #define BUBBLE_CLEAR_WAIT_TIME_MS ( 2 * MS_PER_SECOND ) ///< Time in msec to wait for bubble clear pressure. #define BUBBLE_CLEAR_MAX_TIME_MS ( 5 * MS_PER_SECOND ) ///< Time in msec maximum for bubble clear pressure. +#define BUBBLE_CLEAR_VALVE_WAIT_TIME_MS ( 90 ) ///< Time in msec between VDi to VBT opening after bubble clear pressure. /// States of the treatment reservoir management state machine. typedef enum PrimeReservoirMgmt_States @@ -518,7 +519,9 @@ *************************************************************************/ static void handlePrimeBubbleClear( void ) { + static BOOL bubble_clear_ended = FALSE; U32 timeout; + if ( FALSE == bubbleClearActive ) { if ( TRUE == primeFirstBubbleClearPass ) @@ -537,22 +540,32 @@ primeSalineDialyzerBubbleClearStartTime = getMSTimerCount(); if ( AIR_TRAP_LEVEL_AIR == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_LOWER ) ) { - setValvePosition( VDI, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValveAirTrap( STATE_CLOSED ); bubbleClearActive = TRUE; } } } - else if ( ( getMeasuredVenousPressure() > VENOUS_PRESSURE_BUBBLE_CLEAR_MAX_MMHG ) || - ( TRUE == didTimeout( primeSalineDialyzerBubbleClearStartTime, BUBBLE_CLEAR_MAX_TIME_MS ) ) ) + else { - // Pressure max reached. or timeout, release pressure - setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); - setValveAirTrap( STATE_OPEN ); - bubbleClearActive = FALSE; - primeSalineDialyzerBubbleClearStartTime = getMSTimerCount(); - } + if ( ( getMeasuredVenousPressure() > VENOUS_PRESSURE_BUBBLE_CLEAR_MAX_MMHG ) || + ( TRUE == didTimeout( primeSalineDialyzerBubbleClearStartTime, BUBBLE_CLEAR_MAX_TIME_MS ) ) ) + { + // Pressure max reached. or timeout, release pressure + setValvePosition( VDI, VALVE_POSITION_A_INSERT_EJECT ); + primeSalineDialyzerBubbleClearStartTime = getMSTimerCount(); + bubble_clear_ended = TRUE; + } + else if ( ( TRUE == bubble_clear_ended ) && + ( TRUE == didTimeout( primeSalineDialyzerBubbleClearStartTime, BUBBLE_CLEAR_VALVE_WAIT_TIME_MS ) ) ) + { + setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); + setValveAirTrap( STATE_OPEN ); + bubbleClearActive = FALSE; + bubble_clear_ended = FALSE; + } + } } /*********************************************************************//**