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;