Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r2193d357328608cd75103f8cc10ba9e649909d92 -rdce2b19d5f0efa09d0b3ad99358dacb2d43d76fc --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 2193d357328608cd75103f8cc10ba9e649909d92) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision dce2b19d5f0efa09d0b3ad99358dacb2d43d76fc) @@ -1029,8 +1029,8 @@ // Always adjust UF volume to accommodate treatment time change (not UF rate) uFVolume = ( (F32)( treatmentTime - CALC_ELAPSED_TREAT_TIME_IN_MIN() ) * presUFRate ) + getUltrafiltrationReferenceVolume(); if ( ( treatmentTime <= getU32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_TREATMENT_DURATION ) ) && - ( dialVolume <= getU32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_DIALYSATE_FLOW ) ) && - ( uFVolume <= getF32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_UF_VOLUME ) ) ) + ( dialVolume <= MAX_DIALYSATE_VOLUME_ML ) && + ( uFVolume <= MAX_UF_VOLUME_ML ) ) { result = TRUE; sendTreatmentLogEventData( TREATMENT_DURATION_CHANGE_EVENT, ( presTreatmentTimeSecs / SEC_PER_MIN ), treatmentTime ); @@ -1047,7 +1047,7 @@ { rejectReason = REQUEST_REJECT_REASON_TREATMENT_TIME_OUT_OF_RANGE; } - else if ( uFVolume > getF32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_UF_VOLUME ) ) + else if ( uFVolume > MAX_UF_VOLUME_ML ) { rejectReason = REQUEST_REJECT_REASON_UF_VOLUME_OUT_OF_RANGE; } @@ -1117,7 +1117,7 @@ // Check if we are in an appropriate treatment state for settings adjustment if ( ( MODE_TREA == currMode ) && ( currentTreatmentState > TREATMENT_START_STATE ) && ( currentTreatmentState < TREATMENT_END_STATE ) && - ( uFVolume <= getF32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_UF_VOLUME ) ) && ( uFVolume > colUFVol ) && + ( uFVolume <= ( getF32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_UF_VOLUME ) * ML_PER_LITER ) ) && ( uFVolume > colUFVol ) && ( CALC_TREAT_TIME_REMAINING_IN_SECS() >= PREVENT_UF_VOL_CHANGE_IF_NEARLY_DONE_SEC ) ) { DIALYSIS_STATE_T currDialysisState = getDialysisState(); @@ -1170,7 +1170,7 @@ rejectReason = REQUEST_REJECT_REASON_INVALID_TREATMENT_STATE; } // UF volume cannot be set lower than the UF volume that has already been collected - else if ( ( uFVolume > getF32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_UF_VOLUME ) ) || + else if ( ( uFVolume > ( getF32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_UF_VOLUME ) * ML_PER_LITER ) ) || ( uFVolume <= colUFVol ) ) { rejectReason = REQUEST_REJECT_REASON_UF_VOLUME_OUT_OF_RANGE; @@ -1277,8 +1277,9 @@ // Validate new rates if ( ( bloodRate >= getU32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_BLOOD_FLOW ) ) && ( bloodRate <= getU32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_BLOOD_FLOW ) ) && - ( dialRate >= MIN_DIAL_IN_FLOW_RATE ) && ( dialRate <= MAX_DIAL_IN_FLOW_RATE ) && - ( dialVolume <= getU32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_DIALYSATE_FLOW ) ) ) + ( dialRate >= getU32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_DIALYSATE_FLOW ) ) && + ( dialRate <= getU32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_DIALYSATE_FLOW ) ) && + ( dialVolume <= MAX_DIALYSATE_VOLUME_ML ) ) { result = TRUE; // handle blood pump flow rate change @@ -1308,7 +1309,8 @@ { rejectReason = REQUEST_REJECT_REASON_BLOOD_FLOW_OUT_OF_RANGE; } - else if ( ( dialRate < MIN_DIAL_IN_FLOW_RATE ) || ( dialRate > MAX_DIAL_IN_FLOW_RATE ) ) + else if ( ( dialRate < getU32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_DIALYSATE_FLOW ) ) || + ( dialRate > getU32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_DIALYSATE_FLOW ) ) ) { rejectReason = REQUEST_REJECT_REASON_DIAL_FLOW_OUT_OF_RANGE; } @@ -1486,24 +1488,24 @@ U32 elapseTime = CALC_ELAPSED_TREAT_TIME_IN_MIN(); U32 minTime = MAX( (elapseTime + 2), getMinTreatmentTimeInMinutes() ); // Treatment duration cannot be < 1 hour. add two minutes to cover rounding and ensure it is valid for next minute // Compute maximum treatment duration (from both UF and dialysate volume perspectives) - U32 maxTimeRem = ( getF32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_UF_VOLUME ) - (U32)getUltrafiltrationReferenceVolume() ) / ( presUFRate > 0.0 ? (U32)presUFRate : 1 ); + U32 maxTimeRem = ( MAX_UF_VOLUME_ML - (U32)getUltrafiltrationReferenceVolume() ) / ( presUFRate > 0.0 ? (U32)presUFRate : 1 ); U32 maxTime1 = minTime + maxTimeRem; - U32 maxTime2 = getU32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_DIALYSATE_FLOW ) / getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + U32 maxTime2 = MAX_DIALYSATE_VOLUME_ML / getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); U32 maxTime = MAX( maxTime1, maxTime2 ); // Compute minimum UF volume F32 minUFVol = getUltrafiltrationReferenceVolume() + presUFRate; // Compute maximum UF volume (considering from adjustment of UF rate and time perspectives) F32 maxUFVol1 = minUFVol + ( (F32)( presTime - elapseTime ) * MAX_UF_RATE_ML_MIN ); - F32 maxUFVol2 = ( presUFRate > 0.0 ? minUFVol + ( (F32)( getU32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_TREATMENT_DURATION ) - elapseTime - 1 ) * presUFRate ) : minUFVol ); + F32 maxUFVol2 = ( presUFRate > 0.0 ? minUFVol + ( (F32)( MAX_TREATMENT_TIME_MINUTES - elapseTime - 1 ) * presUFRate ) : minUFVol ); F32 maxUFVol = MAX( maxUFVol1, maxUFVol2 ); // Compute minimum dialysate flow rate U32 minDialRate = MIN_DIAL_IN_FLOW_RATE; // Compute maximum dialysate flow rate from max dialysate volume perspective - U32 maxDialRate = getU32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_DIALYSATE_FLOW ) / presTime; + U32 maxDialRate = MAX_DIALYSATE_VOLUME_ML / presTime; // Now ensure maximums do not exceed the literal maximums - maxTime = MIN( maxTime, getU32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_TREATMENT_DURATION ) ); - maxUFVol = MIN( maxUFVol, (F32)getF32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_UF_VOLUME ) ); + maxTime = MIN( maxTime, MAX_TREATMENT_TIME_MINUTES ); + maxUFVol = MIN( maxUFVol, (F32)MAX_UF_VOLUME_ML ); maxDialRate = MIN( maxDialRate, MAX_DIAL_IN_FLOW_RATE ); // Send updated treatment parameter ranges to UI sendTreatmentParamsRangesToUI( minTime, maxTime, minUFVol, maxUFVol, minDialRate, maxDialRate ); Index: firmware/App/Modes/ModeTreatmentParams.c =================================================================== diff -u -r2193d357328608cd75103f8cc10ba9e649909d92 -rdce2b19d5f0efa09d0b3ad99358dacb2d43d76fc --- firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision 2193d357328608cd75103f8cc10ba9e649909d92) +++ firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision dce2b19d5f0efa09d0b3ad99358dacb2d43d76fc) @@ -517,7 +517,7 @@ sendTreatmentParamsRangesToUI( treatmentParameters[ TREATMENT_PARAM_TREATMENT_DURATION ].minimum.uInt, treatmentParameters[ TREATMENT_PARAM_TREATMENT_DURATION ].maximum.uInt, 0.0, - MIN( (F32)setTxDuration * MAX_UF_RATE_ML_MIN, treatmentParameters[ TREATMENT_PARAM_UF_VOLUME ].maximum.sFlt ), + MIN( (F32)setTxDuration * MAX_UF_RATE_ML_MIN, MAX_UF_VOLUME_ML ), treatmentParameters[ TREATMENT_PARAM_DIALYSATE_FLOW ].minimum.uInt, treatmentParameters[ TREATMENT_PARAM_DIALYSATE_FLOW ].maximum.uInt ); }