Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r4ddf1777acc4298a9ed034e56b66916256d22c18 -r1cbf981dbed9d9f375c50edfef1d40819295ef2b --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 4ddf1777acc4298a9ed034e56b66916256d22c18) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 1cbf981dbed9d9f375c50edfef1d40819295ef2b) @@ -7,8 +7,8 @@ * * @file ModePreTreat.c * -* @author (last) Sean Nash -* @date (last) 15-Feb-2023 +* @author (last) Dara Navaei +* @date (last) 07-Mar-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -39,19 +39,22 @@ // ********** private definitions ********** /// Interval (ms/task time) at which the pre-treatment state data is published on the CAN bus. -#define PRE_TREATMENT_DATA_PUB_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) +#define PRE_TREATMENT_DATA_PUB_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) /// Wait time for ui to transition on completion of a sub-mode (ms/task time). -#define SUBMODE_COMPLETE_UI_TRANSITION_TIME_COUNT ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) -#define DIP_PATIENT_CONNECTION_FLOW_RATE_ML_MIN 250 ///< Patient connection sub-mode dialysate inlet pump flow rate in mL/min. +#define SUBMODE_COMPLETE_UI_TRANSITION_TIME_COUNT ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) +#define DIP_PATIENT_CONNECTION_FLOW_RATE_ML_MIN 250 ///< Patient connection sub-mode dialysate inlet pump flow rate in mL/min. +#define PRE_TREATMENT_HEATING_DIA_FLOW_ML_PER_MIN 600 ///< Pre treatment heating parameters dialysate flow in mL/min. +#define PRE_TREATMENT_FLUSH_FILL_TARGET_TEMP_C 45.0F ///< Pre treatment flush fill target temperature in C. +#define PRE_TREATMENT_NORMAL_FILL_TARGET_TEMP_C ( 37.0F + 2.0F ) ///< Pre treatment normal fill target temperature in C. -#define PRE_TREATMENT_MIN_FILL_RESERVOIR_VOLUME_ML 125 ///< Fill reservoir to this volume minimum to prep volume during development. -#define PRE_TREATMENT_FLUSH_RESERVOIR_VOLUME_ML 500 ///< Fill reservoir to this volume (in mL) to flush filter and lines. -#define PRE_TREATMENT_FILL_RESERVOIR_ONE_VOLUME_ML 1300 ///< Fill reservoir one to this volume (in mL) during pre-treatment mode. -#define PRE_TREATMENT_FILL_RESERVOIR_TWO_VOLUME_ML 600 ///< Fill reservoir two to this volume (in mL) during pre-treatment mode. -#define PRE_TREATMENT_FULL_RESERVOIR_VOLUME_ML 1500 ///< Fill reservoir to this volume minimum to prep volume during development. +#define PRE_TREATMENT_MIN_FILL_RESERVOIR_VOLUME_ML 125 ///< Fill reservoir to this volume minimum to prep volume during development. +#define PRE_TREATMENT_FLUSH_RESERVOIR_VOLUME_ML 500 ///< Fill reservoir to this volume (in mL) to flush filter and lines. +#define PRE_TREATMENT_FILL_RESERVOIR_ONE_VOLUME_ML 1300 ///< Fill reservoir one to this volume (in mL) during pre-treatment mode. +#define PRE_TREATMENT_FILL_RESERVOIR_TWO_VOLUME_ML 750 ///< Fill reservoir two to this volume (in mL) during pre-treatment mode. +#define PRE_TREATMENT_FULL_RESERVOIR_VOLUME_ML 1500 ///< Fill reservoir to this volume minimum to prep volume during development. -#define PRE_TREATMENT_FLUSH_COUNT 2 ///< Number of flush cycles for each reservoir. +#define PRE_TREATMENT_FLUSH_COUNT 2 ///< Number of flush cycles for each reservoir. typedef struct { @@ -129,6 +132,7 @@ static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtRequestReservoirSwitchState( void ); static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtWaitReservoirSwitchState( void ); static U32 getPreTreatmentFillVolume( DG_RESERVOIR_ID_T inactiveRes ); +static void setPreTreatmentHeatingParams( F32 targetTempC, U32 targetVolML, F32 targetFillFlowLPM, U32 dialysateFlowMLPM ); /*********************************************************************//** * @brief @@ -192,8 +196,9 @@ initPreTreatmentMode(); - // Set the heaters specs to start heating up the water - setDialysateHeatingParams(); + // Set the heating parameters to start the heaters + setPreTreatmentHeatingParams( PRE_TREATMENT_FLUSH_FILL_TARGET_TEMP_C, PRE_TREATMENT_FLUSH_RESERVOIR_VOLUME_ML, + DEFAULT_TARGET_FILL_FLOW_RATE_LPM, PRE_TREATMENT_HEATING_DIA_FLOW_ML_PER_MIN ); cmdStopDGTrimmerHeater(); @@ -1107,6 +1112,8 @@ DG_RESERVOIR_ID_T inactiveReservoir = getDGInactiveReservoir(); DG_OP_MODE_T dgOpMode = getDGOpMode(); U32 dgSubMode = getDGSubMode(); + U32 dialysateFlowMLPM = ( HD_PRE_TREATMENT_RECIRCULATE_STATE == currentPreTreatmentState ? DIP_PATIENT_CONNECTION_FLOW_RATE_ML_MIN : + PRE_TREATMENT_HEATING_DIA_FLOW_ML_PER_MIN ); if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) { @@ -1127,12 +1134,14 @@ ( TRUE == reservoirStatus[ inactiveReservoir ].startFlushFill ) ) { cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); + setPreTreatmentHeatingParams( PRE_TREATMENT_FLUSH_FILL_TARGET_TEMP_C, volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM, dialysateFlowMLPM ); state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; } else if ( ( TRUE == reservoirStatus[ inactiveReservoir ].flushComplete ) && ( TRUE == reservoirStatus[ inactiveReservoir ].startNormalFill ) ) { cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); + setPreTreatmentHeatingParams( PRE_TREATMENT_NORMAL_FILL_TARGET_TEMP_C, volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM, dialysateFlowMLPM ); state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; } } @@ -1364,6 +1373,32 @@ return volume; } +/*********************************************************************//** + * @brief + * The setPreTreatmentHeatingParams function calculates and set the heating + * parameters to be sent to DG. + * @details Inputs: none + * @details Outputs: none + * @param targetTempC target temperature in C + * @param targetVolML target fill volume in milliliters + * @param targetFillFlowLPM target fill flow rate in L/min + * @param dialysateFlowMLPM dialysate flow in mL/min + * @return none + *************************************************************************/ +static void setPreTreatmentHeatingParams( F32 targetTempC, U32 targetVolML, F32 targetFillFlowLPM, U32 dialysateFlowMLPM ) +{ + DG_CMD_DIALYSATE_HEATING_PARAMS_T params; + F32 fillTimeMS = ( (F32)targetVolML / ( targetFillFlowLPM * ML_PER_LITER ) ) * SEC_PER_MIN * MS_PER_SECOND; + + params.trimmerTargetTemperature = targetTempC; + params.timeReservoirWait2SwitchMS = 0; + params.timeReservoirFillMS = fillTimeMS; + params.timeReservoirCycleMS = (U32)fillTimeMS; + params.dialysateFlowLPM = ( (F32)dialysateFlowMLPM ) / ML_PER_LITER; + params.usePriTargetTempEquation = FALSE; + cmdSetDGDialysateHeatingParams( params ); +} + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/