/******************************************************************************
 *
 *  Copyright (C) 2002-2012 Broadcom Corporation
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at:
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 ******************************************************************************/

/******************************************************************************
 *
 *  This interface file contains the interface AVDTP conformance API.  These
 *  additional API functions and callback events are provided for
 *  conformance testing purposes only.  They are not intended to be used by
 *  an application.
 *
 ******************************************************************************/
#ifndef AVDT_CAPI_H
#define AVDT_CAPI_H

#include "avdt_api.h"

/* start AVDTC events here to distinguish from AVDT events */
#define AVDTC_EVT_BEGIN 0x80

/* Discover indication */
#define AVDTC_DISCOVER_IND_EVT (0 + AVDTC_EVT_BEGIN)
/* Get capabilities indication */
#define AVDTC_GETCAP_IND_EVT (1 + AVDTC_EVT_BEGIN)
/* Set configuration confirm */
#define AVDTC_SETCONFIG_CFM_EVT (2 + AVDTC_EVT_BEGIN)
/* Get configuration indication */
#define AVDTC_GETCONFIG_IND_EVT (3 + AVDTC_EVT_BEGIN)
/* Get configuration confirm */
#define AVDTC_GETCONFIG_CFM_EVT (4 + AVDTC_EVT_BEGIN)
/* Open indication */
#define AVDTC_OPEN_IND_EVT (5 + AVDTC_EVT_BEGIN)
/* Start indication */
#define AVDTC_START_IND_EVT (6 + AVDTC_EVT_BEGIN)
/* Close indication */
#define AVDTC_CLOSE_IND_EVT (7 + AVDTC_EVT_BEGIN)
/* Suspend indication */
#define AVDTC_SUSPEND_IND_EVT (8 + AVDTC_EVT_BEGIN)
/* Abort indication */
#define AVDTC_ABORT_IND_EVT (9 + AVDTC_EVT_BEGIN)
/* Abort confirm */
#define AVDTC_ABORT_CFM_EVT (10 + AVDTC_EVT_BEGIN)

typedef struct {
  tAVDT_EVT_HDR hdr;                /* Event header */
  uint8_t seid_list[AVDT_NUM_SEPS]; /* Array of SEID values */
  uint8_t num_seps;                 /* Number of values in array */
} tAVDT_MULTI;

/* Union of all control callback event data structures */
typedef union {
  tAVDT_EVT_HDR hdr;
  tAVDT_CONFIG getconfig_cfm;
  tAVDT_MULTI start_ind;
  tAVDT_MULTI suspend_ind;
} tAVDTC_CTRL;

typedef void tAVDTC_CTRL_CBACK(uint8_t handle, const RawAddress& bd_addr,
                               uint8_t event, tAVDTC_CTRL* p_data);

/*******************************************************************************
 *
 * Function         AVDTC_Init
 *
 * Description      This function is called to begin using the conformance API.
 *                  It must be called after AVDT_Register() and before any
 *                  other API or conformance API functions are called.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void AVDTC_Init(tAVDTC_CTRL_CBACK* p_cback);

/*******************************************************************************
 *
 * Function         AVDTC_DiscoverRsp
 *
 * Description      Send a discover response.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void AVDTC_DiscoverRsp(const RawAddress& bd_addr, uint8_t label,
                              tAVDT_SEP_INFO sep_info[], uint8_t num_seps);

/*******************************************************************************
 *
 * Function         AVDTC_GetCapRsp
 *
 * Description     Send a get capabilities response.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void AVDTC_GetCapRsp(const RawAddress& bd_addr, uint8_t label,
                            tAVDT_CFG* p_cap);

/*******************************************************************************
 *
 * Function         AVDTC_GetAllCapRsp
 *
 * Description     Send a get all capabilities response.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void AVDTC_GetAllCapRsp(const RawAddress& bd_addr, uint8_t label,
                               tAVDT_CFG* p_cap);

/*******************************************************************************
 *
 * Function         AVDTC_GetConfigReq
 *
 * Description      Send a get configuration request.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void AVDTC_GetConfigReq(uint8_t handle);

/*******************************************************************************
 *
 * Function         AVDTC_GetConfigRsp
 *
 * Description      Send a get configuration response.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void AVDTC_GetConfigRsp(uint8_t handle, uint8_t label, tAVDT_CFG* p_cfg);

/*******************************************************************************
 *
 * Function         AVDTC_OpenReq
 *
 * Description      Send an open request.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void AVDTC_OpenReq(uint8_t handle);

/*******************************************************************************
 *
 * Function         AVDTC_OpenRsp
 *
 * Description      Send an open response.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void AVDTC_OpenRsp(uint8_t handle, uint8_t label);

/*******************************************************************************
 *
 * Function         AVDTC_StartRsp
 *
 * Description      Send a start response.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void AVDTC_StartRsp(uint8_t* p_handles, uint8_t num_handles,
                           uint8_t label);

/*******************************************************************************
 *
 * Function         AVDTC_CloseRsp
 *
 * Description      Send a close response.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void AVDTC_CloseRsp(uint8_t handle, uint8_t label);

/*******************************************************************************
 *
 * Function         AVDTC_SuspendRsp
 *
 * Description      Send a suspend response.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void AVDTC_SuspendRsp(uint8_t* p_handles, uint8_t num_handles,
                             uint8_t label);

/*******************************************************************************
 *
 * Function         AVDTC_AbortReq
 *
 * Description      Send an abort request.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void AVDTC_AbortReq(uint8_t handle);

/*******************************************************************************
 *
 * Function         AVDTC_AbortRsp
 *
 * Description      Send an abort response.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void AVDTC_AbortRsp(uint8_t handle, uint8_t label);

/*******************************************************************************
 *
 * Function         AVDTC_Rej
 *
 * Description      Send a reject message.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void AVDTC_Rej(uint8_t handle, const RawAddress& bd_addr, uint8_t cmd,
                      uint8_t label, uint8_t err_code, uint8_t err_param);

#endif /* AVDT_CAPI_H */
