Index: firmware/App/HDCommon.h =================================================================== diff -u -rb0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11 -r101bf85b0b425e919b01b4b7fabcbd15fd5bbde5 --- firmware/App/HDCommon.h (.../HDCommon.h) (revision b0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11) +++ firmware/App/HDCommon.h (.../HDCommon.h) (revision 101bf85b0b425e919b01b4b7fabcbd15fd5bbde5) @@ -27,7 +27,7 @@ #define HD_VERSION_MICRO 5 #define HD_VERSION_BUILD 0 -// ********** build switches ********** +// ********** development build switches ********** #ifndef _RELEASE_ #define UF_TEST_ENABLED 1 // ultrafiltration test build (hard codes treatment params, re-purposes off/stop buttons) @@ -48,6 +48,7 @@ #define DISABLE_PUMP_DIRECTION_CHECKS 1 // do not error on HD pump direction checks #define DISABLE_PRESSURE_CHECKS 1 // do not error on HD pressure checks #define DISABLE_UF_ALARMS 1 // do not error on HD ultrafiltration checks + #define RUN_PUMPS_OPEN_LOOP 1 // BP and DPi pumps will be run open loop (no flow sensor feedback) // #define RAW_FLOW_SENSOR_DATA 1 // test build will not filter flow sensor data // #define READ_FPGA_ASYNC_DATA 1 // test build reads non-priority register page every other time // #define FLOW_DEBUG 1 // test build sends flow, signal strength, and occlusion readings to debug UART Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -rb0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11 -r101bf85b0b425e919b01b4b7fabcbd15fd5bbde5 --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision b0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 101bf85b0b425e919b01b4b7fabcbd15fd5bbde5) @@ -152,8 +152,13 @@ if ( TREATMENT_DIALYSIS_STATE == getTreatmentState() ) { +#ifndef RUN_PUMPS_OPEN_LOOP setBloodPumpTargetFlowRate( setBloodFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); setDialInPumpTargetFlowRate( setDialysateFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); +#else + setBloodPumpTargetFlowRate( setBloodFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialInPumpTargetFlowRate( setDialysateFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); +#endif setDialOutPumpTargetRate( setDialysateFlowRate + (S32)setUFRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); } } @@ -175,8 +180,13 @@ // send dialysate outlet pump latest UF volumes setDialOutUFVolumes( refUFVolume, measUFVolume ); // restart pumps +#ifndef RUN_PUMPS_OPEN_LOOP setBloodPumpTargetFlowRate( setBloodFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); setDialInPumpTargetFlowRate( setDialysateFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); +#else + setBloodPumpTargetFlowRate( setBloodFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialInPumpTargetFlowRate( setDialysateFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); +#endif setDialOutPumpTargetRate( setDialysateFlowRate + (S32)setUFRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); // TODO - Heparin pump // tell DG to start heating dialysate Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -ra1daba982e3117ce45437384e770b50cfda7b7a7 -r101bf85b0b425e919b01b4b7fabcbd15fd5bbde5 --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision a1daba982e3117ce45437384e770b50cfda7b7a7) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 101bf85b0b425e919b01b4b7fabcbd15fd5bbde5) @@ -61,8 +61,13 @@ { // temporary test code. TODO - remove later #ifndef UF_TEST_ENABLED +#ifndef RUN_PUMPS_OPEN_LOOP + setBloodPumpTargetFlowRate( 100, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_CLOSED_LOOP ); + setDialInPumpTargetFlowRate( 100, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_CLOSED_LOOP ); +#else setBloodPumpTargetFlowRate( 100, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_OPEN_LOOP ); setDialInPumpTargetFlowRate( 100, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_OPEN_LOOP ); +#endif setDialOutPumpTargetRate( 100, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_OPEN_LOOP ); #else #endif Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r04f72c18f15a3d7ab960fccea7b99cf93fd9a409 -r101bf85b0b425e919b01b4b7fabcbd15fd5bbde5 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 04f72c18f15a3d7ab960fccea7b99cf93fd9a409) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 101bf85b0b425e919b01b4b7fabcbd15fd5bbde5) @@ -61,8 +61,13 @@ { // temporary test code. TODO - remove later #ifndef UF_TEST_ENABLED +#ifndef RUN_PUMPS_OPEN_LOOP setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); setDialInPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); +#else + setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + setDialInPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); +#endif setDialOutPumpTargetRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); #else #endif Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -ra1daba982e3117ce45437384e770b50cfda7b7a7 -r101bf85b0b425e919b01b4b7fabcbd15fd5bbde5 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision a1daba982e3117ce45437384e770b50cfda7b7a7) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 101bf85b0b425e919b01b4b7fabcbd15fd5bbde5) @@ -178,6 +178,11 @@ break; case STANDBY_WAIT_FOR_TREATMENT_STATE: + if ( TRUE == treatStartReqReceived ) + { + requestNewOperationMode( MODE_TPAR ); + treatStartReqReceived = FALSE; + } // TODO - test code if ( TRUE == stop ) { @@ -305,6 +310,7 @@ treatStartReqReceived = TRUE; result = TRUE; } + sendTreatmentStartResponseMsg( result, 0 ); // TODO - provide reason code if rejected return result; } Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -rb0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11 -r101bf85b0b425e919b01b4b7fabcbd15fd5bbde5 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision b0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 101bf85b0b425e919b01b4b7fabcbd15fd5bbde5) @@ -73,6 +73,8 @@ static BUTTON_STATE_T lastOffButtonState = BUTTON_STATE_RELEASED; // TODO - test code - remove later +static BOOL pendingUserEndTreatmentRequest; ///< Flag indicates user has requested treatment end. + 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. static F32 pendingUFRateChange; ///< An ultrafiltration rate change (mL/min) is pending user confirmation. @@ -109,6 +111,8 @@ presMaxUFVolumeML = 0.0; presUFRate = 0.0; + pendingUserEndTreatmentRequest = FALSE; + pendingParamChangesTimer = 0; pendingUFVolumeChange = 0.0; pendingUFRateChange = 0.0; @@ -133,8 +137,13 @@ initTreatmentStop(); // temporary test code. TODO - remove later #ifndef UF_TEST_ENABLED +#ifndef RUN_PUMPS_OPEN_LOOP + setBloodPumpTargetFlowRate( 400, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_CLOSED_LOOP ); + setDialInPumpTargetFlowRate( 400, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_CLOSED_LOOP ); +#else setBloodPumpTargetFlowRate( 400, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_OPEN_LOOP ); setDialInPumpTargetFlowRate( 400, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_OPEN_LOOP ); +#endif setDialOutPumpTargetRate( 400, MOTOR_DIR_REVERSE, PUMP_CONTROL_MODE_OPEN_LOOP ); #endif #ifdef RM46_EVAL_BOARD_TARGET @@ -158,6 +167,29 @@ /*********************************************************************//** * @brief + * The userRequestEndTreatment function conveys a user request to end the + * treatment. + * @details + * Inputs : currentTreatmentState + * Outputs : response to user request sent + * @return TRUE if request accepted, FALSE if not + *************************************************************************/ +BOOL userRequestEndTreatment( void ) +{ + BOOL result = FALSE; + + if ( TREATMENT_STOP_STATE == currentTreatmentState ) + { + pendingUserEndTreatmentRequest = TRUE; + result = TRUE; + } + sendTreatmentEndResponseMsg( result ); + + return result; +} + +/*********************************************************************//** + * @brief * The execTreatmentMode function executes the Treatment Mode state machine. * @details * Inputs : currentTreatmentState @@ -341,8 +373,16 @@ { TREATMENT_STATE_T result = TREATMENT_STOP_STATE; - // execute state machine for treatment stop sub-mode - execTreatmentStop(); + // if user requests treatment end, end treatment + if ( TRUE == pendingUserEndTreatmentRequest ) + { + result = TREATMENT_END_STATE; + } + else + { + // execute state machine for treatment stop sub-mode + execTreatmentStop(); + } // TODO - test code - remove later if ( getOffButtonState() == BUTTON_STATE_PRESSED ) Index: firmware/App/Modes/ModeTreatment.h =================================================================== diff -u -rde5a0d43bdef611d963d11855bc958a8d8899a09 -r101bf85b0b425e919b01b4b7fabcbd15fd5bbde5 --- firmware/App/Modes/ModeTreatment.h (.../ModeTreatment.h) (revision de5a0d43bdef611d963d11855bc958a8d8899a09) +++ firmware/App/Modes/ModeTreatment.h (.../ModeTreatment.h) (revision 101bf85b0b425e919b01b4b7fabcbd15fd5bbde5) @@ -40,6 +40,8 @@ TREATMENT_STATE_T getTreatmentState( void ); +BOOL userRequestEndTreatment( void ); + BOOL verifyTreatmentDurationSettingChange( U32 treatmentTime ); BOOL verifyUFSettingsChange( F32 uFVolume ); BOOL verifyUFSettingsConfirmation( F32 uFVolume, U32 adjustment ); Index: firmware/App/Modes/ModeTreatmentParams.c =================================================================== diff -u -rb0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11 -r101bf85b0b425e919b01b4b7fabcbd15fd5bbde5 --- firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision b0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11) +++ firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision 101bf85b0b425e919b01b4b7fabcbd15fd5bbde5) @@ -206,6 +206,7 @@ treatmentCancelled = TRUE; result = TRUE; } + sendTreatmentStartResponseMsg( result, 0 ); // TODO - provide reason code if rejected return result; } @@ -239,7 +240,7 @@ break; default: - // TODO - s/w fault + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_STATE, (U32)currentTreatmentParamsState ) break; } @@ -347,7 +348,7 @@ *************************************************************************/ BOOL validateAndSetTreatmentParameters( TREATMENT_PARAMS_DATA_PAYLOAD_T params ) { - BOOL paramsAreValid = FALSE; + BOOL paramsAreInvalid = TRUE; BOOL paramsAreInRange, paramsAreConsistent; U32 rejReasons[ NUM_OF_TREATMENT_PARAMS ]; @@ -363,14 +364,14 @@ // determine overall validity of received treatment parameters if ( ( TRUE == paramsAreInRange ) && ( TRUE == paramsAreConsistent ) ) { - paramsAreValid = TRUE; + paramsAreInvalid = FALSE; validTreatParamsReceived = TRUE; } // respond to set treatment parameters request message - sendTreatmentParamsResponse( paramsAreValid, &rejReasons[0] ); + sendTreatmentParamsResponse( paramsAreInvalid, &rejReasons[0] ); - return paramsAreValid; + return !paramsAreInvalid; } /*********************************************************************//** Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r8dad6fab1c33602ad94908fd31b8b15153a9eb6e -r101bf85b0b425e919b01b4b7fabcbd15fd5bbde5 --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 8dad6fab1c33602ad94908fd31b8b15153a9eb6e) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 101bf85b0b425e919b01b4b7fabcbd15fd5bbde5) @@ -184,6 +184,7 @@ SW_FAULT_ID_ACCEL_INVALID_SELF_TEST_STATE, SW_FAULT_ID_UTIL_INVALID_WIN_COUNT, SW_FAULT_ID_UTIL_INVALID_WIN_MAX_COUNT, + SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_STATE, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/CommBuffers.c =================================================================== diff -u -r5eda37efda2d771de4f5cfb509adf05621a290c3 -r101bf85b0b425e919b01b4b7fabcbd15fd5bbde5 --- firmware/App/Services/CommBuffers.c (.../CommBuffers.c) (revision 5eda37efda2d771de4f5cfb509adf05621a290c3) +++ firmware/App/Services/CommBuffers.c (.../CommBuffers.c) (revision 101bf85b0b425e919b01b4b7fabcbd15fd5bbde5) @@ -123,8 +123,7 @@ U32 activeBuffer; U32 currentActiveBufCount; // where to start adding new data to buffer (after existing data) - if ( ( FALSE == isHDOnlyCANNode() ) || - ( FALSE == isCANBoxForXmit( (CAN_MESSAGE_BOX_T)buffer ) ) ) + if ( ( FALSE == isHDOnlyCANNode() ) || ( FALSE == isCANBoxForXmit( (CAN_MESSAGE_BOX_T)buffer ) ) ) { // thread protection for queue operations _disable_IRQ(); Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r5eda37efda2d771de4f5cfb509adf05621a290c3 -r101bf85b0b425e919b01b4b7fabcbd15fd5bbde5 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 5eda37efda2d771de4f5cfb509adf05621a290c3) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 101bf85b0b425e919b01b4b7fabcbd15fd5bbde5) @@ -1216,6 +1216,10 @@ handleUIUserConfirmTreatmentParameters( message ); break; + case MSG_ID_UI_TREATMENT_END_REQUEST: + handleUIUserEndTreatmentRequest( message ); + break; + default: // TODO - unrecognized message ID received - ignore break; Index: firmware/App/Services/SystemComm.h =================================================================== diff -u -rc47140a246754809db1b8a44eac46be0139c66f7 -r101bf85b0b425e919b01b4b7fabcbd15fd5bbde5 --- firmware/App/Services/SystemComm.h (.../SystemComm.h) (revision c47140a246754809db1b8a44eac46be0139c66f7) +++ firmware/App/Services/SystemComm.h (.../SystemComm.h) (revision 101bf85b0b425e919b01b4b7fabcbd15fd5bbde5) @@ -32,20 +32,20 @@ // ********** public definitions ********** -#define MESSAGE_SYNC_BYTE 0xA5 ///< Denali message syncronization byte. +#define MESSAGE_SYNC_BYTE 0xA5 ///< Denali message syncronization byte. -#define CAN_MESSAGE_PAYLOAD_SIZE 8 ///< CAN frame payload size (in bytes). +#define CAN_MESSAGE_PAYLOAD_SIZE 8 ///< CAN frame payload size (in bytes). #ifdef DEBUG_ENABLED #define PC_MESSAGE_PACKET_SIZE 8 #endif -#define MSG_ID_ACK 0xFFFF ///< Denali message ID for acknowledging received messages (when required). -#define MSG_ACK_BIT 0x8000 ///< ACK bit in sequence number that indicates an ACK is required. -#define MAX_MSG_SEQ_NO 0x7FFF ///< Maximum sequence number for Denali message (then wraps to 1). -#define MIN_MSG_SEQ_NO 0x0001 ///< Minimum sequence number for Denali message. +#define MSG_ID_ACK 0xFFFF ///< Denali message ID for acknowledging received messages (when required). +#define MSG_ACK_BIT 0x8000 ///< ACK bit in sequence number that indicates an ACK is required. +#define MAX_MSG_SEQ_NO 0x7FFF ///< Maximum sequence number for Denali message (then wraps to 1). +#define MIN_MSG_SEQ_NO 0x0001 ///< Minimum sequence number for Denali message. #define MAX_ACK_MSG_SIZE ( sizeof( MESSAGE_WRAPPER_T ) + 1 + CAN_MESSAGE_PAYLOAD_SIZE ) ///< Maximum size (in bytes) of Denali message including full (wrapped) message + sync + any CAN padding) -typedef COMM_BUFFER_T CAN_MESSAGE_BOX_T; ///< the CAN comm buffers align with the active CAN message boxes +typedef COMM_BUFFER_T CAN_MESSAGE_BOX_T; ///< the CAN comm buffers align with the active CAN message boxes // ********** public function prototypes ********** Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rb0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11 -r101bf85b0b425e919b01b4b7fabcbd15fd5bbde5 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision b0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 101bf85b0b425e919b01b4b7fabcbd15fd5bbde5) @@ -1461,6 +1461,91 @@ /*********************************************************************//** * @brief + * The sendTreatmentStartResponseMsg function constructs a treatment start + * request response message to the UI and queues the msg for transmit on + * the appropriate CAN channel. + * @details + * Inputs : none + * Outputs : Treatment start response msg constructed and queued. + * @param accepted T/F - request accepted? + * @param reason reason code if rejected + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL sendTreatmentStartResponseMsg( BOOL accepted, U32 reason ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_HD_START_TREATMENT_RESPONSE; + msg.hdr.payloadLen = sizeof( BOOL ) + sizeof( U32 ); + + memcpy( payloadPtr, &accepted, sizeof( BOOL ) ); + payloadPtr += sizeof( BOOL ); + memcpy( payloadPtr, &reason, sizeof( U32 ) ); + + // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_2_UI, ACK_REQUIRED ); + + return result; +} + +/*********************************************************************//** + * @brief + * The handleUIUserEndTreatmentRequest function handles a treatment end + * request message from the UI. + * @details + * Inputs : none + * Outputs : message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleUIUserEndTreatmentRequest( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == 0 ) + { + result = userRequestEndTreatment(); + } + + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_HD_2_UI, result ); +} + +/*********************************************************************//** + * @brief + * The sendTreatmentEndResponseMsg function constructs a treatment end + * request response message to the UI and queues the msg for transmit on + * the appropriate CAN channel. + * @details + * Inputs : none + * Outputs : Treatment end response msg constructed and queued. + * @param accepted T/F - request accepted? + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL sendTreatmentEndResponseMsg( BOOL accepted ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_HD_START_TREATMENT_RESPONSE; + msg.hdr.payloadLen = sizeof( BOOL ); + + memcpy( payloadPtr, &accepted, sizeof( BOOL ) ); + + // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_2_UI, ACK_REQUIRED ); + + return result; +} + +/*********************************************************************//** + * @brief * The handleTreatmentParametersFromUI function handles a treatment parameters * set and validate request message from the UI. * @details Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -rb0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11 -r101bf85b0b425e919b01b4b7fabcbd15fd5bbde5 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision b0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 101bf85b0b425e919b01b4b7fabcbd15fd5bbde5) @@ -79,6 +79,15 @@ // MSG_ID_UI_START_TREATMENT void handleUIStartTreatmentMsg( MESSAGE_T *message ); +// MSG_ID_HD_START_TREATMENT_RESPONSE +BOOL sendTreatmentStartResponseMsg( BOOL accepted, U32 reason ); + +// MSG_ID_UI_TREATMENT_END_REQUEST +void handleUIUserEndTreatmentRequest( MESSAGE_T *message ); + +// MSG_ID_HD_TREATMENT_END_RESPONSE +BOOL sendTreatmentEndResponseMsg( BOOL accepted ); + // MSG_ID_UI_NEW_TREATMENT_PARAMS void handleTreatmentParametersFromUI( MESSAGE_T *message );