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