Index: firmware/App/Modes/TreatmentRecirc.c =================================================================== diff -u -r6ab53b3ecf65c5dc2eb327977c4f96891bbd1c82 -rcd5be724d5a3ba7457e761191d82f278654d7f5c --- firmware/App/Modes/TreatmentRecirc.c (.../TreatmentRecirc.c) (revision 6ab53b3ecf65c5dc2eb327977c4f96891bbd1c82) +++ firmware/App/Modes/TreatmentRecirc.c (.../TreatmentRecirc.c) (revision cd5be724d5a3ba7457e761191d82f278654d7f5c) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2021-2023 Diality Inc. - All Rights Reserved. +* Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file TreatmentRecirc.c * * @author (last) Sean Nash -* @date (last) 05-Apr-2023 +* @date (last) 31-Jul-2023 * * @author (original) Sean Nash * @date (original) 20-Jan-2021 @@ -67,7 +67,6 @@ static BOOL handleRecircReconnectUserAction( REQUEST_REJECT_REASON_CODE_T *rejReason ); static BOOL handleRecicConfirmReconnectUserAction( REQUEST_REJECT_REASON_CODE_T *rejReason ); static BOOL handleRecircResumeUserAction( REQUEST_REJECT_REASON_CODE_T *rejReason ); -static BOOL handleRecircEndTreatmentUserAction( REQUEST_REJECT_REASON_CODE_T *rejReason ); static BOOL handleRecircConfirmDisconnectUserAction( REQUEST_REJECT_REASON_CODE_T *rejReason ); static void publishTreatmentRecircData( void ); @@ -82,7 +81,7 @@ *************************************************************************/ void initTreatmentRecirc( void ) { - treatmentRecircState = TREATMENT_RECIRC_RECIRC_STATE; + treatmentRecircState = TREATMENT_RECIRC_DISCONNECT_PATIENT_STATE; recircTimerCtr = 0; recircPublishTimerCtr = 0; resetTreatmentRecircFlags(); @@ -115,22 +114,24 @@ void transitionToTreatmentRecirc( void ) { initTreatmentRecirc(); - + setCurrentSubState( (U32)treatmentRecircState ); doorClosedRequired( TRUE, TRUE ); // Set valves to safe state setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); - setValvePosition( VBA, VALVE_POSITION_B_OPEN ); - setValvePosition( VBV, VALVE_POSITION_B_OPEN ); + setupForRecirculationStopState(); - // Start blood pump at re-circulate flow rate - setBloodPumpTargetFlowRate( RECIRC_BP_FLOW_RATE_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + // Enable venous bubble detection while recirculating + setVenousBubbleDetectionEnabled( TRUE ); + // Ensure syringe pump is stopped stopSyringePump(); - // Start air trap control - startAirTrapControl(); - // *Note - Dialysate pump should already be re-circulating from rinseback sub-mode + // Stop air trap leveling control + endAirTrapControl(); + // Re-circulate dialysate side of dialyzer w/ heating to maintain temperature + setDialInPumpTargetFlowRate( DIALYSATE_FLOW_RATE_FOR_RECIRC, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + cmdStartDGTrimmerHeater(); // Set user alarm recovery actions allowed in this sub-mode setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, FALSE ); @@ -154,8 +155,6 @@ setValvePosition( VBV, VALVE_POSITION_B_OPEN ); // Start blood pump at re-circulate flow rate setBloodPumpTargetFlowRate( RECIRC_BP_FLOW_RATE_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); - // Start air trap leveling control - startAirTrapControl(); } /*********************************************************************//** @@ -174,16 +173,14 @@ // Close arterial and venous lines setValvePosition( VBA, VALVE_POSITION_C_CLOSE ); setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); - // Stop air trap leveling control - endAirTrapControl(); } /*********************************************************************//** * @brief * The execTreatmentRecirc function executes the Treatment circulate sub-mode * state machine. * @details Inputs: treatmentRecircState - * @details Outputs: treatmentRecircState, recircTimerCtr + * @details Outputs: treatmentRecircState, recircTimerCtr, recircEndTreatmentRequested * @return none *************************************************************************/ void execTreatmentRecirc( void ) @@ -218,6 +215,7 @@ if ( priorSubState != treatmentRecircState ) { + setCurrentSubState( (U32)treatmentRecircState ); SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, treatmentRecircState ); } // Re-circulate flags should be handled by now - reset in case not handled by current state @@ -241,6 +239,7 @@ if ( TRUE == recircStartRecircRequested ) { + setupForRecirculationState(); result = TREATMENT_RECIRC_RECIRC_STATE; } @@ -373,7 +372,9 @@ break; case REQUESTED_USER_ACTION_TX_RECIRC_END_TREATMENT: - accepted = handleRecircEndTreatmentUserAction( &rejReason ); + // Send message to UI to get user confirmation to end treatment - action initiated only upon receipt of user confirmation from UI + addConfirmationRequest( GENERIC_CONFIRM_ID_TREATMENT_END, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0 ); + accepted = TRUE; break; case REQUESTED_USER_ACTION_TX_RECIRC_CONFIRM_DISCONNECT: @@ -439,7 +440,7 @@ { BOOL result = FALSE; - if ( TREATMENT_RECIRC_STOPPED_STATE == treatmentRecircState ) + if ( TREATMENT_RECIRC_RECONNECT_PATIENT_STATE == treatmentRecircState ) { result = TRUE; recircBackToTreatmenRequested = TRUE; @@ -466,7 +467,7 @@ { BOOL result = FALSE; - if ( TREATMENT_RECIRC_STOPPED_STATE == treatmentRecircState ) + if ( ( TREATMENT_RECIRC_STOPPED_STATE == treatmentRecircState ) || ( TREATMENT_RECIRC_RECONNECT_PATIENT_STATE == treatmentRecircState ) ) { result = TRUE; recircResumeRequested = TRUE; @@ -481,33 +482,6 @@ /*********************************************************************//** * @brief - * The handleRecircEndTreatmentUserAction function handles an end treatment - * user action request. It is assumed that the calling function will set - * the reject reason parameter to None beforehand. - * @details Inputs: treatmentRecircState - * @details Outputs: ending of treatment action handled - * @param rejReason Code indicating reason for rejection - * @return TRUE if user action accepted, FALSE if not - *************************************************************************/ -static BOOL handleRecircEndTreatmentUserAction( REQUEST_REJECT_REASON_CODE_T *rejReason ) -{ - BOOL result = FALSE; - - if ( ( TREATMENT_RECIRC_RECIRC_STATE == treatmentRecircState ) || ( TREATMENT_RECIRC_STOPPED_STATE == treatmentRecircState ) ) - { - result = TRUE; - recircEndTreatmentRequested = TRUE; - } - else - { - *rejReason = REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE; - } - - return result; -} - -/*********************************************************************//** - * @brief * The handleRecircConfirmDisconnectUserAction function handles a confirm * patient disconnect user action request. It is assumed that the calling * function will set the reject reason parameter to None beforehand.