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 54 typedef 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 81 typedef 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 */ 87 typedef uint8_t tBTA_AV_CHNL; 88 89 #define BTA_AV_HNDL_MSK 0x3F 90 typedef 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 167 typedef 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 173 typedef 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 182 typedef 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 193 typedef 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 207 typedef 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 245 typedef uint8_t tBTA_AV_EVT; 246 247 /* Event associated with BTA_AV_ENABLE_EVT */ 248 typedef struct { tBTA_AV_FEAT features; } tBTA_AV_ENABLE; 249 250 /* Event associated with BTA_AV_REGISTER_EVT */ 251 typedef 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 261 typedef uint8_t tBTA_AV_EDR; 262 263 typedef 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 */ 274 typedef struct { 275 tBTA_AV_CHNL chnl; 276 tBTA_AV_HNDL hndl; 277 } tBTA_AV_CLOSE; 278 279 /* data associated with BTA_AV_START_EVT */ 280 typedef 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 */ 289 typedef 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 */ 297 typedef 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 */ 304 typedef 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 */ 312 typedef 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 */ 321 typedef 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 */ 329 typedef 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 */ 335 typedef 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 */ 342 typedef 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 */ 348 typedef 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 */ 355 typedef 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 */ 366 typedef 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 */ 377 typedef 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 */ 387 typedef 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 */ 398 typedef struct { RawAddress bd_addr; } tBTA_AV_PEND; 399 400 /* data associated with BTA_AV_REJECT_EVT */ 401 typedef 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 */ 408 typedef 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 434 typedef struct { 435 uint8_t* codec_info; 436 RawAddress bd_addr; 437 } tBTA_AVK_CONFIG; 438 439 /* union of data associated with AV Media callback */ 440 typedef 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 */ 448 typedef void(tBTA_AV_CBACK)(tBTA_AV_EVT event, tBTA_AV* p_data); 449 typedef void(tBTA_AV_SINK_DATA_CBACK)(tBTA_AV_EVT event, tBTA_AV_MEDIA* p_data); 450 451 /* type for stream state machine action functions */ 452 typedef void (*tBTA_AV_ACT)(void* p_cb, void* p_data); 453 454 /* type for registering VDP */ 455 typedef void(tBTA_AV_REG)(tAVDT_CS* p_cs, char* p_service_name, void* p_data); 456 457 /* AV configuration structure */ 458 typedef 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 ******************************************************************************/ 504 void 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 ******************************************************************************/ 517 void 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 ******************************************************************************/ 532 void 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 ******************************************************************************/ 545 void 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 ******************************************************************************/ 558 void 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 ******************************************************************************/ 570 void 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 ******************************************************************************/ 581 void 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 ******************************************************************************/ 592 void 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 ******************************************************************************/ 605 void 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 ******************************************************************************/ 620 void 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 ******************************************************************************/ 634 void 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 ******************************************************************************/ 648 void 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 ******************************************************************************/ 661 void 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 ******************************************************************************/ 675 void 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 ******************************************************************************/ 690 void 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 ******************************************************************************/ 705 void 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 ******************************************************************************/ 718 void 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 ******************************************************************************/ 729 void 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 ******************************************************************************/ 743 void 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 ******************************************************************************/ 763 void 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 ******************************************************************************/ 777 void 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 ******************************************************************************/ 789 void BTA_AvOffloadStartRsp(tBTA_AV_HNDL hndl, tBTA_AV_STATUS status); 790 791 #endif /* BTA_AV_API_H */ 792