/******************************************************************************
 *
 *  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 to the Audio Video
 *  Distribution Transport Protocol (AVDTP).
 *
 ******************************************************************************/
#ifndef AVDT_API_H
#define AVDT_API_H

#include "bt_target.h"
#include "bt_types.h"

/*****************************************************************************
 *  Constants
 ****************************************************************************/
#ifndef AVDT_VERSION
#define AVDT_VERSION 0x0102
#endif
#define AVDT_VERSION_1_3 0x0103

/* Maximum size in bytes of the codec capabilities information element. */
#define AVDT_CODEC_SIZE 20

/* API function return value result codes. */
#define AVDT_SUCCESS 0      /* Function successful */
#define AVDT_BAD_PARAMS 1   /* Invalid parameters */
#define AVDT_NO_RESOURCES 2 /* Not enough resources */
#define AVDT_BAD_HANDLE 3   /* Bad handle */
#define AVDT_BUSY 4         /* A procedure is already in progress */
#define AVDT_WRITE_FAIL 5   /* Write failed */

/* The index to access the codec type in codec_info[]. */
#define AVDT_CODEC_TYPE_INDEX 2

/* The size in bytes of a Adaptation Layer header. */
#define AVDT_AL_HDR_SIZE 3

/* The size in bytes of a media packet header. */
#define AVDT_MEDIA_HDR_SIZE 12

/* The handle is used when reporting MULTI_AV specific events */
#define AVDT_MULTI_AV_HANDLE 0xFF

/* The number of bytes needed by the protocol stack for the protocol headers
 * of a media packet.  This is the size of the media packet header, the
 * L2CAP packet header and HCI header.
*/
#define AVDT_MEDIA_OFFSET 23

/* The marker bit is used by the application to mark significant events such
 * as frame boundaries in the data stream.  This constant is used to check or
 * set the marker bit in the m_pt parameter of an AVDT_WriteReq()
 * or AVDT_DATA_IND_EVT.
*/
#define AVDT_MARKER_SET 0x80

/* SEP Type.  This indicates the stream endpoint type. */
#define AVDT_TSEP_SRC 0     /* Source SEP */
#define AVDT_TSEP_SNK 1     /* Sink SEP */
#define AVDT_TSEP_INVALID 3 /* Invalid SEP */

/* initiator/acceptor role for adaption */
#define AVDT_INT 0 /* initiator */
#define AVDT_ACP 1 /* acceptor */

/* Media Type of the stream endpoint */
/* The value does not include the reserved 4-bit LSBs field */
#define AVDT_MEDIA_TYPE_AUDIO 0 /* Audio SEP */
#define AVDT_MEDIA_TYPE_VIDEO 1 /* Video SEP */
#define AVDT_MEDIA_TYPE_MULTI 2 /* Multimedia SEP */

/* for reporting packets (packet types) */
#define AVDT_RTCP_PT_SR 200   /* SR (Sender Report) */
#define AVDT_RTCP_PT_RR 201   /* RR (Receiver Report) */
#define AVDT_RTCP_PT_SDES 202 /* SDES (Source Description) */
typedef uint8_t AVDT_REPORT_TYPE;

#define AVDT_RTCP_SDES_CNAME 1 /* SDES item CNAME */
#ifndef AVDT_MAX_CNAME_SIZE
#define AVDT_MAX_CNAME_SIZE 28
#endif

/* Protocol service capabilities.  This indicates the protocol service
 * capabilities of a stream endpoint.  This value is a mask.
 * Multiple values can be combined with a bitwise OR.
*/
#define AVDT_PSC_TRANS (1 << 1)     /* Media transport */
#define AVDT_PSC_REPORT (1 << 2)    /* Reporting */
#define AVDT_PSC_RECOV (1 << 3)     /* Recovery */
#define AVDT_PSC_HDRCMP (1 << 5)    /* Header compression */
#define AVDT_PSC_MUX (1 << 6)       /* Multiplexing */
#define AVDT_PSC_DELAY_RPT (1 << 8) /* Delay Report */

/* Recovery type.  This indicates the recovery type. */
#define AVDT_RECOV_RFC2733 1 /* RFC2733 recovery */

/* Header compression capabilities.  This indicates the header compression
 * capabilities.  This value is a mask.  Multiple values can be combined
 * with a bitwise OR.
*/
#define AVDT_HDRCMP_MEDIA (1 << 5)  /* Available for media packets */
#define AVDT_HDRCMP_RECOV (1 << 6)  /* Available for recovery packets */
#define AVDT_HDRCMP_BACKCH (1 << 7) /* Back channel supported */

