Index: firmware/App/Modes/Prime.c =================================================================== diff -u -r5113415a09ac8244a8c9504e0ca1a29e0215c3bb -r5d9c5362b537331248dc592e05b6b016267eb6d3 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision 5113415a09ac8244a8c9504e0ca1a29e0215c3bb) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision 5d9c5362b537331248dc592e05b6b016267eb6d3) @@ -564,7 +564,7 @@ case PRIME_BUBBLE_CLEAR_PRESSURE_STATE: case PRIME_BUBBLE_CLEAR_VENT_STATE: if ( ( getMeasuredVenousPressure() > VENOUS_PRESSURE_BUBBLE_CLEAR_MAX_MMHG ) || - ( TRUE == didTimeout( primeSalineDialyzerBubbleClearStartTime, BUBBLE_CLEAR_MAX_TIME_MS ) ) ) + ( TRUE == didTimeout( primeSalineDialyzerBubbleClearStartTime, BUBBLE_CLEAR_MAX_TIME_MS ) ) ) { // Pressure max reached. or timeout, release pressure setValvePosition( VDI, VALVE_POSITION_A_INSERT_EJECT ); @@ -573,7 +573,7 @@ primeDialyzerBubbleClearState = PRIME_BUBBLE_CLEAR_VENT_STATE; } else if ( ( TRUE == bubble_clear_ended ) && - ( TRUE == didTimeout( primeSalineDialyzerBubbleClearStartTime, BUBBLE_CLEAR_VALVE_WAIT_TIME_MS ) ) ) + ( TRUE == didTimeout( primeSalineDialyzerBubbleClearStartTime, BUBBLE_CLEAR_VALVE_WAIT_TIME_MS ) ) ) { setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValveAirTrap( STATE_OPEN ); @@ -686,11 +686,6 @@ if ( TRUE == getReservoirFillStatus( DG_RESERVOIR_1 ) ) { - DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; - - rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_1; - rsrvrCmd.useLastTrimmerHeaterDC = FALSE; - if ( TRUE == hasDGCompletedReservoirSwitch() ) { U32 dialyzerDialysateVolume = getDialyzerDialysateVolume(); @@ -748,9 +743,9 @@ { HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_DIALYSATE_DIALYZER_STATE; + // Draw dialysate from reservoir for fixed time (calculated in prior state), then start looking for reservoir volume to steady state (indicating we have primed the line) if ( TRUE == didTimeout( primeDialysateDialyzerStartTime, primeDialysateDialyzerTimeLimit ) ) { - // check for volume steady state every second after the DVi and DVo pumps have been on for primeDialysateDialyzerTimeLimit seconds if ( TRUE == didTimeout( steadyVolumeSamplingStartTime, LOAD_CELL_STEADY_VOLUME_SAMPLING_TIME ) ) { F32 const currentReservoirVolume = getLoadCellWeight( LOAD_CELL_RESERVOIR_1_PRIMARY ); @@ -837,6 +832,7 @@ { HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_SALINE_DIALYZER_STATE; + // Wait fixed time (based on calc done in prior state) and then move on to 2nd transfer check if ( TRUE == didTimeout( primeSalineDialyzerStartTime, primeSalineDialyzerTimeLimit ) ) { state = HD_PRIME_RESERVOIR_TWO_FILL_COMPLETE_STATE; @@ -983,8 +979,7 @@ { state = HD_PRIME_COMPLETE; } - - if ( TRUE == doesAlarmStatusIndicateStop() ) + else if ( TRUE == doesAlarmStatusIndicateStop() ) { setupForPrimePause(); state = HD_PRIME_PAUSE; @@ -1011,6 +1006,10 @@ switch ( previousPrimeState ) { + case HD_PRIME_WAIT_FOR_USER_START_STATE: + state = HD_PRIME_WAIT_FOR_USER_START_STATE; + break; + case HD_PRIME_SALINE_SETUP_STATE: case HD_PRIME_SALINE_PURGE_AIR_STATE: case HD_PRIME_SALINE_CIRC_BLOOD_CIRCUIT_STATE: