/************************************************************************** * * Copyright (c) 2019-2020 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) 26-Aug-2020 * * @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.216 ///< 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; F32 measFlow; F32 measRotorSpd; F32 measPumpSpd; F32 measMCSpd; F32 measMCCurr; F32 pwmDC; F32 flowSigStrength; } 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 ); void signalBloodPumpHardStop( void ); void signalBloodPumpRotorHallSensor( void ); BOOL homeBloodPump( void ); U32 getBloodPumpMotorCount( void ); U32 getBloodPumpRotorCount( void ); BOOL isBloodPumpRunning( void ); void resetBloodPumpRotorCount( void ); SELF_TEST_STATUS_T execBloodFlowTest( void ); F32 getMeasuredBloodFlowRate( void ); #ifdef USE_FMB_FLOW_SENSOR F32 getMeasuredBloodFlowSignalStrength( void); #endif 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 ); #ifdef USE_FMB_FLOW_SENSOR BOOL testSetMeasuredBloodFlowSignalStrengthOverride( F32 value ); BOOL testResetMeasuredBloodFlowSignalStrengthOverride( void ); #endif /**@}*/ #endif