Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r526e890e4e35fac0a622af538bf611ea15a30609 -re2cf7feff54dad3fc5be72619fa64b5421fc6f9f --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 526e890e4e35fac0a622af538bf611ea15a30609) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision e2cf7feff54dad3fc5be72619fa64b5421fc6f9f) @@ -7,8 +7,8 @@ * * @file ModePreTreat.c * -* @author (last) Dara Navaei -* @date (last) 11-Aug-2023 +* @author (last) Vinayakam Mani +* @date (last) 22-Aug-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[]