Index: firmware/App/Controllers/SyringePump.c =================================================================== diff -u -re2cf7feff54dad3fc5be72619fa64b5421fc6f9f -r8b5b59032b8edc0db91041b35dabc0a81f96ea04 --- firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision e2cf7feff54dad3fc5be72619fa64b5421fc6f9f) +++ firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 8b5b59032b8edc0db91041b35dabc0a81f96ea04) @@ -8,7 +8,7 @@ * @file SyringePump.c * * @author (last) Darren Cox -* @date (last) 19-Sep-2023 +* @date (last) 09-Oct-2023 * * @author (original) Sean Nash * @date (original) 04-Mar-2021 @@ -66,7 +66,7 @@ #define SYRINGE_PUMP_PRIME_RATE 635.0F ///< Prime rate is 0.5 mm ^ 2 x PI x 450 mm = 0.353 mL / 2s = 635 mL/hr. #define SYRINGE_PUMP_MAX_RATE 11000.0F ///< Maximum rate of the syringe pump (in mL/hr). -#define SYRINGE_PUMP_RATE_ALARM_PERSISTENCE 3000 ///< Alarm persistence period (in ms) for syringe pump speed check alarms. +#define SYRINGE_PUMP_RATE_ALARM_PERSISTENCE 6000 ///< Alarm persistence period (in ms) for syringe pump speed check alarms. #define SYRINGE_PUMP_DIR_ALARM_PERSISTENCE 3000 ///< Alarm persistence period (in ms) for syringe pump direction check alarms. #define SYRINGE_PUMP_OFF_ALARM_PERSISTENCE 1000 ///< Alarm persistence period (in ms) for syringe pump off check alarms. #define SYRINGE_PUMP_OFF_ERROR_MAX_CNT 5 ///< Maximum number of syringe pump not stopped errors within time window before alarm triggered. Do not exceed MAX_TIME_WINDOWED_COUNT. @@ -511,11 +511,11 @@ *************************************************************************/ void stopSyringePump( void ) { - syringePumpSetRate = 0.0; setFPGASyringePumpStepToggleTime( SYRINGE_PUMP_MICROSTEP_TOGGLE_TIME_FOR_STOP ); if ( ( syringePumpState != SYRINGE_PUMP_CONFIG_FORCE_SENSOR_STATE ) && ( syringePumpState != SYRINGE_PUMP_OFF_STATE ) ) { syringePumpState = SYRINGE_PUMP_OFF_STATE; + syringePumpSetRate = 0.0; } if ( ( HEPARIN_STATE_INITIAL_BOLUS == heparinDeliveryState ) || ( HEPARIN_STATE_DISPENSING == heparinDeliveryState ) ) { @@ -528,6 +528,7 @@ sendTreatmentLogEventData( HEPARIN_STOP_PAUSE_EVENT, syringePumpSetRate, 0.0 ); } heparinDeliveryState = HEPARIN_STATE_STOPPED; + syringePumpSetRate = 0.0; } } @@ -645,6 +646,8 @@ *************************************************************************/ BOOL startHeparinBolus( void ) { + F32 bolusVol = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ); + // If valid to start a bolus, kick it off if ( FALSE == isSyringePumpHome() ) { @@ -655,8 +658,12 @@ if ( ( TRUE == isSyringeDetected() ) && ( TRUE == syringePumpPrimeCompleted ) && ( SYRINGE_PUMP_OFF_STATE == syringePumpState ) && ( HEPARIN_STATE_STOPPED == heparinDeliveryState ) ) { - syringePumpSetRate = getHeprinBolusTargetRate(); - syringePumpBolusRequested = TRUE; + // if user set a Heparin bolus volume and not complete, start now + if ( ( bolusVol > 0.0F ) && ( getSyringePumpVolumeDelivered() < bolusVol ) ) + { + syringePumpSetRate = getHeprinBolusTargetRate(); + syringePumpBolusRequested = TRUE; + } } } else