/* Multiplexing capabilities mask. */
#define AVDT_MUX_FRAG (1 << 7) /* Allow Adaptation Layer Fragmentation */

/* Application service category. This indicates the application
 * service category.
*/
#define AVDT_ASC_PROTECT 4 /* Content protection */
#define AVDT_ASC_CODEC 7   /* Codec */

/* the content protection IDs assigned by BT SIG */
#define AVDT_CP_SCMS_T_ID 0x0002
#define AVDT_CP_DTCP_ID 0x0001

#define AVDT_CP_LOSC 2
#define AVDT_CP_INFO_LEN 3

#define AVDT_CP_SCMS_COPY_MASK 3
#define AVDT_CP_SCMS_COPY_FREE 2
#define AVDT_CP_SCMS_COPY_ONCE 1
#define AVDT_CP_SCMS_COPY_NEVER 0

/* Error codes.  The following are error codes defined in the AVDTP and GAVDP
 * specifications.  These error codes communicate protocol errors between
 * AVDTP and the application.  More detailed descriptions of the error codes
 * and their appropriate use can be found in the AVDTP and GAVDP specifications.
 * These error codes are unrelated to the result values returned by the
 * AVDTP API functions.
*/
/* Bad packet header format */
#define AVDT_ERR_HEADER 0x01
/* Bad packet length */
#define AVDT_ERR_LENGTH 0x11
/* Invalid SEID */
#define AVDT_ERR_SEID 0x12
/* The SEP is in use */
#define AVDT_ERR_IN_USE 0x13
/* The SEP is not in use */
#define AVDT_ERR_NOT_IN_USE 0x14
/* Bad service category */
#define AVDT_ERR_CATEGORY 0x17
/* Bad payload format */
#define AVDT_ERR_PAYLOAD 0x18
/* Requested command not supported */
#define AVDT_ERR_NSC 0x19
/* Reconfigure attempted invalid capabilities */
#define AVDT_ERR_INVALID_CAP 0x1A
/* Requested recovery type not defined */
#define AVDT_ERR_RECOV_TYPE 0x22
/* Media transport capability not correct */
#define AVDT_ERR_MEDIA_TRANS 0x23
/* Recovery service capability not correct */
#define AVDT_ERR_RECOV_FMT 0x25
/* Header compression service capability not correct */
#define AVDT_ERR_ROHC_FMT 0x26
/* Content protection service capability not correct */
#define AVDT_ERR_CP_FMT 0x27
/* Multiplexing service capability not correct */
#define AVDT_ERR_MUX_FMT 0x28
/* Configuration not supported */
#define AVDT_ERR_UNSUP_CFG 0x29
/* Message cannot be processed in this state */
#define AVDT_ERR_BAD_STATE 0x31
/* Report service capability not correct */
#define AVDT_ERR_REPORT_FMT 0x65
/* Invalid service category */
#define AVDT_ERR_SERVICE 0x80
/* Insufficient resources */
#define AVDT_ERR_RESOURCE 0x81
/* Invalid Media Codec Type */
#define AVDT_ERR_INVALID_MCT 0xC1
/* Unsupported Media Codec Type */
#define AVDT_ERR_UNSUP_MCT 0xC2
/* Invalid Level */
#define AVDT_ERR_INVALID_LEVEL 0xC3
/* Unsupported Level */
#define AVDT_ERR_UNSUP_LEVEL 0xC4
/* Invalid Content Protection Type */
#define AVDT_ERR_INVALID_CP 0xE0
/* Invalid Content Protection format */
#define AVDT_ERR_INVALID_FORMAT 0xE1

/* Additional error codes.  This indicates error codes used by AVDTP
 * in addition to the ones defined in the specifications.
*/
#define AVDT_ERR_CONNECT 0x07 /* Connection failed. */
#define AVDT_ERR_TIMEOUT 0x08 /* Response timeout. */

