Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r938fc2beedbb6153a2ac69c0d0c6b8abe209901d -ra94b796fe6fa9877b4c73169598a05fc43746adf --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 938fc2beedbb6153a2ac69c0d0c6b8abe209901d) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision a94b796fe6fa9877b4c73169598a05fc43746adf) @@ -15,6 +15,7 @@ * ***************************************************************************/ +#include "AlarmMgmt.h" #include "ModePreTreat.h" #include "OperationModes.h" #include "Prime.h" @@ -36,6 +37,8 @@ static PRE_TREATMENT_MODE_STATE_T handleSelfTestNoCartState( void ); static PRE_TREATMENT_MODE_STATE_T handleSelfTestDryState( void ); static PRE_TREATMENT_MODE_STATE_T handlePrimeState( void ); +static PRE_TREATMENT_MODE_STATE_T handleSelfTestWetState( void ); +static PRE_TREATMENT_MODE_STATE_T handleRecirculateState( void ); static PRE_TREATMENT_MODE_STATE_T handlePatientConnectionState( void ); /*********************************************************************//** @@ -109,11 +112,11 @@ break; case PRE_TREATMENT_SELF_TEST_WET_STATE: - currentPreTreatmentState = PRE_TREATMENT_RECIRCULATE_STATE; + currentPreTreatmentState = handleSelfTestWetState(); break; case PRE_TREATMENT_RECIRCULATE_STATE: - currentPreTreatmentState = PRE_TREATMENT_PATIENT_CONNECTION_STATE; + currentPreTreatmentState = handleRecirculateState(); break; case PRE_TREATMENT_PATIENT_CONNECTION_STATE: @@ -162,7 +165,11 @@ *************************************************************************/ void signalAlarmActionToPreTreatmentMode( ALARM_ACTION_T action ) { - // TODO - implement + if ( ( ALARM_ACTION_END_TREATMENT == action ) && ( TRUE == isAlarmActive( ALARM_ID_PRIME_COMPLETED_HIGH_PRIORITY ) ) ) + { + clearAlarm( ALARM_ID_PRIME_COMPLETED_HIGH_PRIORITY ); + requestNewOperationMode( MODE_POST ); + } } /*********************************************************************//** @@ -194,7 +201,7 @@ /*********************************************************************//** * @brief - * The handleSelfTestDryState function handles dry self-test. + * The handleSelfTestDryState function performs dry self-test. * @details Inputs: none * @details Outputs: transition to prime sub-mode when blood pump finished homing * @return current state (sub-mode) @@ -235,6 +242,53 @@ /*********************************************************************//** * @brief + * The handleSelfTestWetState function performs wet self-tests. + * @details Inputs: none + * @details Outputs: performed wet self-tests and transition to recirculate + * when everything passes + * @return current state (sub-mode) + *************************************************************************/ +static PRE_TREATMENT_MODE_STATE_T handleSelfTestWetState( void ) +{ + PRE_TREATMENT_MODE_STATE_T state = PRE_TREATMENT_SELF_TEST_WET_STATE; + + // TODO: Perform wet self-tests and collect result + BOOL isPassed = TRUE; + + if ( TRUE == isPassed ) + { + activateAlarmNoData( ALARM_ID_PRIME_COMPLETED_LOW_PRIORITY ); + state = PRE_TREATMENT_RECIRCULATE_STATE; + } + + return state; +} + +/*********************************************************************//** + * @brief + * The handleRecirculateState function handles blood and dialysate circuits + * recirculation state during pre-treatment mode. + * @details Inputs: none + * @details Outputs: controlled valves and pumps + * @return current state (sub-mode) + *************************************************************************/ +static PRE_TREATMENT_MODE_STATE_T handleRecirculateState( void ) +{ + PRE_TREATMENT_MODE_STATE_T state = PRE_TREATMENT_RECIRCULATE_STATE; + + if ( TRUE == treatStartReqReceived ) + { + clearAlarm( ALARM_ID_PRIME_COMPLETED_LOW_PRIORITY ); + clearAlarm( ALARM_ID_PRIME_COMPLETED_MEDIUM_PRIORITY ); + + state = PRE_TREATMENT_PATIENT_CONNECTION_STATE; + } + + return state; +} + +/*********************************************************************//** + * @brief * The handlePatientConnectionState function handles patient connection state * during pre-treatment mode. * @details Inputs: none