Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r83310420ae862de4724f8cfbbaeda9936c47801b -r9c96ad1bd9f61a3c6f979aebb1d9ccf1ec5529d7 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 83310420ae862de4724f8cfbbaeda9936c47801b) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 9c96ad1bd9f61a3c6f979aebb1d9ccf1ec5529d7) @@ -22,6 +22,7 @@ #include "DDInterface.h" #include "ModePreTreat.h" #include "OperationModes.h" +#include "StatePreTxHeparinSetup.h" #include "StatePreTxRecirculate.h" #include "SyringePump.h" #include "Timers.h" @@ -39,16 +40,18 @@ 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. +static BOOL continueFromRecirculateRequested; ///< Flag indicating a request to transition to Confirm Rx state. +static BOOL continueFromHeparinSetupRequested; ///< Flag indicating a request to transition to Patient Connection state. // ********** private function prototypes ********** 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 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 /*********************************************************************//** @@ -63,9 +66,12 @@ { // Start a fresh Treatment Parameters session for this run. initTreatmentParameters(); + initPreTxHeparinSetup(); + currentPreTreatmentState = TD_PRE_TREATMENT_TUBING_SET_INSTALL_STATE; goToInstallStateRequested = FALSE; continueFromRecirculateRequested = FALSE; + continueFromHeparinSetupRequested = FALSE; } /*********************************************************************//** @@ -135,6 +141,10 @@ currentPreTreatmentState = handleRecirculateState(); break; + case TD_PRE_TREATMENT_HEPARIN_SETUP_STATE: + currentPreTreatmentState = handleHeparinSetupState(); + break; + case TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE: // currentPreTreatmentState = handlePatientConnectionState(); break; @@ -213,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; @@ -297,6 +307,30 @@ /*********************************************************************//** * @brief + * The handleHeparinSetupState function executes the Heparin Setup state of + * pre-treatment mode. + * @details \b Inputs: continueFromHeparinSetupRequested. + * @details \b Outputs: continueFromHeparinSetupRequested + * @return next Pre-Treatment mode state. + *************************************************************************/ +static TD_PRE_TREATMENT_MODE_STATE_T handleHeparinSetupState( void ) +{ + TD_PRE_TREATMENT_MODE_STATE_T state = TD_PRE_TREATMENT_HEPARIN_SETUP_STATE; + + execPreTxHeparinSetup(); + + if ( TRUE == continueFromHeparinSetupRequested ) + { + continueFromHeparinSetupRequested = FALSE; + state = TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; + + } + + return state; +} + +/*********************************************************************//** + * @brief * The handleRxState function executes the Confirm Rx pre-treatment step. * @details \b Inputs: none * @details \b Outputs: Requests transition to the next Pre-Treatment state when the prescription @@ -307,6 +341,8 @@ { BOOL paramsValid = getValidTreatParamsReceived(); BOOL paramsConfirmed = getTreatParamsConfirmed(); + BOOL heparinIsPrescribed = ( ( getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ) > 0.0F ) || + ( getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DELIVERY_RATE ) > 0.0F ) ) ? TRUE : FALSE; BOOL isDialysateGoodToDeliver = TRUE; // TODO replace TRUE with getDialysateGoodToDeliverStatus() when we are ready F32 bicarbConvFactor = BICARBONATE_CONVERSION_FACTOR; F32 presUFVolumeL = 0.0F; @@ -315,7 +351,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: Recirculate State + // Valid + confirmed – move to Heparin Setup or Patient Connection. if ( ( TRUE == paramsValid ) && ( TRUE == paramsConfirmed ) ) { // TODO this command of requesting dialysate delivery will move to appropriate state in pre-treatment once implemented @@ -331,11 +367,18 @@ getTreatmentParameterU32( TREATMENT_PARAM_SODIUM ), getTreatmentParameterU32( TREATMENT_PARAM_BICARBONATE ) ); } + if ( TRUE == heparinIsPrescribed ) + { + transitionToPreTxHeparinSetup(); + state = TD_PRE_TREATMENT_HEPARIN_SETUP_STATE; + } + else + { + state = TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; + } + } - state = TD_PRE_TREATMENT_RECIRCULATE_STATE; - } - - return state; + return state; } /*********************************************************************//** @@ -385,30 +428,61 @@ /*********************************************************************//** * @brief + * The PreTxRequestContinueFromHeparinSetupRequested function signals a request to + * transition the Pre-Treatment mode state machine to Patient Connection state. + * @details \b Inputs: none + * @details \b Outputs: continueFromHeparinSetupRequested + * @return none + *************************************************************************/ +void PreTxRequestContinueFromHeparinSetupRequested( void ) +{ + continueFromHeparinSetupRequested = TRUE; +} + +/*********************************************************************//** + * @brief * The signalAlarmActionToPreTreatmentMode function executes the given alarm action * as appropriate while in Pre-Treatment Mode. - * @details \b Inputs: currentPreTreatmentState - * @details \b Outputs: given alarm action executed - * @param action ID of alarm action to execute + * @details \b Inputs: currentPreTreatmentState and current Heparin Setup sub-state. + * @details \b Outputs: Alarm action handled for the active Pre-Treatment state. + * @param action ID of alarm action to execute. * @return none *************************************************************************/ void signalAlarmActionToPreTreatmentMode( ALARM_ACTION_T action ) { switch ( action ) { case ALARM_ACTION_STOP: - // TODO add logic once we have pre-treatment mode developed + // TODO add logic once we have pre-treatment mode developed. break; case ALARM_ACTION_RESUME: - if ( TD_PRE_TREATMENT_RECIRCULATE_STATE == currentPreTreatmentState ) - { + if ( TD_PRE_TREATMENT_RECIRCULATE_STATE == currentPreTreatmentState ) + { signalResumePreTxRecirculate(); - } - break; + } + else if ( TD_PRE_TREATMENT_HEPARIN_SETUP_STATE == currentPreTreatmentState ) + { + // Treat the Load Syringe alarm acknowledgment as syringe load + // confirmation only while awaiting user confirmation. Otherwise, + // resume the interrupted Heparin Setup state. + if ( TRUE == isPreTxHeparinAwaitingSyringeLoadConfirmation() ) + { + signalPreTxHeparinSyringeLoadConfirmed(); + } + else + { + signalResumePreTxHeparinSetup(); + } + } + else + { + // No action required. + } + break; default: - // do not handle other actions in pre-treatment mode + // Do not handle other actions in Pre-Treatment mode. break; } }