/* Control callback events. */
#define AVDT_DISCOVER_CFM_EVT 0      /* Discover confirm */
#define AVDT_GETCAP_CFM_EVT 1        /* Get capabilities confirm */
#define AVDT_OPEN_CFM_EVT 2          /* Open confirm */
#define AVDT_OPEN_IND_EVT 3          /* Open indication */
#define AVDT_CONFIG_IND_EVT 4        /* Configuration indication */
#define AVDT_START_CFM_EVT 5         /* Start confirm */
#define AVDT_START_IND_EVT 6         /* Start indication */
#define AVDT_SUSPEND_CFM_EVT 7       /* Suspend confirm */
#define AVDT_SUSPEND_IND_EVT 8       /* Suspend indication */
#define AVDT_CLOSE_CFM_EVT 9         /* Close confirm */
#define AVDT_CLOSE_IND_EVT 10        /* Close indication */
#define AVDT_RECONFIG_CFM_EVT 11     /* Reconfiguration confirm */
#define AVDT_RECONFIG_IND_EVT 12     /* Reconfiguration indication */
#define AVDT_SECURITY_CFM_EVT 13     /* Security confirm */
#define AVDT_SECURITY_IND_EVT 14     /* Security indication */
#define AVDT_WRITE_CFM_EVT 15        /* Write confirm */
#define AVDT_CONNECT_IND_EVT 16      /* Signaling channel connected */
#define AVDT_DISCONNECT_IND_EVT 17   /* Signaling channel disconnected */
#define AVDT_REPORT_CONN_EVT 18      /* Reporting channel connected */
#define AVDT_REPORT_DISCONN_EVT 19   /* Reporting channel disconnected */
#define AVDT_DELAY_REPORT_EVT 20     /* Delay report received */
#define AVDT_DELAY_REPORT_CFM_EVT 21 /* Delay report response received */

#define AVDT_MAX_EVT (AVDT_DELAY_REPORT_CFM_EVT)

/* PSM for AVDT */
#define AVDT_PSM 0x0019

/* Nonsupported protocol command messages.  This value is used in tAVDT_CS */
#define AVDT_NSC_SUSPEND 0x01  /* Suspend command not supported */
#define AVDT_NSC_RECONFIG 0x02 /* Reconfigure command not supported */
#define AVDT_NSC_SECURITY 0x04 /* Security command not supported */

/*****************************************************************************
 *  Type Definitions
 ****************************************************************************/

typedef struct {
  uint32_t ntp_sec; /* NTP time: seconds relative to 0h UTC on 1 January 1900 */
  uint32_t ntp_frac;    /* NTP time: the fractional part */
  uint32_t rtp_time;    /* timestamp in RTP header */
  uint32_t pkt_count;   /* sender's packet count: since starting transmission
                        * up until the time this SR packet was generated. */
  uint32_t octet_count; /* sender's octet count: same comment */
} tAVDT_SENDER_INFO;

typedef struct {
  uint8_t frag_lost; /* fraction lost since last RR */
  uint32_t
      packet_lost; /* cumulative number of packets lost since the beginning */
  uint32_t seq_num_rcvd; /* extended highest sequence number received */
  uint32_t jitter;       /* interarrival jitter */
  uint32_t lsr;          /* last SR timestamp */
  uint32_t dlsr;         /* delay since last SR */
} tAVDT_REPORT_BLK;

typedef union {
  tAVDT_SENDER_INFO sr;
  tAVDT_REPORT_BLK rr;
  uint8_t cname[AVDT_MAX_CNAME_SIZE + 1];
} tAVDT_REPORT_DATA;

/* This structure contains parameters which are set at registration. */
typedef struct {
  uint16_t ctrl_mtu; /* L2CAP MTU of the AVDTP signaling channel */
  uint8_t ret_tout;  /* AVDTP signaling retransmission timeout */
  uint8_t sig_tout;  /* AVDTP signaling message timeout */
  uint8_t idle_tout; /* AVDTP idle signaling channel timeout */
  uint8_t sec_mask;  /* Security mask for BTM_SetSecurityLevel() */
} tAVDT_REG;

/* This structure contains the SEP information.  This information is
 * transferred during the discovery procedure.
*/
typedef struct {
  bool in_use;        /* true if stream is currently in use */
  uint8_t seid;       /* Stream endpoint identifier */
  uint8_t media_type; /* Media type: AVDT_MEDIA_TYPE_* */
  uint8_t tsep;       /* SEP type */
} tAVDT_SEP_INFO;

/* This structure contains the SEP configuration. */
typedef struct {
  uint8_t codec_info[AVDT_CODEC_SIZE];     /* Codec capabilities array */
  uint8_t protect_info[AVDT_PROTECT_SIZE]; /* Content protection capabilities */
  uint8_t num_codec;   /* Number of media codec information elements */
  uint8_t num_protect; /* Number of content protection information elements */
  uint16_t psc_mask;   /* Protocol service capabilities mask */
  uint8_t recov_type;  /* Recovery type */
  uint8_t recov_mrws;  /* Maximum recovery window size */
  uint8_t recov_mnmp;  /* Recovery maximum number of media packets */
  uint8_t hdrcmp_mask; /* Header compression capabilities */
} tAVDT_CFG;

