Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rfff7eb3560421130e0cd4788f84bce0a8ee7ff44 -rbbd48b033ef7307a30815e490eb28825c7afcc2b --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision fff7eb3560421130e0cd4788f84bce0a8ee7ff44) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision bbd48b033ef7307a30815e490eb28825c7afcc2b) @@ -8,24 +8,28 @@ * @file ModePreTreat.c * * @author (last) Vijay Pamula -* @date (last) 12-Jun-2026 +* @date (last) 14-Jul-2026 * * @author (original) Dara Navaei * @date (original) 25-Sep-2025 * ***************************************************************************/ +#include "AirPump.h" +#include "AirTrap.h" #include "BloodFlow.h" #include "Buttons.h" #include "DDInterface.h" #include "HemoDiaFiltration.h" #include "ModePreTreat.h" #include "OperationModes.h" #include "StatePreTxRecirculate.h" +#include "SyringePump.h" #include "Timers.h" #include "TubeSetInstall.h" #include "TxParams.h" #include "Valves.h" +#include "Valve3Way.h" /** * @addtogroup TDPreTreatmentMode @@ -40,15 +44,13 @@ // ********** private function prototypes ********** -static TD_PRE_TREATMENT_MODE_STATE_T handleWaterSampleState( void ); ///< Handle Water Sample state during Pre-Treatment -static TD_PRE_TREATMENT_MODE_STATE_T handleSelfTestConsumableState( void ); ///< Handle Self Test Consumable state during Pre-Treatment -static TD_PRE_TREATMENT_MODE_STATE_T handleSelfTestNoCartState( void ); ///< Handle Self Test No Cart state during Pre-Treatment -static TD_PRE_TREATMENT_MODE_STATE_T handleInstallState( void ); ///< Handle Install state during Pre-Treatment -static TD_PRE_TREATMENT_MODE_STATE_T handleSelfTestDryState( void ); ///< Handle Self Test Dry state during Pre-Treatment -static TD_PRE_TREATMENT_MODE_STATE_T handlePrimeState( void ); ///< Handle Prime state during Pre-Treatment -static TD_PRE_TREATMENT_MODE_STATE_T handleRecirculateState( void ); ///< Handle Recirculate state during Pre-Treatment -static TD_PRE_TREATMENT_MODE_STATE_T handleRxState( void ); ///< Handle Confirm Rx state during Pre-Treatment -static TD_PRE_TREATMENT_MODE_STATE_T handlePatientConnectionState( void ); ///< Handle Patient Connection state during Pre-Treatment +static void setPreTreatStateTransition( void ); ///< Configure actuators and variables for Pre-Treatment state transitions. +static TD_PRE_TREATMENT_MODE_STATE_T handleInstallState( void ); ///< Handle Install state during Pre-Treatment +static TD_PRE_TREATMENT_MODE_STATE_T handleSelfTestDryState( void ); ///< Handle Self Test Dry state during Pre-Treatment +static TD_PRE_TREATMENT_MODE_STATE_T handlePrimeState( void ); ///< Handle Prime state during Pre-Treatment +static TD_PRE_TREATMENT_MODE_STATE_T handleRecirculateState( void ); ///< Handle Recirculate state during Pre-Treatment +static TD_PRE_TREATMENT_MODE_STATE_T handleRxState( void ); ///< Handle Confirm Rx state during Pre-Treatment +static TD_PRE_TREATMENT_MODE_STATE_T handlePatientConnectionState( void ); ///< Handle Patient Connection state during Pre-Treatment /*********************************************************************//** * @brief @@ -103,6 +105,7 @@ U32 execPreTreatmentMode( void ) { BOOL stop = isStopButtonPressed(); + TD_PRE_TREATMENT_MODE_STATE_T prevPreTreatmentState = currentPreTreatmentState; if ( TRUE == stop ) { @@ -112,18 +115,6 @@ // Execute mode state machine switch ( currentPreTreatmentState ) { - case TD_PRE_TREATMENT_WATER_SAMPLE_STATE: - // currentPreTreatmentState = handleWaterSampleState(); - break; - - case TD_PRE_TREATMENT_SELF_TEST_CONSUMABLE_STATE: - // currentPreTreatmentState = handleSelfTestConsumableState(); - break; - - case TD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE: - // currentPreTreatmentState = handleSelfTestNoCartState(); - break; - case TD_PRE_TREATMENT_TUBING_SET_INSTALL_STATE: currentPreTreatmentState = handleInstallState(); break; @@ -154,61 +145,60 @@ break; } + if ( prevPreTreatmentState != currentPreTreatmentState ) + { + setPreTreatStateTransition(); + } + return (U32)currentPreTreatmentState; } /*********************************************************************//** - * @brief - * The handleWaterSampleState function executes the Water Sample state of - * pre-treatment mode. - * @details \b Inputs: TODO fill up if any - * @details \b Outputs: TODO fill up if any - * @return next Pre-Treatment mode state. - *************************************************************************/ -static TD_PRE_TREATMENT_MODE_STATE_T handleWaterSampleState( void ) +* @brief +* The setPreTreatStateTransition function sets the actuators and variables +* for the state transition in Pre-Treatment mode. +* @details \b Inputs: currentPreTreatmentState +* @details \b Outputs: Actuate valves, pumps as desired +* @return none +**************************************************************************/ +static void setPreTreatStateTransition( void ) { - TD_PRE_TREATMENT_MODE_STATE_T state = TD_PRE_TREATMENT_WATER_SAMPLE_STATE; + switch ( currentPreTreatmentState ) + { + case TD_PRE_TREATMENT_TUBING_SET_INSTALL_STATE: + // H4 and H5 are controlled by the Tube Set Install Service. + setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( H19_VALV, VALVE_POSITION_A_INSERT_EJECT ); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); + set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); + set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); + stopSyringePump(); + break; - // TODO: Transition to Self test consumable state on completion when implemented - // state = TD_PRE_TREATMENT_SELF_TEST_CONSUMABLE_STATE; + case TD_PRE_TREATMENT_SELF_TEST_DRY_STATE: + // TODO: actuator configuration + break; - return state; -} + case TD_PRE_TREATMENT_PRIME_STATE: + // TODO: actuator configuration + break; -/*********************************************************************//** - * @brief - * The handleSelfTestConsumableState function executes the Self Test - * Consumable state of pre-treatment mode. - * @details \b Inputs: TODO fill up if any - * @details \b Outputs: TODO fill up if any - * @return next Pre-Treatment mode state. - *************************************************************************/ -static TD_PRE_TREATMENT_MODE_STATE_T handleSelfTestConsumableState( void ) -{ - TD_PRE_TREATMENT_MODE_STATE_T state = TD_PRE_TREATMENT_SELF_TEST_CONSUMABLE_STATE; + case TD_PRE_TREATMENT_CONFIRM_RX_STATE: + // No action required. + break; - // TODO: Transition to Self test no cart state on completion when implemented - // state = TD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE; + case TD_PRE_TREATMENT_RECIRCULATE_STATE: + // No action required. + break; - return state; -} + case TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE: + // TODO: actuator configuration + break; -/*********************************************************************//** - * @brief - * The handleSelfTestNoCartState function executes the Self Test No Cart - * state of pre-treatment mode. - * @details \b Inputs: TODO fill up if any - * @details \b Outputs: TODO fill up if any - * @return next Pre-Treatment mode state. - *************************************************************************/ -static TD_PRE_TREATMENT_MODE_STATE_T handleSelfTestNoCartState( void ) -{ - TD_PRE_TREATMENT_MODE_STATE_T state = TD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE; - - // TODO: Transition to Tubing set install state on completion when implemented - // state = TD_PRE_TREATMENT_TUBING_SET_INSTALL_STATE; - - return state; + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_PRE_TREATMENT_INVALID_STATE, (U32)currentPreTreatmentState ); + break; + } } /*********************************************************************//**