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