Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r2f68e3a96bb03d12141a84f1da6df83e66fed72d -rad4a8d997ddd84013b4a67904a6ecfada5834801 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 2f68e3a96bb03d12141a84f1da6df83e66fed72d) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision ad4a8d997ddd84013b4a67904a6ecfada5834801) @@ -1036,8 +1036,8 @@ 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 ) ); + result &= setTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME, ( presMaxUFVolumeML / (F32)ML_PER_LITER ) ); + result &= setTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION, ( presTreatmentTimeSecs / SEC_PER_MIN ) ); setDialysisDialInFlowAndUFRate( getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presMaxUFVolumeML, presUFRate ); signalInitiatePressureStabilization( USE_NORMAL_STABILIZATION_PERIOD ); } @@ -1211,9 +1211,8 @@ UF_STATE_T currUFState = getUltrafiltrationState(); sendTreatmentLogEventData( UF_VOLUME_CHANGE_EVENT, presMaxUFVolumeML, pendingUFVolumeChange ); - result = TRUE; presMaxUFVolumeML = pendingUFVolumeChange; - setTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME, ( presMaxUFVolumeML / (F32)ML_PER_LITER ) ); + result = setTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME, ( presMaxUFVolumeML / (F32)ML_PER_LITER ) ); // User should only allow UF rate adjustment to achieve UF volume change if ( UF_ADJ_UF_RATE == adjustment ) @@ -1287,7 +1286,7 @@ sendTreatmentLogEventData( BLOOD_FLOW_RATE_CHANGE_EVENT, getTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW ), bloodRate ); signalInitiatePressureStabilization( USE_NORMAL_STABILIZATION_PERIOD ); // Set to new rate - setTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW, bloodRate ); + result &= setTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW, bloodRate ); setDialysisBloodPumpFlowRate( getTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW ) ); } @@ -1297,7 +1296,7 @@ sendTreatmentLogEventData( DIALYSATE_FLOW_RATE_CHANGE_EVENT, getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), dialRate ); signalInitiatePressureStabilization( USE_NORMAL_STABILIZATION_PERIOD ); // Set to new rate - setTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW, dialRate ); + result &= setTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW, dialRate ); setDialysisDialInFlowAndUFRate( getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presMaxUFVolumeML, presUFRate ); } } Index: firmware/App/Modes/ModeTreatmentParams.c =================================================================== diff -u -r8b1e6f4343be6c17b7969527e6b9881b8af889cd -rad4a8d997ddd84013b4a67904a6ecfada5834801 --- firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision 8b1e6f4343be6c17b7969527e6b9881b8af889cd) +++ firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision ad4a8d997ddd84013b4a67904a6ecfada5834801) @@ -673,7 +673,8 @@ break; case TREATMENT_PARAM_UF_VOLUME: - result = ( ( value.sFlt >= hdInstitutionalRecord.minUFVolumeL ) && ( value.sFlt <= hdInstitutionalRecord.maxUFVolumeL ) ? TRUE : FALSE ); + result = ( ( value.sFlt >= hdInstitutionalRecord.minUFVolumeL ) && ( value.sFlt <= hdInstitutionalRecord.maxUFVolumeL ) ? TRUE : FALSE ); + result |= ( value.sFlt <= NEARLY_ZERO ? TRUE : FALSE ); // There might be a minimum UF volume set in the instit record but a treatment with 0 vol should be allowed break; case TREATMENT_PARAM_HEPARIN_DISPENSE_RATE: @@ -997,10 +998,14 @@ *************************************************************************/ BOOL setTreatmentParameterU32( TREATMENT_PARAM_T param, U32 value ) { + CRITICAL_DATAS_T integerData; BOOL result = FALSE; + integerData.uInt = value; + result = isTreatmentParamInRange( param, integerData ); + // Validate parameter - if ( param <= TREATMENT_PARAM_LAST_UINT ) + if ( ( param <= TREATMENT_PARAM_LAST_UINT ) && ( TRUE == result ) ) { CRITICAL_DATAS_T data = treatmentParameters[ param ].data; @@ -1027,10 +1032,14 @@ *************************************************************************/ BOOL setTreatmentParameterS32( TREATMENT_PARAM_T param, S32 value ) { + CRITICAL_DATAS_T unsignedIntData; BOOL result = FALSE; + unsignedIntData.sInt = value; + result = isTreatmentParamInRange( param, unsignedIntData ); + // Validate parameter - if ( ( param >= TREATMENT_PARAM_FIRST_INT ) && ( param <= TREATMENT_PARAM_LAST_INT ) ) + if ( ( param >= TREATMENT_PARAM_FIRST_INT ) && ( param <= TREATMENT_PARAM_LAST_INT ) && ( TRUE == result ) ) { CRITICAL_DATAS_T data = treatmentParameters[ param ].data; @@ -1057,10 +1066,14 @@ *************************************************************************/ BOOL setTreatmentParameterF32( TREATMENT_PARAM_T param, F32 value ) { + CRITICAL_DATAS_T floatData; BOOL result = FALSE; + floatData.sFlt = value; + result = isTreatmentParamInRange( param, floatData ); + // Validate parameter - if ( ( param >= TREATMENT_PARAM_FIRST_F32 ) && ( param < NUM_OF_TREATMENT_PARAMS ) ) + if ( ( param >= TREATMENT_PARAM_FIRST_F32 ) && ( param < NUM_OF_TREATMENT_PARAMS ) && ( TRUE == result ) ) { CRITICAL_DATAS_T data = treatmentParameters[ param ].data;