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