Index: firmware/App/Services/StateServices/Prime.c =================================================================== diff -u -r25aeff9e9994d2e7aab3b4e6171c56fdac6a01fe -r6c933adfd50a0bc041dc29f4bfa15de5e9f4843a --- firmware/App/Services/StateServices/Prime.c (.../Prime.c) (revision 25aeff9e9994d2e7aab3b4e6171c56fdac6a01fe) +++ firmware/App/Services/StateServices/Prime.c (.../Prime.c) (revision 6c933adfd50a0bc041dc29f4bfa15de5e9f4843a) @@ -317,6 +317,7 @@ case PRIME_DC_INITIAL_DIALYSATE_STATE: dcInitialPrimeInterval = (U32)( ( ( dialyzerDialysateVolume * 60.0F ) / (F32)TARGET_DIALYSATE_FLOW_RATE + 30.0F ) * (F32)MS_PER_SECOND ); startProgressSequence( dcInitialPrimeInterval ); + dcInitialPrimeTimerCtr = 0; cmdBypassDialyzer( FALSE ); stateEntryTimerCtr = getMSTimerCount(); break; @@ -356,6 +357,7 @@ dcReversePrimeDuration = (U32)( ( ( dialyzerDialysateVolume * 0.5F * (F32)SEC_PER_MIN ) / (F32)MAX_UF_RATE ) + 30.0F ) * (F32)MS_PER_SECOND; dcDiscardAndRevPrimeInterval = ( dcDiscardDuration > dcReversePrimeDuration ) ? dcDiscardDuration : dcReversePrimeDuration; startProgressSequence( dcDiscardAndRevPrimeInterval ); + startAirTrapControl(); signalBloodPumpHardStop(); cmdDDprimeFluidDiscard( TRUE ); setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); @@ -370,6 +372,7 @@ setValvePosition( H1_VALV, VALVE_POSITION_C_CLOSE ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); + endAirTrapControl(); setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); @@ -908,7 +911,9 @@ if ( DD_GEND_DIALYSATE_DELIVERY_STATE == getCurrentGenDState() ) { - if ( ++dcInitialPrimeTimerCtr >= dcInitialPrimeInterval ) + dcInitialPrimeTimerCtr += TASK_GENERAL_INTERVAL; + + if ( dcInitialPrimeTimerCtr >= dcInitialPrimeInterval ) { setPrimeStateTransition( PRIME_WAIT_FOR_AIR_TRAP_FILL_STATE ); state = PRIME_WAIT_FOR_AIR_TRAP_FILL_STATE; @@ -1171,11 +1176,14 @@ elapsedMs = calcTimeSince( primeStartTime ); } - elapsedMs = ( elapsedMs > primeTimeCreditMs ) ? ( elapsedMs - primeTimeCreditMs ) : 0; - remainingMs = ( elapsedMs < PRIME_TOTAL_DURATION_INTERVAL ) ? ( PRIME_TOTAL_DURATION_INTERVAL - elapsedMs ) : 0; + // Updates total remaining time if any sequence done early. + remainingMs = ( remainingMs > primeTimeCreditMs ) ? + ( remainingMs - primeTimeCreditMs ) : 0; + + data.primeState = (U32)currentPrimeState; data.totalDurationSec = PRIME_TOTAL_DURATION_INTERVAL / MS_PER_SECOND; data.countDownSec = remainingMs / MS_PER_SECOND;