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