Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r61c515bc5b8a9494ca25dbfcc2394f3a7b7c57e7 -r19476759e215857babf7ae7a69b32fdc08aef3d4 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 61c515bc5b8a9494ca25dbfcc2394f3a7b7c57e7) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 19476759e215857babf7ae7a69b32fdc08aef3d4) @@ -85,6 +85,7 @@ static BOOL endTreatmentAlarmResponseRequest; ///< Flag indicates user has requested treatment end. static BOOL rinsebackToStoppedRequest; ///< Flag indicates user has requested return to treatment from rinseback workflow. static BOOL rinsebackToEndTreatmentRequest; ///< Flag indicates user has requested end of treatment from rinseback workflow. +static BOOL rinsebackToRecircRequest; ///< Flag indicates user has requested to proceed to re-circulate sub-mode. static U32 pendingParamChangesTimer; ///< User required to confirm UF volume change within 1 minute. static F32 pendingUFVolumeChange; ///< An ultrafiltration volume change (mL) is pending user confirmation. @@ -150,6 +151,7 @@ endTreatmentAlarmResponseRequest = FALSE; rinsebackToStoppedRequest = FALSE; rinsebackToEndTreatmentRequest = FALSE; + rinsebackToRecircRequest = FALSE; } /*********************************************************************//** @@ -286,7 +288,7 @@ * The signalRinsebackToStopped function signals that user wants to return * to treatment from rinseback workflow. * @details Inputs: none - * @details Outputs: flag + * @details Outputs: rinsebackToStoppedRequest * @return none *************************************************************************/ void signalRinsebackToStopped( void ) @@ -299,7 +301,7 @@ * The signalRinsebackToEnd function signals that user wants to end the * treatment from rinseback workflow. * @details Inputs: none - * @details Outputs: flag + * @details Outputs: rinsebackToEndTreatmentRequest * @return none *************************************************************************/ void signalRinsebackToEnd( void ) @@ -309,6 +311,19 @@ /*********************************************************************//** * @brief + * The signalRinsebackToRecirc function signals that user wants to continue + * on to re-circulate portion of rinseback workflow. + * @details Inputs: none + * @details Outputs: rinsebackToRecircRequest + * @return none + *************************************************************************/ +void signalRinsebackToRecirc( void ) +{ + rinsebackToRecircRequest = TRUE; +} + +/*********************************************************************//** + * @brief * The execTreatmentMode function executes the Treatment Mode state machine. * @details Inputs: currentTreatmentState * @details Outputs: currentTreatmentState @@ -565,8 +580,14 @@ execRinseback(); - if ( TRUE == rinsebackToStoppedRequest ) + if ( TRUE == rinsebackToRecircRequest ) { + rinsebackToRecircRequest = FALSE; + transitionToTreatmentRecirc(); + result = TREATMENT_RECIRC_STATE; + } + else if ( TRUE == rinsebackToStoppedRequest ) + { rinsebackToStoppedRequest = FALSE; transitionToTreatmentStop(); result = TREATMENT_STOP_STATE; @@ -591,7 +612,7 @@ *************************************************************************/ static TREATMENT_STATE_T handleTreatmentRecircState( void ) { - TREATMENT_STATE_T result = TREATMENT_RINSEBACK_STATE; + TREATMENT_STATE_T result = TREATMENT_RECIRC_STATE; if ( TRUE == alarmStopSignalled ) { @@ -601,6 +622,19 @@ execTreatmentRecirc(); + if ( TRUE == rinsebackToStoppedRequest ) + { + rinsebackToStoppedRequest = FALSE; + transitionToTreatmentStop(); + result = TREATMENT_STOP_STATE; + } + else if ( TRUE == rinsebackToEndTreatmentRequest ) + { + rinsebackToEndTreatmentRequest = FALSE; + // TODO - transition to end state + result = TREATMENT_END_STATE; + } + return result; } Index: firmware/App/Modes/ModeTreatment.h =================================================================== diff -u -r61c515bc5b8a9494ca25dbfcc2394f3a7b7c57e7 -r19476759e215857babf7ae7a69b32fdc08aef3d4 --- firmware/App/Modes/ModeTreatment.h (.../ModeTreatment.h) (revision 61c515bc5b8a9494ca25dbfcc2394f3a7b7c57e7) +++ firmware/App/Modes/ModeTreatment.h (.../ModeTreatment.h) (revision 19476759e215857babf7ae7a69b32fdc08aef3d4) @@ -86,6 +86,7 @@ void signalAlarmActionToTreatmentMode( ALARM_ACTION_T action ); // Execute alarm action as appropriate for Treatment mode void signalRinsebackToStopped( void ); // Rinseback or Re-circ sub-mode is signaling to return to treatment stopped sub-mode void signalRinsebackToEnd( void ); // Rinseback or Re-circ sub-mode is signaling to end treatment +void signalRinsebackToRecirc( void ); // Rinseback sub-mode is signaling to move on to re-circ sub-mode TREATMENT_STATE_T getTreatmentState( void ); // Determine the current treatment sub-mode (state) BOOL getRinsebackCompleted( void ); // Determine whether a rinseback has been completed Index: firmware/App/Modes/Rinseback.c =================================================================== diff -u -r61c515bc5b8a9494ca25dbfcc2394f3a7b7c57e7 -r19476759e215857babf7ae7a69b32fdc08aef3d4 --- firmware/App/Modes/Rinseback.c (.../Rinseback.c) (revision 61c515bc5b8a9494ca25dbfcc2394f3a7b7c57e7) +++ firmware/App/Modes/Rinseback.c (.../Rinseback.c) (revision 19476759e215857babf7ae7a69b32fdc08aef3d4) @@ -169,7 +169,6 @@ case RINSEBACK_RUN_STATE: rinsebackState = handleRinsebackRunState(); - //setRinsebackIsCompleted( TRUE ); TODO - call in handler when rinseback is done break; case RINSEBACK_PAUSED_STATE: @@ -250,10 +249,21 @@ result = RINSEBACK_STOP_STATE; } // Has user or alarm requested rinseback pause? - else if ( ( TRUE == rinsebackStopRequested ) || ( TRUE == isAnyAlarmActive() ) ) + else if ( ( TRUE == pauseRinsebackRequested ) || ( TRUE == rinsebackStopRequested ) ) { + // TODO - BP off + // TODO - air trap control off + // TODO - VBA, VBV closed result = RINSEBACK_PAUSED_STATE; } + // Has user requested to end rinseback? + else if ( TRUE == endRinsebackRequested ) + { + // TODO - BP off + // TODO - air trap control off + // TODO - VBA, VBV closed + result = RINSEBACK_STOP_STATE; + } // Otherwise, continue rinseback else { // Has user requested rate change? @@ -280,9 +290,6 @@ return result; } -#define RINSEBACK_FLOW_RATE_ADJ_ML_MIN 25 ///< Adjustment amount (in mL/min) to apply when user requests increase/decrease in flow rate. -#define MIN_RINSEBACK_FLOW_RATE_ML_MIN 50 ///< Minimum rinseback flow rate (in mL/min). -#define MAX_RINSEBACK_FLOW_RATE_ML_MIN 150 ///< Maximum rinseback flow rate (in mL/min). /*********************************************************************//** * @brief @@ -296,6 +303,14 @@ { RINSEBACK_STATE_T result = RINSEBACK_PAUSED_STATE; + if ( TRUE == resumeRinsebackRequested ) + { + // TODO - VBA and VBV open + // TODO - BP on @ set rate + // TODO - air trap control on + result = RINSEBACK_RUN_STATE; + } + return result; } @@ -311,6 +326,12 @@ { RINSEBACK_STATE_T result = RINSEBACK_STOP_STATE; + // If user confirms ready to start re-circulate sub-mode, go there + if ( TRUE == recircRequested ) + { + signalRinsebackToRecirc(); + } + return result; } Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r49dba1e95bb3763b4c150e7a80b84a65264a7ca8 -r19476759e215857babf7ae7a69b32fdc08aef3d4 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 49dba1e95bb3763b4c150e7a80b84a65264a7ca8) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 19476759e215857babf7ae7a69b32fdc08aef3d4) @@ -28,11 +28,13 @@ #include "ModeStandby.h" #include "ModeTreatment.h" #include "ModeTreatmentParams.h" -#include "PresOccl.h" +#include "PresOccl.h" +#include "Rinseback.h" #include "RTC.h" #include "SafetyShutdown.h" #include "SystemComm.h" -#include "SystemCommMessages.h" +#include "SystemCommMessages.h" +#include "TreatmentRecirc.h" #include "Utilities.h" #include "Valves.h" #include "WatchdogMgmt.h"