/************************************************************************** * * 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 * @{ */ // ********** private definitions ********** // ********** private data ********** 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. * @details Inputs: none * @details Outputs: Resets the Treatment Parameters session and sets the initial * Pre-Treatment sub-state. * @return none **************************************************************************/ void initPreTreatmentMode( void ) { currentPreTreatmentState = TD_PRE_TREATMENT_CONFIRM_RX_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(); return (U32)currentPreTreatmentState; } /*********************************************************************//** * @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 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. *************************************************************************/ static TD_PRE_TREATMENT_MODE_STATE_T handleRxState( void ) { 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 ) { resetTreatmentParameters(); state = TD_PRE_TREATMENT_CONFIRM_RX_STATE; } // 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; } /**@}*/