Index: firmware/App/Modes/Rinseback.c =================================================================== diff -u -r487d3524cbf3b50dad1308fc1f68b733cc00c4cd -r0bdf0c30f2c9ba6f8c90eafb89d33db38cb20722 --- firmware/App/Modes/Rinseback.c (.../Rinseback.c) (revision 487d3524cbf3b50dad1308fc1f68b733cc00c4cd) +++ firmware/App/Modes/Rinseback.c (.../Rinseback.c) (revision 0bdf0c30f2c9ba6f8c90eafb89d33db38cb20722) @@ -96,6 +96,7 @@ static RINSEBACK_STATE_T handleRinsebackPausedState( void ); static RINSEBACK_STATE_T handleRinsebackStoppedState( void ); static RINSEBACK_STATE_T handleRinsebackRunAdditionalState( void ); +static RINSEBACK_STATE_T handleRinsebackReconnectPatientState( void ); static BOOL handleStartRinsebackUserAction( REQUEST_REJECT_REASON_CODE_T *rejReason ); static BOOL handleIncrRinsebackUserAction( REQUEST_REJECT_REASON_CODE_T *rejReason ); @@ -309,6 +310,10 @@ rinsebackState = handleRinsebackRunAdditionalState(); break; + case RINSEBACK_RECONNECT_PATIENT_STATE: + rinsebackState = handleRinsebackReconnectPatientState(); + break; + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_RINSEBACK_INVALID_STATE, rinsebackState ); break; @@ -532,7 +537,7 @@ } else if ( TRUE == backToTreatmentRequested ) { - signalGoToTreatmentStopped(); + result = RINSEBACK_RECONNECT_PATIENT_STATE; } else if ( TRUE == endTreatmentRequested ) { @@ -606,6 +611,34 @@ /*********************************************************************//** * @brief + * The handleRinsebackReconnectPatientState function handles the rinseback + * reconnect patient state operations. + * @details Inputs: flags + * @details Outputs: flags handled + * @return next rinseback state + *************************************************************************/ +static RINSEBACK_STATE_T handleRinsebackReconnectPatientState( void ) +{ + RINSEBACK_STATE_T result = RINSEBACK_RECONNECT_PATIENT_STATE; + + if ( TRUE == resumeRinsebackRequested ) + { + result = RINSEBACK_STOP_STATE; + } + else if ( TRUE == backToTreatmentRequested ) + { + signalGoToTreatmentStopped(); + } + else if ( TRUE == endTreatmentRequested ) + { + signalEndTreatment(); + } + + return result; +} + +/*********************************************************************//** + * @brief * The signalRinsebackAlarmResumeUserAction function signals the rinseback * sub-mode to resume per user alarm action. * @details Inputs: none @@ -842,6 +875,11 @@ *rejReason = REQUEST_REJECT_REASON_TREATMENT_CANNOT_BE_RESUMED; } } + else if ( RINSEBACK_RECONNECT_PATIENT_STATE == rinsebackState ) + { + result = TRUE; + resumeRinsebackRequested = TRUE; + } else { *rejReason = REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE; @@ -968,7 +1006,9 @@ { *rejReason = REQUEST_REJECT_REASON_TREATMENT_CANNOT_BE_RESUMED; } - else if ( ( RINSEBACK_STOP_INIT_STATE != rinsebackState ) && ( RINSEBACK_STOP_STATE != rinsebackState ) ) + else if ( ( RINSEBACK_STOP_INIT_STATE != rinsebackState ) && + ( RINSEBACK_STOP_STATE != rinsebackState ) && + ( RINSEBACK_RECONNECT_PATIENT_STATE != rinsebackState ) ) { *rejReason = REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE; }