Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -r5e6a92677f46658b7a47a0281a84307ad8edae90 -rcd5be724d5a3ba7457e761191d82f278654d7f5c --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 5e6a92677f46658b7a47a0281a84307ad8edae90) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.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 ModePostTreat.c * -* @author (last) Michael Garthwaite -* @date (last) 09-Jun-2023 +* @author (last) Dara Navaei +* @date (last) 03-Oct-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -48,6 +48,15 @@ #define DIP_DRAIN_DG_FLOW_RATE_ML_MIN 60 ///< DG drain inlet pump flow rate in mL/min. #define DIP_DRAIN_DG_RUNTIME_MS ( 40 * MS_PER_SECOND ) ///< DG drain inlet pump run time in ms. +// Concentrates values +#define ACID_1251_1_K 1.0F ///< Acid 1251_1 potassium concentrate. +#define ACID_2251_0_K 2.0F ///< Acid 2251_0 potassium concentrate. +#define ACID_3251_9_K 3.0F ///< Acid 3251_9 potassium concentrate. + +#define ACID_TYPES_CA 2.5F ///< Acid types calcium concentrate. +#define ACID_TYPES_BICARB 33 ///< Acid type bicarb concentrate. +#define ACID_TYPES_NA 137 ///< Acid type sodium concentrate. + /// Post-Treatment drain reservoirs state machine. typedef enum Drain_States { @@ -75,6 +84,10 @@ static TREATMENT_LOG_DATA_PAYLOAD_T treatmentLogData; ///< Treatment parameters record for logging. +static const F32 ACID_TYPES_K[ NUM_OF_ACID_CONC_TYPES ] = { ACID_1251_1_K, + ACID_2251_0_K, + ACID_3251_9_K }; ///< Acid types potassium. + // ********** private function prototypes ********** static HD_POST_TREATMENT_STATE_T handlePostTreatmentDrainReservoirsState( void ); @@ -233,6 +246,11 @@ treatmentLogData.acidConcentrate = getTreatmentParameterU32( TREATMENT_PARAM_ACID_CONCENTRATE ); treatmentLogData.bicarbConcentrate = getTreatmentParameterU32( TREATMENT_PARAM_BICARB_CONCENTRATE ); + treatmentLogData.potassiumConcentration = ACID_TYPES_K[ treatmentLogData.acidConcentrate ]; + treatmentLogData.calciumConcentration = ACID_TYPES_CA; + treatmentLogData.bicarbonateConcentration = ACID_TYPES_BICARB; + treatmentLogData.sodiumConcentration = ACID_TYPES_NA; + treatmentLogData.dialysateTemperature_degC = getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ); treatmentLogData.dialyzerType = getTreatmentParameterU32( TREATMENT_PARAM_DIALYZER_TYPE ); treatmentLogData.treatmentStartDateAndTime = getTreatmentStartTimeStamp(); @@ -312,6 +330,32 @@ /*********************************************************************//** * @brief + * The requestPostTxNext requests to go to next screen after treatment record + * review screen in post-treatment mode + * @details Inputs: currentPostTreatmentState + * @details Outputs: none + * @return none + *************************************************************************/ +void requestPostTxNext( void ) +{ + BOOL accepted = FALSE; + REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NONE; + + if ( currentPostTreatmentState >= HD_POST_TREATMENT_DISPOSABLE_REMOVAL_STATE ) + { + accepted = TRUE; + } + else + { + rejReason = REQUEST_REJECT_REASON_DRAIN_NOT_COMPLETE; + } + + // Respond to user request to move to next screen + sendPostTxNextCmdResponse( accepted, (U32)rejReason ); +} + +/*********************************************************************//** + * @brief * The signalUserConfirmDisposableRemoval signals post-treatment mode * user has confirmed disposable removal. * @details Inputs: none @@ -392,7 +436,7 @@ *************************************************************************/ static HD_POST_TREATMENT_STATE_T handlePostTreatmentDrainReservoirsState( void ) { - HD_POST_TREATMENT_STATE_T state = HD_POST_TREATMENT_DRAIN_RESERVOIRS_STATE; + HD_POST_TREATMENT_STATE_T state = HD_POST_TREATMENT_DRAIN_RESERVOIRS_STATE; execDrainReservoirs(); @@ -531,7 +575,19 @@ static void execDrainReservoirs( void ) { DRAIN_STATE_T priorSubState = currentDrainReservoirState; + DG_OP_MODE_T dgMode = getDGOpMode(); + if ( DG_MODE_STAN == dgMode ) + { // In case DG was reset/power cycled, re-start DG so we can drain the reservoirs + cmdStartDG(); + currentDrainReservoirState = DRAIN_RESERVOIR_SWITCH_STATE; + } + else if ( DG_MODE_FAUL == dgMode ) + { // In case DG faulted, skip DG drain states and move on + currentDrainReservoirState = DRAIN_RESERVOIR_COMPLETE_STATE; + } + + // Execute post-tx drain state machine switch ( currentDrainReservoirState ) { case DRAIN_RESERVOIR_SWITCH_STATE: @@ -573,9 +629,10 @@ *************************************************************************/ static DRAIN_STATE_T handleDrainReservoirSwitchState( void ) { - DRAIN_STATE_T state = DRAIN_RESERVOIR_SWITCH_STATE; + DRAIN_STATE_T state = DRAIN_RESERVOIR_SWITCH_STATE; + DG_OP_MODE_T dgMode = getDGOpMode(); - if ( ( DG_MODE_GENE == getDGOpMode() ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == getDGSubMode() ) ) + if ( ( DG_MODE_GENE == dgMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == getDGSubMode() ) ) { DG_CMD_RESPONSE_T dgCmdResp; @@ -609,10 +666,6 @@ } } } - else if ( DG_MODE_FAUL == getDGOpMode() ) - { - state = DRAIN_RESERVOIR_COMPLETE_STATE; - } return state; }