Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r0d0a65cc7b3daef294349a176d7f603a06634aa8 -r661aced10aeea7f7a87f27fec51e383b500106ef --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 0d0a65cc7b3daef294349a176d7f603a06634aa8) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 661aced10aeea7f7a87f27fec51e383b500106ef) @@ -203,6 +203,9 @@ NUMBER_OF_ACID_AND_BICARB_NV_DATA_TO_CHECK, ALARM_ID_DG_ACID_CONCENTRATE_INVALID_CAL_RECORD ); getNVRecord2Driver( GET_CAL_BICARB_CONCENTRATES, (U08*)&bicarbConcentrateCalRecord, sizeof( bicarbConcentrateCalRecord ), NUMBER_OF_ACID_AND_BICARB_NV_DATA_TO_CHECK, ALARM_ID_DG_BICARB_CONCENTRATE_INVALID_CAL_RECORD ); + // Get the calibration values for the acid and bicarb pump calibration + getNVRecord2Driver( GET_CAL_CONCENTRATE_PUMPS_RECORD, (U08*)&concentratePumpsCalRecord, sizeof( DG_CONC_PUMPS_CAL_RECORD_T ), + NUM_OF_CAL_DATA_DG_CONC_PUMPS, ALARM_ID_DG_CONCENTRATE_PUMPS_INVALID_CAL_RECORD ); } // Calculate pump speed for each defined pump @@ -351,7 +354,7 @@ NUMBER_OF_ACID_AND_BICARB_NV_DATA_TO_CHECK, ALARM_ID_DG_BICARB_CONCENTRATE_INVALID_CAL_RECORD ); calStatus |= getNVRecord2Driver( GET_CAL_CONCENTRATE_PUMPS_RECORD, (U08*)&concentratePumpsCalRecord, sizeof( DG_CONC_PUMPS_CAL_RECORD_T ), - NUM_OF_CAL_DATA_DG_CONC_PUMPS, ALARM_ID_NO_ALARM ); + NUM_OF_CAL_DATA_DG_CONC_PUMPS, ALARM_ID_DG_CONCENTRATE_PUMPS_INVALID_CAL_RECORD ); result = ( TRUE == calStatus ? SELF_TEST_STATUS_PASSED : SELF_TEST_STATUS_FAILED ); @@ -509,7 +512,13 @@ */ if ( ( CONCENTRATE_PUMP_MIN_SPEED <= targetSpeed_ml_min ) && ( targetSpeed_ml_min <= CONCENTRATE_PUMP_MAX_SPEED ) ) { - concentratePumps[ pumpId ].pumpTargetSpeed = targetSpeed_ml_min; + F32 targetWithCalMLPM = pow( targetSpeed_ml_min, 4 ) * concentratePumpsCalRecord.concentratePumps[ (CAL_DATA_DG_PUMPS_T)pumpId ].fourthOrderCoeff + + pow( targetSpeed_ml_min, 3 ) * concentratePumpsCalRecord.concentratePumps[ (CAL_DATA_DG_PUMPS_T)pumpId ].thirdOrderCoeff + + pow( targetSpeed_ml_min, 2 ) * concentratePumpsCalRecord.concentratePumps[ (CAL_DATA_DG_PUMPS_T)pumpId ].secondOrderCoeff + + targetSpeed_ml_min * concentratePumpsCalRecord.concentratePumps[ (CAL_DATA_DG_PUMPS_T)pumpId ].gain + + concentratePumpsCalRecord.concentratePumps[ (CAL_DATA_DG_PUMPS_T)pumpId ].offset; + + concentratePumps[ pumpId ].pumpTargetSpeed = targetWithCalMLPM; } else if ( targetSpeed_ml_min < CONCENTRATE_PUMP_MIN_SPEED ) { @@ -960,9 +969,9 @@ if ( TRUE == isPumpPulseWidthOut ) { // Pulse width for this concentrate pump is out of range - isPulseWidthOut = TRUE; - pumpInAlarm = pumpId; - pumpInAlarmPulseWidthInMicroSeconds = pulseWidthInMicroSeconds; + isPulseWidthOut = TRUE; + pumpInAlarm = pumpId; + pumpInAlarmPulseWidthInMicroSeconds = pulseWidthInMicroSeconds; } } Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -re0f0e562f964f53ac9b9bd62ff2092c0b12e202b -r661aced10aeea7f7a87f27fec51e383b500106ef --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision e0f0e562f964f53ac9b9bd62ff2092c0b12e202b) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 661aced10aeea7f7a87f27fec51e383b500106ef) @@ -263,7 +263,19 @@ DG_RESERVOIR_ID_T inactiveReservoir = getInactiveReservoir(); U32 targetVolumeML = getTargetDrainVolumeML(); BOOL drainStatus = FALSE; + BOOL checkLowVolumeAlarms = TRUE; + HD_MODE_SUB_MODE_T mode; + getHDOperationMode( &mode ); + + // Ignore low volume alarms if not in treatment + if ( ( ( MODE_TREA == mode.hdMode) && ( TREATMENT_END_STATE == mode.hdSubMode) ) || + ( MODE_POST == mode.hdMode ) ) + { + // do not check low volume alarms + checkLowVolumeAlarms = FALSE; + } + if ( 0 == targetVolumeML ) { drainStatus = hasTargetDrainToZeroBeenReached( inactiveReservoir, DRAIN_WEIGHT_UNCHANGE_TIMEOUT_MS ); @@ -312,8 +324,13 @@ { resetChemicalUsedVolumeML( ACID ); setThisFirstFillFlag( TRUE ); // indicates bottles need prime - activateAlarmNoData( ALARM_ID_DG_ACID_BOTTLE_LOW_VOLUME ); - activateAlarmNoData ( ALARM_ID_DG_CREATING_DIALYSATE_PLEASE_WAIT ); + + // Alarm only valid in pre-treatment or treatment modes + if ( TRUE == checkLowVolumeAlarms ) + { + activateAlarmNoData( ALARM_ID_DG_ACID_BOTTLE_LOW_VOLUME ); + activateAlarmNoData ( ALARM_ID_DG_CREATING_DIALYSATE_PLEASE_WAIT ); + } } if ( ( ( bicarbBottleVolML - getChemicalUsedVolumeML( BICARB ) ) <= MIN_CONCENTRATE_VOLUME_ML ) && // SRSDG 837 @@ -322,8 +339,13 @@ { resetChemicalUsedVolumeML( BICARB ); setThisFirstFillFlag( TRUE ); - activateAlarmNoData( ALARM_ID_DG_BICARB_BOTTLE_LOW_VOLUME ); - activateAlarmNoData ( ALARM_ID_DG_CREATING_DIALYSATE_PLEASE_WAIT ); + + // Alarm only valid in pre-treatment or treatment modes + if ( TRUE == checkLowVolumeAlarms ) + { + activateAlarmNoData( ALARM_ID_DG_BICARB_BOTTLE_LOW_VOLUME ); + activateAlarmNoData ( ALARM_ID_DG_CREATING_DIALYSATE_PLEASE_WAIT ); + } } }