Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -ra12f3ce494cd2a18aee31659c17d8a619fc70f7d -r4a38e66d5e72895a916cb9c31c1c7ca3b17cc6d9 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision a12f3ce494cd2a18aee31659c17d8a619fc70f7d) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 4a38e66d5e72895a916cb9c31c1c7ca3b17cc6d9) @@ -7,21 +7,24 @@ * * @file ModePreTreat.c * -* @author (last) Vijay Pamula -* @date (last) 23-May-2026 +* @author (last) Praneeth Bunne +* @date (last) 04-Jun-2026 * * @author (original) Dara Navaei * @date (original) 25-Sep-2025 * ***************************************************************************/ +#include "BloodFlow.h" #include "Buttons.h" #include "DDInterface.h" #include "ModePreTreat.h" #include "OperationModes.h" +#include "StatePreTxRecirculate.h" #include "Timers.h" #include "TubeSetInstall.h" #include "TxParams.h" +#include "Valves.h" /** * @addtogroup TDPreTreatmentMode @@ -32,6 +35,7 @@ static TD_PRE_TREATMENT_MODE_STATE_T currentPreTreatmentState; ///< Current Pre-Treatment sub-state static BOOL goToInstallStateRequested; ///< Flag indicating a request to transition to Install state. +static BOOL continueFromRecirculateRequested; ///< Flag indicating a request to transition to Patient Connection state. // ********** private function prototypes ********** @@ -59,6 +63,7 @@ initTreatmentParameters(); currentPreTreatmentState = TD_PRE_TREATMENT_TUBING_SET_INSTALL_STATE; goToInstallStateRequested = FALSE; + continueFromRecirculateRequested = FALSE; } /*********************************************************************//** @@ -75,6 +80,13 @@ initPreTreatmentMode(); initTubeSetInstall(); + // TODO: remove after implementing blood pump homing in some state + homeBloodPump(); + + // TODO: remove these homeValve() when SELF_TEST_NO_CART_STATE is implemented (homing valves is handled over there). + homeValve(H1_VALV, FALSE, FALSE); + homeValve(H19_VALV, FALSE, FALSE); + return (U32)currentPreTreatmentState; } @@ -123,15 +135,15 @@ // currentPreTreatmentState = handlePrimeState(); break; - case TD_PRE_TREATMENT_RECIRCULATE_STATE: - // currentPreTreatmentState = handleRecirculateState(); - break; - case TD_PRE_TREATMENT_CONFIRM_RX_STATE: // Confirm Rx state currentPreTreatmentState = handleRxState(); break; + case TD_PRE_TREATMENT_RECIRCULATE_STATE: + currentPreTreatmentState = handleRecirculateState(); + break; + case TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE: // currentPreTreatmentState = handlePatientConnectionState(); break; @@ -269,25 +281,35 @@ * @brief * The handleRecirculateState function executes the Recirculate state of * pre-treatment mode. - * @details \b Inputs: TODO fill up if any - * @details \b Outputs: TODO fill up if any + * @details \b Inputs: continueFromRecirculateRequested. + * @details \b Outputs: continueFromRecirculateRequested. * @return next Pre-Treatment mode state. *************************************************************************/ static TD_PRE_TREATMENT_MODE_STATE_T handleRecirculateState( void ) { TD_PRE_TREATMENT_MODE_STATE_T state = TD_PRE_TREATMENT_RECIRCULATE_STATE; - // TODO: Transition to Confirm RX state on completion when implemented - // state = TD_PRE_TREATMENT_CONFIRM_RX_STATE; + execPreTxRecirculate(); + if ( TRUE == continueFromRecirculateRequested ) + { + continueFromRecirculateRequested = FALSE; + + // TODO: Change to TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE + // when Patient Connection state is implemented. + // state = TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; + + requestNewOperationMode( MODE_TREA ); + } + return state; } /*********************************************************************//** * @brief * The handleRxState function executes the Confirm Rx pre-treatment step. * @details \b Inputs: none - * @details \b Outputs: Requests transition to Treatment mode when the prescription + * @details \b Outputs: Requests transition to the next Pre-Treatment state when the prescription * is valid and confirmed otherwise remains in Confirm Rx. * @return next Pre-Treatment mode state. *************************************************************************/ @@ -303,7 +325,7 @@ TD_PRE_TREATMENT_MODE_STATE_T state = TD_PRE_TREATMENT_CONFIRM_RX_STATE; DD_OP_MODE_T ddOpMode = getDDOpMode(); - // Valid + confirmed – move to next state: Patient Connection + // Valid + confirmed – move to next state: Recirculate State if ( ( TRUE == paramsValid ) && ( TRUE == paramsConfirmed ) ) { // TODO this command of requesting dialysate delivery will move to appropriate state in pre-treatment once implemented @@ -319,15 +341,11 @@ getTreatmentParameterU32( TREATMENT_PARAM_SODIUM ), getTreatmentParameterU32( TREATMENT_PARAM_BICARBONATE ) ); } - // TODO: when additional Pre-Treatment states are implemented, change to TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE. - // state = TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; - if ( ( ddOpMode == DD_MODE_GEND ) && ( TRUE == isDialysateGoodToDeliver ) ) - { - requestNewOperationMode( MODE_TREA ); - } - } - return state; + state = TD_PRE_TREATMENT_RECIRCULATE_STATE; + } + + return state; } /*********************************************************************//** @@ -364,9 +382,22 @@ /*********************************************************************//** * @brief + * The PreTxRequestContinueFromRecirculate function signals a request to + * transition the Pre-Treatment mode state machine to Patient Connection state. + * @details \b Inputs: none + * @details \b Outputs: continueFromRecirculateRequested + * @return none + *************************************************************************/ +void PreTxRequestContinueFromRecirculate( void ) +{ + continueFromRecirculateRequested = TRUE; +} + +/*********************************************************************//** + * @brief * The signalAlarmActionToPreTreatmentMode function executes the given alarm action * as appropriate while in Pre-Treatment Mode. - * @details \b Inputs: none + * @details \b Inputs: currentPreTreatmentState * @details \b Outputs: given alarm action executed * @param action ID of alarm action to execute * @return none @@ -379,6 +410,13 @@ // TODO add logic once we have pre-treatment mode developed break; + case ALARM_ACTION_RESUME: + if ( TD_PRE_TREATMENT_RECIRCULATE_STATE == currentPreTreatmentState ) + { + signalResumePreTxRecirculate(); + } + break; + default: // do not handle other actions in pre-treatment mode break;