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