/************************************************************************** * * Copyright (c) 2019-2021 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 DGInterface.h * * @author (last) Sean Nash * @date (last) 12-Nov-2021 * * @author (original) Sean * @date (original) 08-Apr-2020 * ***************************************************************************/ #ifndef __DG_H__ #define __DG_H__ #include "HDCommon.h" #include "DGDefs.h" /** * @defgroup DGInterface DGInterface * @brief DG interface/monitor module. Interfaces with and monitors the * DG (dialysate generator) sub-system. * * @addtogroup DGInterface * @{ */ // ********** public definitions ********** #define DEFAULT_TARGET_FILL_FLOW_RATE_LPM 0.8 ///< Default target fill flow rate in L/min. #define DRAIN_RESERVOIR_TO_VOLUME_ML 0 ///< Drain reservoir to this volume (in mL) during treatment. /// DG Concentrate ratios data structure. typedef struct { F32 acidMixingRatio; ///< Acid mixing ratio F32 bicarbMixingRatio; ///< Bicarb mixing ratio U32 timeFillPrepMS; ///< Fill prepare time in milliseconds } DG_MIXING_RATIOS_T; /// Dialysate flow meter data structure. typedef struct { F32 measuredDialysateFlowRate; ///< Dialysate flow meter rate average measurement } DIALYSATE_FLOW_METER_DATA_T; /// Payload record structure for a reservoirs data message. typedef struct { U32 resID; ///< Active reservoir ID U32 setFillToVolumeMl; ///< Reservoir set fill to target volume in ml U32 setDrainToVolumeMl; ///< Reservoir set drain to target volume in ml U32 timeReservoirCycleMS; ///< Reservoir time cycle in milliseconds U32 timeReservoirFill2SwitchMS; ///< Reservoir time fill to switch in milliseconds F32 timeUFDecayMS; ///< Ultrafilter decay time in milliseconds F32 tempUFFill; ///< Ultrafilter fill temperature in C F32 tempReservoirUseActual; ///< Reservoir actual use temperature in C F32 tempReservoirEndFill; ///< Reservoir end of the fill temperature in C F32 tempAvgFill; ///< Average fill temperature in C F32 tempLastFill; ///< Last fill temperature in C F32 timereservoirFillMS; ///< Reservoir fill time in milliseconds } DG_RESERVOIRS_DATA_PAYLOAD_T; /// Payload record structure for DG temperature sensors data message. typedef struct { F32 inletPrimaryHeater; ///< Inlet primary heater temperature sensor F32 outletPrimaryHeater; ///< Outlet primary heater temperature sensor F32 conductivitySensor1; ///< Conductivity sensor 1 temperature sensor F32 conductivitySensor2; ///< Conductivity sensor 2 temperature sensor F32 outletRedundant; ///< Outlet redundant temperature sensor F32 inletDialysate; ///< Inlet dialysate temperature sensor F32 primaryHeaterThermocouple; ///< Primary heaters thermocouple sensor F32 trimmerHeaterThermocouple; ///< Trimmer heater thermocouple sensor F32 priamyHeaterColdjunction; ///< Primary heaters cold junction temperature sensor F32 trimmerHeaterColdjunction; ///< Trimmer heater cold junction temperature sensor F32 primaryHeaterInternal; ///< Primary heaters internal temperature (calculated from thermocouple and cold junction) F32 trimmerHeaterInternal; ///< Trimmer heater internal temperature (calculated from thermocouple and cold junction) F32 fpgaBoard; ///< FPGA board temperature sensor F32 loadCellA1B1; ///< Load cell A1/B1 temperature sensor F32 loadCellA2B2; ///< Load cell A2/B2 temperature sensor F32 internalTHDORTD; ///< THDo RTD channel temperature sensor F32 internalTDIRTD; ///< TDI RTD channel temperature sensor F32 internalCondSnsrTemp; ///< Conductivity Sensor internal temperature sensor U32 primaryThermoCoupleRaw; ///< Primary heaters thermocouple raw ADC value U32 primaryColdjuncRaw; ///< Primary heaters cold junction raw ADC value U32 trimmerThermoCoupleRaw; ///< Trimmer heater thermocouple raw ADC value U32 trimmerColdjuncRaw; ///< Trimmer heater cold junction raw ADC value S32 cond1Raw; ///< Conductivity sensor 1 raw temperature ADC value S32 cond2Raw; ///< Conductivity sensor 2 raw temperature ADC value } TEMPERATURE_SENSORS_DATA_T; /// Payload record structure for a drain reservoir command message. typedef struct { U32 drainToVolumeML; ///< Drain to target volume in ml BOOL tareLoadCells; ///< Flag indicates to tare load cells or not BOOL rinseConcentrateLines; ///< Flag indicates to rinse concentrate lines or not BOOL cmd; ///< Flag indicates to start or stop the drain mode } DRAIN_RESERVOIR_CMD_PAYLOAD_T; /// DG command response data record structure. 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; /// DG heat/chemical disinfects and flush state for UI structure. typedef struct DG_Disinfects { U32 chemDisinfectUIState; ///< DG chemical disinfect UI state U32 heatDisinfectUIState; ///< DG heat disinfect UI state U32 flushUIState; ///< DG flush UI state } DG_DISINFECT_UI_STATES_T; /// Dialysate heating parameters typedef struct { F32 trimmerTargetTemperature; ///< Trimmer target temperature U32 timeReservoirCycleMS; ///< Reservoir cycle time in milliseconds F32 timeReservoirFillMS; ///< Reservoir fill time in milliseconds U32 timeReservoirWait2SwitchMS; ///< Reservoir wait to switch time in milliseconds F32 dialysateFlowLPM; ///< Dialysate flow in L/min } DG_CMD_DIALYSATE_HEATING_PARAMS_T; // ********** public function prototypes ********** void initDGInterface( void ); void execDGInterfaceMonitor( void ); void dialysisResumed( void ); DG_OP_MODE_T getDGOpMode( void ); U32 getDGSubMode( void ); DG_RESERVOIR_ID_T getDGActiveReservoir( void ); DG_RESERVOIR_ID_T getDGInactiveReservoir( void ); BOOL hasDGCompletedReservoirSwitch( void ); BOOL getDialysateFlowDataFreshFlag( void ); F32 getDGDialysateFlowRateLMin( void ); F32 getLoadCellWeight( LOAD_CELL_ID_T loadCellID ); F32 getReservoirWeight( DG_RESERVOIR_ID_T resID ); F32 getReservoirWeightLargeFilter( DG_RESERVOIR_ID_T resID ); F32 getDialysateTemperature( void ); DG_DISINFECT_UI_STATES_T getDGDisinfectsStates( void ); DG_MIXING_RATIOS_T getDGMixingRatios( void ); void setDGOpMode( U32 opMode, U32 subMode ); void setDialysateTemperatureReadings( F32 temp1, F32 temp2 ); void setDGReservoirsData( DG_RESERVOIR_ID_T resID, U32 fillVol, U32 drainVol ); void setDialysateFlowData( F32 flowRate ); void setNewLoadCellReadings( F32 res1Primary, F32 res1Backup, F32 res2Primary, F32 res2Backup ); void setDGDisinfectsStates( DG_DISINFECT_UI_STATES_T states ); void setDGMixingRatios( DG_MIXING_RATIOS_T ratios ); void cmdSetDGDialysateHeatingParams( DG_CMD_DIALYSATE_HEATING_PARAMS_T heatingParams ); void cmdStartDG( void ); void cmdStopDG( void ); void cmdSetDGActiveReservoir( DG_RESERVOIR_ID_T resID ); void cmdChangeDGValveSetting( DG_VALVE_SETTING_ID_T valveSettingID ); void cmdStartDGFill( U32 fillToVolMl, F32 targetFlowLPM ); void cmdStopDGFill( void ); void cmdStartDGDrain( U32 drainToVolMl, BOOL tareLoadCell, BOOL rinse, BOOL start ); void cmdStartDGTrimmerHeater( void ); void cmdStopDGTrimmerHeater( void ); void cmdDGSampleWater( SAMPLE_WATER_CMD_T cmd ); void cmdStartDGFlush( void ); void cmdStopDGFlush( void ); void cmdStartDGHeatDisinfect( void ); void cmdStopDGHeatDisinfect( void ); void cmdStartDGChemicalDisinfect( void ); void cmdStopDGChemicalDisinfect( void ); void cmdRequestDGMixingRatios( void ); void handleDGCommandResponse( DG_CMD_RESPONSE_T *dgCmdRespPtr ); BOOL getDGCommandResponse( U32 commandID, DG_CMD_RESPONSE_T *cmdRespPtr ); void checkDialysateTemperature( void ); BOOL testSetDialOutLoadCellWeightOverride( U32 sensor, F32 value ); BOOL testResetDialOutLoadCellWeightOverride( U32 sensor ); /**@}*/ #endif