Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r5046a41e436df0e43e5c9c83eac1bc3a3db20b3c -rf3ecaf3a7bc6d07225791f43196c468ff05ad016 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 5046a41e436df0e43e5c9c83eac1bc3a3db20b3c) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision f3ecaf3a7bc6d07225791f43196c468ff05ad016) @@ -1058,22 +1058,24 @@ { // Always keep the UF volume the same and change the UF rate upon changing the treatment time presMaxUFVolumeML = getTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME ) * (F32)ML_PER_LITER; - presUFRate = presMaxUFVolumeML / (F32)treatmentTime; + // New UF rate is how much UF is left to be done / remaining treatment time + F32 newUFRateMLPM = ( presMaxUFVolumeML - getTotalMeasuredUFVolumeInMl() ) / (F32)( treatmentTime - CALC_ELAPSED_TREAT_TIME_IN_MIN() ); U32 dialVolume = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ) * treatmentTime; // In mL // The minimum treatment time is either in the range of the institutional record or the 1-minute treatment config has been requested which is an exception BOOL isMinTxTimeValid = ( ( treatmentTime >= getU32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_TREATMENT_DURATION ) ) || ( TRUE == getTestConfigStatus( TEST_CONFIG_ENABLE_ONE_MINUTE_TREATMENT ) ) ? TRUE : FALSE ); BOOL isTxTimeValid = ( ( TRUE == isMinTxTimeValid ) && ( treatmentTime <= getU32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_TREATMENT_DURATION ) ) ? TRUE : FALSE ); - BOOL isUFRateValid = ( ( presUFRate >= MIN_UF_RATE_ML_MIN ) && ( presUFRate <= MAX_UF_RATE_ML_MIN ) ? TRUE : FALSE ); + BOOL isUFRateValid = ( ( newUFRateMLPM >= MIN_UF_RATE_ML_MIN ) && ( newUFRateMLPM <= MAX_UF_RATE_ML_MIN ) ? TRUE : FALSE ); if ( ( TRUE == isTxTimeValid ) && ( dialVolume <= MAX_DIALYSATE_VOLUME_ML ) && ( TRUE == isUFRateValid ) ) { result = TRUE; sendTreatmentLogEventData( TREATMENT_DURATION_CHANGE_EVENT, ( presTreatmentTimeSecs / SEC_PER_MIN ), treatmentTime ); presTreatmentTimeSecs = treatmentTime * SEC_PER_MIN; + presUFRate = newUFRateMLPM; setTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME, ( presMaxUFVolumeML / (F32)ML_PER_LITER ) ); setTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION, ( presTreatmentTimeSecs / SEC_PER_MIN ) ); setDialysisDialInFlowAndUFRate( getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presMaxUFVolumeML, presUFRate );