Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r6042952abe8c5b39b4d64c3f13f832713bcfb79a -r549fea9aba0bc5bc03d195d1a5659261e3ace9d0 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 6042952abe8c5b39b4d64c3f13f832713bcfb79a) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 549fea9aba0bc5bc03d195d1a5659261e3ace9d0) @@ -507,16 +507,16 @@ confirm_id = GENERIC_CONFIRM_ID_DISINFECT_STOP_CHEMICAL; } // Send message to UI to indicate user request to cancel disinfect - disinfectCancelReqID = sendConfirmationRequest( confirm_id, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0 ); + disinfectCancelReqID = addConfirmationRequest( confirm_id, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0 ); } else if ( GENERIC_CONFIRM_ID_NONE != disinfectCancelReqID ) { - confirm_status = checkConfirmationRequestStatus( disinfectCancelReqID ); + // Get the confirmation request. It consumes the request if completed and responds to UI. + confirm_status = getConfirmationRequestStatus( disinfectCancelReqID ); switch ( confirm_status ) { case CONFIRMATION_REQUEST_STATUS_ACCEPTED : - // send a accept close to UI, don't save request id because there will be no response - sendConfirmationRequest( disinfectCancelReqID, GENERIC_CONFIRM_CMD_ACCEPT_CLOSE, 0 ); + // Clear request active status disinfectCancelReqID = GENERIC_CONFIRM_ID_NONE; switch ( currentStandbyState ) @@ -534,22 +534,20 @@ break; default: - // Close the UI Confirm - sendConfirmationRequest( disinfectCancelReqID, GENERIC_CONFIRM_CMD_TIMEOUT_CLOSE, 0 ); + // UI Confirm already closed. Nothing to do. break; } break; case CONFIRMATION_REQUEST_STATUS_TIMEOUT : - // send a cancel to UI, don't save request id because there will be no response - sendConfirmationRequest( disinfectCancelReqID, GENERIC_CONFIRM_CMD_TIMEOUT_CLOSE, 0 ); + case CONFIRMATION_REQUEST_STATUS_REJECTED : + // Clear request active status disinfectCancelReqID = GENERIC_CONFIRM_ID_NONE; break; - case CONFIRMATION_REQUEST_STATUS_REJECTED : - // UI rejected, cancel pending request - sendConfirmationRequest( disinfectCancelReqID, GENERIC_CONFIRM_CMD_ACCEPT_CLOSE, 0 ); - disinfectCancelReqID = GENERIC_CONFIRM_ID_NONE; + case CONFIRMATION_REQUEST_STATUS_PENDING: + case CONFIRMATION_REQUEST_STATUS_UNUSED: + // Nothing to do break; default : Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r46b163d19c65e8c21db7b0247bbb1af0dba1ece5 -r549fea9aba0bc5bc03d195d1a5659261e3ace9d0 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 46b163d19c65e8c21db7b0247bbb1af0dba1ece5) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 549fea9aba0bc5bc03d195d1a5659261e3ace9d0) @@ -42,7 +42,19 @@ #define BROADCAST_HD_OP_MODE_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) ///< HD operation mode broadcast interval (in task interval/sec). #define DATA_PUBLISH_COUNTER_START_COUNT 11 ///< Data publish counter start count. +#define NUM_CONFIRM_REQUESTS 4 ///< Number of available confirmation requests. +#define CONFIRMATION_REQUEST_TIMEOUT_MS ( SEC_PER_MIN * MS_PER_SECOND ) ///< Confirmation response timeout in ms +/// Structure for confirmation request. +typedef struct +{ + GENERIC_CONFIRM_ID_T requestID; ///< Request ID + GENERIC_CONFIRM_COMMAND_T requestType; ///< Request Type + U32 timeStamp; ///< Timestamp for request + CONFIRMATION_REQUEST_STATUS_T status; ///< Request status (pending, accepted, rejected) +} CONFIRMATION_REQUEST_T; + + // ********** private data ********** static volatile BOOL modeRequest[ NUM_OF_MODES - 1 ]; ///< Pending operation mode change requests. @@ -53,6 +65,11 @@ /// Interval (in task intervals) at which to publish operation mode data to CAN bus. static OVERRIDE_U32_T opModePublishInterval = { BROADCAST_HD_OP_MODE_INTERVAL, BROADCAST_HD_OP_MODE_INTERVAL, BROADCAST_HD_OP_MODE_INTERVAL, 0 }; static U32 priorSubMode = 0; ///< The prior submode state. +static CONFIRMATION_REQUEST_T confirmRequests[NUM_CONFIRM_REQUESTS] = + { GENERIC_CONFIRM_ID_NONE, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, + GENERIC_CONFIRM_ID_NONE, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, + GENERIC_CONFIRM_ID_NONE, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, + GENERIC_CONFIRM_ID_NONE, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, }; /// This matrix determines legal transitions from one mode to another static const HD_OP_MODE_T MODE_TRANSITION_TABLE[ NUM_OF_MODES - 1 ][ NUM_OF_MODES - 1 ] = { @@ -71,6 +88,7 @@ static HD_OP_MODE_T arbitrateModeRequest( void ); static void transitionToNewOperationMode( HD_OP_MODE_T newMode ); static void broadcastOperationMode( void ); +static void updateConfirmationRequestTimeouts( void ); /*********************************************************************//** * @brief @@ -200,6 +218,8 @@ } priorSubMode = currentSubMode; + updateConfirmationRequestTimeouts( ); + // Broadcast current operation mode on interval broadcastOperationMode(); } @@ -415,7 +435,154 @@ } } +/*********************************************************************//** + * @brief + * The updateConfirmationRequestTimeouts function checks the status of + * all active confirmation requests and updates the timeout. + * @details Inputs: confirmRequests[] + * @details Outputs: confirmRequests[] status updated if timeout. + * @param none + * @return none + *************************************************************************/ +void updateConfirmationRequestTimeouts( void ) +{ + U08 i; + for ( i = 0; i < NUM_CONFIRM_REQUESTS; i++ ) + { + if ( CONFIRMATION_REQUEST_STATUS_PENDING == confirmRequests[ i ].status ) + { + if ( TRUE == didTimeout( confirmRequests[ i ].timeStamp, CONFIRMATION_REQUEST_TIMEOUT_MS ) ) + { + confirmRequests[ i ].status = CONFIRMATION_REQUEST_STATUS_TIMEOUT; + } + } + } +} + +/*********************************************************************//** + * @brief + * The getConfirmationRequestStatus function returns the status of a confirmation request + * @details Inputs: confirmRequests[] + * @details Outputs: confirmRequests[] cleared if completed. + * @param request ID + * @return CONFIRMATION_REQUEST_STATUS_T + *************************************************************************/ +CONFIRMATION_REQUEST_STATUS_T getConfirmationRequestStatus( GENERIC_CONFIRM_ID_T request_id ) +{ + U08 i; + CONFIRMATION_REQUEST_STATUS_T status = CONFIRMATION_REQUEST_STATUS_PENDING; + BOOL pending = FALSE; + U08 pending_index = 0; + + for ( i = 0; i < NUM_CONFIRM_REQUESTS; i++ ) + { + if ( confirmRequests[ i ].requestID == request_id ) + { + status = confirmRequests[ i ].status; + if ( CONFIRMATION_REQUEST_STATUS_PENDING != status) + { + // Send UI clear + if ( CONFIRMATION_REQUEST_STATUS_TIMEOUT == confirmRequests[ i ].status ) + { + sendConfirmationRequest( confirmRequests[ i ].requestID, GENERIC_CONFIRM_CMD_TIMEOUT_CLOSE, 0 ); + } + else + { + sendConfirmationRequest( confirmRequests[ i ].requestID, GENERIC_CONFIRM_CMD_ACCEPT_CLOSE, 0 ); + } + + // Clear the confirmation request, it is done and consumed + confirmRequests[ i ].requestID = GENERIC_CONFIRM_ID_NONE; + confirmRequests[ i ].requestType = GENERIC_CONFIRM_CMD_REQUEST_OPEN; + confirmRequests[ i ].timeStamp = 0; + confirmRequests[ i ].status = CONFIRMATION_REQUEST_STATUS_UNUSED; + } + } + else if ( CONFIRMATION_REQUEST_STATUS_PENDING == confirmRequests[ i ].status ) + { + if ( TRUE == pending ) + { + // Is this newer than other pending request? + if ( confirmRequests[ i ].timeStamp > confirmRequests[ pending_index ].timeStamp ) + { + pending_index = i; + pending = TRUE; + } + } + else + { + pending_index = i; + pending = TRUE; + } + } + } + if ( ( CONFIRMATION_REQUEST_STATUS_PENDING != status ) && ( TRUE == pending ) ) + { + // Last confirmation cleared, pending request must be resent to UI + sendConfirmationRequest( confirmRequests[ pending_index ].requestID, confirmRequests[ pending_index ].requestType, 0 ); + } + + return status; +} + +/*********************************************************************//** + * @brief + * The setConfirmationRequestStatus function sets the status of a confirmation request + * @details Inputs: confirmRequests[] + * @details Outputs: confirmRequests[] status. + * @param request ID + * @param new status + * @return CONFIRMATION_REQUEST_STATUS_T + *************************************************************************/ +void setConfirmationRequestStatus( GENERIC_CONFIRM_ID_T request_id, CONFIRMATION_REQUEST_STATUS_T status ) +{ + U08 i; + + for ( i = 0; i < NUM_CONFIRM_REQUESTS; i++ ) + { + if ( confirmRequests[ i ].requestID == request_id ) + { + confirmRequests[ i ].status = status; + break; + } + } +} + +/*********************************************************************//** + * @brief + * The addConfirmationRequest function sends a confirmation request to UI + * @details Inputs: confirmRequests[] + * @details Outputs: confirmRequests[] new added. + * @param request_id - confirm id / type + * @param request_type - confirm command + * @return request ID - will be non-zero if added + *************************************************************************/ +GENERIC_CONFIRM_ID_T addConfirmationRequest( GENERIC_CONFIRM_ID_T request_id, GENERIC_CONFIRM_COMMAND_T request_type, U32 reject_reason ) +{ + U08 i; + GENERIC_CONFIRM_ID_T new_id = GENERIC_CONFIRM_ID_NONE; + + for ( i = 0; i < NUM_CONFIRM_REQUESTS; i++ ) + { + if ( confirmRequests[ i ].status == CONFIRMATION_REQUEST_STATUS_UNUSED ) + { + // Save the confirmation request info + confirmRequests[ i ].requestID = request_id; + confirmRequests[ i ].requestType = request_type; + confirmRequests[ i ].timeStamp = getMSTimerCount(); + confirmRequests[ i ].status = CONFIRMATION_REQUEST_STATUS_PENDING; + new_id = request_id; + sendConfirmationRequest( request_id, request_type, reject_reason ); + + break; + } + } + + return new_id; +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ Index: firmware/App/Modes/OperationModes.h =================================================================== diff -u -r46b163d19c65e8c21db7b0247bbb1af0dba1ece5 -r549fea9aba0bc5bc03d195d1a5659261e3ace9d0 --- firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 46b163d19c65e8c21db7b0247bbb1af0dba1ece5) +++ firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 549fea9aba0bc5bc03d195d1a5659261e3ace9d0) @@ -38,6 +38,7 @@ U32 subMode; ///< Current sub-mode of current operating mode } OP_MODE_PAYLOAD_T; + // ********** public function prototypes ********** void initOperationModes( void ); // Initialize this module @@ -47,6 +48,9 @@ HD_OP_MODE_T getPreviousOperationMode( void ); // Get the previous operation mode U32 getCurrentSubMode( void ); // Get the current sub-mode void initiateAlarmAction( ALARM_ACTION_T action ); // Initiate an alarm or alarm recovery action according to current op mode +CONFIRMATION_REQUEST_STATUS_T getConfirmationRequestStatus( GENERIC_CONFIRM_ID_T request_id ); +void setConfirmationRequestStatus( GENERIC_CONFIRM_ID_T request_id, CONFIRMATION_REQUEST_STATUS_T status ); +GENERIC_CONFIRM_ID_T addConfirmationRequest( GENERIC_CONFIRM_ID_T request_id, GENERIC_CONFIRM_COMMAND_T request_type, U32 reject_reason ); BOOL testSetOperationMode( HD_OP_MODE_T newMode ); // Force transition to a given mode (if allowed) BOOL testSetOpModePublishIntervalOverride( U32 ms ); Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r6042952abe8c5b39b4d64c3f13f832713bcfb79a -r549fea9aba0bc5bc03d195d1a5659261e3ace9d0 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 6042952abe8c5b39b4d64c3f13f832713bcfb79a) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 549fea9aba0bc5bc03d195d1a5659261e3ace9d0) @@ -53,7 +53,6 @@ // ********** private definitions ********** #define MAX_MSGS_BLOCKED_FOR_XMIT 8 ///< Maximum number of messages to block transmission for. -#define NUM_CONFIRM_REQUESTS 4 ///< Number of available confirmation requests. #pragma pack(push,1) /// Payload record structure for block message transmission request. @@ -69,11 +68,6 @@ static volatile U16 nextSeqNo = 1; ///< Value of sequence number to use for next transmitted message. /// List of message IDs that are requested not to be transmitted. static BLOCKED_MSGS_DATA_T blockedMessagesForXmit = { 0, 0, 0, 0, 0, 0, 0, 0 }; -static CONFIRMATION_REQUEST_T confirmRequests[NUM_CONFIRM_REQUESTS] = - { 0, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, - 0, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, - 0, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, - 0, GENERIC_CONFIRM_CMD_REQUEST_OPEN, 0, CONFIRMATION_REQUEST_STATUS_UNUSED, }; // ********** private function prototypes ********** @@ -7348,8 +7342,7 @@ if ( message->hdr.payloadLen == 2 * sizeof(U32) ) { U32 request_id; - CONFIRMATION_REQUEST_STATUS_T status; - U08 i; + U32 status; memcpy( &request_id, payloadPtr, sizeof(U32) ); payloadPtr += sizeof(U32); @@ -7358,14 +7351,7 @@ if ( ( CONFIRMATION_REQUEST_STATUS_REJECTED == status ) || ( CONFIRMATION_REQUEST_STATUS_ACCEPTED == status ) ) { - for ( i = 0; i < NUM_CONFIRM_REQUESTS; i++ ) - { - if ( confirmRequests[ i ].requestID == request_id ) - { - confirmRequests[ i ].status = status; - break; - } - } + setConfirmationRequestStatus( (GENERIC_CONFIRM_ID_T) request_id, (CONFIRMATION_REQUEST_STATUS_T) status ); } else { @@ -7379,93 +7365,36 @@ /*********************************************************************//** * @brief - * The checkConfrimRequestStatus function checks the status of a confirmation request - * @details Inputs: confirmRequests[] - * @details Outputs: confirmRequests[] cleared if read. - * @param request ID - * @return CONFIRMATION_REQUEST_STATUS_T - *************************************************************************/ -CONFIRMATION_REQUEST_STATUS_T checkConfirmationRequestStatus( GENERIC_CONFIRM_ID_T request_id ) -{ - U08 i; - CONFIRMATION_REQUEST_STATUS_T status = CONFIRMATION_REQUEST_STATUS_PENDING; - - for ( i = 0; i < NUM_CONFIRM_REQUESTS; i++ ) - { - if ( confirmRequests[ i ].requestID == request_id ) - { - if ( TRUE == didTimeout( confirmRequests[ i ].timeStamp, CONFIRMATION_REQUEST_TIMEOUT_MS ) ) - { - status = CONFIRMATION_REQUEST_STATUS_TIMEOUT; - } - else - { - status = confirmRequests[ i ].status; - } - if ( CONFIRMATION_REQUEST_STATUS_PENDING != status) - { - // Clear the confirmation request - confirmRequests[ i ].requestID = 0; - confirmRequests[ i ].requestType = GENERIC_CONFIRM_CMD_REQUEST_OPEN; - confirmRequests[ i ].timeStamp = 0; - confirmRequests[ i ].status = CONFIRMATION_REQUEST_STATUS_UNUSED; - } - break; - } - } - - return status; -} - -/*********************************************************************//** - * @brief * The sendConfirmationRequest function sends a confirmation request to UI - * @details Inputs: - * @details Outputs: confirmRequests[]. - * @param + * @details Inputs: none + * @details Outputs: none + * @param request ID + * @param request type + * @param reject reason * @return request ID - will be non-zero if sent *************************************************************************/ -GENERIC_CONFIRM_ID_T sendConfirmationRequest( GENERIC_CONFIRM_ID_T request_id, GENERIC_CONFIRM_COMMAND_T request_type, U32 reject_reason ) +void sendConfirmationRequest( GENERIC_CONFIRM_ID_T request_id, GENERIC_CONFIRM_COMMAND_T request_type, U32 reject_reason ) { MESSAGE_T msg; U08 *payloadPtr = msg.payload; - U08 i; - GENERIC_CONFIRM_ID_T new_id = GENERIC_CONFIRM_ID_NONE; U32 temp_request; - for ( i = 0; i < NUM_CONFIRM_REQUESTS; i++ ) - { - if ( confirmRequests[ i ].status == CONFIRMATION_REQUEST_STATUS_UNUSED ) - { - // Save the confirmation request info - confirmRequests[ i ].requestID = request_id; - confirmRequests[ i ].requestType = request_type; - confirmRequests[ i ].timeStamp = getMSTimerCount(); - confirmRequests[ i ].status = CONFIRMATION_REQUEST_STATUS_PENDING; - new_id = request_id; + // Create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_HD_REQUEST_UI_CONFIRMATION; + // The payload length is U32 Request ID, U32 Type, U32 Reject Reason + msg.hdr.payloadLen = 3 * sizeof( U32 ); - // Create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_HD_REQUEST_UI_CONFIRMATION; - // The payload length is U32 Request ID, U32 Type, U32 Reject Reason - msg.hdr.payloadLen = 3 * sizeof( U32 ); + temp_request = request_id; + memcpy( payloadPtr, &temp_request, sizeof( U32 ) ); + payloadPtr += sizeof( U32 ); + temp_request = request_type; + memcpy( payloadPtr, &temp_request, sizeof( U32 ) ); + payloadPtr += sizeof( U32 ); + memcpy( payloadPtr, &reject_reason, sizeof( U32 ) ); - temp_request = request_id; - memcpy( payloadPtr, &temp_request, sizeof( U32 ) ); - payloadPtr += sizeof( U32 ); - temp_request = request_type; - memcpy( payloadPtr, &temp_request, sizeof( U32 ) ); - payloadPtr += sizeof( U32 ); - memcpy( payloadPtr, &reject_reason, sizeof( U32 ) ); - - // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer - serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_2_UI, ACK_NOT_REQUIRED ); - - break; - } - } - - return new_id; + // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_2_UI, ACK_NOT_REQUIRED ); } /**@}*/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -rc946dc2b288b45541d1ee583560aa2af5f49c1c7 -r549fea9aba0bc5bc03d195d1a5659261e3ace9d0 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision c946dc2b288b45541d1ee583560aa2af5f49c1c7) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 549fea9aba0bc5bc03d195d1a5659261e3ace9d0) @@ -63,28 +63,6 @@ #define ACK_REQUIRED TRUE ///< Macro for functions that want to know if an outgoing message requires acknowledgement from receiver. #define ACK_NOT_REQUIRED FALSE ///< Macro for functions that want to know if an outgoing message requires acknowledgement from receiver. -/// TODO - should this be in HDDefs? MsgDefs or other common?. -#define CONFIRMATION_REQUEST_TIMEOUT_MS ( SEC_PER_MIN * MS_PER_SECOND ) -/// List of confirmation status. -typedef enum Confirmation_Status -{ - CONFIRMATION_REQUEST_STATUS_REJECTED = 0, ///< Confirmation status rejected - CONFIRMATION_REQUEST_STATUS_ACCEPTED, ///< Confirmation status accepted - CONFIRMATION_REQUEST_STATUS_TIMEOUT, ///< Confirmation status timeout - CONFIRMATION_REQUEST_STATUS_PENDING, ///< Confirmation status pending response - CONFIRMATION_REQUEST_STATUS_UNUSED, ///< Confirmation status Unused - NUM_OF_CONFIRMATION_REQUEST_STATUS ///< Number of confirmation status -} CONFIRMATION_REQUEST_STATUS_T; - -/// Structure for confirmation request. -typedef struct -{ - U32 requestID; ///< Request ID - GENERIC_CONFIRM_COMMAND_T requestType; ///< Request Type - U32 timeStamp; ///< Timestamp for request - CONFIRMATION_REQUEST_STATUS_T status; ///< Request status (pending, accepted, rejected) -} CONFIRMATION_REQUEST_T; - // ********** public function prototypes ********** // Serialize message @@ -450,7 +428,14 @@ // MSG_ID_HD_SET_SW_CONFIG_RECORD void handleSetHDSoftwareConfigRecord( MESSAGE_T *message ); +// MSG_ID_HD_SEND_ALARMS_COMMAND +void handleResendAllAlarmsCommand( MESSAGE_T* message ); +// MSG_ID_UI_CONFIRMATION_RESULT +void handleUIConfirmationResponse( MESSAGE_T *message ); +void sendConfirmationRequest( GENERIC_CONFIRM_ID_T request_id, GENERIC_CONFIRM_COMMAND_T request_type, U32 reject_reason ); + + // MSG_ID_HD_REQUEST_DG_ALARMS BOOL sendRequestForDGResendAlarms( void ); @@ -829,14 +814,6 @@ // MSG_ID_HD_SEND_BLOOD_LEAK_EMB_MODE_RESPONSE BOOL sendBloodLeakEmbeddedModeCommandResponse( U32 responseLen, U08* response ); -// MSG_ID_HD_SEND_ALARMS_COMMAND -void handleResendAllAlarmsCommand( MESSAGE_T* message ); - -// MSG_ID_UI_CONFIRMATION_RESULT -void handleUIConfirmationResponse( MESSAGE_T *message ); -CONFIRMATION_REQUEST_STATUS_T checkConfirmationRequestStatus( GENERIC_CONFIRM_ID_T request_id ); -GENERIC_CONFIRM_ID_T sendConfirmationRequest( GENERIC_CONFIRM_ID_T request_id, GENERIC_CONFIRM_COMMAND_T request_type, U32 reject_reason ); - /**@}*/ #endif