Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r1aedb1b649f6c427a6bf92b0e82486609bcfa698 -r8492830da5862d7eeaea89d30efb5ea5dcc22572 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 1aedb1b649f6c427a6bf92b0e82486609bcfa698) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 8492830da5862d7eeaea89d30efb5ea5dcc22572) @@ -21,6 +21,7 @@ #include "Bubbles.h" #include "Buttons.h" #include "Compatible.h" +#include "DDDefs.h" #include "DDInterface.h" #include "Messaging.h" #include "ModeInitPOST.h" @@ -47,18 +48,35 @@ #define USER_COMMAND_CANCEL 0 ///< Cancel treatment workflow command code. #define USER_COMMAND_INITIATE 1 ///< Initiate treatment workflow command code. +/// DD cleaning mode status data structure +typedef struct +{ + BOOL startCleaningMode; ///< Flag to indicate to start cleaning mode. + DD_COMMAND_T startRequestCmdID; ///< DD cleaning mode start request command ID. + ALARM_ID_T alarmID; ///< The informative alarm to trigger for each cleaning mode. + DD_OP_MODE_T ddOpMode; ///< DD operation mode. + BOOL sampleRqstTrgrd; ///< Flag to indicate the sample alarm has been triggered (for RO perm and chem flush). + GENERIC_CONFIRM_ID_T sampleRequestID; ///< Sample request pass/fail message status. + GENERIC_CONFIRM_ID_T stopRequestCmdID; ///< Stop DD cleaning request command ID +} DD_CLEANING_MODE_STATUS_T; + // ********** private data ********** static TD_STANDBY_STATE_T currentStandbyState; ///< Current state (sub-mode) of standby mode. static BOOL treatStartReqReceived; ///< Flag indicates user has requested initiation of a treatment. static BOOL homingInitiated; ///< Flag indicates actuators have been homed. static FLUID_TYPE_T fluidType; ///< Fluid type assigned based on user selection. static TREATMENT_TYPE_T modality; ///< Modality from the treatment initiation. +static BOOL heatDisinfectionStartConfirmed; +static DD_CLEANING_MODE_STATUS_T currentDDCleaningMode; ///< Current DD cleaning mode status. +static DD_COMMAND_T requestedDisinfectionCommand = DD_CMD_NONE; // ********** private function prototypes ********** static TD_STANDBY_STATE_T handleStandbyModeStartState( void ); static TD_STANDBY_STATE_T handleStandbyModeWaitForTreatmentState( void ); +static void setRequestedCleaningMode( DISINFECT_SELECTION_T opMode ); +static TD_STANDBY_STATE_T handleStandbyModeWaitForDisinfectState( void ); static void setStandbyStateTransition( void ); /*********************************************************************//** @@ -73,6 +91,7 @@ currentStandbyState = STANDBY_START_STATE; treatStartReqReceived = FALSE; homingInitiated = FALSE; + heatDisinfectionStartConfirmed = FALSE; fluidType = FLUID_TYPE_UNKNOWN; modality = TREATMENT_MODALITY_HD_SALINE_FLUID; } @@ -161,6 +180,29 @@ currentStandbyState = handleStandbyModeWaitForTreatmentState(); break; + case STANDBY_WAIT_FOR_DISINFECT_STATE: + currentStandbyState = handleStandbyModeWaitForDisinfectState(); + break; + + case STANDBY_WAIT_FOR_DD_CLEANING_MODE_TO_START_STATE: + if ( DD_MODE_HEAT == getDDOpMode() ) + { + currentStandbyState = STANDBY_CLEANING_MODE_IN_PROGRESS_STATE; + } + break; + + case STANDBY_CLEANING_MODE_IN_PROGRESS_STATE: + if ( ( DD_MODE_HEAT == getDDOpMode() ) && + ( DD_HEAT_DISINFECT_STATE_COMPLETE == getDDSubMode() ) ) + { + requestedDisinfectionCommand = DD_CMD_NONE; + heatDisinfectionStartConfirmed = FALSE; + + currentStandbyState = + STANDBY_WAIT_FOR_TREATMENT_STATE; + } + break; + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_STANDBY_INVALID_STATE, currentStandbyState ); currentStandbyState = STANDBY_START_STATE; @@ -215,7 +257,24 @@ homingInitiated = FALSE; state = STANDBY_WAIT_FOR_TREATMENT_STATE; } + switch ( requestedDisinfectionCommand ) + { + case DD_CMD_START_DISINFECT_SKIP: + state = STANDBY_WAIT_FOR_TREATMENT_STATE; + requestedDisinfectionCommand = DD_CMD_NONE; + break; + case DD_CMD_START_DISINFECT_HEAT: + state = STANDBY_WAIT_FOR_DISINFECT_STATE; + requestedDisinfectionCommand = DD_CMD_NONE; + break; + + default: + state = STANDBY_WAIT_FOR_TREATMENT_STATE; + requestedDisinfectionCommand = DD_CMD_NONE; + break; + } + return state; } @@ -310,6 +369,32 @@ /*********************************************************************//** * @brief + * The handleStandbyModeWaitForDisinfectState function handles wait for + * disinfect state. + * @details \b Inputs: flushStartReqReceived, heatDisinfectStartReqReceived, + * chemDisinfectStartReqReceived + * @details \b Outputs: none + * @return next state of the standby mode state machine + *************************************************************************/ +static TD_STANDBY_STATE_T handleStandbyModeWaitForDisinfectState( void ) +{ + TD_STANDBY_STATE_T state = STANDBY_WAIT_FOR_DISINFECT_STATE; + + if ( ( DD_CMD_START_DISINFECT_HEAT == requestedDisinfectionCommand ) && + ( TRUE == heatDisinfectionStartConfirmed ) ) + { + heatDisinfectionStartConfirmed = FALSE; + + cmdStartDDHeatDisinfect(); + + state = STANDBY_WAIT_FOR_DD_CLEANING_MODE_TO_START_STATE; + } + + return state; +} + +/*********************************************************************//** + * @brief * The setStandbyStateTransition function sets the actuators and variables * for Standby state transitions. * @details \b Inputs: newState @@ -363,6 +448,7 @@ break; } } + /*********************************************************************//** * @brief * The setFluidType function sets the fluid type based on the user's @@ -387,6 +473,36 @@ /*********************************************************************//** * @brief + * The setRequestedCleaningMode function sets the variables for the requested + * DD cleaning mode. + * @details \b Inputs: currentDDCleaningMode + * @details \b Outputs: none + * @param opMode DD operation mode that has been requested (i.e. heat disinfect) + * @param isHeatDisPassiveCool boolean flag to indicate whether this is a passive + * cool heat disinfect or not. + * @return none + *************************************************************************/ +static void setRequestedCleaningMode( DISINFECT_SELECTION_T opMode ) +{ + switch ( opMode ) + { + case DD_CMD_START_DISINFECT_SKIP: + break; + + case DD_CMD_START_DISINFECT_HEAT: + currentDDCleaningMode.startCleaningMode = TRUE; +// currentDDCleaningMode.startRequestCmdID = ( FALSE == isHeatDisPassiveCool ? DD_CMD_START_HEAT_DISINFECT_ACTIVE_COOL : DD_CMD_START_HEAT_DISINFECT_PASSIVE_COOL ); + currentDDCleaningMode.ddOpMode = DD_MODE_HEAT; + currentDDCleaningMode.sampleRqstTrgrd = FALSE; +// currentDDCleaningMode.alarmID = ALARM_ID_TD_DISINFECT_HEAT; +// currentDDCleaningMode.stopRequestCmdID = GENERIC_CONFIRM_ID_DISINFECT_STOP_HEAT; + break; + + } +} + +/*********************************************************************//** + * @brief * The getFluidType function returns the current fluid type assigned * based on the user's treatment selection. * @details \b Inputs: none @@ -584,7 +700,148 @@ } } +/*********************************************************************//** + * @brief + * The signalUserInitiateDisinfectionSelection function handles user initiation of flush + * mode. + * @details \b Inputs: currentStandbyState + * @details \b Outputs: currentStandbyState + * @return TRUE if signal accepted, FALSE if not + *************************************************************************/ +BOOL signalUserInitiateDisinfectionSelection( DISINFECT_SELECTION_T options ) +{ + BOOL result = FALSE; + if ( MODE_STAN == getCurrentOperationMode() ) + { + if ( STANDBY_WAIT_FOR_TREATMENT_STATE == currentStandbyState ) + { + if ( DISINFECT_SEL_SKIP == options ) + { + requestedDisinfectionCommand = DD_CMD_START_DISINFECT_SKIP; + currentStandbyState = STANDBY_WAIT_FOR_TREATMENT_STATE; + result = TRUE; + } + else if ( DISINFECT_SEL_HEAT == options ) + { + requestedDisinfectionCommand = DD_CMD_START_DISINFECT_HEAT; + currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; + result = TRUE; + } + } + else if ( ( STANDBY_WAIT_FOR_DISINFECT_STATE == currentStandbyState ) && + ( DD_CMD_START_DISINFECT_HEAT == options ) ) + { + // User confirmed Heat Disinfection setup screen. + heatDisinfectionStartConfirmed = TRUE; + result = TRUE; + } + } + else if ( MODE_POST == getCurrentOperationMode() ) + { + signalUserConfirmDisinfection( options ); + result = TRUE; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The handleDisinfectionConfirmCmd function handles user selection + * of the Post-Treatment disinfection operation. + * @details \b Inputs: Disinfection selection message. + * @details \b Outputs: Acceptance response and selected disinfection command. + * @param message Pointer to the message to handle. + * @return TRUE if the selection is accepted, FALSE otherwise. + *************************************************************************/ +BOOL handleDisinfectionConfirmCmd( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TD_OP_MODE_T mode = getCurrentOperationMode(); + UI_RESPONSE_PAYLOAD_T response; + + response.rejectionReason = REQUEST_REJECT_REASON_NONE; + + if ( sizeof( U32 ) == message->hdr.payloadLen ) + { + heatDisinfectionStartConfirmed = TRUE; + } + else + { + response.rejectionReason = + REQUEST_REJECT_REASON_INVALID_REQUEST_FORMAT; + } + + response.accepted = result; + + sendMessage( MSG_ID_TD_DISINFECT_RESPONSE, COMM_BUFFER_OUT_CAN_TD_2_UI, + (U08 *)&response, sizeof( UI_RESPONSE_PAYLOAD_T ) ); + + return result; +} + +/*********************************************************************//** + * @brief + * The signalStandbyDisinfectionSelection function saves the selected + * disinfection option for use by Standby mode. + * @details \b Inputs: Selected disinfection command. + * @details \b Outputs: Updates requestedDisinfectionCommand. + * @param command Selected disinfection command. + * @return none + *************************************************************************/ +void signalStandbyDisinfectionSelection( DD_COMMAND_T command ) +{ + requestedDisinfectionCommand = command; +} + +/*********************************************************************//** + * @brief + * The handleUIDisinfectRequest function handles a disinfect/flush user + * action command message from the UI. + * @details \b Inputs: none + * @details \b Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +BOOL handleUIDisinfectRequest( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TD_OP_MODE_T mode = getCurrentOperationMode(); + UI_RESPONSE_PAYLOAD_T response; + DISINFECT_SELECTION_T options = DISINFECT_SEL_SKIP; + + response.rejectionReason = REQUEST_REJECT_REASON_NONE; + if ( sizeof( U32 ) == message->hdr.payloadLen ) + { + memcpy( &options , &message->payload[ 0 ], sizeof(U32) ); + if ( TRUE == isDDCommunicating() ) + { + result = signalUserInitiateDisinfectionSelection( options ); + response.rejectionReason = + REQUEST_REJECT_REASON_NONE; + } + else + { + response.rejectionReason = + REQUEST_REJECT_REASON_DD_COMM_LOST; + } + } + else + { + response.rejectionReason = + REQUEST_REJECT_REASON_INVALID_REQUEST_FORMAT; + } + + response.accepted = result; + + sendMessage( MSG_ID_TD_DISINFECT_RESPONSE, COMM_BUFFER_OUT_CAN_TD_2_UI, + (U08 *)&response, sizeof( UI_RESPONSE_PAYLOAD_T ) ); + + return result; +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ Index: firmware/App/Modes/ModeStandby.h =================================================================== diff -u -rcaecaed1083ad192dfdc034cdee6084c7b8629d2 -r8492830da5862d7eeaea89d30efb5ea5dcc22572 --- firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision caecaed1083ad192dfdc034cdee6084c7b8629d2) +++ firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision 8492830da5862d7eeaea89d30efb5ea5dcc22572) @@ -20,6 +20,7 @@ #include "TDCommon.h" #include "TDDefs.h" +#include "DDDefs.h" /** * @defgroup TDStandbyMode TDStandbyMode @@ -47,6 +48,10 @@ BOOL signalUserInitiateTreatment( MESSAGE_T *message ); // User has initiated/cancelled treatment workflow void signalAlarmActionToStandbyMode( ALARM_ACTION_T action ); // Execute alarm action as appropriate for Standby mode +BOOL signalUserInitiateDisinfectionSelection( DISINFECT_SELECTION_T options ); +BOOL handleDisinfectionConfirmCmd( MESSAGE_T *message ); +void signalStandbyDisinfectionSelection( DD_COMMAND_T command ); +BOOL handleUIDisinfectRequest( MESSAGE_T *message ); void setFluidType( TREATMENT_TYPE_T modality ); // Set a specific fluid type FLUID_TYPE_T getFluidType( void ); // Get a specific fluid type Index: firmware/App/Modes/OperationModes.h =================================================================== diff -u -rde6b47e92a4bffac2ae7238aba9d522bda3ae4df -r8492830da5862d7eeaea89d30efb5ea5dcc22572 --- firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision de6b47e92a4bffac2ae7238aba9d522bda3ae4df) +++ firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 8492830da5862d7eeaea89d30efb5ea5dcc22572) @@ -7,8 +7,8 @@ * * @file OperationModes.h * -* @author (last) suresh -* @date (last) 05-Aug-2026 +* @author (last) Praneeth Bunne +* @date (last) 07-Aug-2026 * * @author (original) Sean Nash * @date (original) 01-Aug-2024 @@ -72,8 +72,9 @@ void setCurrent4thLevelState( U32 state ); // Set the current 4th level state. void sendOperationStatusEvent( void ); // Constructs and sends operation status event -BOOL handleUIConfirmationResponse( MESSAGE_T *message ); // Handles the confirmation response received from the UI +void handleConfirmationDialogTimeout( void ); // Handle timeout for confirmation dialog + BOOL testSetOperationMode( MESSAGE_T *message ); // Force transition to a given mode (if allowed) BOOL testSetOpModePublishIntervalOverride( MESSAGE_T *message ); // Override op mode data publish interval Index: firmware/App/Services/DDInterface.c =================================================================== diff -u -r1aedb1b649f6c427a6bf92b0e82486609bcfa698 -r8492830da5862d7eeaea89d30efb5ea5dcc22572 --- firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision 1aedb1b649f6c427a6bf92b0e82486609bcfa698) +++ firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision 8492830da5862d7eeaea89d30efb5ea5dcc22572) @@ -626,7 +626,28 @@ } } +/*********************************************************************//** + * @brief + * The cmdStartDDHeatDisinfect function sends a Heat Disinfection start + * request to the DD. + * @details \b Inputs: none + * @details \b Outputs: Heat Disinfection start request sent to DD. + * @return none + *************************************************************************/ +void cmdStartDDHeatDisinfect( void ) +{ + DD_COMMAND_T command = DD_CMD_START_DISINFECT_HEAT; + ddCmdResp[ DD_CMD_START_DISINFECT_HEAT ].commandID = DD_CMD_NONE; + +#ifndef TEST_UI_ONLY + sendMessage( MSG_ID_TD_DD_HEAT_DISINFECT_REQUEST, + COMM_BUFFER_OUT_CAN_TD_2_DD, + (U08 *)&command, sizeof( U32 ) ); +#endif +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ Index: firmware/App/Services/DDInterface.h =================================================================== diff -u -r1aedb1b649f6c427a6bf92b0e82486609bcfa698 -r8492830da5862d7eeaea89d30efb5ea5dcc22572 --- firmware/App/Services/DDInterface.h (.../DDInterface.h) (revision 1aedb1b649f6c427a6bf92b0e82486609bcfa698) +++ firmware/App/Services/DDInterface.h (.../DDInterface.h) (revision 8492830da5862d7eeaea89d30efb5ea5dcc22572) @@ -64,6 +64,7 @@ void cmdBypassDialyzer( BOOL bypass ); void cmdStopGenerateDialysate( void ); void cmdSubstitutionRate (F32 qs ); +void cmdStartDDHeatDisinfect( void ); void handleDDCommandResponse( DD_CMD_RESPONSE_T *ddCmdRespPtr ); BOOL getDDCommandResponse( U32 commandID, DD_CMD_RESPONSE_T *cmdRespPtr ); Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r2c16de14d2acd2aa1e36943f95c3855da094dc97 -r8492830da5862d7eeaea89d30efb5ea5dcc22572 --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 2c16de14d2acd2aa1e36943f95c3855da094dc97) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 8492830da5862d7eeaea89d30efb5ea5dcc22572) @@ -33,6 +33,7 @@ #include "LevelSensors.h" #include "Messaging.h" #include "ModeInitPOST.h" +#include "ModePostTreat.h" #include "ModePreTreat.h" #include "ModeStandby.h" #include "ModeTreatment.h" @@ -143,6 +144,10 @@ { MSG_ID_UI_BLOOD_PRESSURE_REQUEST, &bpModuleHandleVitalsRequest }, { MSG_ID_FFU_SIGNAL_TD_UPDATE_AVAILABLE, &handleUpdateAvailable }, { MSG_ID_UI_FLUID_BOLUS_REQUEST, &handleFluidBolusRequest }, + { MSG_ID_UI_DISINFECT_REQUEST, &handleUIDisinfectRequest }, + { MSG_ID_UI_PATIENT_DISCONNECT_CONFIRM_REQUEST, &handlePatientDisconnectionConfirmCmd }, + { MSG_ID_UI_POST_TREATMENT_DISPOSABLE_REMOVAL_CONFIRM_REQUEST, &handleDisposableRemovalConfirmCmd }, + { MSG_ID_TD_DISINFECT_RESPONSE, &handleDisinfectionConfirmCmd }, { MSG_ID_UI_RINSEBACK_CMD_REQUEST, &signalRinsebackUserAction }, { MSG_ID_UI_RECIRCULATE_REQUEST, &signalTreatmentRecircUserAction }, { MSG_ID_UI_GENERIC_CONFIRMATION_RESULT_RESPONSE, &handleUIConfirmation }, @@ -538,8 +543,8 @@ * @brief * The handleUIVersionResponse function handles a response to request for * UI version information. - * @details Inputs: none - * @details Outputs: none + * @details \b Inputs: none + * @details \b Outputs: none * @param message a pointer to the message to handle. * @return none *************************************************************************/ @@ -560,6 +565,51 @@ } /*********************************************************************//** + * @brief + * The handlePatientDisconnectionConfirmCmd function handles user + * confirmation of patient disconnection. + * @details \b Inputs: Patient disconnection confirmation message. + * @details \b Outputs: Acceptance response and patient disconnection signal. + * @param message Pointer to the message to handle. + * @return TRUE if the confirmation is accepted, FALSE otherwise. + *************************************************************************/ +BOOL handlePatientDisconnectionConfirmCmd( MESSAGE_T *message ) +{ + BOOL result = FALSE; + BOOL modeValid = FALSE; + TD_OP_MODE_T mode = getCurrentOperationMode(); + UI_RESPONSE_PAYLOAD_T response; + + response.rejectionReason = REQUEST_REJECT_REASON_NONE; + + if ( 0 == message->hdr.payloadLen ) + { + modeValid = ( MODE_POST == mode ) ? TRUE : FALSE; + + if ( ( TRUE != modeValid ) ) + { + response.rejectionReason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; + } + else + { + signalUserConfirmPatientDisconnection(); + result = TRUE; + } + } + else + { + response.rejectionReason = REQUEST_REJECT_REASON_INVALID_REQUEST_FORMAT; + } + + response.accepted = result; + sendMessage( MSG_ID_TD_PATIENT_DISCONNECT_CONFIRM_RESPONSE, + COMM_BUFFER_OUT_CAN_TD_2_UI, (U08*)(&response), + sizeof( UI_RESPONSE_PAYLOAD_T ) ); + + return result; +} + +/*********************************************************************//** * The sendPOSTFinalResult function sends the overall TD POST result * and queues the message for transmit on the appropriate CAN channel. * @details \b Message \b Sent: MSG_ID_TD_POST_FINAL_TEST_RESULT @@ -576,6 +626,55 @@ /*********************************************************************//** * @brief + * The handleDisposableRemovalConfirmCmd function handles user confirmation + * of disposable removal. + * @details \b Inputs: Disposable removal confirmation message. + * @details \b Outputs: Acceptance response and disposable removal signal. + * @param message Pointer to the message to handle. + * @return TRUE if the confirmation is accepted, FALSE otherwise. + *************************************************************************/ +BOOL handleDisposableRemovalConfirmCmd( MESSAGE_T *message ) +{ + BOOL result = FALSE; + BOOL modeValid = FALSE; + TD_OP_MODE_T mode = getCurrentOperationMode(); + UI_RESPONSE_PAYLOAD_T response; + + response.rejectionReason = REQUEST_REJECT_REASON_NONE; + + if ( 0 == message->hdr.payloadLen ) + { + modeValid = ( MODE_POST == mode ) ? TRUE : FALSE; + + if ( FALSE == modeValid ) + { + response.rejectionReason = + REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; + } + else + { + signalUserConfirmDisposableRemoval(); + result = TRUE; + } + } + else + { + response.rejectionReason = + REQUEST_REJECT_REASON_INVALID_REQUEST_FORMAT; + } + + response.accepted = result; + + sendMessage( MSG_ID_TD_POST_TREATMENT_DISPOSABLE_REMOVAL_CONFIRM_RESPONSE, + COMM_BUFFER_OUT_CAN_TD_2_UI, + (U08 *)&response, + sizeof( UI_RESPONSE_PAYLOAD_T ) ); + + return result; +} + +/*********************************************************************//** + * @brief * The handleUIConfirmationResponse function handles a UI response for a * confirmation request. * @details \b Inputs: none @@ -607,6 +706,7 @@ return result; } + // *********************************************************************** // ***************** Message Sending Helper Functions ******************** // *********************************************************************** Index: firmware/App/Services/Messaging.h =================================================================== diff -u -ra1f14a4e422f94b6bc25d1b91839761e7e1196d7 -r8492830da5862d7eeaea89d30efb5ea5dcc22572 --- firmware/App/Services/Messaging.h (.../Messaging.h) (revision a1f14a4e422f94b6bc25d1b91839761e7e1196d7) +++ firmware/App/Services/Messaging.h (.../Messaging.h) (revision 8492830da5862d7eeaea89d30efb5ea5dcc22572) @@ -144,6 +144,8 @@ BOOL handleTesterLogInRequest( MESSAGE_T *message ); BOOL handleUpdateAvailable( MESSAGE_T *message ); BOOL handleUIVersionResponse( MESSAGE_T *message ); +BOOL handlePatientDisconnectionConfirmCmd( MESSAGE_T *message ); +BOOL handleDisposableRemovalConfirmCmd( MESSAGE_T *message ); BOOL handleUIConfirmation( MESSAGE_T *message ); // Test send message helper functions