Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -reb42b9044be93465ac85bad69883ceabf2dd65fb -rcd5be724d5a3ba7457e761191d82f278654d7f5c --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision eb42b9044be93465ac85bad69883ceabf2dd65fb) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision cd5be724d5a3ba7457e761191d82f278654d7f5c) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2019-2023 Diality Inc. - All Rights Reserved. +* Copyright (c) 2019-2024 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 ModePreTreat.c * * @author (last) Sean Nash -* @date (last) 12-Jul-2023 +* @date (last) 30-Sep-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -110,7 +110,7 @@ #ifndef _RELEASE_ const PRE_TREATMENT_RESERVOIR_VAR_T reservoirPrimingDisabled = {FALSE,FALSE,FALSE,TRUE,FALSE,(0)}; #endif -const PRE_TREATMENT_RESERVOIR_VAR_T reservoirPretreatmentInit = {FALSE,FALSE,FALSE,FALSE,FALSE,PRE_TREATMENT_FLUSH_COUNT}; +const PRE_TREATMENT_RESERVOIR_VAR_T reservoirPretreatmentInit = {FALSE,FALSE,FALSE,FALSE,FALSE,PRE_TREATMENT_FLUSH_COUNT}; ///< Pretreatment reservoir fill plan record. // ********** private function prototypes ********** @@ -141,6 +141,7 @@ static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtFillCompleteState( void ); static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtRequestReservoirSwitchState( void ); static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtWaitReservoirSwitchState( void ); +static void handlePreTreatmentReservoirMgmtCompleteState( void ); static U32 getPreTreatmentFillVolume( DG_RESERVOIR_ID_T inactiveRes ); static void setPreTreatmentHeatingParams( F32 targetTempC, U32 targetVolML, F32 targetFillFlowLPM, U32 dialysateFlowMLPM ); @@ -1205,6 +1206,8 @@ break; case PRE_TREATMENT_RESERVOIR_MGMT_COMPLETE_STATE: + // retry the DG park concentrate pump request command if previous request was failed. + handlePreTreatmentReservoirMgmtCompleteState(); break; default: @@ -1527,6 +1530,9 @@ // Set the heating parameters setPreTreatmentHeatingParams( targetTempC, FILL_RESERVOIR_TO_VOLUME_ML, DEFAULT_TARGET_FILL_FLOW_RATE_LPM, dialysateFlowMLPM ); + // after reservoir fill at end of the pre-treatment, do park the concentrate pumps to maintain conductivity + // when treatment begins + cmdDGParkConcentratePumps(); state = PRE_TREATMENT_RESERVOIR_MGMT_COMPLETE_STATE; } else @@ -1541,6 +1547,30 @@ /*********************************************************************//** * @brief + * The handlePreTreatmentReservoirMgmtCompleteState function checks + * Park DG concentrate pump command request sent was successfully handled or not. + * on failure, retry the DG Concentrate pumps park command request. + * @details Inputs: DG park concentrate pump request command response + * @details Outputs: retry park command on failure + * @return none + *************************************************************************/ +static void handlePreTreatmentReservoirMgmtCompleteState( void ) +{ + DG_CMD_RESPONSE_T dgCmdResp; + + // Check DG response to park concentrate pumps command + if ( TRUE == getDGCommandResponse( DG_CMD_PARK_CONCENTRATE_PUMPS, &dgCmdResp ) ) + { + if ( DG_CMD_REQUEST_REJECT_REASON_NONE != dgCmdResp.rejectCode ) + { + // retry park concentrate pumps command request to DG + cmdDGParkConcentratePumps(); + } + } +} + +/*********************************************************************//** + * @brief * The getPreTreatmentFillVolume function determines which volume to fill * the inactive reservoir. * @details Inputs: reservoirStatus[]