Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rb3034747b23029d9ab2b63cf5029f0bf54cf7bb9 -rf9a4906ada0b1ff467c23eb1e44784e343bdeca8 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision b3034747b23029d9ab2b63cf5029f0bf54cf7bb9) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision f9a4906ada0b1ff467c23eb1e44784e343bdeca8) @@ -44,6 +44,7 @@ /// 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 PRE_TREATMENT_HEATING_DIA_FLOW_ML_PER_MIN 600 ///< Pre treatment heating parameters dialysate flow in mL/min. #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. @@ -129,6 +130,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( U32 targetVolML, F32 targetFillFlowLPM, U32 dialysateFlowMLPM ); /*********************************************************************//** * @brief @@ -192,9 +194,6 @@ initPreTreatmentMode(); - // Set the heaters specs to start heating up the water - setDialysateHeatingParams(); - cmdStopDGTrimmerHeater(); // Pumps should be off @@ -1107,6 +1106,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 +1128,14 @@ ( TRUE == reservoirStatus[ inactiveReservoir ].startFlushFill ) ) { cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); + setPreTreatmentHeatingParams( 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( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM, dialysateFlowMLPM ); state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; } } @@ -1364,6 +1367,31 @@ return volume; } +/*********************************************************************//** + * @brief + * The setPreTreatmentHeatingParams function calculates and set the heating + * parameters to be sent to DG. + * @details Inputs: none + * @details Outputs: none + * @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( 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 = getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ); + params.timeReservoirWait2SwitchMS = 0; + params.timeReservoirFillMS = fillTimeMS; + params.timeReservoirCycleMS = (U32)fillTimeMS; + params.dialysateFlowLPM = ( (F32)dialysateFlowMLPM ) / ML_PER_LITER; + + cmdSetDGDialysateHeatingParams( params ); +} + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/