Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rc27a2530b0cab5dc46459037c7ff7816b1a21dad -r9c96ad1bd9f61a3c6f979aebb1d9ccf1ec5529d7 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision c27a2530b0cab5dc46459037c7ff7816b1a21dad) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 9c96ad1bd9f61a3c6f979aebb1d9ccf1ec5529d7) @@ -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 "ModePreTreat.h" #include "OperationModes.h" #include "StatePreTxHeparinSetup.h" #include "StatePreTxRecirculate.h" +#include "SyringePump.h" #include "Timers.h" #include "TubeSetInstall.h" #include "TxParams.h" #include "Valves.h" +#include "Valve3Way.h" /** * @addtogroup TDPreTreatmentMode @@ -41,16 +45,14 @@ // ********** 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 handleHeparinSetupState( void ); ///< Handle Heparin Setup 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 Instll 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 handleHeparinSetupState( void ); ///< Handle Heparin Setup state during Pre-Treatment. +static TD_PRE_TREATMENT_MODE_STATE_T handlePatientConnectionState( void ); ///< Handle Patient Connection state during Pre-Treatment /*********************************************************************//** * @brief @@ -108,6 +110,7 @@ U32 execPreTreatmentMode( void ) { BOOL stop = isStopButtonPressed(); + TD_PRE_TREATMENT_MODE_STATE_T prevPreTreatmentState = currentPreTreatmentState; if ( TRUE == stop ) { @@ -117,18 +120,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; @@ -163,61 +154,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; + } } /*********************************************************************//** @@ -233,12 +223,12 @@ { TD_PRE_TREATMENT_MODE_STATE_T state = TD_PRE_TREATMENT_TUBING_SET_INSTALL_STATE; - // call tube set install service to auto-load tube set + // Call Tube Set Install Service to auto-load the tube set. execTubeSetInstall(); if ( TRUE == isTubeSetInstallComplete() ) { - state = TD_PRE_TREATMENT_SELF_TEST_DRY_STATE; + state = TD_PRE_TREATMENT_CONFIRM_RX_STATE; } return state; Index: firmware/App/Modes/StatePreTxHeparinSetup.c =================================================================== diff -u -rc27a2530b0cab5dc46459037c7ff7816b1a21dad -r9c96ad1bd9f61a3c6f979aebb1d9ccf1ec5529d7 --- firmware/App/Modes/StatePreTxHeparinSetup.c (.../StatePreTxHeparinSetup.c) (revision c27a2530b0cab5dc46459037c7ff7816b1a21dad) +++ firmware/App/Modes/StatePreTxHeparinSetup.c (.../StatePreTxHeparinSetup.c) (revision 9c96ad1bd9f61a3c6f979aebb1d9ccf1ec5529d7) @@ -284,6 +284,7 @@ } else if ( TRUE == isSyringePumpPreLoaded() ) { + activateAlarmNoData( ALARM_ID_UI_RESERVED_127 ); state = PRE_TX_HEPARIN_SETUP_AWAIT_SYRINGE_LOAD_CONFIRMATION_STATE; } Index: firmware/App/Services/AlarmMgmtTD.c =================================================================== diff -u -rcda13e3e3b9219fbac05354d8d1f8a25f45276cb -r9c96ad1bd9f61a3c6f979aebb1d9ccf1ec5529d7 --- firmware/App/Services/AlarmMgmtTD.c (.../AlarmMgmtTD.c) (revision cda13e3e3b9219fbac05354d8d1f8a25f45276cb) +++ firmware/App/Services/AlarmMgmtTD.c (.../AlarmMgmtTD.c) (revision 9c96ad1bd9f61a3c6f979aebb1d9ccf1ec5529d7) @@ -892,8 +892,8 @@ } } } - -/*********************************************************************//** + +/*********************************************************************//** * @brief * The getAlarmStartTime function gets the start time of a given alarm. * @details \b Alarm: ALARM_ID_TD_SOFTWARE_FAULT if given alarm ID is invalid.