/**********************************************************************//** * * 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 DialOutFlow.h * * @date 7-Jan-2019 * @author L. Baloa * * @brief DialOutFlow header file. * **************************************************************************/ #ifndef __DIALYSATE_OUT_FLOW_H__ #define __DIALYSATE_OUT_FLOW_H__ #include "Common.h" /** * @defgroup DialysateOutlet DialysateOutlet * @brief Dialysate outlet pump and load cells controller/monitor module. * Monitors the dialysate outlet pump and load cells. Controls the dialysate * outlet pump for ultrafiltration. * * @addtogroup DialysateOutlet * @{ */ // ********** public definitions ********** /// Enumeration of load cell sensors. typedef enum Load_Cells { LOAD_CELL_RESERVOIR_1_PRIMARY = 0, ///< Primary load cell for reservoir 1. LOAD_CELL_RESERVOIR_1_BACKUP, ///< Backup load cell for reservoir 1. LOAD_CELL_RESERVOIR_2_PRIMARY, ///< Primary load cell for reservoir 2. LOAD_CELL_RESERVOIR_2_BACKUP, ///< Backup load cell for reservoir 2. NUM_OF_LOAD_CELLS ///< Number of load cell sensors. } LOAD_CELL_T; #pragma pack(push, 1) /// Dialysate outlet pump broadcast record typedef struct DialOutBroadcastingRecord { F32 refUFVolMl; ///< Reference ultrafiltration volume in mL. F32 measUFVolMl; ///< Total measured ultrafiltration volume in mL. F32 measRotSpdRPM; ///< Latest measured rotor speed for dialysate outlet pump in RPM. F32 measSpdRPM; ///< Latest measured motor speed for dialysate outlet pump in RPM. F32 measMCSpdRPM; ///< Latest measured motor controller speed for dialysate outlet pump in RPM. F32 measMCCurrmA; ///< Latest measured motor controller current for dialysate outlet pump in mA. F32 setPWMpct; ///< Latest PWM duty cycle for dialysate outlet pump in % (0..100). } DIAL_OUT_FLOW_DATA_T; #pragma pack(pop) // ********** public function prototypes ********** void initDialOutFlow( void ); void execDialOutFlowMonitor( void ); void execDialOutFlowController( void ); BOOL setDialOutPumpTargetRate( U32 flowRate, MOTOR_DIR_T dir, PUMP_CONTROL_MODE_T mode ); void setDialOutUFVolumes( F32 refVol, F32 totVol ); void signalDialOutPumpHardStop( void ); void setNewLoadCellReadings( F32 res1Primary, F32 res1Backup, F32 res2Primary, F32 res2Backup ); // SELF_TEST_STATUS_T execDialOutFlowTest( void ); // TODO - implement later DATA_GET_PROTOTYPE( F32, getTotalTargetDialOutUFVolumeInMl ); DATA_GET_PROTOTYPE( F32, getTotalMeasuredUFVolumeInMl); DATA_GET_PROTOTYPE( F32, getMeasuredDialOutPumpMCSpeed ); DATA_GET_PROTOTYPE( F32, getMeasuredDialOutPumpMCCurrent ); DATA_ARRAY_GET_PROTOTYPE( F32, getLoadCellWeightInGrams, loadCellID ); DATA_GET_PROTOTYPE( F32, getMeasuredDialOutPumpRotorSpeed ); DATA_GET_PROTOTYPE( F32, getMeasuredDialOutPumpSpeed ); BOOL testSetDialOutPumpAndLoadCellDataPublishIntervalOverride( U32 value ); BOOL testResetDialOutPumpAndLoadCellDataPublishIntervalOverride( void ); BOOL testSetDialOutUFRefVolumeOverride( F32 value ); BOOL testResetDialOutUFRefVolumeOverride( void ); BOOL testSetDialOutUFTotVolumeOverride( F32 value ); BOOL testResetDialOutUFTotVolumeOverride( void ); BOOL testSetMeasuredDialOutPumpRotorSpeedOverride( F32 value ); BOOL testResetMeasuredDialOutPumpRotorSpeedOverride( void ); BOOL testSetMeasuredDialOutPumpSpeedOverride( F32 value ); BOOL testResetMeasuredDialOutPumpSpeedOverride( void ); BOOL testSetMeasuredDialOutPumpMCSpeedOverride( F32 value ); BOOL testResetMeasuredDialOutPumpMCSpeedOverride( void ); BOOL testSetMeasuredDialOutPumpMCCurrentOverride( F32 value ); BOOL testResetMeasuredDialOutPumpMCCurrentOverride( void ); BOOL testSetDialOutLoadCellWeightOverride( U32 sensor, F32 value ); BOOL testResetDialOutLoadCellWeightOverride( U32 sensor ); /**@}*/ #endif