Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rbe1f6ba8f58abfe098865c85ebca070eb0dde6ce -r679d535b77aa6722671084774ad5d96e9789e12e --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision be1f6ba8f58abfe098865c85ebca070eb0dde6ce) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 679d535b77aa6722671084774ad5d96e9789e12e) @@ -1,7 +1,25 @@ +/************************************************************************** +* +* Copyright (c) 2025-2025 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 ModePreTreat.c +* +* @author (last) Sean +* @date (last) 26-Nov-2025 +* +* @author (original) Sean +* @date (original) 17-Nov-2025 +* +***************************************************************************/ #include "ModePreTreat.h" #include "OperationModes.h" #include "Timers.h" +#include "TD_Defs.h" +#include "TxParams.h" /** * @addtogroup TDPreTreatmentMode @@ -12,58 +30,152 @@ // ********** private data ********** -static U32 testTimeRemove = 0; +static TD_PRE_TREATMENT_MODE_STATE_T currentPreTreatmentState = TD_PRE_TREATMENT_CONFIRM_RX_STATE; + // ********** private function prototypes ********** +static TD_PRE_TREATMENT_MODE_STATE_T handleRxState( void ); + + /*********************************************************************//** - * @brief - * The initPreTreatmentMode function initializes the Pre Treatment Mode unit. - * @details \b Inputs: none - * @details \b Outputs: Pre Treatment Mode unit initialized. - * @return none - *************************************************************************/ +* @brief +* The initPreTreatmentMode function initializes the Pre-Treatment mode. +* @details Inputs: none +* @details Outputs: Resets the Treatment Parameters session and sets the initial +* Pre-Treatment sub-state. +* @return none +**************************************************************************/ void initPreTreatmentMode( void ) { - testTimeRemove = 0; + currentPreTreatmentState = TD_PRE_TREATMENT_CONFIRM_RX_STATE; } /*********************************************************************//** - * @brief - * The transitionToPreTreatmentMode function prepares for transition to pre-treatment - * mode. - * @details \b Inputs: none - * @details \b Outputs: none - * @return initial state - *************************************************************************/ +* @brief +* The transitionToPreTreatmentMode function prepares the system for +* entry into Pre-Treatment mode. +* @details Inputs: none +* @details Outputs: Initializes mode specific state and returns the starting +* Pre-Treatment sub-state. +* @return Initial Pre-Treatment sub-state +**************************************************************************/ U32 transitionToPreTreatmentMode( void ) { initPreTreatmentMode(); - testTimeRemove = getMSTimerCount(); + return (U32)currentPreTreatmentState; +} - return 0; +/*********************************************************************//** + * @brief + * The execPreTreatmentMode function executes the Pre-Treatment + * mode state machine. + * @details Inputs: stop button status and system conditions via helpers. + * @details Outputs: Advances the Pre-Treatment sub-state and + * previously received user confirmations. + * @return current Pre-Treatment sub-state. + *************************************************************************/ +U32 execPreTreatmentMode( void ) +{ + BOOL stop = isStopButtonPressed(); + + if ( TRUE == stop ) + { + activateAlarmNoData( ALARM_ID_TD_TREATMENT_STOPPED_BY_USER ); + } + + // 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_CART_INSTALL_STATE: + // currentPreTreatmentState = handleInstallState(); + break; + + case TD_PRE_TREATMENT_SELF_TEST_DRY_STATE: + // currentPreTreatmentState = handleSelfTestDryState(); + break; + + case TD_PRE_TREATMENT_PRIME_STATE: + // currentPreTreatmentState = handlePrimeState(); + break; + + case TD_PRE_TREATMENT_RECIRCULATE_STATE: + // currentPreTreatmentState = handleRecirculateState(); + if ( TD_PRE_TREATMENT_RECIRCULATE_STATE != currentPreTreatmentState ) + { + currentPreTreatmentState = TD_PRE_TREATMENT_CONFIRM_RX_STATE; + } + break; + + case TD_PRE_TREATMENT_CONFIRM_RX_STATE: + // Confirm Rx step + currentPreTreatmentState = handleRxState(); + break; + + case TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE: + // currentPreTreatmentState = handlePatientConnectionState(); + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_PRE_TREATMENT_INVALID_STATE, (U32)currentPreTreatmentState ); + break; + } + + return (U32)currentPreTreatmentState; } /*********************************************************************//** * @brief - * The execPreTreatmentMode function executes the Pre Treatment Mode state machine. - * @details \b Alarm: TODO fill up once the exec function is complete - * the stop button - * @details \b Inputs: TODO fill up once the exec function is complete - * @details \b Outputs: TODO fill up once the exec function is complete - * @return current state (sub-mode) + * The handleRxState function executes the Confirm Rx pre-treatment step. + * @details + * - Reads validation / confirmation / rejection flags from TxParams. + * - If the user rejected the prescription, clears the Treatment + * Parameters session and stays in Confirm Rx. + * - If the prescription is valid and confirmed, advances to the + * Patient Connection state. + * - Otherwise remains in Confirm Rx while waiting for UI action. + * @return next pre-treatment mode sub-state. *************************************************************************/ -U32 execPreTreatmentMode( void ) +static TD_PRE_TREATMENT_MODE_STATE_T handleRxState( void ) { - if ( TRUE == didTimeout( testTimeRemove, 10000 ) ) // TODO temporary test code to just transition to treatment mode + BOOL paramsValid = getValidTreatParamsReceived(); + BOOL paramsConfirmed = getTreatParamsConfirmed(); + BOOL paramsRejected = getTreatParamsRejected(); + + TD_PRE_TREATMENT_MODE_STATE_T state = TD_PRE_TREATMENT_CONFIRM_RX_STATE; + + // User rejected – clear session and stay in Confirm Rx + if ( TRUE == paramsRejected ) { - requestNewOperationMode( MODE_TREA ); + resetTreatmentParameters(); + state = TD_PRE_TREATMENT_CONFIRM_RX_STATE; } - return 0; + // Valid + confirmed – move to next step: Patient Connection + else if ( ( TRUE == paramsValid ) && ( TRUE == paramsConfirmed ) ) + { + state = TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; + } + else + { + // Still waiting on UI – remain in Confirm Rx + state = TD_PRE_TREATMENT_CONFIRM_RX_STATE; + } + return state; } /**@}*/ -