Index: firmware/App/Modes/Prime.c =================================================================== diff -u -r1354685cce00d343e29be2c098fd9fdb857374ae -r2dd90b6861e4cd229253ecb12467af5d657bb433 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision 1354685cce00d343e29be2c098fd9fdb857374ae) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision 2dd90b6861e4cd229253ecb12467af5d657bb433) @@ -7,8 +7,8 @@ * * @file Prime.c * -* @author (last) Sean Nash -* @date (last) 03-Jun-2023 +* @author (last) Michael Garthwaite +* @date (last) 09-Jun-2023 * * @author (original) Quang Nguyen * @date (original) 08-Dec-2020 @@ -138,13 +138,15 @@ static U32 steadyVolumeSamplingStartTime; ///< Load cell steady volume sampling interval starting time. static F32 minimumReservoirVolume; ///< Minimum reservoir volume in mL. static U32 steadyVolumeCount; ///< Use to keep track the number of dVolume/dt < Threshold +static BOOL bubbleClearEnded; ///< Bubble clear ended boolean signal. // ********** private function prototypes ********** static void resetPrimeFlags(); static void setupForPrimePause( void ); static void broadcastPrimingStatus( void ); static void purgeAirValvesBloodPumpControl( void ); +static void handlePrimeBubbleClear( void ); static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeWaitForUserStartState( void ); static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeSalineDialyzerSetupState( void ); @@ -181,14 +183,14 @@ * The transitionToPrime function prepares for transition to prime sub-mode. * This function will reset anything required before the start of priming sequence. * @details Inputs: none - * @details Outputs: currentPrimeState, wetSelfTestsResult, primeStartReqReceived, reservoirFilledStatus[] + * @details Outputs: currentPrimeState, wetSelfTestsResult, primeStartReqReceived, + * reservoirFilledStatus[], bubbleClearEnded, primeDialyzerBubbleClearState * @return none *************************************************************************/ void transitionToPrime( void ) { primeStartTime = getMSTimerCount(); primeFirstPurgePass = TRUE; - primeDialyzerBubbleClearState = PRIME_BUBBLE_CLEAR_READY_STATE; setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, TRUE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, FALSE ); @@ -211,6 +213,17 @@ setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); resetPrimeFlags(); + + if ( getTestConfigStatus( TEST_CONFIG_USE_WET_CARTRIDGE ) != TRUE ) + { + bubbleClearEnded = FALSE; + primeDialyzerBubbleClearState = PRIME_BUBBLE_CLEAR_READY_STATE; + } + else + { // if using a wet cartridge, we do not want to do the bubble clearing of dialyzer in blood side prime states + bubbleClearEnded = TRUE; + primeDialyzerBubbleClearState = PRIME_BUBBLE_CLEAR_COMPLETE_STATE; + } } /*********************************************************************//** @@ -517,7 +530,10 @@ purgeAirValvesBloodPumpControl(); purgeAirTimeOutStartTime = getMSTimerCount(); primeSalineDialyzerBubbleClearStartTime = getMSTimerCount(); - primeDialyzerBubbleClearState = PRIME_BUBBLE_CLEAR_READY_STATE; + if ( getTestConfigStatus( TEST_CONFIG_USE_WET_CARTRIDGE ) != TRUE ) + { + primeDialyzerBubbleClearState = PRIME_BUBBLE_CLEAR_READY_STATE; + } if ( TRUE == doesAlarmStatusIndicateStop() ) { @@ -532,13 +548,14 @@ * @brief * The handlePrimeBubbleClear function handles bubble clear pressurizing * of dialyzer. - * @details Inputs: air trap levels, primeDialyzerBubbleClearState, primeSalineDialyzerBubbleClearStartTime - * @details Outputs: control valves to pressurize, primeDialyzerBubbleClearState, primeSalineDialyzerBubbleClearStartTime + * @details Inputs: air trap levels, primeDialyzerBubbleClearState, + * primeSalineDialyzerBubbleClearStartTime, bubbleClearEnded + * @details Outputs: control valves to pressurize, primeDialyzerBubbleClearState, + * primeSalineDialyzerBubbleClearStartTime, bubbleClearEnded * @return none *************************************************************************/ static void handlePrimeBubbleClear( void ) { - static BOOL bubble_clear_ended = FALSE; U32 timeout; switch ( primeDialyzerBubbleClearState ) @@ -575,15 +592,15 @@ // Pressure max reached. or timeout, release pressure setValvePosition( VDI, VALVE_POSITION_A_INSERT_EJECT ); primeSalineDialyzerBubbleClearStartTime = getMSTimerCount(); - bubble_clear_ended = TRUE; + bubbleClearEnded = TRUE; primeDialyzerBubbleClearState = PRIME_BUBBLE_CLEAR_VENT_STATE; } - else if ( ( TRUE == bubble_clear_ended ) && + else if ( ( TRUE == bubbleClearEnded ) && ( TRUE == didTimeout( primeSalineDialyzerBubbleClearStartTime, BUBBLE_CLEAR_VALVE_WAIT_TIME_MS ) ) ) { setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValveAirTrap( STATE_OPEN ); - bubble_clear_ended = FALSE; + bubbleClearEnded = FALSE; primeDialyzerBubbleClearState = PRIME_BUBBLE_CLEAR_FLOW_STATE; } break; @@ -979,6 +996,7 @@ if ( TRUE == isWetSelfTestsPassed() ) { + setCurrent4thLevelState( NO_SUB_STATE ); state = HD_PRIME_COMPLETE; } else if ( TRUE == doesAlarmStatusIndicateStop() )