/* Header structure for callback event parameters. */
typedef struct {
  uint8_t
      err_code; /* Zero if operation succeeded; nonzero if operation failed */
  uint8_t err_param; /* Error parameter included for some events */
  uint8_t label;     /* Transaction label */
  uint8_t seid;      /* For internal use only */
  uint8_t sig_id;    /* For internal use only */
  uint8_t ccb_idx;   /* For internal use only */
} tAVDT_EVT_HDR;

/* This data structure is associated with the AVDT_GETCAP_CFM_EVT,
 * AVDT_RECONFIG_IND_EVT, and AVDT_RECONFIG_CFM_EVT.
*/
typedef struct {
  tAVDT_EVT_HDR hdr; /* Event header */
  tAVDT_CFG* p_cfg;  /* Pointer to configuration for this SEP */
} tAVDT_CONFIG;

/* This data structure is associated with the AVDT_CONFIG_IND_EVT. */
typedef struct {
  tAVDT_EVT_HDR hdr; /* Event header */
  tAVDT_CFG* p_cfg;  /* Pointer to configuration for this SEP */
  uint8_t int_seid;  /* Stream endpoint ID of stream initiating the operation */
} tAVDT_SETCONFIG;

/* This data structure is associated with the AVDT_OPEN_IND_EVT and
 * AVDT_OPEN_CFM_EVT. */
typedef struct {
  tAVDT_EVT_HDR hdr; /* Event header */
  uint16_t peer_mtu; /* Transport channel L2CAP MTU of the peer */
  uint16_t lcid;     /* L2CAP LCID for media channel */
} tAVDT_OPEN;

/* This data structure is associated with the AVDT_SECURITY_IND_EVT
 * and AVDT_SECURITY_CFM_EVT.
*/
typedef struct {
  tAVDT_EVT_HDR hdr; /* Event header */
  uint8_t* p_data;   /* Pointer to security data */
  uint16_t len;      /* Length in bytes of the security data */
} tAVDT_SECURITY;

/* This data structure is associated with the AVDT_DISCOVER_CFM_EVT. */
typedef struct {
  tAVDT_EVT_HDR hdr;          /* Event header */
  tAVDT_SEP_INFO* p_sep_info; /* Pointer to SEP information */
  uint8_t num_seps;           /* Number of stream endpoints */
} tAVDT_DISCOVER;

/* This data structure is associated with the AVDT_DELAY_REPORT_EVT. */
typedef struct {
  tAVDT_EVT_HDR hdr; /* Event header */
  uint16_t delay;    /* Delay value */
} tAVDT_DELAY_RPT;

/* Union of all control callback event data structures */
typedef union {
  tAVDT_EVT_HDR hdr;
  tAVDT_DISCOVER discover_cfm;
  tAVDT_CONFIG getcap_cfm;
  tAVDT_OPEN open_cfm;
  tAVDT_OPEN open_ind;
  tAVDT_SETCONFIG config_ind;
  tAVDT_EVT_HDR start_cfm;
  tAVDT_EVT_HDR suspend_cfm;
  tAVDT_EVT_HDR close_cfm;
  tAVDT_CONFIG reconfig_cfm;
  tAVDT_CONFIG reconfig_ind;
  tAVDT_SECURITY security_cfm;
  tAVDT_SECURITY security_ind;
  tAVDT_EVT_HDR connect_ind;
  tAVDT_EVT_HDR disconnect_ind;
  tAVDT_EVT_HDR report_conn;
  tAVDT_DELAY_RPT delay_rpt_cmd;
} tAVDT_CTRL;

/* This is the control callback function.  This function passes control events
 * to the application.  This function is required for all registered stream
 * endpoints and for the AVDT_DiscoverReq() and AVDT_GetCapReq() functions.
 *
*/
typedef void(tAVDT_CTRL_CBACK)(uint8_t handle, const RawAddress* bd_addr,
                               uint8_t event, tAVDT_CTRL* p_data);

/* This is the data callback function.  It is executed when AVDTP has a media
 * packet ready for the application.  This function is required for SNK
 * endpoints and not applicable for SRC endpoints.
*/
typedef void(tAVDT_SINK_DATA_CBACK)(uint8_t handle, BT_HDR* p_pkt,
                                    uint32_t time_stamp, uint8_t m_pt);

