1/****************************************************************************** 2 * 3 * Copyright (C) 2004-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 is the public interface file for the advanced audio/video streaming 22 * (AV) subsystem of BTA, Broadcom's Bluetooth application layer for mobile 23 * phones. 24 * 25 ******************************************************************************/ 26#ifndef BTA_AV_API_H 27#define BTA_AV_API_H 28 29#include "a2dp_codec_api.h" 30#include "avdt_api.h" 31#include "avrc_api.h" 32#include "bta_api.h" 33 34/***************************************************************************** 35 * Constants and data types 36 ****************************************************************************/ 37/* Set to TRUE if seperate authorization prompt desired for AVCTP besides A2DP 38 * authorization */ 39/* Typically FALSE when AVRCP is used in conjunction with A2DP */ 40#ifndef BTA_AV_WITH_AVCTP_AUTHORIZATION 41#define BTA_AV_WITH_AVCTP_AUTHORIZATION FALSE 42#endif 43 44/* AV status values */ 45#define BTA_AV_SUCCESS 0 /* successful operation */ 46#define BTA_AV_FAIL 1 /* generic failure */ 47#define BTA_AV_FAIL_SDP 2 /* service not found */ 48#define BTA_AV_FAIL_STREAM 3 /* stream connection failed */ 49#define BTA_AV_FAIL_RESOURCES 4 /* no resources */ 50#define BTA_AV_FAIL_ROLE 5 /* failed due to role management related issues */ 51#define BTA_AV_FAIL_GET_CAP \ 52 6 /* get capability failed due to no SEP availale on the peer */ 53 54typedef uint8_t tBTA_AV_STATUS; 55 56/* AV features masks */ 57#define BTA_AV_FEAT_RCTG 0x0001 /* remote control target */ 58#define BTA_AV_FEAT_RCCT 0x0002 /* remote control controller */ 59#define BTA_AV_FEAT_PROTECT 0x0004 /* streaming media contect protection */ 60#define BTA_AV_FEAT_VENDOR \ 61 0x0008 /* remote control vendor dependent commands \ 62 */ 63#define BTA_AV_FEAT_REPORT 0x0020 /* use reporting service for VDP */ 64#define BTA_AV_FEAT_METADATA \ 65 0x0040 /* remote control Metadata Transfer command/response */ 66#define BTA_AV_FEAT_MULTI_AV \ 67 0x0080 /* use multi-av, if controller supports it */ 68#define BTA_AV_FEAT_BROWSE 0x0010 /* use browsing channel */ 69#define BTA_AV_FEAT_MASTER 0x0100 /* stream only as master role */ 70#define BTA_AV_FEAT_ADV_CTRL \ 71 0x0200 /* remote control Advanced Control command/response */ 72#define BTA_AV_FEAT_DELAY_RPT 0x0400 /* allow delay reporting */ 73#define BTA_AV_FEAT_ACP_START \ 74 0x0800 /* start stream when 2nd SNK was accepted */ 75#define BTA_AV_FEAT_APP_SETTING 0x2000 /* Player app setting support */ 76 77/* Internal features */ 78#define BTA_AV_FEAT_NO_SCO_SSPD \ 79 0x8000 /* Do not suspend av streaming as to AG events(SCO or Call) */ 80 81typedef uint16_t tBTA_AV_FEAT; 82 83/* AV channel values */ 84#define BTA_AV_CHNL_MSK 0xC0 85#define BTA_AV_CHNL_AUDIO 0x40 /* audio channel */ 86#define BTA_AV_CHNL_VIDEO 0x80 /* video channel */ 87typedef uint8_t tBTA_AV_CHNL; 88 89#define BTA_AV_HNDL_MSK 0x3F 90typedef uint8_t tBTA_AV_HNDL; 91/* handle index to mask */ 92#define BTA_AV_HNDL_TO_MSK(h) ((uint8_t)(1 << (h))) 93 94/* maximum number of streams created: 1 for audio, 1 for video */ 95#ifndef BTA_AV_NUM_STRS 96#define BTA_AV_NUM_STRS 2 97#endif 98 99#ifndef BTA_AV_MAX_A2DP_MTU 100/*#define BTA_AV_MAX_A2DP_MTU 668 //224 (DM5) * 3 - 4(L2CAP header) */ 101#define BTA_AV_MAX_A2DP_MTU 1008 102#endif 103 104#ifndef BTA_AV_MAX_VDP_MTU 105#define BTA_AV_MAX_VDP_MTU 1008 106#endif 107 108/* operation id list for BTA_AvRemoteCmd */ 109#define BTA_AV_RC_SELECT AVRC_ID_SELECT /* select */ 110#define BTA_AV_RC_UP AVRC_ID_UP /* up */ 111#define BTA_AV_RC_DOWN AVRC_ID_DOWN /* down */ 112#define BTA_AV_RC_LEFT AVRC_ID_LEFT /* left */ 113#define BTA_AV_RC_RIGHT AVRC_ID_RIGHT /* right */ 114#define BTA_AV_RC_RIGHT_UP AVRC_ID_RIGHT_UP /* right-up */ 115#define BTA_AV_RC_RIGHT_DOWN AVRC_ID_RIGHT_DOWN /* right-down */ 116#define BTA_AV_RC_LEFT_UP AVRC_ID_LEFT_UP /* left-up */ 117#define BTA_AV_RC_LEFT_DOWN AVRC_ID_LEFT_DOWN /* left-down */ 118#define BTA_AV_RC_ROOT_MENU AVRC_ID_ROOT_MENU /* root menu */ 119#define BTA_AV_RC_SETUP_MENU AVRC_ID_SETUP_MENU /* setup menu */ 120#define BTA_AV_RC_CONT_MENU AVRC_ID_CONT_MENU /* contents menu */ 121#define BTA_AV_RC_FAV_MENU AVRC_ID_FAV_MENU /* favorite menu */ 122#define BTA_AV_RC_EXIT AVRC_ID_EXIT /* exit */ 123#define BTA_AV_RC_0 AVRC_ID_0 /* 0 */ 124#define BTA_AV_RC_1 AVRC_ID_1 /* 1 */ 125#define BTA_AV_RC_2 AVRC_ID_2 /* 2 */ 126#define BTA_AV_RC_3 AVRC_ID_3 /* 3 */ 127#define BTA_AV_RC_4 AVRC_ID_4 /* 4 */ 128#define BTA_AV_RC_5 AVRC_ID_5 /* 5 */ 129#define BTA_AV_RC_6 AVRC_ID_6 /* 6 */ 130#define BTA_AV_RC_7 AVRC_ID_7 /* 7 */ 131#define BTA_AV_RC_8 AVRC_ID_8 /* 8 */ 132#define BTA_AV_RC_9 AVRC_ID_9 /* 9 */ 133#define BTA_AV_RC_DOT AVRC_ID_DOT /* dot */ 134#define BTA_AV_RC_ENTER AVRC_ID_ENTER /* enter */ 135#define BTA_AV_RC_CLEAR AVRC_ID_CLEAR /* clear */ 136#define BTA_AV_RC_CHAN_UP AVRC_ID_CHAN_UP /* channel up */ 137#define BTA_AV_RC_CHAN_DOWN AVRC_ID_CHAN_DOWN /* channel down */ 138#define BTA_AV_RC_PREV_CHAN AVRC_ID_PREV_CHAN /* previous channel */ 139#define BTA_AV_RC_SOUND_SEL AVRC_ID_SOUND_SEL /* sound select */ 140#define BTA_AV_RC_INPUT_SEL AVRC_ID_INPUT_SEL /* input select */ 141#define BTA_AV_RC_DISP_INFO AVRC_ID_DISP_INFO /* display information */ 142#define BTA_AV_RC_HELP AVRC_ID_HELP /* help */ 143#define BTA_AV_RC_PAGE_UP AVRC_ID_PAGE_UP /* page up */ 144#define BTA_AV_RC_PAGE_DOWN AVRC_ID_PAGE_DOWN /* page down */ 145#define BTA_AV_RC_POWER AVRC_ID_POWER /* power */ 146#define BTA_AV_RC_VOL_UP AVRC_ID_VOL_UP /* volume up */ 147#define BTA_AV_RC_VOL_DOWN AVRC_ID_VOL_DOWN /* volume down */ 148#define BTA_AV_RC_MUTE AVRC_ID_MUTE /* mute */ 149#define BTA_AV_RC_PLAY AVRC_ID_PLAY /* play */ 150#define BTA_AV_RC_STOP AVRC_ID_STOP /* stop */ 151#define BTA_AV_RC_PAUSE AVRC_ID_PAUSE /* pause */ 152#define BTA_AV_RC_RECORD AVRC_ID_RECORD /* record */ 153#define BTA_AV_RC_REWIND AVRC_ID_REWIND /* rewind */ 154#define BTA_AV_RC_FAST_FOR AVRC_ID_FAST_FOR /* fast forward */ 155#define BTA_AV_RC_EJECT AVRC_ID_EJECT /* eject */ 156#define BTA_AV_RC_FORWARD AVRC_ID_FORWARD /* forward */ 157#define BTA_AV_RC_BACKWARD AVRC_ID_BACKWARD /* backward */ 158#define BTA_AV_RC_ANGLE AVRC_ID_ANGLE /* angle */ 159#define BTA_AV_RC_SUBPICT AVRC_ID_SUBPICT /* subpicture */ 160#define BTA_AV_RC_F1 AVRC_ID_F1 /* F1 */ 161#define BTA_AV_RC_F2 AVRC_ID_F2 /* F2 */ 162#define BTA_AV_RC_F3 AVRC_ID_F3 /* F3 */ 163#define BTA_AV_RC_F4 AVRC_ID_F4 /* F4 */ 164#define BTA_AV_RC_F5 AVRC_ID_F5 /* F5 */ 165#define BTA_AV_VENDOR AVRC_ID_VENDOR /* vendor unique */ 166 167typedef uint8_t tBTA_AV_RC; 168 169/* state flag for pass through command */ 170#define BTA_AV_STATE_PRESS AVRC_STATE_PRESS /* key pressed */ 171#define BTA_AV_STATE_RELEASE AVRC_STATE_RELEASE /* key released */ 172 173typedef uint8_t tBTA_AV_STATE; 174 175/* command codes for BTA_AvVendorCmd */ 176#define BTA_AV_CMD_CTRL AVRC_CMD_CTRL 177#define BTA_AV_CMD_STATUS AVRC_CMD_STATUS 178#define BTA_AV_CMD_SPEC_INQ AVRC_CMD_SPEC_INQ 179#define BTA_AV_CMD_NOTIF AVRC_CMD_NOTIF 180#define BTA_AV_CMD_GEN_INQ AVRC_CMD_GEN_INQ 181 182typedef uint8_t tBTA_AV_CMD; 183 184/* response codes for BTA_AvVendorRsp */ 185#define BTA_AV_RSP_NOT_IMPL AVRC_RSP_NOT_IMPL 186#define BTA_AV_RSP_ACCEPT AVRC_RSP_ACCEPT 187#define BTA_AV_RSP_REJ AVRC_RSP_REJ 188#define BTA_AV_RSP_IN_TRANS AVRC_RSP_IN_TRANS 189#define BTA_AV_RSP_IMPL_STBL AVRC_RSP_IMPL_STBL 190#define BTA_AV_RSP_CHANGED AVRC_RSP_CHANGED 191#define BTA_AV_RSP_INTERIM AVRC_RSP_INTERIM 192 193typedef uint8_t tBTA_AV_CODE; 194 195/* error codes for BTA_AvProtectRsp */ 196#define BTA_AV_ERR_NONE A2DP_SUCCESS /* Success, no error */ 197#define BTA_AV_ERR_BAD_STATE \ 198 AVDT_ERR_BAD_STATE /* Message cannot be processed in this state */ 199#define BTA_AV_ERR_RESOURCE AVDT_ERR_RESOURCE /* Insufficient resources */ 200#define BTA_AV_ERR_BAD_CP_TYPE \ 201 A2DP_BAD_CP_TYPE /* The requested Content Protection Type is not supported \ 202 */ 203#define BTA_AV_ERR_BAD_CP_FORMAT \ 204 A2DP_BAD_CP_FORMAT /* The format of Content Protection Data is not correct \ 205 */ 206 207typedef uint8_t tBTA_AV_ERR; 208 209/* AV callback events */ 210#define BTA_AV_ENABLE_EVT 0 /* AV enabled */ 211#define BTA_AV_REGISTER_EVT 1 /* registered to AVDT */ 212#define BTA_AV_OPEN_EVT 2 /* connection opened */ 213#define BTA_AV_CLOSE_EVT 3 /* connection closed */ 214#define BTA_AV_START_EVT 4 /* stream data transfer started */ 215#define BTA_AV_STOP_EVT 5 /* stream data transfer stopped */ 216#define BTA_AV_PROTECT_REQ_EVT 6 /* content protection request */ 217#define BTA_AV_PROTECT_RSP_EVT 7 /* content protection response */ 218#define BTA_AV_RC_OPEN_EVT 8 /* remote control channel open */ 219#define BTA_AV_RC_CLOSE_EVT 9 /* remote control channel closed */ 220#define BTA_AV_REMOTE_CMD_EVT 10 /* remote control command */ 221#define BTA_AV_REMOTE_RSP_EVT 11 /* remote control response */ 222#define BTA_AV_VENDOR_CMD_EVT 12 /* vendor dependent remote control command */ 223#define BTA_AV_VENDOR_RSP_EVT \ 224 13 /* vendor dependent remote control response \ 225 */ 226#define BTA_AV_RECONFIG_EVT 14 /* reconfigure response */ 227#define BTA_AV_SUSPEND_EVT 15 /* suspend response */ 228#define BTA_AV_PENDING_EVT \ 229 16 /* incoming connection pending: \ 230 * signal channel is open and stream is \ 231 * not open after \ 232 * BTA_AV_SIGNALLING_TIMEOUT_MS */ 233#define BTA_AV_META_MSG_EVT 17 /* metadata messages */ 234#define BTA_AV_REJECT_EVT 18 /* incoming connection rejected */ 235#define BTA_AV_RC_FEAT_EVT \ 236 19 /* remote control channel peer supported features update */ 237#define BTA_AV_SINK_MEDIA_CFG_EVT 20 /* command to configure codec */ 238#define BTA_AV_SINK_MEDIA_DATA_EVT 21 /* sending data to Media Task */ 239#define BTA_AV_OFFLOAD_START_RSP_EVT 22 /* a2dp offload start response */ 240#define BTA_AV_RC_BROWSE_OPEN_EVT 23 /* remote control channel open */ 241#define BTA_AV_RC_BROWSE_CLOSE_EVT 24 /* remote control channel closed */ 242/* Max BTA event */ 243#define BTA_AV_MAX_EVT 25 244 245typedef uint8_t tBTA_AV_EVT; 246 247/* Event associated with BTA_AV_ENABLE_EVT */ 248typedef struct { tBTA_AV_FEAT features; } tBTA_AV_ENABLE; 249 250/* Event associated with BTA_AV_REGISTER_EVT */ 251typedef struct { 252 tBTA_AV_CHNL chnl; /* audio/video */ 253 tBTA_AV_HNDL hndl; /* Handle associated with the stream. */ 254 uint8_t app_id; /* ID associated with call to BTA_AvRegister() */ 255 tBTA_AV_STATUS status; 256} tBTA_AV_REGISTER; 257 258/* data associated with BTA_AV_OPEN_EVT */ 259#define BTA_AV_EDR_2MBPS 0x01 260#define BTA_AV_EDR_3MBPS 0x02 261typedef uint8_t tBTA_AV_EDR; 262 263typedef struct { 264 tBTA_AV_CHNL chnl; 265 tBTA_AV_HNDL hndl; 266 RawAddress bd_addr; 267 tBTA_AV_STATUS status; 268 bool starting; 269 tBTA_AV_EDR edr; /* 0, if peer device does not support EDR */ 270 uint8_t sep; /* sep type of peer device */ 271} tBTA_AV_OPEN; 272 273/* data associated with BTA_AV_CLOSE_EVT */ 274typedef struct { 275 tBTA_AV_CHNL chnl; 276 tBTA_AV_HNDL hndl; 277} tBTA_AV_CLOSE; 278 279/* data associated with BTA_AV_START_EVT */ 280typedef struct { 281 tBTA_AV_CHNL chnl; 282 tBTA_AV_HNDL hndl; 283 tBTA_AV_STATUS status; 284 bool initiator; /* true, if local device initiates the START */ 285 bool suspending; 286} tBTA_AV_START; 287 288/* data associated with BTA_AV_SUSPEND_EVT */ 289typedef struct { 290 tBTA_AV_CHNL chnl; 291 tBTA_AV_HNDL hndl; 292 bool initiator; /* true, if local device initiates the SUSPEND */ 293 tBTA_AV_STATUS status; 294} tBTA_AV_SUSPEND; 295 296/* data associated with BTA_AV_RECONFIG_EVT */ 297typedef struct { 298 tBTA_AV_CHNL chnl; 299 tBTA_AV_HNDL hndl; 300 tBTA_AV_STATUS status; 301} tBTA_AV_RECONFIG; 302 303/* data associated with BTA_AV_PROTECT_REQ_EVT */ 304typedef struct { 305 tBTA_AV_CHNL chnl; 306 tBTA_AV_HNDL hndl; 307 uint8_t* p_data; 308 uint16_t len; 309} tBTA_AV_PROTECT_REQ; 310 311/* data associated with BTA_AV_PROTECT_RSP_EVT */ 312typedef struct { 313 tBTA_AV_CHNL chnl; 314 tBTA_AV_HNDL hndl; 315 uint8_t* p_data; 316 uint16_t len; 317 tBTA_AV_ERR err_code; 318} tBTA_AV_PROTECT_RSP; 319 320/* data associated with BTA_AV_RC_OPEN_EVT */ 321typedef struct { 322 uint8_t rc_handle; 323 tBTA_AV_FEAT peer_features; 324 RawAddress peer_addr; 325 tBTA_AV_STATUS status; 326} tBTA_AV_RC_OPEN; 327 328/* data associated with BTA_AV_RC_CLOSE_EVT */ 329typedef struct { 330 uint8_t rc_handle; 331 RawAddress peer_addr; 332} tBTA_AV_RC_CLOSE; 333 334/* data associated with BTA_AV_RC_BROWSE_OPEN_EVT */ 335typedef struct { 336 uint8_t rc_handle; 337 RawAddress peer_addr; 338 tBTA_AV_STATUS status; 339} tBTA_AV_RC_BROWSE_OPEN; 340 341/* data associated with BTA_AV_RC_BROWSE_CLOSE_EVT */ 342typedef struct { 343 uint8_t rc_handle; 344 RawAddress peer_addr; 345} tBTA_AV_RC_BROWSE_CLOSE; 346 347/* data associated with BTA_AV_RC_FEAT_EVT */ 348typedef struct { 349 uint8_t rc_handle; 350 tBTA_AV_FEAT peer_features; 351 RawAddress peer_addr; 352} tBTA_AV_RC_FEAT; 353 354/* data associated with BTA_AV_REMOTE_CMD_EVT */ 355typedef struct { 356 uint8_t rc_handle; 357 tBTA_AV_RC rc_id; 358 tBTA_AV_STATE key_state; 359 uint8_t len; 360 uint8_t* p_data; 361 tAVRC_HDR hdr; /* Message header. */ 362 uint8_t label; 363} tBTA_AV_REMOTE_CMD; 364 365/* data associated with BTA_AV_REMOTE_RSP_EVT */ 366typedef struct { 367 uint8_t rc_handle; 368 tBTA_AV_RC rc_id; 369 tBTA_AV_STATE key_state; 370 uint8_t len; 371 uint8_t* p_data; 372 tBTA_AV_CODE rsp_code; 373 uint8_t label; 374} tBTA_AV_REMOTE_RSP; 375 376/* data associated with BTA_AV_VENDOR_CMD_EVT, BTA_AV_VENDOR_RSP_EVT */ 377typedef struct { 378 uint8_t rc_handle; 379 uint16_t len; /* Max vendor dependent message is 512 */ 380 uint8_t label; 381 tBTA_AV_CODE code; 382 uint32_t company_id; 383 uint8_t* p_data; 384} tBTA_AV_VENDOR; 385 386/* data associated with BTA_AV_META_MSG_EVT */ 387typedef struct { 388 uint8_t rc_handle; 389 uint16_t len; 390 uint8_t label; 391 tBTA_AV_CODE code; 392 uint32_t company_id; 393 uint8_t* p_data; 394 tAVRC_MSG* p_msg; 395} tBTA_AV_META_MSG; 396 397/* data associated with BTA_AV_PENDING_EVT */ 398typedef struct { RawAddress bd_addr; } tBTA_AV_PEND; 399 400/* data associated with BTA_AV_REJECT_EVT */ 401typedef struct { 402 RawAddress bd_addr; 403 tBTA_AV_HNDL hndl; /* Handle associated with the stream that rejected the 404 connection. */ 405} tBTA_AV_REJECT; 406 407/* union of data associated with AV callback */ 408typedef union { 409 tBTA_AV_CHNL chnl; 410 tBTA_AV_ENABLE enable; 411 tBTA_AV_REGISTER registr; 412 tBTA_AV_OPEN open; 413 tBTA_AV_CLOSE close; 414 tBTA_AV_START start; 415 tBTA_AV_PROTECT_REQ protect_req; 416 tBTA_AV_PROTECT_RSP protect_rsp; 417 tBTA_AV_RC_OPEN rc_open; 418 tBTA_AV_RC_CLOSE rc_close; 419 tBTA_AV_RC_BROWSE_OPEN rc_browse_open; 420 tBTA_AV_RC_BROWSE_CLOSE rc_browse_close; 421 tBTA_AV_REMOTE_CMD remote_cmd; 422 tBTA_AV_REMOTE_RSP remote_rsp; 423 tBTA_AV_VENDOR vendor_cmd; 424 tBTA_AV_VENDOR vendor_rsp; 425 tBTA_AV_RECONFIG reconfig; 426 tBTA_AV_SUSPEND suspend; 427 tBTA_AV_PEND pend; 428 tBTA_AV_META_MSG meta_msg; 429 tBTA_AV_REJECT reject; 430 tBTA_AV_RC_FEAT rc_feat; 431 tBTA_AV_STATUS status; 432} tBTA_AV; 433 434typedef struct { 435 uint8_t* codec_info; 436 RawAddress bd_addr; 437} tBTA_AVK_CONFIG; 438 439/* union of data associated with AV Media callback */ 440typedef union { 441 BT_HDR* p_data; 442 tBTA_AVK_CONFIG avk_config; 443} tBTA_AV_MEDIA; 444 445#define BTA_GROUP_NAVI_MSG_OP_DATA_LEN 5 446 447/* AV callback */ 448typedef void(tBTA_AV_CBACK)(tBTA_AV_EVT event, tBTA_AV* p_data); 449typedef void(tBTA_AV_SINK_DATA_CBACK)(tBTA_AV_EVT event, tBTA_AV_MEDIA* p_data); 450 451/* type for stream state machine action functions */ 452typedef void (*tBTA_AV_ACT)(void* p_cb, void* p_data); 453 454/* type for registering VDP */ 455typedef void(tBTA_AV_REG)(tAVDT_CS* p_cs, char* p_service_name, void* p_data); 456 457/* AV configuration structure */ 458typedef struct { 459 uint32_t company_id; /* AVRCP Company ID */ 460 uint16_t avrc_mtu; /* AVRCP MTU at L2CAP for control channel */ 461 uint16_t avrc_br_mtu; /* AVRCP MTU at L2CAP for browsing channel */ 462 uint16_t avrc_ct_cat; /* AVRCP controller categories */ 463 uint16_t avrc_tg_cat; /* AVRCP target categories */ 464 uint16_t sig_mtu; /* AVDTP signaling channel MTU at L2CAP */ 465 uint16_t audio_mtu; /* AVDTP audio transport channel MTU at L2CAP */ 466 const uint16_t* 467 p_audio_flush_to; /* AVDTP audio transport channel flush timeout */ 468 uint16_t audio_mqs; /* AVDTP audio channel max data queue size */ 469 uint16_t video_mtu; /* AVDTP video transport channel MTU at L2CAP */ 470 uint16_t video_flush_to; /* AVDTP video transport channel flush timeout */ 471 bool avrc_group; /* true, to accept AVRC 1.3 group nevigation command */ 472 uint8_t num_co_ids; /* company id count in p_meta_co_ids */ 473 uint8_t num_evt_ids; /* event id count in p_meta_evt_ids */ 474 tBTA_AV_CODE 475 rc_pass_rsp; /* the default response code for pass through commands */ 476 const uint32_t* 477 p_meta_co_ids; /* the metadata Get Capabilities response for company id */ 478 const uint8_t* p_meta_evt_ids; /* the the metadata Get Capabilities response 479 for event id */ 480 const tBTA_AV_ACT* p_act_tbl; /* the action function table for VDP stream */ 481 tBTA_AV_REG* p_reg; /* action function to register VDP */ 482 char avrc_controller_name[BTA_SERVICE_NAME_LEN]; /* Default AVRCP controller 483 name */ 484 char avrc_target_name[BTA_SERVICE_NAME_LEN]; /* Default AVRCP target name*/ 485} tBTA_AV_CFG; 486 487/***************************************************************************** 488 * External Function Declarations 489 ****************************************************************************/ 490 491/******************************************************************************* 492 * 493 * Function BTA_AvEnable 494 * 495 * Description Enable the advanced audio/video service. When the enable 496 * operation is complete the callback function will be 497 * called with a BTA_AV_ENABLE_EVT. This function must 498 * be called before other function in the AV API are 499 * called. 500 * 501 * Returns void 502 * 503 ******************************************************************************/ 504void BTA_AvEnable(tBTA_SEC sec_mask, tBTA_AV_FEAT features, 505 tBTA_AV_CBACK* p_cback); 506 507/******************************************************************************* 508 * 509 * Function BTA_AvDisable 510 * 511 * Description Disable the advanced audio/video service. 512 * 513 * 514 * Returns void 515 * 516 ******************************************************************************/ 517void BTA_AvDisable(void); 518 519/******************************************************************************* 520 * 521 * Function BTA_AvRegister 522 * 523 * Description Register the audio or video service to stack. When the 524 * operation is complete the callback function will be 525 * called with a BTA_AV_REGISTER_EVT. This function must 526 * be called before AVDT stream is open. 527 * 528 * 529 * Returns void 530 * 531 ******************************************************************************/ 532void BTA_AvRegister(tBTA_AV_CHNL chnl, const char* p_service_name, 533 uint8_t app_id, tBTA_AV_SINK_DATA_CBACK* p_sink_data_cback, 534 uint16_t service_uuid); 535 536/******************************************************************************* 537 * 538 * Function BTA_AvDeregister 539 * 540 * Description Deregister the audio or video service 541 * 542 * Returns void 543 * 544 ******************************************************************************/ 545void BTA_AvDeregister(tBTA_AV_HNDL hndl); 546 547/******************************************************************************* 548 * 549 * Function BTA_AvOpen 550 * 551 * Description Opens an advanced audio/video connection to a peer device. 552 * When connection is open callback function is called 553 * with a BTA_AV_OPEN_EVT. 554 * 555 * Returns void 556 * 557 ******************************************************************************/ 558void BTA_AvOpen(const RawAddress& bd_addr, tBTA_AV_HNDL handle, bool use_rc, 559 tBTA_SEC sec_mask, uint16_t uuid); 560 561/******************************************************************************* 562 * 563 * Function BTA_AvClose 564 * 565 * Description Close the current streams. 566 * 567 * Returns void 568 * 569 ******************************************************************************/ 570void BTA_AvClose(tBTA_AV_HNDL handle); 571 572/******************************************************************************* 573 * 574 * Function BTA_AvDisconnect 575 * 576 * Description Close the connection to the address. 577 * 578 * Returns void 579 * 580 ******************************************************************************/ 581void BTA_AvDisconnect(const RawAddress& bd_addr); 582 583/******************************************************************************* 584 * 585 * Function BTA_AvStart 586 * 587 * Description Start audio/video stream data transfer. 588 * 589 * Returns void 590 * 591 ******************************************************************************/ 592void BTA_AvStart(void); 593 594/******************************************************************************* 595 * 596 * Function BTA_AvStop 597 * 598 * Description Stop audio/video stream data transfer. 599 * If suspend is true, this function sends AVDT suspend signal 600 * to the connected peer(s). 601 * 602 * Returns void 603 * 604 ******************************************************************************/ 605void BTA_AvStop(bool suspend); 606 607/******************************************************************************* 608 * 609 * Function BTA_AvReconfig 610 * 611 * Description Reconfigure the audio/video stream. 612 * If suspend is true, this function tries the 613 * suspend/reconfigure procedure first. 614 * If suspend is false or when suspend/reconfigure fails, 615 * this function closes and re-opens the AVDT connection. 616 * 617 * Returns void 618 * 619 ******************************************************************************/ 620void BTA_AvReconfig(tBTA_AV_HNDL hndl, bool suspend, uint8_t sep_info_idx, 621 uint8_t* p_codec_info, uint8_t num_protect, 622 const uint8_t* p_protect_info); 623 624/******************************************************************************* 625 * 626 * Function BTA_AvProtectReq 627 * 628 * Description Send a content protection request. This function can only 629 * be used if AV is enabled with feature BTA_AV_FEAT_PROTECT. 630 * 631 * Returns void 632 * 633 ******************************************************************************/ 634void BTA_AvProtectReq(tBTA_AV_HNDL hndl, uint8_t* p_data, uint16_t len); 635 636/******************************************************************************* 637 * 638 * Function BTA_AvProtectRsp 639 * 640 * Description Send a content protection response. This function must 641 * be called if a BTA_AV_PROTECT_REQ_EVT is received. 642 * This function can only be used if AV is enabled with 643 * feature BTA_AV_FEAT_PROTECT. 644 * 645 * Returns void 646 * 647 ******************************************************************************/ 648void BTA_AvProtectRsp(tBTA_AV_HNDL hndl, uint8_t error_code, uint8_t* p_data, 649 uint16_t len); 650 651/******************************************************************************* 652 * 653 * Function BTA_AvRemoteCmd 654 * 655 * Description Send a remote control command. This function can only 656 * be used if AV is enabled with feature BTA_AV_FEAT_RCCT. 657 * 658 * Returns void 659 * 660 ******************************************************************************/ 661void BTA_AvRemoteCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_RC rc_id, 662 tBTA_AV_STATE key_state); 663 664/******************************************************************************* 665 * 666 * Function BTA_AvRemoteVendorUniqueCmd 667 * 668 * Description Send a remote control command with Vendor Unique rc_id. 669 * This function can only be used if AV is enabled with 670 * feature BTA_AV_FEAT_RCCT. 671 * 672 * Returns void 673 * 674 ******************************************************************************/ 675void BTA_AvRemoteVendorUniqueCmd(uint8_t rc_handle, uint8_t label, 676 tBTA_AV_STATE key_state, uint8_t* p_msg, 677 uint8_t buf_len); 678 679/******************************************************************************* 680 * 681 * Function BTA_AvVendorCmd 682 * 683 * Description Send a vendor dependent remote control command. This 684 * function can only be used if AV is enabled with feature 685 * BTA_AV_FEAT_VENDOR. 686 * 687 * Returns void 688 * 689 ******************************************************************************/ 690void BTA_AvVendorCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE cmd_code, 691 uint8_t* p_data, uint16_t len); 692 693/******************************************************************************* 694 * 695 * Function BTA_AvVendorRsp 696 * 697 * Description Send a vendor dependent remote control response. 698 * This function must be called if a BTA_AV_VENDOR_CMD_EVT 699 * is received. This function can only be used if AV is 700 * enabled with feature BTA_AV_FEAT_VENDOR. 701 * 702 * Returns void 703 * 704 ******************************************************************************/ 705void BTA_AvVendorRsp(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE rsp_code, 706 uint8_t* p_data, uint16_t len, uint32_t company_id); 707 708/******************************************************************************* 709 * 710 * Function BTA_AvOpenRc 711 * 712 * Description Open an AVRCP connection toward the device with the 713 * specified handle 714 * 715 * Returns void 716 * 717 ******************************************************************************/ 718void BTA_AvOpenRc(tBTA_AV_HNDL handle); 719 720/******************************************************************************* 721 * 722 * Function BTA_AvCloseRc 723 * 724 * Description Close an AVRCP connection 725 * 726 * Returns void 727 * 728 ******************************************************************************/ 729void BTA_AvCloseRc(uint8_t rc_handle); 730 731/******************************************************************************* 732 * 733 * Function BTA_AvMetaRsp 734 * 735 * Description Send a Metadata command/response. The message contained 736 * in p_pkt can be composed with AVRC utility functions. 737 * This function can only be used if AV is enabled with feature 738 * BTA_AV_FEAT_METADATA. 739 * 740 * Returns void 741 * 742 ******************************************************************************/ 743void BTA_AvMetaRsp(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE rsp_code, 744 BT_HDR* p_pkt); 745 746/******************************************************************************* 747 * 748 * Function BTA_AvMetaCmd 749 * 750 * Description Send a Metadata/Advanced Control command. The message 751*contained 752 * in p_pkt can be composed with AVRC utility functions. 753 * This function can only be used if AV is enabled with feature 754 * BTA_AV_FEAT_METADATA. 755 * This message is sent only when the peer supports the TG 756*role. 757*8 The only command makes sense right now is the absolute 758*volume command. 759 * 760 * Returns void 761 * 762 ******************************************************************************/ 763void BTA_AvMetaCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_CMD cmd_code, 764 BT_HDR* p_pkt); 765 766/******************************************************************************* 767 * 768 * Function BTA_AvOffloadStart 769 * 770 * Description Request Starting of A2DP Offload. 771 * This function is used to start A2DP offload if vendor lib 772 * has the feature enabled. 773 * 774 * Returns void 775 * 776 ******************************************************************************/ 777void BTA_AvOffloadStart(tBTA_AV_HNDL hndl); 778 779/******************************************************************************* 780 * 781 * Function BTA_AvOffloadStartRsp 782 * 783 * Description Response from vendor library indicating response for 784 * OffloadStart. 785 * 786 * Returns void 787 * 788 ******************************************************************************/ 789void BTA_AvOffloadStartRsp(tBTA_AV_HNDL hndl, tBTA_AV_STATUS status); 790 791#endif /* BTA_AV_API_H */ 792