Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r5413ebeb2cb61163574550c7b2ca212ae3e307a3 -r88696f3c6a5d82503064a73433d39fa000728d93 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 5413ebeb2cb61163574550c7b2ca212ae3e307a3) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 88696f3c6a5d82503064a73433d39fa000728d93) @@ -19,6 +19,7 @@ #include "ModePreTreat.h" #include "OperationModes.h" #include "Prime.h" +#include "SelfTests.h" #include "SystemCommMessages.h" /** @@ -46,14 +47,18 @@ static void handleAlarmActionStop( void ); static void handleAlarmActionResume( void ); +static HD_PRE_TREATMENT_MODE_STATE_T handleHomeSetupState( void ); static HD_PRE_TREATMENT_MODE_STATE_T handleSelfTestNoCartState( void ); +static HD_PRE_TREATMENT_MODE_STATE_T handleInstallState( void ); static HD_PRE_TREATMENT_MODE_STATE_T handleSelfTestDryState( void ); static HD_PRE_TREATMENT_MODE_STATE_T handlePrimeState( void ); static HD_PRE_TREATMENT_MODE_STATE_T handleRecirculateStartState( void ); static HD_PRE_TREATMENT_MODE_STATE_T handleRecirculateState( void ); static HD_PRE_TREATMENT_MODE_STATE_T handlePatientConnectionState( void ); static HD_PRE_TREATMENT_MODE_STATE_T handlePretreatmentPauseState( void ); +static BOOL getDoorState( void ); + /*********************************************************************//** * @brief * The initPreTreatmentMode function initializes the Pre-Treatment Mode module. @@ -108,15 +113,19 @@ break; case HD_PRE_TREATMENT_WATER_SAMPLE_STATE: - currentPreTreatmentState = HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE; + currentPreTreatmentState = HD_PRE_TREATMENT_HOME_SETUP_STATE; break; + case HD_PRE_TREATMENT_HOME_SETUP_STATE: + currentPreTreatmentState = handleHomeSetupState(); + break; + case HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE: currentPreTreatmentState = handleSelfTestNoCartState(); break; case HD_PRE_TREATMENT_CART_INSTALL_STATE: - currentPreTreatmentState = HD_PRE_TREATMENT_SELF_TEST_DRY_STATE; + currentPreTreatmentState = handleInstallState(); break; case HD_PRE_TREATMENT_SELF_TEST_DRY_STATE: @@ -282,31 +291,97 @@ } } + /*********************************************************************//** * @brief + * The handleHomeSetupState function waits for user to close door before + * transition to self-test no cartridge state. + * @details Inputs: none + * @details Outputs: transition to self-tests after door is closed + * @return current state (sub-mode) + *************************************************************************/ +static HD_PRE_TREATMENT_MODE_STATE_T handleHomeSetupState( void ) +{ + HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_HOME_SETUP_STATE; + VALVE_T valve; + + if ( TRUE == isBloodPumpRunning() ) + { + signalBloodPumpHardStop(); + } + + if ( TRUE == isDialInPumpRunning() ) + { + signalDialInPumpHardStop(); + } + + if ( TRUE == isDialOutPumpRunning() ) + { + signalDialOutPumpHardStop(); + } + + if ( TRUE == getDoorState() ) + { + for ( valve = VDI; valve < NUM_OF_VALVES; ++valve ) + { + homeValve( valve ); + } + + homeBloodPump(); + homeDialInPump(); + homeDialOutPump(); + + state = HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE; + } + else + { + activateAlarmNoData( ALARM_ID_CARTRIDGE_DOOR_OPENED ); + } + + return state; +} + +/*********************************************************************//** + * @brief * The handleSelfTestNoCartState function handles self-test with no cartridge. * @details Inputs: none * @details Outputs: home blood pump and dialysate pumps * @return current state (sub-mode) *************************************************************************/ static HD_PRE_TREATMENT_MODE_STATE_T handleSelfTestNoCartState( void ) { - // TODO: Prompt user to close door + HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE; - VALVE_T valve; + execNoCartSelfTests(); - for ( valve = VDI; valve < NUM_OF_VALVES; ++valve ) + if ( FALSE == getDoorState() ) { - homeValve( valve ); + state = HD_PRE_TREATMENT_HOME_SETUP_STATE; } - homeBloodPump(); - homeDialInPump(); - homeDialOutPump(); + if ( TRUE == isNoCartSelfTestsPassed() ) + { + state = HD_PRE_TREATMENT_CART_INSTALL_STATE; + } - // TODO: Prompt user to open door + return state; +} - return HD_PRE_TREATMENT_CART_INSTALL_STATE; +/*********************************************************************//** + * @brief + * The handleInstallState function handles disposable installation. + * @details Inputs: none + * @details Outputs: transition to prime sub-mode when blood pump finished homing + * @return current state (sub-mode) + *************************************************************************/ +static HD_PRE_TREATMENT_MODE_STATE_T handleInstallState( void ) +{ + HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_CART_INSTALL_STATE; + + // TODO: handle install verification and transition + state = HD_PRE_TREATMENT_SELF_TEST_DRY_STATE; + + return state; } /*********************************************************************//** @@ -318,7 +393,7 @@ *************************************************************************/ static HD_PRE_TREATMENT_MODE_STATE_T handleSelfTestDryState( void ) { - HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_CART_INSTALL_STATE; + HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_SELF_TEST_DRY_STATE; if ( FALSE == isBloodPumpRunning() ) { @@ -448,4 +523,17 @@ return state; } +/*********************************************************************//** + * @brief + * The getDoorState function gets the current state of door switch. + * @details Inputs: none + * @details Outputs: none + * @return TRUE if door is closed, otherwise FALSE + *************************************************************************/ +BOOL getDoorState( void ) +{ + // TODO: Get actual door state from FPGA or GPIO + return TRUE; +} + /**@}*/