Index: firmware/App/Controllers/SyringePump.c =================================================================== diff -u -rbb80dbac26147ab08413efa91007f7ffed43c38f -r6f9114398c3d37f2b17fff8fdb7f2b2c9bfc6a4b --- firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision bb80dbac26147ab08413efa91007f7ffed43c38f) +++ firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 6f9114398c3d37f2b17fff8fdb7f2b2c9bfc6a4b) @@ -176,7 +176,8 @@ static S32 syringePumpPosition1SecAgo; ///< Position recorded at last 1 Hz speed check. static BOOL syringePumpRetractRequested; ///< Flag indicates a retract operation is requested. -static BOOL syringePumpPrimeRequested; ///< Flag indicates plunger seek and Heparin prime operations are requested. +static BOOL syringePumpSeekRequested; ///< Flag indicates a plunger seek operation is requested. +static BOOL syringePumpPrimeRequested; ///< Flag indicates a Heparin prime operation is requested. static BOOL syringePumpBolusRequested; ///< Flag indicates start or resume of a Heparin bolus operation is requested. static BOOL syringePumpContinuousRequested; ///< Flag indicates start or resume of a Heparin continuous delivery operation is requested. static BOOL syringePumpDACVrefSetRequested; ///< Flag indicates request to set DAC Vref for force sensor. @@ -265,6 +266,7 @@ static void resetSyringePumpRequestFlags( void ) { syringePumpRetractRequested = FALSE; + syringePumpSeekRequested = FALSE;;; syringePumpPrimeRequested = FALSE; syringePumpBolusRequested = FALSE; syringePumpContinuousRequested = FALSE; @@ -399,17 +401,35 @@ /*********************************************************************//** * @brief - * The primeSyringePump function requests plunger seek and prime operations. + * The seekSyringePlunger function requests plunger seek operation. * @details Inputs: syringePumpState - * @details Outputs: syringePumpSetRate, syringePumpBolusRequested + * @details Outputs: syringePumpSetRate, syringePumpSeekRequested * @return TRUE if request accepted, FALSE if not *************************************************************************/ -BOOL primeSyringePump( void ) +BOOL seekSyringePlunger( void ) { if ( ( SYRINGE_PUMP_OFF_STATE == syringePumpState ) && ( TRUE == isSyringeDetected() ) && ( TRUE == isSyringePumpHome() ) && ( heparinDeliveryState != HEPARIN_STATE_OFF ) ) { syringePumpSetRate = SYRINGE_PUMP_SEEK_RATE; + syringePumpSeekRequested = TRUE; + } + + return syringePumpSeekRequested; +} + +/*********************************************************************//** + * @brief + * The primeSyringePump function requests a prime operation. + * @details Inputs: syringePumpState + * @details Outputs: syringePumpSetRate, syringePumpPrimeRequested + * @return TRUE if request accepted, FALSE if not + *************************************************************************/ +BOOL primeSyringePump( void ) +{ + if ( ( SYRINGE_PUMP_OFF_STATE == syringePumpState ) && ( TRUE == isSyringeDetected() ) && ( heparinDeliveryState != HEPARIN_STATE_OFF ) ) + { + syringePumpSetRate = SYRINGE_PUMP_PRIME_RATE; syringePumpPrimeRequested = TRUE; } @@ -869,10 +889,14 @@ { result = SYRINGE_PUMP_RETRACT_STATE; } - else if ( TRUE == syringePumpPrimeRequested ) + else if ( TRUE == syringePumpSeekRequested ) { result = SYRINGE_PUMP_SEEK_STATE; } + else if ( TRUE == syringePumpPrimeRequested ) + { + result = SYRINGE_PUMP_PRIME_STATE; + } else if ( TRUE == syringePumpBolusRequested ) { heparinDeliveryState = HEPARIN_STATE_INITIAL_BOLUS; @@ -974,14 +998,10 @@ // Is plunger contact detected? if ( getSyringePumpForceV() >= SYRINGE_FORCE_PLUNGER_THRESHOLD_V ) { + stopPump = TRUE; syringePumpPlungerFound = TRUE; syringePumpVolumeDelivered.data = 0.0; syringePumpVolumeStartPosition = syringePumpPosition.data; - syringePumpSetRate = SYRINGE_PUMP_PRIME_RATE; - // Calculate target FPGA rate from set rate in mL/hr converted to microstep toggle interval in uSec - calcStepperToggleTimeForTargetRate( syringePumpSetRate ); - setFPGASyringePumpStepToggleTime( syringePumpRampUpToggleTime ); - result = SYRINGE_PUMP_PRIME_STATE; } // Has syringe been removed? @@ -1517,7 +1537,11 @@ result = retractSyringePump(); break; - case SYRINGE_PUMP_OP_SEEK_AND_PRIME: + case SYRINGE_PUMP_OP_SEEK: + result = seekSyringePlunger(); + break; + + case SYRINGE_PUMP_OP_PRIME: result = primeSyringePump(); break; Index: firmware/App/Controllers/SyringePump.h =================================================================== diff -u -rbb80dbac26147ab08413efa91007f7ffed43c38f -r6f9114398c3d37f2b17fff8fdb7f2b2c9bfc6a4b --- firmware/App/Controllers/SyringePump.h (.../SyringePump.h) (revision bb80dbac26147ab08413efa91007f7ffed43c38f) +++ firmware/App/Controllers/SyringePump.h (.../SyringePump.h) (revision 6f9114398c3d37f2b17fff8fdb7f2b2c9bfc6a4b) @@ -37,9 +37,10 @@ { SYRINGE_PUMP_OP_STOP = 0, SYRINGE_PUMP_OP_RETRACT = 1, - SYRINGE_PUMP_OP_SEEK_AND_PRIME = 2, - SYRINGE_PUMP_OP_BOLUS = 3, - SYRINGE_PUMP_OP_CONTINUOUS = 4, + SYRINGE_PUMP_OP_SEEK = 2, + SYRINGE_PUMP_OP_PRIME = 3, + SYRINGE_PUMP_OP_BOLUS = 4, + SYRINGE_PUMP_OP_CONTINUOUS = 5, NUM_OF_SYRINGE_PUMP_OPS } SYRINGE_PUMP_OPERATION_T; @@ -75,6 +76,7 @@ void setHeparinStopped( void ); void stopSyringePump( void ); BOOL retractSyringePump( void ); +BOOL seekSyringePlunger( void ); BOOL primeSyringePump( void ); BOOL startHeparinBolus( void ); BOOL startHeparinContinuous( void ); Index: firmware/App/Modes/ModeTreatmentParams.c =================================================================== diff -u -rbb80dbac26147ab08413efa91007f7ffed43c38f -r6f9114398c3d37f2b17fff8fdb7f2b2c9bfc6a4b --- firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision bb80dbac26147ab08413efa91007f7ffed43c38f) +++ firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision 6f9114398c3d37f2b17fff8fdb7f2b2c9bfc6a4b) @@ -351,7 +351,7 @@ origTreatmentParams.venousPressureHighLimit_mmHg = getCriticalData( &treatmentParameters[ TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT ] ).sInt; // If using Heparin in this treatment, set state to stopped otherwise off - if ( ( stagedParams[ TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ] > 0.0 ) || ( stagedParams[ TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ] > 0.0 ) ) + if ( ( stagedParams[ TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ].sFlt > 0.0 ) || ( stagedParams[ TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ].sFlt > 0.0 ) ) { setHeparinStopped(); }