#if (AVDT_REPORTING == TRUE)
/* This is the report callback function.  It is executed when AVDTP has a
 * reporting packet ready for the application.  This function is required for
 * streams created with AVDT_PSC_REPORT.
*/
typedef void(tAVDT_REPORT_CBACK)(uint8_t handle, AVDT_REPORT_TYPE type,
                                 tAVDT_REPORT_DATA* p_data);
#endif

typedef uint16_t(tAVDT_GETCAP_REQ)(const RawAddress& bd_addr, uint8_t seid,
                                   tAVDT_CFG* p_cfg, tAVDT_CTRL_CBACK* p_cback);

/* This structure contains information required when a stream is created.
 * It is passed to the AVDT_CreateStream() function.
*/
typedef struct {
  tAVDT_CFG cfg;                            /* SEP configuration */
  tAVDT_CTRL_CBACK* p_ctrl_cback;           /* Control callback function */
  tAVDT_SINK_DATA_CBACK* p_sink_data_cback; /* Sink data callback function */
#if (AVDT_REPORTING == TRUE)
  tAVDT_REPORT_CBACK* p_report_cback; /* Report callback function. */
#endif
  uint16_t mtu;       /* The L2CAP MTU of the transport channel */
  uint16_t flush_to;  /* The L2CAP flush timeout of the transport channel */
  uint8_t tsep;       /* SEP type */
  uint8_t media_type; /* Media type: AVDT_MEDIA_TYPE_* */
  uint16_t nsc_mask;  /* Nonsupported protocol command messages */
} tAVDT_CS;

/* AVDT data option mask is used in the write request */
#define AVDT_DATA_OPT_NONE 0x00          /* No option still add RTP header */
#define AVDT_DATA_OPT_NO_RTP (0x01 << 0) /* Skip adding RTP header */

typedef uint8_t tAVDT_DATA_OPT_MASK;

/*****************************************************************************
 *  External Function Declarations
 ****************************************************************************/

/*******************************************************************************
 *
 * Function         AVDT_Register
 *
 * Description      This is the system level registration function for the
 *                  AVDTP protocol.  This function initializes AVDTP and
 *                  prepares the protocol stack for its use.  This function
 *                  must be called once by the system or platform using AVDTP
 *                  before the other functions of the API an be used.
 *
 *
 * Returns          void
 *
 ******************************************************************************/
extern void AVDT_Register(tAVDT_REG* p_reg, tAVDT_CTRL_CBACK* p_cback);

/*******************************************************************************
 *
 * Function         AVDT_Deregister
 *
 * Description      This function is called to deregister use AVDTP protocol.
 *                  It is called when AVDTP is no longer being used by any
 *                  application in the system.  Before this function can be
 *                  called, all streams must be removed with AVDT_RemoveStream.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void AVDT_Deregister(void);

/*******************************************************************************
 *
 * Function         AVDT_AbortReq
 *
 * Description      Trigger Abort request to pass AVDTP Abort related mandatory
 *                  PTS Test case.
 *
 * Returns          void.
 *
 ******************************************************************************/
extern void AVDT_AbortReq(uint8_t handle);

