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