Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -rfba69244d94307e50fefaa1e88bcbb979584461e -r5046a41e436df0e43e5c9c83eac1bc3a3db20b3c --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision fba69244d94307e50fefaa1e88bcbb979584461e) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 5046a41e436df0e43e5c9c83eac1bc3a3db20b3c) @@ -1056,23 +1056,23 @@ ( currentTreatmentState > TREATMENT_START_STATE ) && ( currentTreatmentState < TREATMENT_END_STATE ) && ( CALC_ELAPSED_TREAT_TIME_IN_MIN() < treatmentTime ) && ( treatmentTime >= getMinTreatmentTimeInMinutes() ) ) { - // Always adjust UF volume to accommodate treatment time change (not UF rate) - F32 uFVolume = ( (F32)( treatmentTime - CALC_ELAPSED_TREAT_TIME_IN_MIN() ) * presUFRate ) + getUltrafiltrationReferenceVolume(); - F32 uFVolumeL = uFVolume / ML_PER_LITER; + // 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; + 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 isMinUFVolValid = ( ( uFVolumeL >= getF32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_UF_VOLUME ) ) || ( uFVolumeL <= 0.0F ) ? TRUE : FALSE ); - BOOL isUFVolValid = ( ( TRUE == isMinUFVolValid ) && ( uFVolumeL <= getF32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_UF_VOLUME ) ) ? TRUE : FALSE ); + BOOL isUFRateValid = ( ( presUFRate >= MIN_UF_RATE_ML_MIN ) && ( presUFRate <= MAX_UF_RATE_ML_MIN ) ? TRUE : FALSE ); - if ( ( TRUE == isTxTimeValid ) && ( dialVolume <= MAX_DIALYSATE_VOLUME_ML ) && ( TRUE == isUFVolValid ) ) + if ( ( TRUE == isTxTimeValid ) && ( dialVolume <= MAX_DIALYSATE_VOLUME_ML ) && ( TRUE == isUFRateValid ) ) { result = TRUE; sendTreatmentLogEventData( TREATMENT_DURATION_CHANGE_EVENT, ( presTreatmentTimeSecs / SEC_PER_MIN ), treatmentTime ); - presMaxUFVolumeML = uFVolume; presTreatmentTimeSecs = treatmentTime * SEC_PER_MIN; setTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME, ( presMaxUFVolumeML / (F32)ML_PER_LITER ) ); setTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION, ( presTreatmentTimeSecs / SEC_PER_MIN ) ); @@ -1085,9 +1085,9 @@ { rejectReason = REQUEST_REJECT_REASON_TREATMENT_TIME_OUT_OF_RANGE; } - else if ( FALSE == isUFVolValid ) + else if ( FALSE == isUFRateValid ) { - rejectReason = REQUEST_REJECT_REASON_UF_VOLUME_OUT_OF_RANGE; + rejectReason = REQUEST_REJECT_REASON_UF_RATE_OUT_OF_RANGE; } else {