Index: firmware/App/Modes/ModeTxParams.c =================================================================== diff -u -r52e1d4487a69a1ef0475321084527c0ba86c0892 -raa6d45143096dfab776ce2ed7c775cfe2dd6db18 --- firmware/App/Modes/ModeTxParams.c (.../ModeTxParams.c) (revision 52e1d4487a69a1ef0475321084527c0ba86c0892) +++ firmware/App/Modes/ModeTxParams.c (.../ModeTxParams.c) (revision aa6d45143096dfab776ce2ed7c775cfe2dd6db18) @@ -38,14 +38,15 @@ // ********** private definitions ********** -#define MAX_DIALYSATE_VOLUME_ML ( 150 * ML_PER_LITER ) ///< Maximum dialysate volume (in mL) -#define MAX_HEPARIN_VOLUME_ML 10 ///< Maximum heparin volume ( in mL ) - +#define MAX_HEPARIN_VOLUME_ML 10.0F ///< Maximum heparin volume ( in mL ) #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 +#define SYRINGE_PUMP_PRIME_VOLUME_ML 0.353F ///< Target syringe prime volume (in mL). TODO- move these to syringe pump controller when implemented +#define SYRINGE_PUMP_FILL_VOLUME_OFFSET_ML 0.8F ///< Advised fill volume offset due to HW variance. + /// Record for range and default of treatment parameters. typedef struct { @@ -588,19 +589,30 @@ static BOOL checkTreatmentParamsDependencies( U32 *reasons ) { BOOL result = TRUE; + U32 txDur = stagedParams[ TREATMENT_PARAM_TREATMENT_DURATION ].uInt; + U32 hepST = stagedParams[ TREATMENT_PARAM_HEPARIN_STOP_TIME ].uInt; + F32 hepDR = stagedParams[ TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ].sFlt; + F32 hepBV = stagedParams[ TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ].sFlt; + F32 txVol = hepBV + ( hepDR * ( hepST / (F32)SEC_PER_MIN ) ) + SYRINGE_PUMP_PRIME_VOLUME_ML + SYRINGE_PUMP_FILL_VOLUME_OFFSET_ML; // Verify Heparin stop time is only set if Heparin dispense rate is set - if ( ( stagedParams[ TREATMENT_PARAM_HEPARIN_STOP_TIME ].uInt > 0 ) && ( stagedParams[ TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ].sFlt < NEARLY_ZERO ) ) + if ( ( hepST > 0 ) && ( hepDR < NEARLY_ZERO ) ) { reasons[ TREATMENT_PARAM_HEPARIN_STOP_TIME ] = REQUEST_REJECT_REASON_HEPARIN_STOP_TIME_WITH_NO_DISPENSE; result = FALSE; } // Verify Heparin stop time does not exceed Tx duration - else if ( stagedParams[ TREATMENT_PARAM_HEPARIN_STOP_TIME ].uInt > stagedParams[ TREATMENT_PARAM_TREATMENT_DURATION ].uInt ) + else if ( hepST > txDur ) { reasons[ TREATMENT_PARAM_HEPARIN_STOP_TIME ] = REQUEST_REJECT_REASON_HEPARIN_STOP_TIME_EXCEEDS_DURATION; result = FALSE; } + // Verify Heparin stop time does not exceed max 10 mL Heparin volume + else if ( txVol > MAX_HEPARIN_VOLUME_ML ) + { + reasons[ TREATMENT_PARAM_HEPARIN_STOP_TIME ] = REQUEST_REJECT_REASON_HEPARIN_VOLUME_EXCEEDS_10_ML; + result = FALSE; + } return result; }