/************************************************************************** * * Copyright (c) 2020-2023 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 Reservoirs.h * * @author (last) Dara Navaei * @date (last) 07-Mar-2023 * * @author (original) Sean * @date (original) 18-Mar-2020 * ***************************************************************************/ #ifndef __RESERVOIRS_H__ #define __RESERVOIRS_H__ #include "DGCommon.h" #include "DGDefs.h" #include "HDDefs.h" #include "NVDataMgmt.h" /** * @defgroup Reservoirs Reservoirs * @brief Reservoirs service module. Maintains reservoir set points and handles reservoir related commands from the HD. * * @addtogroup Reservoirs * @{ */ // ********** public definitions ********** #define MAX_RESERVOIR_VOLUME_ML 2000 ///< Maximum reservoir volume in mL. #define RESERVOIR_EXTRA_TEMPERATURE 2.0F ///< Reservoirs extra margin temperature. /// Fill command data structure. typedef struct { U32 fillToVolumeMl; ///< Target volume to fill to (in mL) U32 cmd; ///< General command (start/stop) F32 targetFlowLPM; ///< Target flow rate L/min } FILL_CMD_T; /// Drain command data structure. typedef struct { U32 targetVolume; ///< Target volume to drain to (in mL) BOOL tareLoadCell; ///< Flag to tare load call BOOL rinseConcentrateLines; ///< Flag indicates to rinse concentrate lines or not U32 cmd; ///< General command (start/stop) } DRAIN_CMD_T; /// DG command response data record. typedef struct { U32 commandID; ///< The command DG is responding to BOOL rejected; ///< Flag indicates if the command has been rejected U32 rejectCode; ///< Reason code for rejecting the command } DG_CMD_RESPONSE_T; /// HD mode and HD submode typedef struct { HD_OP_MODE_T hdMode; ///< HD mode U32 hdSubMode; ///< HD submode } HD_MODE_SUB_MODE_T; /// Reservoir data struct. typedef struct { U32 activeReservoir; ///< Active reservoir ID U32 fillToVolumeMl; ///< Volume target to fill to U32 drainToVolumeMl; ///< Volume target to drain to U32 timeReservoirCycleMS; ///< Reservoir cycle time in milliseconds U32 timeReservoirFill2SwitchMS; ///< Reservoir fill to switch time in milliseconds F32 timeUFDecayMS; ///< Ultrafilter temperature decay time in milliseconds F32 tempUFFill; ///< Ultrafilter fill time in milliseconds F32 tempReservoirUseActual; ///< Reservoir actual temperature F32 tempReservoirEndFill; ///< Reservoir end fill temperature F32 tempAvgFill; ///< Average fill temperature F32 tempLastFill; ///< Last fill temperature F32 timereservoirFill; ///< Reservoir fill time in milliseconds F32 tempRsrvr0ActualTrimmer; ///< Temperature actual reservoir in C. F32 tempFillMixAvgTrimmer; ///< Temperature fill mix average trimmer in C. F32 tempRsrvrEndFillTrimmer; ///< Temperature reservoir end fill trimmer in C. } RESERVOIR_DATA_T; // ********** public function prototypes ********** void initReservoirs( void ); void execReservoirs( void ); SELF_TEST_STATUS_T execReservoirsSelfTest( void ); void setActiveReservoirCmd( DG_RESERVOIR_ID_T resID ); // handle switch reservoirs command from HD void changeValveSettingCmd( DG_VALVE_SETTING_ID_T valveSettingID ); // handle valve setting change command from HD void startFillCmd( U32 fillToVolMl, F32 fillTargetFlowLPM ); // handle fill command from HD void stopFillCmd( void ); // handle stop fill command from HD void startDrainCmd( DRAIN_CMD_T drainCmd ); // handle drain command from HD void stopDrainCmd( void ); // handle stop drain command from HD void setHDOperationMode( U32 mode, U32 subMode ); void getHDOperationMode( HD_MODE_SUB_MODE_T* mode ); DG_RESERVOIR_ID_T getInactiveReservoir( void ); F32 getReservoirWeight( DG_RESERVOIR_ID_T reservoirId ); void setDialysateHeatingParameters( DG_CMD_DIALYSATE_HEATING_PARAMS_T params ); U32 getTargetFillVolumeML( void ); F32 getTargetFillFlowRateLPM( void ); F32 getPrimaryHeaterTargetTemperature( void ); F32 getReservoirCurrentTemperature( void ); F32 getTargetDialysateFlowLPM( void ); F32 getTrimmerHeaterTargetTemperature( void ); DG_RESERVOIR_VOLUME_RECORD_T getReservoirsCalRecord( void ); void getAcidConcentrateCalRecord( DG_ACID_CONCENTRATES_RECORD_T* acidRecord ); void getBicarbConcentrateCalRecord( DG_BICARB_CONCENTRATES_RECORD_T* bicarbRecord ); BOOL hasTargetFillVolumeBeenReached( DG_RESERVOIR_ID_T reservoirId ); BOOL hasTargetDrainVolumeBeenReached( DG_RESERVOIR_ID_T reservoirId, U32 timeout ); void tareLoadCellsAtEmpty( DG_RESERVOIR_ID_T reservoirId ); BOOL isReservoirTarePending( void ); void initDrainParameters( DG_RESERVOIR_ID_T reservoirId ); BOOL testSetDGActiveReservoirOverride( DG_RESERVOIR_ID_T value ); BOOL testResetDGActiveReservoirOverride( void ); BOOL testSetReservoirFillVolumeMlOverride( U32 value ); BOOL testResetReservoirFillVolumeMlOverride( void ); BOOL testSetReservoirDrainVolumeMlOverride( U32 value ); BOOL testResetReservoirDrainVolumeMlOverride( void ); BOOL testTareReservoir( U32 value ); BOOL testSetDialysateMixingRatios( F32 acid, F32 bicarb ); /**@}*/ #endif