Index: firmware/App/Controllers/SyringePump.c =================================================================== diff -u -r735226fefeab1dc5219d6cebee749e0c27b2ce21 -rf25fbefbf6baa354b26dcbe17787821124b56c82 --- firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 735226fefeab1dc5219d6cebee749e0c27b2ce21) +++ firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision f25fbefbf6baa354b26dcbe17787821124b56c82) @@ -59,6 +59,7 @@ #define MAX_HEPARIN_CONTINUOUS_RATE 1.0 ///< Maximum continuous Heparin flow rate (in mL/hr). #define MIN_HEPARIN_BOLUS_RATE 1.2 ///< Minimum Heparin bolus flow rate (in mL/hr). #define MAX_HEPARIN_BOLUS_RATE 24.0 ///< Maximum Heparin bolus flow rate (in mL/hr). +#define HEPARIN_BOLUS_TIME_HR ( 5.0 / MIN_PER_HOUR ) ///< Duration (in hours) of Heparin bolus. #define SYRINGE_PUMP_RETRACT_RATE 10800.0 ///< Retract rate is 15 mL/ 5 s = 3 mL/s = 10,800 mL/hr. #define SYRINGE_PUMP_SEEK_RATE 3600.0 ///< Seek plunger rate is 5 mL/ 5 s = 1 mL/s = 3,600 mL/hr. #define SYRINGE_PUMP_PRIME_RATE 635.0 ///< Prime rate is 0.5 mm ^ 2 x PI x 450 mm = 0.353 mL / 2s = 635 mL/hr. @@ -310,19 +311,24 @@ * The startHeparinBolus function requests Heparin bolus delivery. * @details Inputs: syringePumpState * @details Outputs: syringePumpSetRate, syringePumpBolusRequested - * @param flowRate desired bolus flow rate (in mL/hr) * @return TRUE if request accepted, FALSE if not *************************************************************************/ -BOOL startHeparinBolus( F32 flowRate ) +BOOL startHeparinBolus( void ) { - if ( ( flowRate >= MIN_HEPARIN_BOLUS_RATE ) && ( flowRate <= MAX_HEPARIN_BOLUS_RATE ) && - ( TRUE == isSyringeDetected() ) && ( FALSE == isSyringePumpHome() ) ) + F32 tgtRate = 0.0; + + // TODO - test code - remove later + setTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME, 2.0 ); + + // Get set Heparin bolus volume (mL) and convert to target rate (mL/hr) + tgtRate = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ) / HEPARIN_BOLUS_TIME_HR; + + // If valid to start a bolus, kick it off + if ( ( tgtRate >= MIN_HEPARIN_BOLUS_RATE ) && ( tgtRate <= MAX_HEPARIN_BOLUS_RATE ) && + ( TRUE == isSyringeDetected() ) && ( FALSE == isSyringePumpHome() ) && ( SYRINGE_PUMP_OFF_STATE == syringePumpState ) ) { - if ( SYRINGE_PUMP_OFF_STATE == syringePumpState ) - { - syringePumpSetRate = flowRate; - syringePumpBolusRequested = TRUE; - } + syringePumpSetRate = tgtRate; + syringePumpBolusRequested = TRUE; } else { @@ -337,11 +343,12 @@ * The startHeparinContinuous function requests Heparin continuous delivery. * @details Inputs: syringePumpState * @details Outputs: syringePumpSetRate, syringePumpContinuousRequested - * @param flowRate desired flow rate (in mL/hr) * @return TRUE if request accepted, FALSE if not *************************************************************************/ -BOOL startHeparinContinuous( F32 flowRate ) +BOOL startHeparinContinuous( void ) { + F32 flowRate = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ); + if ( ( flowRate >= MIN_HEPARIN_CONTINUOUS_RATE ) && ( flowRate <= MAX_HEPARIN_CONTINUOUS_RATE ) && ( TRUE == isSyringeDetected() ) && ( FALSE == isSyringePumpHome() ) ) { @@ -904,7 +911,7 @@ rampSyringePump(); // Is bolus completed? - if ( getSyringePumpVolumeDelivered() >= 2.0 ) // TODO - get bolus volume from treatment params + if ( getSyringePumpVolumeDelivered() >= getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ) ) { stopPump = TRUE; } @@ -1315,11 +1322,13 @@ break; case SYRINGE_PUMP_OP_BOLUS: - result = startHeparinBolus( opParams.rate ); + setTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME, opParams.volume ); + result = startHeparinBolus(); break; case SYRINGE_PUMP_OP_CONTINUOUS: - result = startHeparinContinuous( opParams.rate ); + setTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DISPENSE_RATE, opParams.rate ); + result = startHeparinContinuous(); break; default: