Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -r3981c29f7244ab2c4e6b89624e34663303202c77 -r8b09199bae9870a8d63d4be9636ef66c849f8531 --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 3981c29f7244ab2c4e6b89624e34663303202c77) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 8b09199bae9870a8d63d4be9636ef66c849f8531) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2019-2022 Diality Inc. - All Rights Reserved. +* Copyright (c) 2019-2023 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) Dara Navaei -* @date (last) 08-Dec-2022 +* @author (last) Sean Nash +* @date (last) 02-Jan-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -45,36 +45,37 @@ /// Interval (ms/task time) at which the post-treatment state data is published on the CAN bus. #define POST_TREATMENT_DATA_PUB_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) -#define DIP_DRAIN_DG_FLOW_RATE_ML_MIN 60 ///< DG drain inlet pump flow rate in mL/min. -#define DIP_DRAIN_DG_RUNTIME_MS 20000 ///< DG drain inlet pump run time in ms. +#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. /// Post-Treatment drain reservoirs state machine. typedef enum Drain_States { - DRAIN_DG_DEPRIME_STATE = 0, ///< Drain DG De-prime dialysate lines of excess fluid state. - DRAIN_RESERVOIR_SWITCH_STATE, ///< Switch reservoir state. - DRAIN_RESERVOIR_START_DRAIN_STATE, ///< Drain reservoir start drain state. - DRAIN_RESERVOIR_DRAIN_STATE, ///< Drain first reservoir state. - DRAIN_RESERVOIR_COMPLETE_STATE, ///< Drain complete state. - NUM_OF_DRAIN_STATES ///< Number of drain states. + DRAIN_DG_DEPRIME_STATE = 0, ///< Drain DG De-prime dialysate lines of excess fluid state. + DRAIN_RESERVOIR_SWITCH_STATE, ///< Switch reservoir state. + DRAIN_RESERVOIR_START_DRAIN_STATE, ///< Drain reservoir start drain state. + DRAIN_RESERVOIR_DRAIN_STATE, ///< Drain first reservoir state. + DRAIN_RESERVOIR_COMPLETE_STATE, ///< Drain complete state. + NUM_OF_DRAIN_STATES ///< Number of drain states. } DRAIN_STATE_T; // ********** private data ********** -static BOOL patientDisconnectionConfirmed; ///< Flag indicates user confirms patient disconnection. -static BOOL disposableRemovalConfirmed; ///< Flag indicates user confirms disposable removal. -static BOOL rinseConcentrateLines; ///< FLag indicates to rinse concentrate lines. -static BOOL isThisFirstDrain; ///< Flag to indicate whether this is the first time the reservoir is drained. -static BOOL dgCommandSent; ///< Flag indicates whether a DG command has been already sent. -static BOOL drainDGDePrimeActive; ///< FLag to indicate DePrime DG Dialysate lines active -static U32 drainDGDePrimeStarttime; ///< DG DePrime start time -static HD_POST_TREATMENT_STATE_T currentPostTreatmentState; ///< Current state of post-treatment mode state machine. -static DRAIN_STATE_T currentDrainReservoirState; ///< Current drain reservoir state. -static U32 postTreatmentPublishTimerCounter; ///< Timer counter used to schedule post-treatment data broadcast. +static BOOL patientDisconnectionConfirmed; ///< Flag indicates user confirms patient disconnection. +static BOOL disposableRemovalConfirmed; ///< Flag indicates user confirms disposable removal. +static BOOL rinseConcentrateLines; ///< FLag indicates to rinse concentrate lines. +static BOOL isThisFirstDrain; ///< Flag to indicate whether this is the first time the reservoir is drained. +static BOOL drainDGDePrimeActive; ///< FLag to indicate DePrime DG Dialysate lines active +static U32 drainDGDePrimeStarttime; ///< DG DePrime start time +static BOOL dgCommandSent; ///< Flag indicates whether a DG command has been already sent. +static HD_POST_TREATMENT_STATE_T currentPostTreatmentState; ///< Current state of post-treatment mode state machine. +static DRAIN_STATE_T currentDrainReservoirState; ///< Current drain reservoir state. +static U32 postTreatmentPublishTimerCounter; ///< Timer counter used to schedule post-treatment data broadcast. + /// Interval (in task intervals) at which to publish post-treatment mode data to CAN bus. static OVERRIDE_U32_T postTreatmentModePublishInterval = { POST_TREATMENT_DATA_PUB_INTERVAL, POST_TREATMENT_DATA_PUB_INTERVAL, POST_TREATMENT_DATA_PUB_INTERVAL, 0 }; -static TREATMENT_LOG_DATA_PAYLOAD_T treatmentLogData; ///< Treatment parameters record for logging. +static TREATMENT_LOG_DATA_PAYLOAD_T treatmentLogData; ///< Treatment parameters record for logging. // ********** private function prototypes ********** @@ -170,6 +171,7 @@ U32 execPostTreatmentMode( void ) { BOOL stop = isStopButtonPressed(); + HD_POST_TREATMENT_STATE_T priorSubState = currentPostTreatmentState; switch ( currentPostTreatmentState ) { @@ -194,6 +196,11 @@ break; } + if ( priorSubState != currentPostTreatmentState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_MODE_CHANGE, priorSubState, currentPostTreatmentState ); + } + if ( ++postTreatmentPublishTimerCounter >= getU32OverrideValue( &postTreatmentModePublishInterval ) ) { POST_TREATMENT_STATE_DATA_T data; @@ -511,6 +518,8 @@ *************************************************************************/ static void execDrainReservoirs( void ) { + DRAIN_STATE_T priorSubState = currentDrainReservoirState; + switch ( currentDrainReservoirState ) { case DRAIN_DG_DEPRIME_STATE: @@ -537,6 +546,11 @@ SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_POST_TREATMENT_RESERVOIR_MGMT_INVALID_STATE, currentDrainReservoirState ); break; } + + if ( priorSubState != currentDrainReservoirState ) + { + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentDrainReservoirState ); + } } /*********************************************************************//**