avdt_api.h revision f7dd9f5779680da37dc89e5df2b26d436487818c
1/****************************************************************************** 2 * 3 * Copyright (C) 2002-2012 Broadcom Corporation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ******************************************************************************/ 18 19/****************************************************************************** 20 * 21 * This interface file contains the interface to the Audio Video 22 * Distribution Transport Protocol (AVDTP). 23 * 24 ******************************************************************************/ 25#ifndef AVDT_API_H 26#define AVDT_API_H 27 28#include "bt_types.h" 29#include "bt_target.h" 30 31/***************************************************************************** 32** Constants 33*****************************************************************************/ 34#ifndef AVDT_VERSION 35#define AVDT_VERSION 0x0102 36#endif 37#define AVDT_VERSION_SYNC 0x0103 38 39/* API function return value result codes. */ 40#define AVDT_SUCCESS 0 /* Function successful */ 41#define AVDT_BAD_PARAMS 1 /* Invalid parameters */ 42#define AVDT_NO_RESOURCES 2 /* Not enough resources */ 43#define AVDT_BAD_HANDLE 3 /* Bad handle */ 44#define AVDT_BUSY 4 /* A procedure is already in progress */ 45#define AVDT_WRITE_FAIL 5 /* Write failed */ 46 47/* The index to access the codec type in codec_info[]. */ 48#define AVDT_CODEC_TYPE_INDEX 2 49 50/* The size in bytes of a Adaptation Layer header. */ 51#define AVDT_AL_HDR_SIZE 3 52 53/* The size in bytes of a media packet header. */ 54#define AVDT_MEDIA_HDR_SIZE 12 55 56/* AVDTP 7.5.3 Adaptation Layer Fragmentation 57 * original length of the un-fragmented transport packet should be specified by 58 * two bytes length field of Adaptation Layer Header */ 59#define AVDT_MAX_MEDIA_SIZE (0xFFFF - AVDT_MEDIA_HDR_SIZE) 60 61/* The handle is used when reporting MULTI_AV specific events */ 62#define AVDT_MULTI_AV_HANDLE 0xFF 63 64/* The number of bytes needed by the protocol stack for the protocol headers 65** of a media packet. This is the size of the media packet header, the 66** L2CAP packet header and HCI header. 67*/ 68#define AVDT_MEDIA_OFFSET 23 69 70/* The marker bit is used by the application to mark significant events such 71** as frame boundaries in the data stream. This constant is used to check or 72** set the marker bit in the m_pt parameter of an AVDT_WriteReq() 73** or AVDT_DATA_IND_EVT. 74*/ 75#define AVDT_MARKER_SET 0x80 76 77/* SEP Type. This indicates the stream endpoint type. */ 78#define AVDT_TSEP_SRC 0 /* Source SEP */ 79#define AVDT_TSEP_SNK 1 /* Sink SEP */ 80 81/* initiator/acceptor role for adaption */ 82#define AVDT_INT 0 /* initiator */ 83#define AVDT_ACP 1 /* acceptor */ 84 85/* Media Type. This indicates the media type of the stream endpoint. */ 86#define AVDT_MEDIA_AUDIO 0 /* Audio SEP */ 87#define AVDT_MEDIA_VIDEO 1 /* Video SEP */ 88#define AVDT_MEDIA_MULTI 2 /* Multimedia SEP */ 89 90/* for reporting packets */ 91#define AVDT_RTCP_PT_SR 200 /* the packet type - SR (Sender Report) */ 92#define AVDT_RTCP_PT_RR 201 /* the packet type - RR (Receiver Report) */ 93#define AVDT_RTCP_PT_SDES 202 /* the packet type - SDES (Source Description) */ 94typedef UINT8 AVDT_REPORT_TYPE; 95 96#define AVDT_RTCP_SDES_CNAME 1 /* SDES item CNAME */ 97#ifndef AVDT_MAX_CNAME_SIZE 98#define AVDT_MAX_CNAME_SIZE 28 99#endif 100 101/* Protocol service capabilities. This indicates the protocol service 102** capabilities of a stream endpoint. This value is a mask. 103** Multiple values can be combined with a bitwise OR. 104*/ 105#define AVDT_PSC_TRANS (1<<1) /* Media transport */ 106#define AVDT_PSC_REPORT (1<<2) /* Reporting */ 107#define AVDT_PSC_RECOV (1<<3) /* Recovery */ 108#define AVDT_PSC_HDRCMP (1<<5) /* Header compression */ 109#define AVDT_PSC_MUX (1<<6) /* Multiplexing */ 110#define AVDT_PSC_DELAY_RPT (1<<8) /* Delay Report */ 111 112/* Recovery type. This indicates the recovery type. */ 113#define AVDT_RECOV_RFC2733 1 /* RFC2733 recovery */ 114 115/* Header compression capabilities. This indicates the header compression 116** capabilities. This value is a mask. Multiple values can be combined 117** with a bitwise OR. 118*/ 119#define AVDT_HDRCMP_MEDIA (1<<5) /* Available for media packets */ 120#define AVDT_HDRCMP_RECOV (1<<6) /* Available for recovery packets */ 121#define AVDT_HDRCMP_BACKCH (1<<7) /* Back channel supported */ 122 123/* Multiplexing capabilities mask. */ 124#define AVDT_MUX_FRAG (1<<7) /* Allow Adaptation Layer Fragmentation */ 125 126/* Application service category. This indicates the application 127** service category. 128*/ 129#define AVDT_ASC_PROTECT 4 /* Content protection */ 130#define AVDT_ASC_CODEC 7 /* Codec */ 131 132/* Error codes. The following are error codes defined in the AVDTP and GAVDP 133** specifications. These error codes communicate protocol errors between 134** AVDTP and the application. More detailed descriptions of the error codes 135** and their appropriate use can be found in the AVDTP and GAVDP specifications. 136** These error codes are unrelated to the result values returned by the 137** AVDTP API functions. 138*/ 139#define AVDT_ERR_HEADER 0x01 /* Bad packet header format */ 140#define AVDT_ERR_LENGTH 0x11 /* Bad packet length */ 141#define AVDT_ERR_SEID 0x12 /* Invalid SEID */ 142#define AVDT_ERR_IN_USE 0x13 /* The SEP is in use */ 143#define AVDT_ERR_NOT_IN_USE 0x14 /* The SEP is not in use */ 144#define AVDT_ERR_CATEGORY 0x17 /* Bad service category */ 145#define AVDT_ERR_PAYLOAD 0x18 /* Bad payload format */ 146#define AVDT_ERR_NSC 0x19 /* Requested command not supported */ 147#define AVDT_ERR_INVALID_CAP 0x1A /* Reconfigure attempted invalid capabilities */ 148#define AVDT_ERR_RECOV_TYPE 0x22 /* Requested recovery type not defined */ 149#define AVDT_ERR_MEDIA_TRANS 0x23 /* Media transport capability not correct */ 150#define AVDT_ERR_RECOV_FMT 0x25 /* Recovery service capability not correct */ 151#define AVDT_ERR_ROHC_FMT 0x26 /* Header compression service capability not correct */ 152#define AVDT_ERR_CP_FMT 0x27 /* Content protection service capability not correct */ 153#define AVDT_ERR_MUX_FMT 0x28 /* Multiplexing service capability not correct */ 154#define AVDT_ERR_UNSUP_CFG 0x29 /* Configuration not supported */ 155#define AVDT_ERR_BAD_STATE 0x31 /* Message cannot be processed in this state */ 156#define AVDT_ERR_REPORT_FMT 0x65 /* Report service capability not correct */ 157#define AVDT_ERR_SERVICE 0x80 /* Invalid service category */ 158#define AVDT_ERR_RESOURCE 0x81 /* Insufficient resources */ 159#define AVDT_ERR_INVALID_MCT 0xC1 /* Invalid Media Codec Type */ 160#define AVDT_ERR_UNSUP_MCT 0xC2 /* Unsupported Media Codec Type */ 161#define AVDT_ERR_INVALID_LEVEL 0xC3 /* Invalid Level */ 162#define AVDT_ERR_UNSUP_LEVEL 0xC4 /* Unsupported Level */ 163#define AVDT_ERR_INVALID_CP 0xE0 /* Invalid Content Protection Type */ 164#define AVDT_ERR_INVALID_FORMAT 0xE1 /* Invalid Content Protection format */ 165 166/* Additional error codes. This indicates error codes used by AVDTP 167** in addition to the ones defined in the specifications. 168*/ 169#define AVDT_ERR_CONNECT 0x07 /* Connection failed. */ 170#define AVDT_ERR_TIMEOUT 0x08 /* Response timeout. */ 171 172/* Control callback events. */ 173#define AVDT_DISCOVER_CFM_EVT 0 /* Discover confirm */ 174#define AVDT_GETCAP_CFM_EVT 1 /* Get capabilities confirm */ 175#define AVDT_OPEN_CFM_EVT 2 /* Open confirm */ 176#define AVDT_OPEN_IND_EVT 3 /* Open indication */ 177#define AVDT_CONFIG_IND_EVT 4 /* Configuration indication */ 178#define AVDT_START_CFM_EVT 5 /* Start confirm */ 179#define AVDT_START_IND_EVT 6 /* Start indication */ 180#define AVDT_SUSPEND_CFM_EVT 7 /* Suspend confirm */ 181#define AVDT_SUSPEND_IND_EVT 8 /* Suspend indication */ 182#define AVDT_CLOSE_CFM_EVT 9 /* Close confirm */ 183#define AVDT_CLOSE_IND_EVT 10 /* Close indication */ 184#define AVDT_RECONFIG_CFM_EVT 11 /* Reconfiguration confirm */ 185#define AVDT_RECONFIG_IND_EVT 12 /* Reconfiguration indication */ 186#define AVDT_SECURITY_CFM_EVT 13 /* Security confirm */ 187#define AVDT_SECURITY_IND_EVT 14 /* Security indication */ 188#define AVDT_WRITE_CFM_EVT 15 /* Write confirm */ 189#define AVDT_CONNECT_IND_EVT 16 /* Signaling channel connected */ 190#define AVDT_DISCONNECT_IND_EVT 17 /* Signaling channel disconnected */ 191#define AVDT_REPORT_CONN_EVT 18 /* Reporting channel connected */ 192#define AVDT_REPORT_DISCONN_EVT 19 /* Reporting channel disconnected */ 193#define AVDT_DELAY_REPORT_EVT 20 /* Delay report received */ 194#define AVDT_DELAY_REPORT_CFM_EVT 21 /* Delay report response received */ 195 196#define AVDT_MAX_EVT (AVDT_DELAY_REPORT_CFM_EVT) 197 198/* PSM for AVDT */ 199#define AVDT_PSM 0x0019 200 201/* Nonsupported protocol command messages. This value is used in tAVDT_CS */ 202#define AVDT_NSC_SUSPEND 0x01 /* Suspend command not supported */ 203#define AVDT_NSC_RECONFIG 0x02 /* Reconfigure command not supported */ 204#define AVDT_NSC_SECURITY 0x04 /* Security command not supported */ 205 206/***************************************************************************** 207** Type Definitions 208*****************************************************************************/ 209 210typedef struct 211{ 212 UINT32 ntp_sec; /* NTP time: seconds relative to 0h UTC on 1 January 1900 */ 213 UINT32 ntp_frac; /* NTP time: the fractional part */ 214 UINT32 rtp_time; /* timestamp in RTP header */ 215 UINT32 pkt_count; /* sender's packet count: since starting transmission 216 * up until the time this SR packet was generated. */ 217 UINT32 octet_count; /* sender's octet count: same comment */ 218} tAVDT_SENDER_INFO; 219 220typedef struct 221{ 222 UINT8 frag_lost; /* fraction lost since last RR */ 223 UINT32 packet_lost; /* cumulative number of packets lost since the beginning */ 224 UINT32 seq_num_rcvd; /* extended highest sequence number received */ 225 UINT32 jitter; /* interarrival jitter */ 226 UINT32 lsr; /* last SR timestamp */ 227 UINT32 dlsr; /* delay since last SR */ 228} tAVDT_REPORT_BLK; 229 230typedef union 231{ 232 tAVDT_SENDER_INFO sr; 233 tAVDT_REPORT_BLK rr; 234 UINT8 cname[AVDT_MAX_CNAME_SIZE + 1]; 235} tAVDT_REPORT_DATA; 236 237/* This structure contains parameters which are set at registration. */ 238typedef struct { 239 UINT16 ctrl_mtu; /* L2CAP MTU of the AVDTP signaling channel */ 240 UINT8 ret_tout; /* AVDTP signaling retransmission timeout */ 241 UINT8 sig_tout; /* AVDTP signaling message timeout */ 242 UINT8 idle_tout; /* AVDTP idle signaling channel timeout */ 243 UINT8 sec_mask; /* Security mask for BTM_SetSecurityLevel() */ 244} tAVDT_REG; 245 246/* This structure contains the SEP information. This information is 247** transferred during the discovery procedure. 248*/ 249typedef struct { 250 BOOLEAN in_use; /* TRUE if stream is currently in use */ 251 UINT8 seid; /* Stream endpoint identifier */ 252 UINT8 media_type; /* Media type */ 253 UINT8 tsep; /* SEP type */ 254} tAVDT_SEP_INFO; 255 256/* This structure contains the SEP configuration. */ 257typedef struct { 258 UINT8 codec_info[AVDT_CODEC_SIZE]; /* Codec capabilities array */ 259 UINT8 protect_info[AVDT_PROTECT_SIZE]; /* Content protection capabilities */ 260 UINT8 num_codec; /* Number of media codec information elements */ 261 UINT8 num_protect; /* Number of content protection information elements */ 262 UINT16 psc_mask; /* Protocol service capabilities mask */ 263 UINT8 recov_type; /* Recovery type */ 264 UINT8 recov_mrws; /* Maximum recovery window size */ 265 UINT8 recov_mnmp; /* Recovery maximum number of media packets */ 266 UINT8 hdrcmp_mask; /* Header compression capabilities */ 267#if AVDT_MULTIPLEXING == TRUE 268 UINT8 mux_mask; /* Multiplexing capabilities. AVDT_MUX_XXX bits can be combined with a bitwise OR */ 269 UINT8 mux_tsid_media; /* TSID for media transport session */ 270 UINT8 mux_tcid_media; /* TCID for media transport session */ 271 UINT8 mux_tsid_report; /* TSID for reporting transport session */ 272 UINT8 mux_tcid_report; /* TCID for reporting transport session */ 273 UINT8 mux_tsid_recov; /* TSID for recovery transport session */ 274 UINT8 mux_tcid_recov; /* TCID for recovery transport session */ 275#endif 276} tAVDT_CFG; 277 278/* Header structure for callback event parameters. */ 279typedef struct { 280 UINT8 err_code; /* Zero if operation succeeded; nonzero if operation failed */ 281 UINT8 err_param; /* Error parameter included for some events */ 282 UINT8 label; /* Transaction label */ 283 UINT8 seid; /* For internal use only */ 284 UINT8 sig_id; /* For internal use only */ 285 UINT8 ccb_idx; /* For internal use only */ 286} tAVDT_EVT_HDR; 287 288/* This data structure is associated with the AVDT_GETCAP_CFM_EVT, 289** AVDT_RECONFIG_IND_EVT, and AVDT_RECONFIG_CFM_EVT. 290*/ 291typedef struct { 292 tAVDT_EVT_HDR hdr; /* Event header */ 293 tAVDT_CFG *p_cfg; /* Pointer to configuration for this SEP */ 294} tAVDT_CONFIG; 295 296/* This data structure is associated with the AVDT_CONFIG_IND_EVT. */ 297typedef struct { 298 tAVDT_EVT_HDR hdr; /* Event header */ 299 tAVDT_CFG *p_cfg; /* Pointer to configuration for this SEP */ 300 UINT8 int_seid; /* Stream endpoint ID of stream initiating the operation */ 301} tAVDT_SETCONFIG; 302 303/* This data structure is associated with the AVDT_OPEN_IND_EVT and AVDT_OPEN_CFM_EVT. */ 304typedef struct { 305 tAVDT_EVT_HDR hdr; /* Event header */ 306 UINT16 peer_mtu; /* Transport channel L2CAP MTU of the peer */ 307 UINT16 lcid; /* L2CAP LCID for media channel */ 308} tAVDT_OPEN; 309 310/* This data structure is associated with the AVDT_SECURITY_IND_EVT 311** and AVDT_SECURITY_CFM_EVT. 312*/ 313typedef struct { 314 tAVDT_EVT_HDR hdr; /* Event header */ 315 UINT8 *p_data; /* Pointer to security data */ 316 UINT16 len; /* Length in bytes of the security data */ 317} tAVDT_SECURITY; 318 319/* This data structure is associated with the AVDT_DISCOVER_CFM_EVT. */ 320typedef struct { 321 tAVDT_EVT_HDR hdr; /* Event header */ 322 tAVDT_SEP_INFO *p_sep_info; /* Pointer to SEP information */ 323 UINT8 num_seps; /* Number of stream endpoints */ 324} tAVDT_DISCOVER; 325 326/* This data structure is associated with the AVDT_DELAY_REPORT_EVT. */ 327typedef struct { 328 tAVDT_EVT_HDR hdr; /* Event header */ 329 UINT16 delay; /* Delay value */ 330} tAVDT_DELAY_RPT; 331 332/* Union of all control callback event data structures */ 333typedef union { 334 tAVDT_EVT_HDR hdr; 335 tAVDT_DISCOVER discover_cfm; 336 tAVDT_CONFIG getcap_cfm; 337 tAVDT_OPEN open_cfm; 338 tAVDT_OPEN open_ind; 339 tAVDT_SETCONFIG config_ind; 340 tAVDT_EVT_HDR start_cfm; 341 tAVDT_EVT_HDR suspend_cfm; 342 tAVDT_EVT_HDR close_cfm; 343 tAVDT_CONFIG reconfig_cfm; 344 tAVDT_CONFIG reconfig_ind; 345 tAVDT_SECURITY security_cfm; 346 tAVDT_SECURITY security_ind; 347 tAVDT_EVT_HDR connect_ind; 348 tAVDT_EVT_HDR disconnect_ind; 349 tAVDT_EVT_HDR report_conn; 350 tAVDT_DELAY_RPT delay_rpt_cmd; 351} tAVDT_CTRL; 352 353/* This is the control callback function. This function passes control events 354** to the application. This function is required for all registered stream 355** endpoints and for the AVDT_DiscoverReq() and AVDT_GetCapReq() functions. 356** 357*/ 358typedef void (tAVDT_CTRL_CBACK)(UINT8 handle, BD_ADDR bd_addr, UINT8 event, 359 tAVDT_CTRL *p_data); 360 361/* This is the data callback function. It is executed when AVDTP has a media 362** packet ready for the application. This function is required for SNK 363** endpoints and not applicable for SRC endpoints. 364*/ 365typedef void (tAVDT_DATA_CBACK)(UINT8 handle, BT_HDR *p_pkt, UINT32 time_stamp, 366 UINT8 m_pt); 367 368#if AVDT_MULTIPLEXING == TRUE 369/* This is the second version of the data callback function. This version uses 370** application buffer assigned by AVDT_SetMediaBuf. Caller can assign different 371** buffer during callback or can leave the current buffer for further using. 372** This callback is called when AVDTP has a media packet ready for the application. 373** This function is required for SNK endpoints and not applicable for SRC endpoints. 374*/ 375typedef void (tAVDT_MEDIA_CBACK)(UINT8 handle, UINT8 *p_payload, UINT32 payload_len, 376 UINT32 time_stamp, UINT16 seq_num, UINT8 m_pt, UINT8 marker); 377#endif 378 379#if AVDT_REPORTING == TRUE 380/* This is the report callback function. It is executed when AVDTP has a reporting 381** packet ready for the application. This function is required for streams 382** created with AVDT_PSC_REPORT. 383*/ 384typedef void (tAVDT_REPORT_CBACK)(UINT8 handle, AVDT_REPORT_TYPE type, 385 tAVDT_REPORT_DATA *p_data); 386#endif 387 388typedef UINT16 (tAVDT_GETCAP_REQ) (BD_ADDR bd_addr, UINT8 seid, tAVDT_CFG *p_cfg, tAVDT_CTRL_CBACK *p_cback); 389 390/* This structure contains information required when a stream is created. 391** It is passed to the AVDT_CreateStream() function. 392*/ 393typedef struct { 394 tAVDT_CFG cfg; /* SEP configuration */ 395 tAVDT_CTRL_CBACK *p_ctrl_cback; /* Control callback function */ 396 tAVDT_DATA_CBACK *p_data_cback; /* Data callback function */ 397#if AVDT_MULTIPLEXING == TRUE 398 tAVDT_MEDIA_CBACK *p_media_cback; /* Media callback function. It will be called only if p_data_cback is NULL */ 399#endif 400#if AVDT_REPORTING == TRUE 401 tAVDT_REPORT_CBACK *p_report_cback;/* Report callback function. */ 402#endif 403 UINT16 mtu; /* The L2CAP MTU of the transport channel */ 404 UINT16 flush_to; /* The L2CAP flush timeout of the transport channel */ 405 UINT8 tsep; /* SEP type */ 406 UINT8 media_type; /* Media type */ 407 UINT16 nsc_mask; /* Nonsupported protocol command messages */ 408} tAVDT_CS; 409 410/* AVDT data option mask is used in the write request */ 411#define AVDT_DATA_OPT_NONE 0x00 /* No option still add RTP header */ 412#define AVDT_DATA_OPT_NO_RTP (0x01 << 0) /* Skip adding RTP header */ 413 414typedef UINT8 tAVDT_DATA_OPT_MASK; 415 416 417 418/***************************************************************************** 419** External Function Declarations 420*****************************************************************************/ 421#ifdef __cplusplus 422extern "C" 423{ 424#endif 425 426/******************************************************************************* 427** 428** Function AVDT_Register 429** 430** Description This is the system level registration function for the 431** AVDTP protocol. This function initializes AVDTP and 432** prepares the protocol stack for its use. This function 433** must be called once by the system or platform using AVDTP 434** before the other functions of the API an be used. 435** 436** 437** Returns void 438** 439*******************************************************************************/ 440AVDT_API extern void AVDT_Register(tAVDT_REG *p_reg, tAVDT_CTRL_CBACK *p_cback); 441 442/******************************************************************************* 443** 444** Function AVDT_Deregister 445** 446** Description This function is called to deregister use AVDTP protocol. 447** It is called when AVDTP is no longer being used by any 448** application in the system. Before this function can be 449** called, all streams must be removed with AVDT_RemoveStream(). 450** 451** 452** Returns void 453** 454*******************************************************************************/ 455AVDT_API extern void AVDT_Deregister(void); 456 457 458/******************************************************************************* 459** 460** Function AVDT_SINK_Activate 461** 462** Description Activate SEP of A2DP Sink. In Use parameter is adjusted. 463** In Use will be made false in case of activation. A2DP SRC 464** will receive in_use as false and can open A2DP Sink 465** connection 466** 467** Returns void 468** 469*******************************************************************************/ 470AVDT_API extern void AVDT_SINK_Activate(void); 471 472/******************************************************************************* 473** 474** Function AVDT_SINK_Deactivate 475** 476** Description Deactivate SEP of A2DP Sink. In Use parameter is adjusted. 477** In Use will be made TRUE in case of activation. A2DP SRC 478** will receive in_use as true and will not open A2DP Sink 479** connection 480** 481** Returns void. 482** 483*******************************************************************************/ 484AVDT_API extern void AVDT_SINK_Deactivate(void); 485 486/******************************************************************************* 487** 488** Function AVDT_CreateStream 489** 490** Description Create a stream endpoint. After a stream endpoint is 491** created an application can initiate a connection between 492** this endpoint and an endpoint on a peer device. In 493** addition, a peer device can discover, get the capabilities, 494** and connect to this endpoint. 495** 496** 497** Returns AVDT_SUCCESS if successful, otherwise error. 498** 499*******************************************************************************/ 500AVDT_API extern UINT16 AVDT_CreateStream(UINT8 *p_handle, tAVDT_CS *p_cs); 501 502/******************************************************************************* 503** 504** Function AVDT_RemoveStream 505** 506** Description Remove a stream endpoint. This function is called when 507** the application is no longer using a stream endpoint. 508** If this function is called when the endpoint is connected 509** the connection is closed and then the stream endpoint 510** is removed. 511** 512** 513** Returns AVDT_SUCCESS if successful, otherwise error. 514** 515*******************************************************************************/ 516AVDT_API extern UINT16 AVDT_RemoveStream(UINT8 handle); 517 518/******************************************************************************* 519** 520** Function AVDT_DiscoverReq 521** 522** Description This function initiates a connection to the AVDTP service 523** on the peer device, if not already present, and discovers 524** the stream endpoints on the peer device. (Please note 525** that AVDTP discovery is unrelated to SDP discovery). 526** This function can be called at any time regardless of whether 527** there is an AVDTP connection to the peer device. 528** 529** When discovery is complete, an AVDT_DISCOVER_CFM_EVT 530** is sent to the application via its callback function. 531** The application must not call AVDT_GetCapReq() or 532** AVDT_DiscoverReq() again to the same device until 533** discovery is complete. 534** 535** The memory addressed by sep_info is allocated by the 536** application. This memory is written to by AVDTP as part 537** of the discovery procedure. This memory must remain 538** accessible until the application receives the 539** AVDT_DISCOVER_CFM_EVT. 540** 541** Returns AVDT_SUCCESS if successful, otherwise error. 542** 543*******************************************************************************/ 544AVDT_API extern UINT16 AVDT_DiscoverReq(BD_ADDR bd_addr, tAVDT_SEP_INFO *p_sep_info, 545 UINT8 max_seps, tAVDT_CTRL_CBACK *p_cback); 546 547 548/******************************************************************************* 549** 550** Function AVDT_GetCapReq 551** 552** Description This function initiates a connection to the AVDTP service 553** on the peer device, if not already present, and gets the 554** capabilities of a stream endpoint on the peer device. 555** This function can be called at any time regardless of 556** whether there is an AVDTP connection to the peer device. 557** 558** When the procedure is complete, an AVDT_GETCAP_CFM_EVT is 559** sent to the application via its callback function. The 560** application must not call AVDT_GetCapReq() or 561** AVDT_DiscoverReq() again until the procedure is complete. 562** 563** The memory pointed to by p_cfg is allocated by the 564** application. This memory is written to by AVDTP as part 565** of the get capabilities procedure. This memory must 566** remain accessible until the application receives 567** the AVDT_GETCAP_CFM_EVT. 568** 569** Returns AVDT_SUCCESS if successful, otherwise error. 570** 571*******************************************************************************/ 572AVDT_API extern UINT16 AVDT_GetCapReq(BD_ADDR bd_addr, UINT8 seid, tAVDT_CFG *p_cfg, 573 tAVDT_CTRL_CBACK *p_cback); 574 575/******************************************************************************* 576** 577** Function AVDT_GetAllCapReq 578** 579** Description This function initiates a connection to the AVDTP service 580** on the peer device, if not already present, and gets the 581** capabilities of a stream endpoint on the peer device. 582** This function can be called at any time regardless of 583** whether there is an AVDTP connection to the peer device. 584** 585** When the procedure is complete, an AVDT_GETCAP_CFM_EVT is 586** sent to the application via its callback function. The 587** application must not call AVDT_GetCapReq() or 588** AVDT_DiscoverReq() again until the procedure is complete. 589** 590** The memory pointed to by p_cfg is allocated by the 591** application. This memory is written to by AVDTP as part 592** of the get capabilities procedure. This memory must 593** remain accessible until the application receives 594** the AVDT_GETCAP_CFM_EVT. 595** 596** Returns AVDT_SUCCESS if successful, otherwise error. 597** 598*******************************************************************************/ 599AVDT_API extern UINT16 AVDT_GetAllCapReq(BD_ADDR bd_addr, UINT8 seid, tAVDT_CFG *p_cfg, 600 tAVDT_CTRL_CBACK *p_cback); 601 602/******************************************************************************* 603** 604** Function AVDT_DelayReport 605** 606** Description This functions sends a Delay Report to the peer device 607** that is associated with a particular SEID. 608** This function is called by SNK device. 609** 610** Returns AVDT_SUCCESS if successful, otherwise error. 611** 612*******************************************************************************/ 613AVDT_API extern UINT16 AVDT_DelayReport(UINT8 handle, UINT8 seid, UINT16 delay); 614 615/******************************************************************************* 616** 617** Function AVDT_OpenReq 618** 619** Description This function initiates a connection to the AVDTP service 620** on the peer device, if not already present, and connects 621** to a stream endpoint on a peer device. When the connection 622** is completed, an AVDT_OPEN_CFM_EVT is sent to the 623** application via the control callback function for this handle. 624** 625** Returns AVDT_SUCCESS if successful, otherwise error. 626** 627*******************************************************************************/ 628AVDT_API extern UINT16 AVDT_OpenReq(UINT8 handle, BD_ADDR bd_addr, UINT8 seid, 629 tAVDT_CFG *p_cfg); 630 631 632/******************************************************************************* 633** 634** Function AVDT_ConfigRsp 635** 636** Description Respond to a configure request from the peer device. This 637** function must be called if the application receives an 638** AVDT_CONFIG_IND_EVT through its control callback. 639** 640** 641** Returns AVDT_SUCCESS if successful, otherwise error. 642** 643*******************************************************************************/ 644AVDT_API extern UINT16 AVDT_ConfigRsp(UINT8 handle, UINT8 label, UINT8 error_code, 645 UINT8 category); 646 647/******************************************************************************* 648** 649** Function AVDT_StartReq 650** 651** Description Start one or more stream endpoints. This initiates the 652** transfer of media packets for the streams. All stream 653** endpoints must previously be opened. When the streams 654** are started, an AVDT_START_CFM_EVT is sent to the 655** application via the control callback function for each stream. 656** 657** 658** Returns AVDT_SUCCESS if successful, otherwise error. 659** 660*******************************************************************************/ 661AVDT_API extern UINT16 AVDT_StartReq(UINT8 *p_handles, UINT8 num_handles); 662 663/******************************************************************************* 664** 665** Function AVDT_SuspendReq 666** 667** Description Suspend one or more stream endpoints. This suspends the 668** transfer of media packets for the streams. All stream 669** endpoints must previously be open and started. When the 670** streams are suspended, an AVDT_SUSPEND_CFM_EVT is sent to 671** the application via the control callback function for 672** each stream. 673** 674** 675** Returns AVDT_SUCCESS if successful, otherwise error. 676** 677*******************************************************************************/ 678AVDT_API extern UINT16 AVDT_SuspendReq(UINT8 *p_handles, UINT8 num_handles); 679 680/******************************************************************************* 681** 682** Function AVDT_CloseReq 683** 684** Description Close a stream endpoint. This stops the transfer of media 685** packets and closes the transport channel associated with 686** this stream endpoint. When the stream is closed, an 687** AVDT_CLOSE_CFM_EVT is sent to the application via the 688** control callback function for this handle. 689** 690** 691** Returns AVDT_SUCCESS if successful, otherwise error. 692** 693*******************************************************************************/ 694AVDT_API extern UINT16 AVDT_CloseReq(UINT8 handle); 695 696/******************************************************************************* 697** 698** Function AVDT_ReconfigReq 699** 700** Description Reconfigure a stream endpoint. This allows the application 701** to change the codec or content protection capabilities of 702** a stream endpoint after it has been opened. This function 703** can only be called if the stream is opened but not started 704** or if the stream has been suspended. When the procedure 705** is completed, an AVDT_RECONFIG_CFM_EVT is sent to the 706** application via the control callback function for this handle. 707** 708** 709** Returns AVDT_SUCCESS if successful, otherwise error. 710** 711*******************************************************************************/ 712AVDT_API extern UINT16 AVDT_ReconfigReq(UINT8 handle, tAVDT_CFG *p_cfg); 713 714/******************************************************************************* 715** 716** Function AVDT_ReconfigRsp 717** 718** Description Respond to a reconfigure request from the peer device. 719** This function must be called if the application receives 720** an AVDT_RECONFIG_IND_EVT through its control callback. 721** 722** 723** Returns AVDT_SUCCESS if successful, otherwise error. 724** 725*******************************************************************************/ 726AVDT_API extern UINT16 AVDT_ReconfigRsp(UINT8 handle, UINT8 label, UINT8 error_code, 727 UINT8 category); 728 729/******************************************************************************* 730** 731** Function AVDT_SecurityReq 732** 733** Description Send a security request to the peer device. When the 734** security procedure is completed, an AVDT_SECURITY_CFM_EVT 735** is sent to the application via the control callback function 736** for this handle. (Please note that AVDTP security procedures 737** are unrelated to Bluetooth link level security.) 738** 739** 740** Returns AVDT_SUCCESS if successful, otherwise error. 741** 742*******************************************************************************/ 743AVDT_API extern UINT16 AVDT_SecurityReq(UINT8 handle, UINT8 *p_data, UINT16 len); 744 745/******************************************************************************* 746** 747** Function AVDT_SecurityRsp 748** 749** Description Respond to a security request from the peer device. 750** This function must be called if the application receives 751** an AVDT_SECURITY_IND_EVT through its control callback. 752** (Please note that AVDTP security procedures are unrelated 753** to Bluetooth link level security.) 754** 755** 756** Returns AVDT_SUCCESS if successful, otherwise error. 757** 758*******************************************************************************/ 759AVDT_API extern UINT16 AVDT_SecurityRsp(UINT8 handle, UINT8 label, UINT8 error_code, 760 UINT8 *p_data, UINT16 len); 761 762/******************************************************************************* 763** 764** Function AVDT_WriteReq 765** 766** Description Send a media packet to the peer device. The stream must 767** be started before this function is called. Also, this 768** function can only be called if the stream is a SRC. 769** 770** When AVDTP has sent the media packet and is ready for the 771** next packet, an AVDT_WRITE_CFM_EVT is sent to the 772** application via the control callback. The application must 773** wait for the AVDT_WRITE_CFM_EVT before it makes the next 774** call to AVDT_WriteReq(). If the applications calls 775** AVDT_WriteReq() before it receives the event the packet 776** will not be sent. The application may make its first call 777** to AVDT_WriteReq() after it receives an AVDT_START_CFM_EVT 778** or AVDT_START_IND_EVT. 779** 780** The application passes the packet using the BT_HDR structure. 781** This structure is described in section 2.1. The offset 782** field must be equal to or greater than AVDT_MEDIA_OFFSET. 783** This allows enough space in the buffer for the L2CAP and 784** AVDTP headers. 785** 786** The memory pointed to by p_pkt must be a GKI buffer 787** allocated by the application. This buffer will be freed 788** by the protocol stack; the application must not free 789** this buffer. 790** 791** 792** Returns AVDT_SUCCESS if successful, otherwise error. 793** 794*******************************************************************************/ 795AVDT_API extern UINT16 AVDT_WriteReq(UINT8 handle, BT_HDR *p_pkt, UINT32 time_stamp, 796 UINT8 m_pt); 797/******************************************************************************* 798** 799** Function AVDT_WriteReqOpt 800** 801** Description Send a media packet to the peer device. The stream must 802** be started before this function is called. Also, this 803** function can only be called if the stream is a SRC 804** 805** When AVDTP has sent the media packet and is ready for the 806** next packet, an AVDT_WRITE_CFM_EVT is sent to the 807** application via the control callback. The application must 808** wait for the AVDT_WRITE_CFM_EVT before it makes the next 809** call to AVDT_WriteReq(). If the applications calls 810** AVDT_WriteReq() before it receives the event the packet 811** will not be sent. The application may make its first call 812** to AVDT_WriteReq() after it receives an AVDT_START_CFM_EVT 813** or AVDT_START_IND_EVT. 814** 815** The application passes the packet using the BT_HDR structure 816** This structure is described in section 2.1. The offset 817** field must be equal to or greater than AVDT_MEDIA_OFFSET 818** (if NO_RTP is specified, L2CAP_MIN_OFFSET can be used) 819** This allows enough space in the buffer for the L2CAP and 820** AVDTP headers. 821** 822** The memory pointed to by p_pkt must be a GKI buffer 823** allocated by the application. This buffer will be freed 824** by the protocol stack; the application must not free 825** this buffer. 826** 827** The opt parameter allows passing specific options like: 828** - NO_RTP : do not add the RTP header to buffer 829** 830** Returns AVDT_SUCCESS if successful, otherwise error. 831** 832*******************************************************************************/ 833AVDT_API extern UINT16 AVDT_WriteReqOpt(UINT8 handle, BT_HDR *p_pkt, UINT32 time_stamp, 834 UINT8 m_pt, tAVDT_DATA_OPT_MASK opt); 835 836/******************************************************************************* 837** 838** Function AVDT_ConnectReq 839** 840** Description This function initiates an AVDTP signaling connection 841** to the peer device. When the connection is completed, an 842** AVDT_CONNECT_IND_EVT is sent to the application via its 843** control callback function. If the connection attempt fails 844** an AVDT_DISCONNECT_IND_EVT is sent. The security mask 845** parameter overrides the outgoing security mask set in 846** AVDT_Register(). 847** 848** Returns AVDT_SUCCESS if successful, otherwise error. 849** 850*******************************************************************************/ 851AVDT_API extern UINT16 AVDT_ConnectReq(BD_ADDR bd_addr, UINT8 sec_mask, 852 tAVDT_CTRL_CBACK *p_cback); 853 854/******************************************************************************* 855** 856** Function AVDT_DisconnectReq 857** 858** Description This function disconnect an AVDTP signaling connection 859** to the peer device. When disconnected an 860** AVDT_DISCONNECT_IND_EVT is sent to the application via its 861** control callback function. 862** 863** Returns AVDT_SUCCESS if successful, otherwise error. 864** 865*******************************************************************************/ 866AVDT_API extern UINT16 AVDT_DisconnectReq(BD_ADDR bd_addr, tAVDT_CTRL_CBACK *p_cback); 867 868/******************************************************************************* 869** 870** Function AVDT_GetL2CapChannel 871** 872** Description Get the L2CAP CID used by the handle. 873** 874** Returns CID if successful, otherwise 0. 875** 876*******************************************************************************/ 877AVDT_API extern UINT16 AVDT_GetL2CapChannel(UINT8 handle); 878 879/******************************************************************************* 880** 881** Function AVDT_GetSignalChannel 882** 883** Description Get the L2CAP CID used by the signal channel of the given handle. 884** 885** Returns CID if successful, otherwise 0. 886** 887*******************************************************************************/ 888AVDT_API extern UINT16 AVDT_GetSignalChannel(UINT8 handle, BD_ADDR bd_addr); 889 890/******************************************************************************* 891** 892** Function AVDT_WriteDataReq 893** 894** Description Send a media packet to the peer device. The stream must 895** be started before this function is called. Also, this 896** function can only be called if the stream is a SRC. 897** 898** When AVDTP has sent the media packet and is ready for the 899** next packet, an AVDT_WRITE_CFM_EVT is sent to the 900** application via the control callback. The application must 901** wait for the AVDT_WRITE_CFM_EVT before it makes the next 902** call to AVDT_WriteDataReq(). If the applications calls 903** AVDT_WriteDataReq() before it receives the event the packet 904** will not be sent. The application may make its first call 905** to AVDT_WriteDataReq() after it receives an 906** AVDT_START_CFM_EVT or AVDT_START_IND_EVT. 907** 908** Returns AVDT_SUCCESS if successful, otherwise error. 909** 910*******************************************************************************/ 911AVDT_API extern UINT16 AVDT_WriteDataReq(UINT8 handle, UINT8 *p_data, UINT32 data_len, 912 UINT32 time_stamp, UINT8 m_pt, UINT8 marker); 913 914/******************************************************************************* 915** 916** Function AVDT_SetMediaBuf 917** 918** Description Assigns buffer for media packets or forbids using of assigned 919** buffer if argument p_buf is NULL. This function can only 920** be called if the stream is a SNK. 921** 922** AVDTP uses this buffer to reassemble fragmented media packets. 923** When AVDTP receives a complete media packet, it calls the 924** p_media_cback assigned by AVDT_CreateStream(). 925** This function can be called during callback to assign a 926** different buffer for next media packet or can leave the current 927** buffer for next packet. 928** 929** Returns AVDT_SUCCESS if successful, otherwise error. 930** 931*******************************************************************************/ 932AVDT_API extern UINT16 AVDT_SetMediaBuf(UINT8 handle, UINT8 *p_buf, UINT32 buf_len); 933 934/******************************************************************************* 935** 936** Function AVDT_SendReport 937** 938** Description 939** 940** 941** 942** Returns 943** 944*******************************************************************************/ 945AVDT_API extern UINT16 AVDT_SendReport(UINT8 handle, AVDT_REPORT_TYPE type, 946 tAVDT_REPORT_DATA *p_data); 947 948/****************************************************************************** 949** 950** Function AVDT_SetTraceLevel 951** 952** Description Sets the trace level for AVDT. If 0xff is passed, the 953** current trace level is returned. 954** 955** Input Parameters: 956** new_level: The level to set the AVDT tracing to: 957** 0xff-returns the current setting. 958** 0-turns off tracing. 959** >= 1-Errors. 960** >= 2-Warnings. 961** >= 3-APIs. 962** >= 4-Events. 963** >= 5-Debug. 964** 965** Returns The new trace level or current trace level if 966** the input parameter is 0xff. 967** 968******************************************************************************/ 969AVDT_API extern UINT8 AVDT_SetTraceLevel (UINT8 new_level); 970 971#ifdef __cplusplus 972} 973#endif 974 975 976#endif /* AVDT_API_H */ 977