Index: firmware/App/Controllers/SyringePump.c =================================================================== diff -u -r4852688b84c4c85ef2761c0f1deee822069769bf -r17473fe71d115b4b78309e69656a984cd1e4a160 --- firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 4852688b84c4c85ef2761c0f1deee822069769bf) +++ firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 17473fe71d115b4b78309e69656a984cd1e4a160) @@ -140,19 +140,6 @@ #define DATA_PUBLISH_COUNTER_START_COUNT 10 ///< Data publish counter start count. -/// Control bits to run syringe pump in reverse direction -static const U08 SYRINGE_PUMP_CONTROL_RUN_REVERSE = SYRINGE_PUMP_CONTROL_SLEEP_OFF | - SYRINGE_PUMP_CONTROL_NOT_RESET | - SYRINGE_PUMP_CONTROL_ENABLE | - SYRINGE_PUMP_CONTROL_REVERSE_DIR | - SYRINGE_PUMP_CONTROL_32TH_STEP; -/// Control bits to run syringe pump in forward direction -static const U08 SYRINGE_PUMP_CONTROL_RUN_FORWARD = SYRINGE_PUMP_CONTROL_SLEEP_OFF | - SYRINGE_PUMP_CONTROL_NOT_RESET | - SYRINGE_PUMP_CONTROL_ENABLE | - SYRINGE_PUMP_CONTROL_FORWARD_DIR | - SYRINGE_PUMP_CONTROL_32TH_STEP; - #define SYRINGE_PUMP_DAC_WRITE_ERROR_BIT 0x40 ///< Syringe pump DAC write error bit flag in FPGA register. #define SYRINGE_PUMP_ENCODER_DIRECTION_ERROR_BITS 0x3F ///< Syringe pump encoder direction error counter bits in FPGA register. #define SYRINGE_PUMP_ENCODER_DIRECTION_BIT 0x80 ///< Syringe pump encoder direction bit in FPGA register. @@ -174,6 +161,19 @@ #define SYRINGE_PUMP_OCCLUSION_PERSISTENCE 50 ///< Syringe pump occlusion persistence timer in milliseconds. #define SYRINGE_PUMP_EMPTY_FORCE_COUNT 5 ///< Syringe pump empty force voltage count persistence. +/// Control bits to run syringe pump in reverse direction +static const U08 SYRINGE_PUMP_CONTROL_RUN_REVERSE = SYRINGE_PUMP_CONTROL_SLEEP_OFF | + SYRINGE_PUMP_CONTROL_NOT_RESET | + SYRINGE_PUMP_CONTROL_ENABLE | + SYRINGE_PUMP_CONTROL_REVERSE_DIR | + SYRINGE_PUMP_CONTROL_32TH_STEP; +/// Control bits to run syringe pump in forward direction +static const U08 SYRINGE_PUMP_CONTROL_RUN_FORWARD = SYRINGE_PUMP_CONTROL_SLEEP_OFF | + SYRINGE_PUMP_CONTROL_NOT_RESET | + SYRINGE_PUMP_CONTROL_ENABLE | + SYRINGE_PUMP_CONTROL_FORWARD_DIR | + SYRINGE_PUMP_CONTROL_32TH_STEP; + /// Defined states for the syringe pump control state machine. typedef enum SyringePump_States { @@ -196,20 +196,19 @@ static U32 syringePumpRampTimerCtr; ///< Used to track ramp up time. static HEPARIN_STATE_T heparinDeliveryState; ///< Current state of Heparin delivery. -/// Interval (in ms) at which to publish syringe pump data to CAN bus. -static OVERRIDE_U32_T syringePumpDataPublishInterval = { SYRINGE_PUMP_DATA_PUB_INTERVAL, SYRINGE_PUMP_DATA_PUB_INTERVAL, 0, 0 }; -static OVERRIDE_F32_T syringePumpMeasRate = { 0.0, 0.0, 0.0, 0 }; ///< Measured rate for syringe pump (in mL/hr). -static OVERRIDE_F32_T syringePumpMeasForce = { 0.0, 0.0, 0.0, 0 }; ///< Measured driver force (in V). -static OVERRIDE_F32_T syringePumpMeasHome = { 0.0, 0.0, 0.0, 0 }; ///< Measured optical home (in V). -static OVERRIDE_S32_T syringePumpPosition = { 0, 0, 0, 0 }; ///< Encoder based position (in steps). -static OVERRIDE_F32_T syringePumpVolumeDelivered = { 0.0, 0.0, 0.0, 0 }; ///< Measured volume delivered (in mL). -static OVERRIDE_F32_T heparinBolusTargetRate = { HEPARIN_BOLUS_TARGET_RATE, 0.0, HEPARIN_BOLUS_TARGET_RATE, 0 }; ///< Target rate of the heparin bolus in mL/hour +static OVERRIDE_U32_T syringePumpDataPublishInterval; /// Interval (in ms) at which to publish syringe pump data to CAN bus. +static OVERRIDE_F32_T syringePumpMeasRate; ///< Measured rate for syringe pump (in mL/hr). +static OVERRIDE_F32_T syringePumpMeasForce; ///< Measured driver force (in V). +static OVERRIDE_F32_T syringePumpMeasHome; ///< Measured optical home (in V). +static OVERRIDE_S32_T syringePumpPosition; ///< Encoder based position (in steps). +static OVERRIDE_F32_T syringePumpVolumeDelivered; ///< Measured volume delivered (in mL). +static OVERRIDE_F32_T heparinBolusTargetRate; ///< Target rate of the heparin bolus in mL/hour -static OVERRIDE_U32_T syringePumpStatus = {0, 0, 0, 0}; ///< Syringe pump status reported by FPGA. -static OVERRIDE_U32_T syringePumpEncoderStatus = {0, 0, 0, 0}; ///< Syringe pump encoder status reported by FPGA. -static OVERRIDE_U32_T syringePumpADCandDACStatus = {0, 0, 0, 0}; ///< Syringe pump ADC and DAC status reported by FPGA. -static OVERRIDE_U32_T syringePumpADCReadCtr = {0, 0, 0, 0}; ///< Syringe pump ADC read counter reported by FPGA. -static OVERRIDE_F32_T syringePumpDACVref = { 0.0, 0.0, 0.0, 0 };; ///< DAC Vref setting for force sensor. +static OVERRIDE_U32_T syringePumpStatus; ///< Syringe pump status reported by FPGA. +static OVERRIDE_U32_T syringePumpEncoderStatus; ///< Syringe pump encoder status reported by FPGA. +static OVERRIDE_U32_T syringePumpADCandDACStatus; ///< Syringe pump ADC and DAC status reported by FPGA. +static OVERRIDE_U32_T syringePumpADCReadCtr; ///< Syringe pump ADC read counter reported by FPGA. +static OVERRIDE_F32_T syringePumpDACVref; ///< DAC Vref setting for force sensor. static F32 syringePumpSetRate; ///< Set rate for syringe pump (in mL/hr). static F32 forceAtEndOfSeek; ///< Force sensor reading in Volts at the end of seek. @@ -247,14 +246,12 @@ static U32 syringePumpStallCtr; ///< Counts time when position is not changing during ramp. static U32 syringePumpStallRetryCount; ///< Counts pump ramp up stall retries. -static TD_HEPARIN_FORCE_SENSOR_CAL_RECORD_T forceSensorCalRecord; ///< TD heparin force sensor calibration record. - static U32 syringePumpDACRetryCount; ///< Counter for DAC set retries. static U32 syringePumpDACRetryTimer; ///< Timer for DAC set retries. - static U32 syringePumpEmptyForceCount; ///< Counter for empty syringe detection. // TODO: Remove the following code when NVM is implemented. +static TD_HEPARIN_FORCE_SENSOR_CAL_RECORD_T forceSensorCalRecord; ///< TD heparin force sensor calibration record. //static BOOL spumpCalibrated; ///< Flag to ensure that calibration request is made only once. // ********** private function prototypes ********** @@ -335,9 +332,69 @@ syringePumpStallRetryCount = 0; syringePumpDACRetryCount = 0; syringePumpDACRetryTimer = 0; - syringePumpMotorSpeedCalcIdx = 0; - syringePumpStateStartTime = getMSTimerCount(); + syringePumpMotorSpeedCalcIdx = 0; + syringePumpStateStartTime = getMSTimerCount(); + syringePumpMeasRate.data = 0.0; + syringePumpMeasRate.ovInitData = 0.0; + syringePumpMeasRate.ovData = 0.0; + syringePumpMeasRate.override = 0; + + syringePumpMeasForce.data = 0.0; + syringePumpMeasForce.ovInitData = 0.0; + syringePumpMeasForce.ovData = 0.0; + syringePumpMeasForce.override = 0; + + syringePumpMeasHome.data = 0.0; + syringePumpMeasHome.ovInitData = 0.0; + syringePumpMeasHome.ovData = 0.0; + syringePumpMeasHome.override = 0; + + syringePumpPosition.data = 0; + syringePumpPosition.ovInitData = 0; + syringePumpPosition.ovData = 0; + syringePumpPosition.override = 0; + + syringePumpVolumeDelivered.data = 0.0; + syringePumpVolumeDelivered.ovInitData = 0.0; + syringePumpVolumeDelivered.ovData = 0.0; + syringePumpVolumeDelivered.override = 0; + + heparinBolusTargetRate.data = HEPARIN_BOLUS_TARGET_RATE; + heparinBolusTargetRate.ovInitData = 0.0; + heparinBolusTargetRate.ovData = HEPARIN_BOLUS_TARGET_RATE; + heparinBolusTargetRate.override = 0; + + syringePumpStatus.data = 0; + syringePumpStatus.ovInitData = 0; + syringePumpStatus.ovData = 0; + syringePumpStatus.override = 0; + + syringePumpEncoderStatus.data = 0; + syringePumpEncoderStatus.ovInitData = 0; + syringePumpEncoderStatus.ovData = 0; + syringePumpEncoderStatus.override = 0; + + syringePumpADCandDACStatus.data = 0; + syringePumpADCandDACStatus.ovInitData = 0; + syringePumpADCandDACStatus.ovData = 0; + syringePumpADCandDACStatus.override = 0; + + syringePumpADCReadCtr.data = 0; + syringePumpADCReadCtr.ovInitData = 0; + syringePumpADCReadCtr.ovData = 0; + syringePumpADCReadCtr.override = 0; + + syringePumpDACVref.data = 0.0; + syringePumpDACVref.ovInitData = 0.0; + syringePumpDACVref.ovData = 0.0; + syringePumpDACVref.override = 0; + + syringePumpDataPublishInterval.data = SYRINGE_PUMP_DATA_PUB_INTERVAL; + syringePumpDataPublishInterval.ovInitData = SYRINGE_PUMP_DATA_PUB_INTERVAL; + syringePumpDataPublishInterval.ovData = 0; + syringePumpDataPublishInterval.override = 0; + // Zero pump position counts buffer for ( i = 0; i < SYRINGE_PUMP_SPEED_CALC_BUFFER_LEN; i++ ) { @@ -2241,6 +2298,7 @@ } } + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/