/************************************************************************** * * Copyright (c) 2019-2024 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file BloodFlow.h * * @author (last) Sean Nash * @date (last) 06-Jun-2023 * * @author (original) Sean Nash * @date (original) 07-Nov-2019 * ***************************************************************************/ #ifndef __BLOOD_FLOW_H__ #define __BLOOD_FLOW_H__ #include "HDCommon.h" /** * @defgroup BloodFlow BloodFlow * @brief Blood Pump & Blood Flow controller/monitor module. Monitors the * blood flow rate and controls the blood pump. * * @addtogroup BloodFlow * @{ */ // ********** public definitions ********** #define MAX_SET_BLOOD_FLOW_RATE 500 ///< Maximum blood flow rate (in mL/min). #define MIN_SET_BLOOD_FLOW_RATE 100 ///< Minimum blood flow rate (in mL/min). #define SALINE_BOLUS_FLOW_RATE 150 ///< Saline bolus flow rate (in mL/min). #define VOLUME_PER_BP_MOTOR_REV_ML 0.216F ///< Theoretical volume (mL) of blood/saline volume per motor revolution. #define BP_HALL_EDGE_COUNTS_PER_REV 48 ///< Number of hall sensor edge counts per motor revolution. /// Payload record structure for a blood pump data message. typedef struct { S32 setPoint; ///< Set point. F32 measFlow; ///< Measured flow in mL/min. F32 measRotorSpd; ///< Measured rotor speed in RPM. F32 measPumpSpd; ///< Measured pump speed in RPM. F32 measMCSpd; ///< Measured motor speed in RPM. F32 measMCCurr; ///< Measure motor current in Amps. F32 pwmDC; ///< Duty cycle. U32 rotorCount; ///< Rotor count. U32 presFlow; ///< Blood flow in mL/min. U32 rotorHall; ///< Rotor hall in counts. } BLOOD_PUMP_STATUS_PAYLOAD_T; // ********** public function prototypes ********** void initBloodFlow( void ); void execBloodFlowMonitor( void ); void execBloodFlowController( void ); BOOL setBloodPumpTargetFlowRate( U32 flowRate, MOTOR_DIR_T dir, PUMP_CONTROL_MODE_T mode ); BOOL setBloodPumpTargetRPM( U32 rpm, MOTOR_DIR_T dir ); void signalBloodPumpHardStop( void ); void signalBloodPumpRotorHallSensor( void ); BOOL homeBloodPump( void ); U32 getBloodPumpMotorCount( void ); U32 getBloodPumpRotorCount( void ); BOOL isBloodPumpRunning( void ); BOOL isBloodPumpRampComplete( void ); void resetBloodPumpRotorCount( void ); SELF_TEST_STATUS_T execBloodFlowTest( void ); S32 getTargetBloodFlowRate( void ); F32 getMeasuredBloodFlowRate( void ); F32 getMeasuredBloodPumpRotorSpeed( void ); F32 getMeasuredBloodPumpSpeed( void ); F32 getMeasuredBloodPumpMCSpeed( void ); F32 getMeasuredBloodPumpMCCurrent( void ); BOOL testSetBloodFlowDataPublishIntervalOverride( U32 value ); BOOL testResetBloodFlowDataPublishIntervalOverride( void ); BOOL testSetTargetBloodFlowRateOverride( S32 value, U32 bloodPumpControlMode ); BOOL testSetMeasuredBloodFlowRateOverride( F32 value ); BOOL testResetMeasuredBloodFlowRateOverride( void ); BOOL testSetMeasuredBloodPumpRotorSpeedOverride( F32 value ); BOOL testResetMeasuredBloodPumpRotorSpeedOverride( void ); BOOL testSetMeasuredBloodPumpSpeedOverride( F32 value ); BOOL testResetMeasuredBloodPumpSpeedOverride( void ); BOOL testSetMeasuredBloodPumpMCSpeedOverride( F32 value ); BOOL testResetMeasuredBloodPumpMCSpeedOverride( void ); BOOL testSetMeasuredBloodPumpMCCurrentOverride( F32 value ); BOOL testResetMeasuredBloodPumpMCCurrentOverride( void ); BOOL testSetBloodPumpRotorCountOverride( U32 value ); BOOL testResetBloodPumpRotorCountOverride( void ); BOOL testSetBloodPumpTargetDutyCycle( F32 value ); /**@}*/ #endif