Index: firmware/App/Controllers/SyringePump.c =================================================================== diff -u -r2bdd010a62ea113058640fc1e9c763dcf885c93c -r5b3be58e0b2dc2ffce534363f85023d03ca561ba --- firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 2bdd010a62ea113058640fc1e9c763dcf885c93c) +++ firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 5b3be58e0b2dc2ffce534363f85023d03ca561ba) @@ -62,6 +62,7 @@ #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. +#define SYRINGE_PUMP_MAX_RATE 11000.0 ///< Maximum rate of the syringe pump (in mL). #define SYRINGE_PUMP_RATE_ALARM_PERSISTENCE ( 1 * MS_PER_SECOND ) ///< Alarm persistence period for syringe pump speed check alarms. @@ -793,7 +794,6 @@ syringePumpHomePositionOffset = getFPGASyringePumpEncoderPosition(); syringePumpPosition.data = 0; syringePumpVolumeDelivered.data = 0.0; - syringePumpHasBeenHomed = TRUE; result = SYRINGE_PUMP_OFF_STATE; } // Stop retract if syringe is detected (should not have a syringe loaded during retract) @@ -1281,69 +1281,323 @@ return result; } -BOOL testSyringePumpOperationRequest( U32 op, F32 rate, F32 volume ) +/*********************************************************************//** + * @brief + * The testSyringePumpOperationRequest function requests a given syringe pump + * operation. + * @details Inputs: none + * @details Outputs: TBD + * @param opParams record containing the requested operation and its parameters + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSyringePumpOperationRequest( SYRINGE_PUMP_OP_PAYLOAD_T opParams ) { + BOOL result = FALSE; + if ( TRUE == isTestingActivated() ) + { + SYRINGE_PUMP_OPERATION_T op = (SYRINGE_PUMP_OPERATION_T)(opParams.syringePumpOp); + + switch ( op ) + { + case SYRINGE_PUMP_OP_STOP: + stopSyringePump(); + result = TRUE; + break; + + case SYRINGE_PUMP_OP_RETRACT: + result = retractSyringePump(); + break; + + case SYRINGE_PUMP_OP_SEEK_AND_PRIME: + result = primeSyringePump(); + break; + + case SYRINGE_PUMP_OP_BOLUS: + result = startHeparinBolus( opParams.rate ); + break; + + case SYRINGE_PUMP_OP_CONTINUOUS: + result = startHeparinContinuous( opParams.rate ); + break; + + default: + // Ok, just ignore and we will return FALSE rejecting request + break; + } + } + + return result; } -BOOL testSetSyringePumpMeasuredRateOverride( U32 value ) +/*********************************************************************//** + * @brief + * The testSetSyringePumpMeasuredRateOverride function overrides the measured + * rate of the syringe pump. + * @details Inputs: none + * @details Outputs: syringePumpMeasRate + * @param value override syringe pump measured rate with this value (in mL/hr) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetSyringePumpMeasuredRateOverride( F32 value ) { + BOOL result = FALSE; + if ( ( TRUE == isTestingActivated() ) && ( value <= SYRINGE_PUMP_MAX_RATE ) ) + { + result = TRUE; + syringePumpMeasRate.ovData = value; + syringePumpMeasRate.override = OVERRIDE_KEY; + } + + return result; } +/*********************************************************************//** + * @brief + * The testResetSyringePumpMeasuredRateOverride function resets the override + * of the syringe pump measured rate. + * @details Inputs: none + * @details Outputs: syringePumpMeasRate + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ BOOL testResetSyringePumpMeasuredRateOverride( void ) { + BOOL result = FALSE; + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + syringePumpMeasRate.override = OVERRIDE_RESET; + syringePumpMeasRate.ovData = syringePumpMeasRate.ovInitData; + } + + return result; } -BOOL testSetSyringePumpMeasuredForceOverride( U32 value ) +/*********************************************************************//** + * @brief + * The testSetSyringePumpMeasuredForceOverride function overrides the measured + * force analog signal of the syringe pump. + * @details Inputs: none + * @details Outputs: syringePumpMeasForce + * @param value override syringe pump measured force signal with this value (in V) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetSyringePumpMeasuredForceOverride( F32 value ) { + BOOL result = FALSE; + if ( ( TRUE == isTestingActivated() ) && ( value >= 0.0 ) && ( value <= SYRINGE_PUMP_ADC_REF_V ) ) + { + result = TRUE; + syringePumpMeasForce.ovData = value; + syringePumpMeasForce.override = OVERRIDE_KEY; + } + + return result; } +/*********************************************************************//** + * @brief + * The testResetSyringePumpMeasuredForceOverride function resets the override + * of the syringe pump measured force analog signal. + * @details Inputs: none + * @details Outputs: syringePumpMeasForce + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ BOOL testResetSyringePumpMeasuredForceOverride( void ) { + BOOL result = FALSE; + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + syringePumpMeasForce.override = OVERRIDE_RESET; + syringePumpMeasForce.ovData = syringePumpMeasForce.ovInitData; + } + + return result; } -BOOL testSetSyringePumpMeasuredSyringeDetectOverride( U32 value ) +/*********************************************************************//** + * @brief + * The testSetSyringePumpMeasuredSyringeDetectOverride function overrides the measured + * syringe detect analog signal of the syringe pump. + * @details Inputs: none + * @details Outputs: syringePumpMeasSyringeDetectionSwitch + * @param value override syringe pump measured syringe detection signal with this value (in V) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetSyringePumpMeasuredSyringeDetectOverride( F32 value ) { + BOOL result = FALSE; + if ( ( TRUE == isTestingActivated() ) && ( value >= 0.0 ) && ( value <= SYRINGE_PUMP_ADC_REF_V ) ) + { + result = TRUE; + syringePumpMeasSyringeDetectionSwitch.ovData = value; + syringePumpMeasSyringeDetectionSwitch.override = OVERRIDE_KEY; + } + + return result; } +/*********************************************************************//** + * @brief + * The testResetSyringePumpMeasuredSyringeDetectOverride function resets the override + * of the syringe pump measured syringe detect analog signal. + * @details Inputs: none + * @details Outputs: syringePumpMeasSyringeDetectionSwitch + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ BOOL testResetSyringePumpMeasuredSyringeDetectOverride( void ) { + BOOL result = FALSE; + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + syringePumpMeasSyringeDetectionSwitch.override = OVERRIDE_RESET; + syringePumpMeasSyringeDetectionSwitch.ovData = syringePumpMeasSyringeDetectionSwitch.ovInitData; + } + + return result; } -BOOL testSetSyringePumpMeasuredHomeOverride( U32 value ) +/*********************************************************************//** + * @brief + * The testSetSyringePumpMeasuredHomeOverride function overrides the measured + * home analog signal of the syringe pump. + * @details Inputs: none + * @details Outputs: syringePumpMeasHome + * @param value override syringe pump measured home signal with this value (in V) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetSyringePumpMeasuredHomeOverride( F32 value ) { + BOOL result = FALSE; + if ( ( TRUE == isTestingActivated() ) && ( value >= 0.0 ) && ( value <= SYRINGE_PUMP_ADC_REF_V ) ) + { + result = TRUE; + syringePumpMeasHome.ovData = value; + syringePumpMeasHome.override = OVERRIDE_KEY; + } + + return result; } +/*********************************************************************//** + * @brief + * The testResetSyringePumpMeasuredHomeOverride function resets the override + * of the syringe pump measured home analog signal. + * @details Inputs: none + * @details Outputs: syringePumpMeasHome + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ BOOL testResetSyringePumpMeasuredHomeOverride( void ) { + BOOL result = FALSE; + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + syringePumpMeasHome.override = OVERRIDE_RESET; + syringePumpMeasHome.ovData = syringePumpMeasHome.ovInitData; + } + + return result; } -BOOL testSetSyringePumpMeasuredPositionOverride( U32 value ) +/*********************************************************************//** + * @brief + * The testSetSyringePumpMeasuredPositionOverride function overrides the measured + * position of the syringe pump. + * @details Inputs: none + * @details Outputs: syringePumpPosition + * @param value override syringe pump measured position with this value (in encoder counts) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetSyringePumpMeasuredPositionOverride( S32 value ) { + BOOL result = FALSE; + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + syringePumpPosition.ovData = value; + syringePumpPosition.override = OVERRIDE_KEY; + } + + return result; } +/*********************************************************************//** + * @brief + * The testResetSyringePumpMeasuredPositionOverride function resets the override + * of the syringe pump measured position. + * @details Inputs: none + * @details Outputs: syringePumpPosition + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ BOOL testResetSyringePumpMeasuredPositionOverride( void ) { + BOOL result = FALSE; + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + syringePumpPosition.override = OVERRIDE_RESET; + syringePumpPosition.ovData = syringePumpPosition.ovInitData; + } + + return result; } -BOOL testSetSyringePumpMeasuredVolumeOverride( U32 value ) +/*********************************************************************//** + * @brief + * The testSetSyringePumpMeasuredVolumeOverride function overrides the measured + * rate of the syringe pump measured volume delivered. + * @details Inputs: none + * @details Outputs: syringePumpVolumeDelivered + * @param value override syringe pump measured volume with this value (in mL) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetSyringePumpMeasuredVolumeOverride( F32 value ) { + BOOL result = FALSE; + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + syringePumpVolumeDelivered.ovData = value; + syringePumpVolumeDelivered.override = OVERRIDE_KEY; + } + + return result; } +/*********************************************************************//** + * @brief + * The testResetSyringePumpMeasuredVolumeOverride function resets the override + * of the syringe pump measured volume delivered. + * @details Inputs: none + * @details Outputs: syringePumpVolumeDelivered + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ BOOL testResetSyringePumpMeasuredVolumeOverride( void ) { + BOOL result = FALSE; + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + syringePumpVolumeDelivered.override = OVERRIDE_RESET; + syringePumpVolumeDelivered.ovData = syringePumpVolumeDelivered.ovInitData; + } + + return result; } /**@}*/