Index: firmware/App/Modes/ModeTreatmentParams.c =================================================================== diff -u -ra3573271ffbed88224af67c092fce5be0d0874dc -r5bc5898fa0095fb5f49121df06e69e71360dbd04 --- firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision a3573271ffbed88224af67c092fce5be0d0874dc) +++ firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision 5bc5898fa0095fb5f49121df06e69e71360dbd04) @@ -8,7 +8,7 @@ * @file ModeTreatmentParams.c * * @author (last) Dara Navaei -* @date (last) 08-Mar-2024 +* @date (last) 11-Apr-2024 * * @author (original) Sean Nash * @date (original) 29-May-2020 @@ -42,6 +42,7 @@ #define NO_HEPARIN_PRE_STOP_TIME_SET 0 ///< Zero value indicates no Heparin pre-stop time was set by user #define NO_HEPARIN_TYPE_SET 0xFFFFFFFF ///< UI will send this value for Heparin type if Heparin not used +#define INSTIT_CHEM_DISINFECT_ENABLE_RANGE 1 ///< Institutional record chemical disinfect enable/disable allowable range /// Record for range and default of treatment parameters. typedef struct @@ -682,19 +683,19 @@ case TREATMENT_PARAM_UF_VOLUME: 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 institutional record but a treatment with 0 vol should be allowed + result |= ( fabs( value.sFlt ) <= NEARLY_ZERO ? TRUE : FALSE ); // There might be a minimum UF volume set in the institutional record but a treatment with 0 vol should be allowed break; case TREATMENT_PARAM_HEPARIN_DISPENSE_RATE: result = ( ( value.sFlt >= hdInstitutionalRecord.minHeparinDispRateMLPHR ) && ( value.sFlt <= hdInstitutionalRecord.maxHeparinDispRateMLPHR ) ? TRUE : FALSE ); - result |= ( value.sFlt <= NEARLY_ZERO ? TRUE : FALSE ); // Even if the minimum is not 0, 0 is accepted meaning heparin can be turned off + result |= ( fabs( value.sFlt ) <= NEARLY_ZERO ? TRUE : FALSE ); // Even if the minimum is not 0, 0 is accepted meaning heparin can be turned off break; case TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME: result = ( ( value.sFlt >= hdInstitutionalRecord.minHeparinBolusVolumeML ) && ( value.sFlt <= hdInstitutionalRecord.maxHeparinBolusVolumeML ) ? TRUE : FALSE ); - result |= ( value.sFlt <= NEARLY_ZERO ? TRUE : FALSE ); // Even if the minimum is not 0, 0 is accepted meaning heparin can be turned off + result |= ( fabs( value.sFlt ) <= NEARLY_ZERO ? TRUE : FALSE ); // Even if the minimum is not 0, 0 is accepted meaning heparin can be turned off break; default: @@ -964,54 +965,67 @@ ( nvInstRcrd->minBloodFlowMLPM <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_BLOOD_FLOW ].max.uInt ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->maxBloodFlowMLPM >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_BLOOD_FLOW ].min.uInt ) && ( nvInstRcrd->maxBloodFlowMLPM <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_BLOOD_FLOW ].max.uInt ) ? TRUE : FALSE ); + result &= ( ( nvInstRcrd->minBloodFlowMLPM <= nvInstRcrd->maxBloodFlowMLPM ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->minDialysateFlowMLPM >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_DIALYSATE_FLOW ].min.uInt ) && ( nvInstRcrd->minDialysateFlowMLPM <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_DIALYSATE_FLOW ].max.uInt ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->maxDialysateFlowMLPM >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_DIALYSATE_FLOW ].min.uInt ) && ( nvInstRcrd->maxDialysateFlowMLPM <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_DIALYSATE_FLOW ].max.uInt ) ? TRUE : FALSE ); + result &= ( ( nvInstRcrd->minDialysateFlowMLPM <= nvInstRcrd->maxDialysateFlowMLPM ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->minTxDurationMIN >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_TREATMENT_DURATION ].min.uInt ) && ( nvInstRcrd->minTxDurationMIN <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_TREATMENT_DURATION ].max.uInt ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->maxTxDurationMIN >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_TREATMENT_DURATION ].min.uInt ) && ( nvInstRcrd->maxTxDurationMIN <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_TREATMENT_DURATION ].max.uInt ) ? TRUE : FALSE ); + result &= ( ( nvInstRcrd->minTxDurationMIN <= nvInstRcrd->maxTxDurationMIN ) ? TRUE : FALSE ); #ifndef _VECTORCAST_ // The heparin stop time has been masked out from VectorCAST because the minimum time is 0 minutes while the variable is a U32 so it cannot be // tested in VectorCAST by setting the minimum to less than 0. result &= ( ( nvInstRcrd->minStopHeparinDispBeforeTxEndMIN >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_PRE_STOP_TIME ].min.uInt ) && ( nvInstRcrd->minStopHeparinDispBeforeTxEndMIN <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_PRE_STOP_TIME ].max.uInt ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->maxStopHeparinDispBeforeTxEndMIN >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_PRE_STOP_TIME ].min.uInt ) && ( nvInstRcrd->maxStopHeparinDispBeforeTxEndMIN <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_PRE_STOP_TIME ].max.uInt ) ? TRUE : FALSE ); + result &= ( ( nvInstRcrd->minStopHeparinDispBeforeTxEndMIN <= nvInstRcrd->maxStopHeparinDispBeforeTxEndMIN ) ? TRUE : FALSE ); #endif result &= ( ( nvInstRcrd->minSalineBolusVolumeML >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_SALINE_BOLUS_VOLUME ].min.uInt ) && ( nvInstRcrd->minSalineBolusVolumeML <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_SALINE_BOLUS_VOLUME ].max.uInt ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->maxSalineBolusVolumeML >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_SALINE_BOLUS_VOLUME ].min.uInt ) && ( nvInstRcrd->maxSalineBolusVolumeML <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_SALINE_BOLUS_VOLUME ].max.uInt ) ? TRUE : FALSE ); + result &= ( ( nvInstRcrd->minSalineBolusVolumeML <= nvInstRcrd->maxSalineBolusVolumeML ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->minDialysateTempC >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_DIALYSATE_TEMPERATURE ].min.sFlt ) && ( nvInstRcrd->minDialysateTempC <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_DIALYSATE_TEMPERATURE ].max.sFlt ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->maxDialysateTempC >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_DIALYSATE_TEMPERATURE ].min.sFlt ) && ( nvInstRcrd->maxDialysateTempC <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_DIALYSATE_TEMPERATURE ].max.sFlt ) ? TRUE : FALSE ); + result &= ( ( nvInstRcrd->minDialysateTempC <= nvInstRcrd->maxDialysateTempC ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->minArtPressLimitWindowMMHG >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW ].min.sInt ) && ( nvInstRcrd->minArtPressLimitWindowMMHG <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW ].max.sInt ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->maxArtPressLimitWindowMMHG >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW ].min.sInt ) && ( nvInstRcrd->maxArtPressLimitWindowMMHG <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW ].max.sInt ) ? TRUE : FALSE ); + result &= ( ( nvInstRcrd->minArtPressLimitWindowMMHG <= nvInstRcrd->maxArtPressLimitWindowMMHG ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->minVenPressLimitWindowMMHG >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW ].min.sInt ) && ( nvInstRcrd->minVenPressLimitWindowMMHG <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW ].max.sInt ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->maxVenPressLimitWindowMMHG >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW ].min.sInt ) && ( nvInstRcrd->maxVenPressLimitWindowMMHG <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW ].max.sInt ) ? TRUE : FALSE ); + result &= ( ( nvInstRcrd->minVenPressLimitWindowMMHG <= nvInstRcrd->maxVenPressLimitWindowMMHG ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->minVenAsymPressLimitMMHG >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC ].min.sInt ) && ( nvInstRcrd->minVenAsymPressLimitMMHG <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC ].max.sInt ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->maxVenAsymPressLimitMMHG >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC ].min.sInt ) && ( nvInstRcrd->maxVenAsymPressLimitMMHG <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC ].max.sInt ) ? TRUE : FALSE ); + result &= ( ( nvInstRcrd->minVenAsymPressLimitMMHG <= nvInstRcrd->maxVenAsymPressLimitMMHG ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->minUFVolumeL >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_UF_VOLUME ].min.sFlt ) && ( nvInstRcrd->minUFVolumeL <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_UF_VOLUME ].max.sFlt ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->maxUFVolumeL >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_UF_VOLUME ].min.sFlt ) && ( nvInstRcrd->maxUFVolumeL <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_UF_VOLUME ].max.sFlt ) ? TRUE : FALSE ); + result &= ( ( nvInstRcrd->minUFVolumeL <= nvInstRcrd->maxUFVolumeL ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->minHeparinDispRateMLPHR >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ].min.sFlt ) && ( nvInstRcrd->minHeparinDispRateMLPHR <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ].max.sFlt ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->maxHeparinDispRateMLPHR >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ].min.sFlt ) && ( nvInstRcrd->maxHeparinDispRateMLPHR <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ].max.sFlt ) ? TRUE : FALSE ); + result &= ( ( nvInstRcrd->minHeparinDispRateMLPHR <= nvInstRcrd->maxHeparinDispRateMLPHR ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->minHeparinBolusVolumeML >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ].min.sFlt ) && ( nvInstRcrd->minHeparinBolusVolumeML <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ].max.sFlt ) ? TRUE : FALSE ); result &= ( ( nvInstRcrd->maxHeparinBolusVolumeML >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ].min.sFlt ) && ( nvInstRcrd->maxHeparinBolusVolumeML <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ].max.sFlt ) ? TRUE : FALSE ); + result &= ( ( nvInstRcrd->minHeparinBolusVolumeML <= nvInstRcrd->maxHeparinBolusVolumeML ) ? TRUE : FALSE ); + result &= ( ( nvInstRcrd->enableChemicalDisinfect <= INSTIT_CHEM_DISINFECT_ENABLE_RANGE ) ? TRUE : FALSE ); return result; }