/*******************************************************************************
 *
 * Function         AVDT_CreateStream
 *
 * Description      Create a stream endpoint.  After a stream endpoint is
 *                  created an application can initiate a connection between
 *                  this endpoint and an endpoint on a peer device.  In
 *                  addition, a peer device can discover, get the capabilities,
 *                  and connect to this endpoint.
 *
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_CreateStream(uint8_t* p_handle, tAVDT_CS* p_cs);

/*******************************************************************************
 *
 * Function         AVDT_RemoveStream
 *
 * Description      Remove a stream endpoint.  This function is called when
 *                  the application is no longer using a stream endpoint.
 *                  If this function is called when the endpoint is connected
 *                  the connection is closed and then the stream endpoint
 *                  is removed.
 *
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_RemoveStream(uint8_t handle);

/*******************************************************************************
 *
 * Function         AVDT_DiscoverReq
 *
 * Description      This function initiates a connection to the AVDTP service
 *                  on the peer device, if not already present, and discovers
 *                  the stream endpoints on the peer device.  (Please note
 *                  that AVDTP discovery is unrelated to SDP discovery).
 *                  This function can be called at any time regardless of
 *                  whether there is an AVDTP connection to the peer device.
 *
 *                  When discovery is complete, an AVDT_DISCOVER_CFM_EVT
 *                  is sent to the application via its callback function.
 *                  The application must not call AVDT_GetCapReq() or
 *                  AVDT_DiscoverReq() again to the same device until
 *                  discovery is complete.
 *
 *                  The memory addressed by sep_info is allocated by the
 *                  application.  This memory is written to by AVDTP as part
 *                  of the discovery procedure.  This memory must remain
 *                  accessible until the application receives the
 *                  AVDT_DISCOVER_CFM_EVT.
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_DiscoverReq(const RawAddress& bd_addr,
                                 tAVDT_SEP_INFO* p_sep_info, uint8_t max_seps,
                                 tAVDT_CTRL_CBACK* p_cback);

/*******************************************************************************
 *
 * Function         AVDT_GetCapReq
 *
 * Description      This function initiates a connection to the AVDTP service
 *                  on the peer device, if not already present, and gets the
 *                  capabilities of a stream endpoint on the peer device.
 *                  This function can be called at any time regardless of
 *                  whether there is an AVDTP connection to the peer device.
 *
 *                  When the procedure is complete, an AVDT_GETCAP_CFM_EVT is
 *                  sent to the application via its callback function.  The
 *                  application must not call AVDT_GetCapReq() or
 *                  AVDT_DiscoverReq() again until the procedure is complete.
 *
 *                  The memory pointed to by p_cfg is allocated by the
 *                  application.  This memory is written to by AVDTP as part
 *                  of the get capabilities procedure.  This memory must
 *                  remain accessible until the application receives
 *                  the AVDT_GETCAP_CFM_EVT.
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_GetCapReq(const RawAddress& bd_addr, uint8_t seid,
                               tAVDT_CFG* p_cfg, tAVDT_CTRL_CBACK* p_cback);

/*******************************************************************************
 *
 * Function         AVDT_GetAllCapReq
 *
 * Description      This function initiates a connection to the AVDTP service
 *                  on the peer device, if not already present, and gets the
 *                  capabilities of a stream endpoint on the peer device.
 *                  This function can be called at any time regardless of
 *                  whether there is an AVDTP connection to the peer device.
 *
 *                  When the procedure is complete, an AVDT_GETCAP_CFM_EVT is
 *                  sent to the application via its callback function.  The
 *                  application must not call AVDT_GetCapReq() or
 *                  AVDT_DiscoverReq() again until the procedure is complete.
 *
 *                  The memory pointed to by p_cfg is allocated by the
 *                  application.  This memory is written to by AVDTP as part
 *                  of the get capabilities procedure.  This memory must
 *                  remain accessible until the application receives
 *                  the AVDT_GETCAP_CFM_EVT.
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_GetAllCapReq(const RawAddress& bd_addr, uint8_t seid,
                                  tAVDT_CFG* p_cfg, tAVDT_CTRL_CBACK* p_cback);

/*******************************************************************************
 *
 * Function         AVDT_DelayReport
 *
 * Description      This functions sends a Delay Report to the peer device
 *                  that is associated with a particular SEID.
 *                  This function is called by SNK device.
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_DelayReport(uint8_t handle, uint8_t seid, uint16_t delay);

/*******************************************************************************
 *
 * Function         AVDT_OpenReq
 *
 * Description      This function initiates a connection to the AVDTP service
 *                  on the peer device, if not already present, and connects
 *                  to a stream endpoint on a peer device.  When the connection
 *                  is completed, an AVDT_OPEN_CFM_EVT is sent to the
 *                  application via the control callback function for this
 *                  handle.
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_OpenReq(uint8_t handle, const RawAddress& bd_addr,
                             uint8_t seid, tAVDT_CFG* p_cfg);

/*******************************************************************************
 *
 * Function         AVDT_ConfigRsp
 *
 * Description      Respond to a configure request from the peer device.  This
 *                  function must be called if the application receives an
 *                  AVDT_CONFIG_IND_EVT through its control callback.
 *
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_ConfigRsp(uint8_t handle, uint8_t label,
                               uint8_t error_code, uint8_t category);

/*******************************************************************************
 *
 * Function         AVDT_StartReq
 *
 * Description      Start one or more stream endpoints.  This initiates the
 *                  transfer of media packets for the streams.  All stream
 *                  endpoints must previously be opened.  When the streams
 *                  are started, an AVDT_START_CFM_EVT is sent to the
 *                  application via the control callback function for each
 *                  stream.
 *
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_StartReq(uint8_t* p_handles, uint8_t num_handles);

/*******************************************************************************
 *
 * Function         AVDT_SuspendReq
 *
 * Description      Suspend one or more stream endpoints. This suspends the
 *                  transfer of media packets for the streams.  All stream
 *                  endpoints must previously be open and started.  When the
 *                  streams are suspended, an AVDT_SUSPEND_CFM_EVT is sent to
 *                  the application via the control callback function for
 *                  each stream.
 *
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_SuspendReq(uint8_t* p_handles, uint8_t num_handles);

/*******************************************************************************
 *
 * Function         AVDT_CloseReq
 *
 * Description      Close a stream endpoint.  This stops the transfer of media
 *                  packets and closes the transport channel associated with
 *                  this stream endpoint.  When the stream is closed, an
 *                  AVDT_CLOSE_CFM_EVT is sent to the application via the
 *                  control callback function for this handle.
 *
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_CloseReq(uint8_t handle);

/*******************************************************************************
 *
 * Function         AVDT_ReconfigReq
 *
 * Description      Reconfigure a stream endpoint.  This allows the application
 *                  to change the codec or content protection capabilities of
 *                  a stream endpoint after it has been opened.  This function
 *                  can only be called if the stream is opened but not started
 *                  or if the stream has been suspended.  When the procedure
 *                  is completed, an AVDT_RECONFIG_CFM_EVT is sent to the
 *                  application via the control callback function for this
 *                  handle.
 *
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_ReconfigReq(uint8_t handle, tAVDT_CFG* p_cfg);

/*******************************************************************************
 *
 * Function         AVDT_ReconfigRsp
 *
 * Description      Respond to a reconfigure request from the peer device.
 *                  This function must be called if the application receives
 *                  an AVDT_RECONFIG_IND_EVT through its control callback.
 *
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_ReconfigRsp(uint8_t handle, uint8_t label,
                                 uint8_t error_code, uint8_t category);

/*******************************************************************************
 *
 * Function         AVDT_SecurityReq
 *
 * Description      Send a security request to the peer device.  When the
 *                  security procedure is completed, an AVDT_SECURITY_CFM_EVT
 *                  is sent to the application via the control callback function
 *                  for this handle.  (Please note that AVDTP security
 *                  procedures are unrelated to Bluetooth link level security.)
 *
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_SecurityReq(uint8_t handle, uint8_t* p_data, uint16_t len);

/*******************************************************************************
 *
 * Function         AVDT_SecurityRsp
 *
 * Description      Respond to a security request from the peer device.
 *                  This function must be called if the application receives
 *                  an AVDT_SECURITY_IND_EVT through its control callback.
 *                  (Please note that AVDTP security procedures are unrelated
 *                  to Bluetooth link level security.)
 *
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_SecurityRsp(uint8_t handle, uint8_t label,
                                 uint8_t error_code, uint8_t* p_data,
                                 uint16_t len);

/*******************************************************************************
 *
 * Function         AVDT_WriteReq
 *
 * Description      Send a media packet to the peer device.  The stream must
 *                  be started before this function is called.  Also, this
 *                  function can only be called if the stream is a SRC.
 *
 *                  When AVDTP has sent the media packet and is ready for the
 *                  next packet, an AVDT_WRITE_CFM_EVT is sent to the
 *                  application via the control callback.  The application must
 *                  wait for the AVDT_WRITE_CFM_EVT before it makes the next
 *                  call to AVDT_WriteReq().  If the applications calls
 *                  AVDT_WriteReq() before it receives the event the packet
 *                  will not be sent.  The application may make its first call
 *                  to AVDT_WriteReq() after it receives an AVDT_START_CFM_EVT
 *                  or AVDT_START_IND_EVT.
 *
 *                  The application passes the packet using the BT_HDR
 *                  structure.
 *                  This structure is described in section 2.1.  The offset
 *                  field must be equal to or greater than AVDT_MEDIA_OFFSET.
 *                  This allows enough space in the buffer for the L2CAP and
 *                  AVDTP headers.
 *
 *                  The memory pointed to by p_pkt must be a GKI buffer
 *                  allocated by the application.  This buffer will be freed
 *                  by the protocol stack; the application must not free
 *                  this buffer.
 *
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_WriteReq(uint8_t handle, BT_HDR* p_pkt,
                              uint32_t time_stamp, uint8_t m_pt);
/*******************************************************************************
 *
 * Function         AVDT_WriteReqOpt
 *
 * Description      Send a media packet to the peer device.  The stream must
 *                  be started before this function is called.  Also, this
 *                  function can only be called if the stream is a SRC
 *
 *                  When AVDTP has sent the media packet and is ready for the
 *                  next packet, an AVDT_WRITE_CFM_EVT is sent to the
 *                  application via the control callback.  The application must
 *                  wait for the AVDT_WRITE_CFM_EVT before it makes the next
 *                  call to AVDT_WriteReq().  If the applications calls
 *                  AVDT_WriteReq() before it receives the event the packet
 *                  will not be sent.  The application may make its first call
 *                  to AVDT_WriteReq() after it receives an AVDT_START_CFM_EVT
 *                  or AVDT_START_IND_EVT.
 *
 *                  The application passes the packet using the BT_HDR structure
 *                  This structure is described in section 2.1.  The offset
 *                  field must be equal to or greater than AVDT_MEDIA_OFFSET
 *                  (if NO_RTP is specified, L2CAP_MIN_OFFSET can be used)
 *                  This allows enough space in the buffer for the L2CAP and
 *                  AVDTP headers.
 *
 *                  The memory pointed to by p_pkt must be a GKI buffer
 *                  allocated by the application.  This buffer will be freed
 *                  by the protocol stack; the application must not free
 *                  this buffer.
 *
 *                  The opt parameter allows passing specific options like:
 *                  - NO_RTP : do not add the RTP header to buffer
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_WriteReqOpt(uint8_t handle, BT_HDR* p_pkt,
                                 uint32_t time_stamp, uint8_t m_pt,
                                 tAVDT_DATA_OPT_MASK opt);

/*******************************************************************************
 *
 * Function         AVDT_ConnectReq
 *
 * Description      This function initiates an AVDTP signaling connection
 *                  to the peer device.  When the connection is completed, an
 *                  AVDT_CONNECT_IND_EVT is sent to the application via its
 *                  control callback function.  If the connection attempt fails
 *                  an AVDT_DISCONNECT_IND_EVT is sent.  The security mask
 *                  parameter overrides the outgoing security mask set in
 *                  AVDT_Register().
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_ConnectReq(const RawAddress& bd_addr, uint8_t sec_mask,
                                tAVDT_CTRL_CBACK* p_cback);

/*******************************************************************************
 *
 * Function         AVDT_DisconnectReq
 *
 * Description      This function disconnect an AVDTP signaling connection
 *                  to the peer device.  When disconnected an
 *                  AVDT_DISCONNECT_IND_EVT is sent to the application via its
 *                  control callback function.
 *
 * Returns          AVDT_SUCCESS if successful, otherwise error.
 *
 ******************************************************************************/
