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;