Index: firmware/App/Controllers/DGInterface.h =================================================================== diff -u -r1240b612f790f931825aba86ec37f37eccce9336 -r34e3a456e1d1bcf69b30253c99e59b636346176a --- firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision 1240b612f790f931825aba86ec37f37eccce9336) +++ firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision 34e3a456e1d1bcf69b30253c99e59b636346176a) @@ -1,17 +1,17 @@ /************************************************************************** * -* Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +* 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 DGInterface.h +* @file DGInterface.h * -* @author (last) Sean Nash -* @date (last) 05-Oct-2020 +* @author (last) Dara Navaei +* @date (last) 07-Mar-2023 * -* @author (original) Sean -* @date (original) 08-Apr-2020 +* @author (original) Sean +* @date (original) 08-Apr-2020 * ***************************************************************************/ @@ -31,133 +31,143 @@ */ // ********** public definitions ********** + +#define DEFAULT_TARGET_FILL_FLOW_RATE_LPM 0.8F ///< Default target fill flow rate in L/min. +#define DRAIN_RESERVOIR_TO_VOLUME_ML 0 ///< Drain reservoir to this volume (in mL) during treatment. +#define LOAD_CELL_PRIMARY_BACKUP_MAX_ALLOWED_DRIFT_GRAMS 10.0F ///< Reservoir load cell drift difference allowed +#define LOAD_CELL_ILLEGAL_WEIGHT_VALUE -10000.0F ///< Initial value for Load Cells, known bad value -#define DRAIN_RESERVOIR_TO_VOLUME_ML 0 ///< Drain reservoir to this volume (in mL) during treatment. -#define FILL_RESERVOIR_TO_VOLUME_ML 1700 ///< Fill reservoir to this volume (in mL) during treatment. -#define FILL_RESERVOIR_TO_VOLUME_LOW_FLOW_ML 1300 ///< Fill reservoir to this volume (in mL) during treatment if dialysate flow is slow. -#define SLOW_DIALYSATE_FLOW_ML_MIN 250 ///< Threshold for slow dialysate flow designation. - -/// Enumeration of DG pressure sensors. -typedef enum DG_PressureSensors -{ - DG_PRESSURE_SENSOR_RO_PUMP_INLET = 0, ///< RO pump pressure sensor - DG_PRESSURE_SENSOR_RO_PUMP_OUTLET, ///< RO pump pressure sensor - DG_PRESSURE_SENSOR_DRAIN_PUMP_INLET, ///< Drain pump inlet pressure - DG_PRESSURE_SENSOR_DRAIN_PUMP_OUTLET, ///< Drain pump outlet pressure - NUM_OF_DG_PRESSURE_SENSORS ///< Number of pressure sensors -} DG_PRESSURE_SENSORS_T; - -/// Payload record structure for an RO pump data message. +/// DG Concentrate ratios data structure. typedef struct { - U32 setPtPSI; ///< RO pump set target pressure - F32 measFlowRateMlMin; ///< RO pump measured flow rate in mL per min - F32 setPWMDutyCyclePct; ///< RO pump set PWM duty cycle percent -} DG_RO_PUMP_DATA_PAYLOAD_T; + F32 acidMixingRatio; ///< Acid mixing ratio + F32 bicarbMixingRatio; ///< Bicarb mixing ratio + U32 timeFillPrepMS; ///< Fill prepare time in milliseconds +} DG_MIXING_RATIOS_T; -/// Payload record structure for a drain pump data message. +/// Payload record structure for a reservoirs data message. typedef struct { - U32 setPtRPM; ///< Drain pump set RPM value - F32 setDAC; ///< Drain pump set DAC value -} DG_DRAIN_PUMP_DATA_PAYLOAD_T; + 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 + 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. +} DG_RESERVOIRS_DATA_PAYLOAD_T; -/// Payload record structure for a DG pressures data message. +/// Payload record structure for a drain reservoir command message. typedef struct { - F32 roInPSI; ///< DG inlet pressure in PSI - F32 roOutPSI; ///< DG outlet pressure in PSI - F32 drainInPSI; ///< DG drain inlet pressure in PSI - F32 drainOutPSI; ///< DG drain outlet pressure in PSI -} DG_PRESSURES_DATA_PAYLOAD_T; + 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; -/// Payload record structure for a reservoirs data message. +/// DG command response data record structure. 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 -} DG_RESERVOIRS_DATA_PAYLOAD_T; + 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; -/// Payload record structure for DG temperature sensors data message. -typedef struct +/// DG heat/chemical disinfects and flush state for UI structure. +typedef struct DG_Disinfects { - F32 TPi; ///< Inlet primary heaters temperature sensor - F32 TPo; ///< Outlet primary heaters temperature sensor - F32 TD1; ///< Conductivity sensor 1 temperature sensor - F32 TD2; ///< Conductivity sensor 2 temperature sensor - F32 TRo; ///< Outlet redundant temperature sensor - F32 TDi; ///< Inlet dialysate temperature sensor - F32 HtrPrimThermo; ///< Primary heaters internal temperature sensor - F32 HtrTrimThermo; ///< Trimmer heater internal temperature sensor - F32 HtrPrimColdJunc; ///< Primary heaters cold junction temperature sensor - F32 HtrTrimColdJunc; ///< Trimmer heater cold junction temperature sensor - F32 HtrPrimInternal; ///< Primary heaters internal temperature - F32 HtrTrimInternal; ///< Trimmer heater internal temperature -} DG_TEMPERATURES_T; + 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; -/// Payload record structure for a drain reservoir command message. +/// HD version of the DG service record typedef struct { - U32 drainToVolumeML; ///< Drain to target volume in ml - BOOL tareLoadCells; ///< Flag indicates to tare load cells or not -} DRAIN_RESERVOIR_CMD_PAYLOAD_T; + DG_SERVICE_RECORD_T dgServiceRecord; ///< HD version of the DG service record. + DG_USAGE_INFO_RECORD_T dgUsageInfo; ///< HD version of the DG usage info. + BOOL isDGServiceRecordAvailable; ///< Flag to indicate DG service record is available. + BOOL isDGUsageInfoAvailable; ///< Flag to indicate DG usage info is available. +} DG_SERVICE_AND_USAGE_DATA_T; -/// DG command response data record structure. +/// Dialysate heating parameters 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; + 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 initTreatmentReservoirMgmt( void ); -void dialysisResumed( void ); -void execTreatmentReservoirMgmt( 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 ); -F32 getDGPressure( DG_PRESSURE_SENSORS_T sensorID ); -U32 getDGROPumpPressureSetPt( void ); -F32 getDGROPumpFlowRateMlMin( void ); -U32 getDGDrainPumpRPMSetPt( 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 getReservoirBackupWeightLargeFilter( DG_RESERVOIR_ID_T resID ); +F32 getDialysateTemperature( void ); +F32 getHeatDisinfectTemperatureSensorValue( void ); +DG_DISINFECT_UI_STATES_T getDGDisinfectsStates( void ); +DG_MIXING_RATIOS_T getDGMixingRatios( void ); +void getHDVersionDGServiceAndUsageData( DG_SERVICE_AND_USAGE_DATA_T* data ); void setDGOpMode( U32 opMode, U32 subMode ); -void setDialysateTemperatureReadings( F32 temp1, F32 temp2 ); -void setDGDialysateTemperatures( F32 primaryHtrTemp, F32 trimmerHtrTemp ); +void setDialysateTemperatureReadings( F32 tdi, F32 tro, F32 thd ); void setDGReservoirsData( DG_RESERVOIR_ID_T resID, U32 fillVol, U32 drainVol ); -void setDGPressures( F32 roIn, F32 roOut, F32 drainIn, F32 drainOut ); -void setDGROPumpData( U32 presSetPt, F32 flowRate ); -void setDGDrainPumpData( U32 rpmSetPt ); +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 setDGHeatersData( HEATERS_DATA_T *data ); +void setHDVersionDGServiceRecord( DG_SERVICE_RECORD_T* data ); +void setHDVersionDGUsageInfo( DG_USAGE_INFO_RECORD_T* data ); -void cmdSetDGDialysateTargetTemps( F32 primaryHtrTemp, F32 trimmerHtrTemp ); +void cmdSetDGDialysateHeatingParams( DG_CMD_DIALYSATE_HEATING_PARAMS_T heatingParams ); void cmdStartDG( void ); void cmdStopDG( void ); -void cmdSetDGActiveReservoir( DG_RESERVOIR_ID_T resID ); +void cmdSetDGActiveReservoir( DG_SWITCH_RSRVRS_CMD_T *cmd ); void cmdChangeDGValveSetting( DG_VALVE_SETTING_ID_T valveSettingID ); -void cmdStartDGFill( U32 fillToVolMl ); -void cmdStopDGFill( void ); -void cmdStartDGDrain( U32 drainToVolMl, BOOL tareLoadCell ); +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 cmdSetDGToServiceMode( 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 );