extern uint16_t AVDT_DisconnectReq(const RawAddress& bd_addr,
                                   tAVDT_CTRL_CBACK* p_cback);

/*******************************************************************************
 *
 * Function         AVDT_GetL2CapChannel
 *
 * Description      Get the L2CAP CID used by the handle.
 *
 * Returns          CID if successful, otherwise 0.
 *
 ******************************************************************************/
extern uint16_t AVDT_GetL2CapChannel(uint8_t handle);

/*******************************************************************************
 *
 * Function         AVDT_GetSignalChannel
 *
 * Description      Get the L2CAP CID used by the signal channel of the given
 *                  handle.
 *
 * Returns          CID if successful, otherwise 0.
 *
 ******************************************************************************/
extern uint16_t AVDT_GetSignalChannel(uint8_t handle,
                                      const RawAddress& bd_addr);

/*******************************************************************************
 *
 * Function         AVDT_SendReport
 *
 * Description
 *
 *
 *
 * Returns
 *
 ******************************************************************************/
extern uint16_t AVDT_SendReport(uint8_t handle, AVDT_REPORT_TYPE type,
                                tAVDT_REPORT_DATA* p_data);

/******************************************************************************
 *
 * Function         AVDT_SetTraceLevel
 *
 * Description      Sets the trace level for AVDT. If 0xff is passed, the
 *                  current trace level is returned.
 *
 *                  Input Parameters:
 *                      new_level:  The level to set the AVDT tracing to:
 *                      0xff-returns the current setting.
 *                      0-turns off tracing.
 *                      >= 1-Errors.
 *                      >= 2-Warnings.
 *                      >= 3-APIs.
 *                      >= 4-Events.
 *                      >= 5-Debug.
 *
 * Returns          The new trace level or current trace level if
 *                  the input parameter is 0xff.
 *
 *****************************************************************************/
extern uint8_t AVDT_SetTraceLevel(uint8_t new_level);

#endif /* AVDT_API_H */
