1 /******************************************************************************
2  *
3  *  Copyright 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 */
95 #ifndef BTA_AV_NUM_STRS
96 #define BTA_AV_NUM_STRS 6
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 /* operation id list for BTA_AvRemoteCmd */
105 typedef uint8_t tBTA_AV_RC;
106 
107 /* state flag for pass through command */
108 typedef uint8_t tBTA_AV_STATE;
109 
110 /* command codes for BTA_AvVendorCmd */
111 typedef uint8_t tBTA_AV_CMD;
112 
113 /* response codes for BTA_AvVendorRsp */
114 typedef uint8_t tBTA_AV_CODE;
115 
116 /* error codes for BTA_AvProtectRsp */
117 typedef uint8_t tBTA_AV_ERR;
118 
119 /* AV callback events */
120 #define BTA_AV_ENABLE_EVT 0      /* AV enabled */
121 #define BTA_AV_REGISTER_EVT 1    /* registered to AVDT */
122 #define BTA_AV_OPEN_EVT 2        /* connection opened */
123 #define BTA_AV_CLOSE_EVT 3       /* connection closed */
124 #define BTA_AV_START_EVT 4       /* stream data transfer started */
125 #define BTA_AV_STOP_EVT 5        /* stream data transfer stopped */
126 #define BTA_AV_PROTECT_REQ_EVT 6 /* content protection request */
127 #define BTA_AV_PROTECT_RSP_EVT 7 /* content protection response */
128 #define BTA_AV_RC_OPEN_EVT 8     /* remote control channel open */
129 #define BTA_AV_RC_CLOSE_EVT 9    /* remote control channel closed */
130 #define BTA_AV_REMOTE_CMD_EVT 10 /* remote control command */
131 #define BTA_AV_REMOTE_RSP_EVT 11 /* remote control response */
132 #define BTA_AV_VENDOR_CMD_EVT 12 /* vendor dependent remote control command */
133 #define BTA_AV_VENDOR_RSP_EVT                                              \
134   13                           /* vendor dependent remote control response \
135                                   */
136 #define BTA_AV_RECONFIG_EVT 14 /* reconfigure response */
137 #define BTA_AV_SUSPEND_EVT 15  /* suspend response */
138 #define BTA_AV_PENDING_EVT                                             \
139   16                           /* incoming connection pending:         \
140                                 * signal channel is open and stream is \
141                                 * not open after                       \
142                                 * BTA_AV_SIGNALLING_TIMEOUT_MS */
143 #define BTA_AV_META_MSG_EVT 17 /* metadata messages */
144 #define BTA_AV_REJECT_EVT 18   /* incoming connection rejected */
145 #define BTA_AV_RC_FEAT_EVT \
146   19 /* remote control channel peer supported features update */
147 #define BTA_AV_SINK_MEDIA_CFG_EVT 20    /* command to configure codec */
148 #define BTA_AV_SINK_MEDIA_DATA_EVT 21   /* sending data to Media Task */
149 #define BTA_AV_OFFLOAD_START_RSP_EVT 22 /* a2dp offload start response */
150 #define BTA_AV_RC_BROWSE_OPEN_EVT 23    /* remote control channel open */
151 #define BTA_AV_RC_BROWSE_CLOSE_EVT 24   /* remote control channel closed */
152 /* Max BTA event */
153 #define BTA_AV_MAX_EVT 25
154 
155 typedef uint8_t tBTA_AV_EVT;
156 
157 typedef enum {
158   BTA_AV_CODEC_TYPE_UNKNOWN = 0x00,
159   BTA_AV_CODEC_TYPE_SBC = 0x01,
160   BTA_AV_CODEC_TYPE_AAC = 0x02,
161   BTA_AV_CODEC_TYPE_APTX = 0x04,
162   BTA_AV_CODEC_TYPE_APTXHD = 0x08,
163   BTA_AV_CODEC_TYPE_LDAC = 0x10
164 } tBTA_AV_CODEC_TYPE;
165 
166 /* Event associated with BTA_AV_ENABLE_EVT */
167 typedef struct { tBTA_AV_FEAT features; } tBTA_AV_ENABLE;
168 
169 /* Event associated with BTA_AV_REGISTER_EVT */
170 typedef struct {
171   tBTA_AV_CHNL chnl; /* audio/video */
172   tBTA_AV_HNDL hndl; /* Handle associated with the stream. */
173   uint8_t app_id;    /* ID associated with call to BTA_AvRegister() */
174   tBTA_AV_STATUS status;
175 } tBTA_AV_REGISTER;
176 
177 /* data associated with BTA_AV_OPEN_EVT */
178 #define BTA_AV_EDR_2MBPS 0x01
179 #define BTA_AV_EDR_3MBPS 0x02
180 typedef uint8_t tBTA_AV_EDR;
181 
182 typedef struct {
183   tBTA_AV_CHNL chnl;
184   tBTA_AV_HNDL hndl;
185   RawAddress bd_addr;
186   tBTA_AV_STATUS status;
187   bool starting;
188   tBTA_AV_EDR edr; /* 0, if peer device does not support EDR */
189   uint8_t sep;     /*  sep type of peer device */
190 } tBTA_AV_OPEN;
191 
192 /* data associated with BTA_AV_CLOSE_EVT */
193 typedef struct {
194   tBTA_AV_CHNL chnl;
195   tBTA_AV_HNDL hndl;
196 } tBTA_AV_CLOSE;
197 
198 /* data associated with BTA_AV_START_EVT */
199 typedef struct {
200   tBTA_AV_CHNL chnl;
201   tBTA_AV_HNDL hndl;
202   tBTA_AV_STATUS status;
203   bool initiator; /* true, if local device initiates the START */
204   bool suspending;
205 } tBTA_AV_START;
206 
207 /* data associated with BTA_AV_SUSPEND_EVT, BTA_AV_STOP_EVT */
208 typedef struct {
209   tBTA_AV_CHNL chnl;
210   tBTA_AV_HNDL hndl;
211   bool initiator; /* true, if local device initiates the SUSPEND */
212   tBTA_AV_STATUS status;
213 } tBTA_AV_SUSPEND;
214 
215 /* data associated with BTA_AV_RECONFIG_EVT */
216 typedef struct {
217   tBTA_AV_CHNL chnl;
218   tBTA_AV_HNDL hndl;
219   tBTA_AV_STATUS status;
220 } tBTA_AV_RECONFIG;
221 
222 /* data associated with BTA_AV_PROTECT_REQ_EVT */
223 typedef struct {
224   tBTA_AV_CHNL chnl;
225   tBTA_AV_HNDL hndl;
226   uint8_t* p_data;
227   uint16_t len;
228 } tBTA_AV_PROTECT_REQ;
229 
230 /* data associated with BTA_AV_PROTECT_RSP_EVT */
231 typedef struct {
232   tBTA_AV_CHNL chnl;
233   tBTA_AV_HNDL hndl;
234   uint8_t* p_data;
235   uint16_t len;
236   tBTA_AV_ERR err_code;
237 } tBTA_AV_PROTECT_RSP;
238 
239 /* data associated with BTA_AV_RC_OPEN_EVT */
240 typedef struct {
241   uint8_t rc_handle;
242   tBTA_AV_FEAT peer_features;
243   RawAddress peer_addr;
244   tBTA_AV_STATUS status;
245 } tBTA_AV_RC_OPEN;
246 
247 /* data associated with BTA_AV_RC_CLOSE_EVT */
248 typedef struct {
249   uint8_t rc_handle;
250   RawAddress peer_addr;
251 } tBTA_AV_RC_CLOSE;
252 
253 /* data associated with BTA_AV_RC_BROWSE_OPEN_EVT */
254 typedef struct {
255   uint8_t rc_handle;
256   RawAddress peer_addr;
257   tBTA_AV_STATUS status;
258 } tBTA_AV_RC_BROWSE_OPEN;
259 
260 /* data associated with BTA_AV_RC_BROWSE_CLOSE_EVT */
261 typedef struct {
262   uint8_t rc_handle;
263   RawAddress peer_addr;
264 } tBTA_AV_RC_BROWSE_CLOSE;
265 
266 /* data associated with BTA_AV_RC_FEAT_EVT */
267 typedef struct {
268   uint8_t rc_handle;
269   tBTA_AV_FEAT peer_features;
270   RawAddress peer_addr;
271 } tBTA_AV_RC_FEAT;
272 
273 /* data associated with BTA_AV_REMOTE_CMD_EVT */
274 typedef struct {
275   uint8_t rc_handle;
276   tBTA_AV_RC rc_id;
277   tBTA_AV_STATE key_state;
278   uint8_t len;
279   uint8_t* p_data;
280   tAVRC_HDR hdr; /* Message header. */
281   uint8_t label;
282 } tBTA_AV_REMOTE_CMD;
283 
284 /* data associated with BTA_AV_REMOTE_RSP_EVT */
285 typedef struct {
286   uint8_t rc_handle;
287   tBTA_AV_RC rc_id;
288   tBTA_AV_STATE key_state;
289   uint8_t len;
290   uint8_t* p_data;
291   tBTA_AV_CODE rsp_code;
292   uint8_t label;
293 } tBTA_AV_REMOTE_RSP;
294 
295 /* data associated with BTA_AV_VENDOR_CMD_EVT, BTA_AV_VENDOR_RSP_EVT */
296 typedef struct {
297   uint8_t rc_handle;
298   uint16_t len; /* Max vendor dependent message is 512 */
299   uint8_t label;
300   tBTA_AV_CODE code;
301   uint32_t company_id;
302   uint8_t* p_data;
303 } tBTA_AV_VENDOR;
304 
305 /* data associated with BTA_AV_META_MSG_EVT */
306 typedef struct {
307   uint8_t rc_handle;
308   uint16_t len;
309   uint8_t label;
310   tBTA_AV_CODE code;
311   uint32_t company_id;
312   uint8_t* p_data;
313   tAVRC_MSG* p_msg;
314 } tBTA_AV_META_MSG;
315 
316 /* data associated with BTA_AV_PENDING_EVT */
317 typedef struct { RawAddress bd_addr; } tBTA_AV_PEND;
318 
319 /* data associated with BTA_AV_REJECT_EVT */
320 typedef struct {
321   RawAddress bd_addr;
322   tBTA_AV_HNDL hndl; /* Handle associated with the stream that rejected the
323                         connection. */
324 } tBTA_AV_REJECT;
325 
326 /* union of data associated with AV callback */
327 typedef union {
328   tBTA_AV_CHNL chnl;
329   tBTA_AV_ENABLE enable;
330   tBTA_AV_REGISTER registr;
331   tBTA_AV_OPEN open;
332   tBTA_AV_CLOSE close;
333   tBTA_AV_START start;
334   tBTA_AV_PROTECT_REQ protect_req;
335   tBTA_AV_PROTECT_RSP protect_rsp;
336   tBTA_AV_RC_OPEN rc_open;
337   tBTA_AV_RC_CLOSE rc_close;
338   tBTA_AV_RC_BROWSE_OPEN rc_browse_open;
339   tBTA_AV_RC_BROWSE_CLOSE rc_browse_close;
340   tBTA_AV_REMOTE_CMD remote_cmd;
341   tBTA_AV_REMOTE_RSP remote_rsp;
342   tBTA_AV_VENDOR vendor_cmd;
343   tBTA_AV_VENDOR vendor_rsp;
344   tBTA_AV_RECONFIG reconfig;
345   tBTA_AV_SUSPEND suspend;
346   tBTA_AV_PEND pend;
347   tBTA_AV_META_MSG meta_msg;
348   tBTA_AV_REJECT reject;
349   tBTA_AV_RC_FEAT rc_feat;
350   tBTA_AV_STATUS status;
351 } tBTA_AV;
352 
353 typedef struct {
354   uint8_t* codec_info;
355   RawAddress bd_addr;
356 } tBTA_AVK_CONFIG;
357 
358 /* union of data associated with AV Media callback */
359 typedef union {
360   BT_HDR* p_data;
361   tBTA_AVK_CONFIG avk_config;
362 } tBTA_AV_MEDIA;
363 
364 #define BTA_GROUP_NAVI_MSG_OP_DATA_LEN 5
365 
366 /* AV callback */
367 typedef void(tBTA_AV_CBACK)(tBTA_AV_EVT event, tBTA_AV* p_data);
368 typedef void(tBTA_AV_SINK_DATA_CBACK)(tBTA_AV_EVT event, tBTA_AV_MEDIA* p_data);
369 
370 /* type for stream state machine action functions */
371 struct tBTA_AV_SCB;
372 union tBTA_AV_DATA;
373 typedef void (*tBTA_AV_ACT)(tBTA_AV_SCB* p_cb, tBTA_AV_DATA* p_data);
374 
375 /* AV configuration structure */
376 typedef struct {
377   uint32_t company_id;  /* AVRCP Company ID */
378   uint16_t avrc_mtu;    /* AVRCP MTU at L2CAP for control channel */
379   uint16_t avrc_br_mtu; /* AVRCP MTU at L2CAP for browsing channel */
380   uint16_t avrc_ct_cat; /* AVRCP controller categories */
381   uint16_t avrc_tg_cat; /* AVRCP target categories */
382   uint16_t sig_mtu;     /* AVDTP signaling channel MTU at L2CAP */
383   uint16_t audio_mtu;   /* AVDTP audio transport channel MTU at L2CAP */
384   const uint16_t*
385       p_audio_flush_to;    /* AVDTP audio transport channel flush timeout */
386   uint16_t audio_mqs;      /* AVDTP audio channel max data queue size */
387   bool avrc_group;     /* true, to accept AVRC 1.3 group nevigation command */
388   uint8_t num_co_ids;  /* company id count in p_meta_co_ids */
389   uint8_t num_evt_ids; /* event id count in p_meta_evt_ids */
390   tBTA_AV_CODE
391       rc_pass_rsp; /* the default response code for pass through commands */
392   const uint32_t*
393       p_meta_co_ids; /* the metadata Get Capabilities response for company id */
394   const uint8_t* p_meta_evt_ids; /* the the metadata Get Capabilities response
395                                     for event id */
396   const tBTA_AV_ACT* p_act_tbl;  /* action function table for audio stream */
397   char avrc_controller_name[BTA_SERVICE_NAME_LEN]; /* Default AVRCP controller
398                                                       name */
399   char avrc_target_name[BTA_SERVICE_NAME_LEN]; /* Default AVRCP target name*/
400 } tBTA_AV_CFG;
401 
402 /*****************************************************************************
403  *  External Function Declarations
404  ****************************************************************************/
405 
406 /*******************************************************************************
407  *
408  * Function         BTA_AvEnable
409  *
410  * Description      Enable the advanced audio/video service. When the enable
411  *                  operation is complete the callback function will be
412  *                  called with a BTA_AV_ENABLE_EVT. This function must
413  *                  be called before other function in the AV API are
414  *                  called.
415  *
416  * Returns          void
417  *
418  ******************************************************************************/
419 void BTA_AvEnable(tBTA_SEC sec_mask, tBTA_AV_FEAT features,
420                   tBTA_AV_CBACK* p_cback);
421 
422 /*******************************************************************************
423  *
424  * Function         BTA_AvDisable
425  *
426  * Description      Disable the advanced audio/video service.
427  *
428  *
429  * Returns          void
430  *
431  ******************************************************************************/
432 void BTA_AvDisable(void);
433 
434 /*******************************************************************************
435  *
436  * Function         BTA_AvRegister
437  *
438  * Description      Register the audio or video service to stack. When the
439  *                  operation is complete the callback function will be
440  *                  called with a BTA_AV_REGISTER_EVT. This function must
441  *                  be called before AVDT stream is open.
442  *
443  *
444  * Returns          void
445  *
446  ******************************************************************************/
447 void BTA_AvRegister(tBTA_AV_CHNL chnl, const char* p_service_name,
448                     uint8_t app_id, tBTA_AV_SINK_DATA_CBACK* p_sink_data_cback,
449                     uint16_t service_uuid);
450 
451 /*******************************************************************************
452  *
453  * Function         BTA_AvDeregister
454  *
455  * Description      Deregister the audio or video service
456  *
457  * Returns          void
458  *
459  ******************************************************************************/
460 void BTA_AvDeregister(tBTA_AV_HNDL hndl);
461 
462 /*******************************************************************************
463  *
464  * Function         BTA_AvOpen
465  *
466  * Description      Opens an advanced audio/video connection to a peer device.
467  *                  When connection is open callback function is called
468  *                  with a BTA_AV_OPEN_EVT.
469  *
470  * Returns          void
471  *
472  ******************************************************************************/
473 void BTA_AvOpen(const RawAddress& bd_addr, tBTA_AV_HNDL handle, bool use_rc,
474                 tBTA_SEC sec_mask, uint16_t uuid);
475 
476 /*******************************************************************************
477  *
478  * Function         BTA_AvClose
479  *
480  * Description      Close the current streams.
481  *
482  * Returns          void
483  *
484  ******************************************************************************/
485 void BTA_AvClose(tBTA_AV_HNDL handle);
486 
487 /*******************************************************************************
488  *
489  * Function         BTA_AvDisconnect
490  *
491  * Description      Close the connection to the address.
492  *
493  * Returns          void
494  *
495  ******************************************************************************/
496 void BTA_AvDisconnect(const RawAddress& bd_addr);
497 
498 /*******************************************************************************
499  *
500  * Function         BTA_AvStart
501  *
502  * Description      Start audio/video stream data transfer.
503  *
504  * Returns          void
505  *
506  ******************************************************************************/
507 void BTA_AvStart(tBTA_AV_HNDL handle);
508 
509 /*******************************************************************************
510  *
511  * Function         BTA_AvStop
512  *
513  * Description      Stop audio/video stream data transfer.
514  *                  If suspend is true, this function sends AVDT suspend signal
515  *                  to the connected peer(s).
516  *
517  * Returns          void
518  *
519  ******************************************************************************/
520 void BTA_AvStop(tBTA_AV_HNDL handle, bool suspend);
521 
522 /*******************************************************************************
523  *
524  * Function         BTA_AvReconfig
525  *
526  * Description      Reconfigure the audio/video stream.
527  *                  If suspend is true, this function tries the
528  *                  suspend/reconfigure procedure first.
529  *                  If suspend is false or when suspend/reconfigure fails,
530  *                  this function closes and re-opens the AVDT connection.
531  *
532  * Returns          void
533  *
534  ******************************************************************************/
535 void BTA_AvReconfig(tBTA_AV_HNDL hndl, bool suspend, uint8_t sep_info_idx,
536                     uint8_t* p_codec_info, uint8_t num_protect,
537                     const uint8_t* p_protect_info);
538 
539 /*******************************************************************************
540  *
541  * Function         BTA_AvProtectReq
542  *
543  * Description      Send a content protection request.  This function can only
544  *                  be used if AV is enabled with feature BTA_AV_FEAT_PROTECT.
545  *
546  * Returns          void
547  *
548  ******************************************************************************/
549 void BTA_AvProtectReq(tBTA_AV_HNDL hndl, uint8_t* p_data, uint16_t len);
550 
551 /*******************************************************************************
552  *
553  * Function         BTA_AvProtectRsp
554  *
555  * Description      Send a content protection response.  This function must
556  *                  be called if a BTA_AV_PROTECT_REQ_EVT is received.
557  *                  This function can only be used if AV is enabled with
558  *                  feature BTA_AV_FEAT_PROTECT.
559  *
560  * Returns          void
561  *
562  ******************************************************************************/
563 void BTA_AvProtectRsp(tBTA_AV_HNDL hndl, uint8_t error_code, uint8_t* p_data,
564                       uint16_t len);
565 
566 /*******************************************************************************
567  *
568  * Function         BTA_AvRemoteCmd
569  *
570  * Description      Send a remote control command.  This function can only
571  *                  be used if AV is enabled with feature BTA_AV_FEAT_RCCT.
572  *
573  * Returns          void
574  *
575  ******************************************************************************/
576 void BTA_AvRemoteCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_RC rc_id,
577                      tBTA_AV_STATE key_state);
578 
579 /*******************************************************************************
580  *
581  * Function         BTA_AvRemoteVendorUniqueCmd
582  *
583  * Description      Send a remote control command with Vendor Unique rc_id.
584  *                  This function can only be used if AV is enabled with
585  *                  feature BTA_AV_FEAT_RCCT.
586  *
587  * Returns          void
588  *
589  ******************************************************************************/
590 void BTA_AvRemoteVendorUniqueCmd(uint8_t rc_handle, uint8_t label,
591                                  tBTA_AV_STATE key_state, uint8_t* p_msg,
592                                  uint8_t buf_len);
593 
594 /*******************************************************************************
595  *
596  * Function         BTA_AvVendorCmd
597  *
598  * Description      Send a vendor dependent remote control command.  This
599  *                  function can only be used if AV is enabled with feature
600  *                  BTA_AV_FEAT_VENDOR.
601  *
602  * Returns          void
603  *
604  ******************************************************************************/
605 void BTA_AvVendorCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE cmd_code,
606                      uint8_t* p_data, uint16_t len);
607 
608 /*******************************************************************************
609  *
610  * Function         BTA_AvVendorRsp
611  *
612  * Description      Send a vendor dependent remote control response.
613  *                  This function must be called if a BTA_AV_VENDOR_CMD_EVT
614  *                  is received. This function can only be used if AV is
615  *                  enabled with feature BTA_AV_FEAT_VENDOR.
616  *
617  * Returns          void
618  *
619  ******************************************************************************/
620 void BTA_AvVendorRsp(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE rsp_code,
621                      uint8_t* p_data, uint16_t len, uint32_t company_id);
622 
623 /*******************************************************************************
624  *
625  * Function         BTA_AvOpenRc
626  *
627  * Description      Open an AVRCP connection toward the device with the
628  *                  specified handle
629  *
630  * Returns          void
631  *
632  ******************************************************************************/
633 void BTA_AvOpenRc(tBTA_AV_HNDL handle);
634 
635 /*******************************************************************************
636  *
637  * Function         BTA_AvCloseRc
638  *
639  * Description      Close an AVRCP connection
640  *
641  * Returns          void
642  *
643  ******************************************************************************/
644 void BTA_AvCloseRc(uint8_t rc_handle);
645 
646 /*******************************************************************************
647  *
648  * Function         BTA_AvMetaRsp
649  *
650  * Description      Send a Metadata command/response. The message contained
651  *                  in p_pkt can be composed with AVRC utility functions.
652  *                  This function can only be used if AV is enabled with feature
653  *                  BTA_AV_FEAT_METADATA.
654  *
655  * Returns          void
656  *
657  ******************************************************************************/
658 void BTA_AvMetaRsp(uint8_t rc_handle, uint8_t label, tBTA_AV_CODE rsp_code,
659                    BT_HDR* p_pkt);
660 
661 /*******************************************************************************
662  *
663  * Function         BTA_AvMetaCmd
664  *
665  * Description      Send a Metadata/Advanced Control command. The message
666 *contained
667  *                  in p_pkt can be composed with AVRC utility functions.
668  *                  This function can only be used if AV is enabled with feature
669  *                  BTA_AV_FEAT_METADATA.
670  *                  This message is sent only when the peer supports the TG
671 *role.
672 *8                  The only command makes sense right now is the absolute
673 *volume command.
674  *
675  * Returns          void
676  *
677  ******************************************************************************/
678 void BTA_AvMetaCmd(uint8_t rc_handle, uint8_t label, tBTA_AV_CMD cmd_code,
679                    BT_HDR* p_pkt);
680 
681 /*******************************************************************************
682  *
683  * Function         BTA_AvOffloadStart
684  *
685  * Description      Request Starting of A2DP Offload.
686  *                  This function is used to start A2DP offload if vendor lib
687  *                  has the feature enabled.
688  *
689  * Returns          void
690  *
691  ******************************************************************************/
692 void BTA_AvOffloadStart(tBTA_AV_HNDL hndl);
693 
694 /*******************************************************************************
695  *
696  * Function         BTA_AvOffloadStartRsp
697  *
698  * Description      Response from vendor library indicating response for
699  *                  OffloadStart.
700  *
701  * Returns          void
702  *
703  ******************************************************************************/
704 void BTA_AvOffloadStartRsp(tBTA_AV_HNDL hndl, tBTA_AV_STATUS status);
705 
706 /**
707  * Obtain the Channel Index for a peer.
708  * If the peer already has associated internal state, the corresponding
709  * Channel Index for that state is returned. Otherwise, the Channel Index
710  * for unused internal state is returned instead.
711  *
712  * @param peer_address the peer address
713  * @return the peer Channel Index index if obtained, otherwise -1
714  */
715 int BTA_AvObtainPeerChannelIndex(const RawAddress& peer_address);
716 
717 /**
718  * Dump debug-related information for the BTA AV module.
719  *
720  * @param fd the file descriptor to use for writing the ASCII formatted
721  * information
722  */
723 void bta_debug_av_dump(int fd);
724 
725 #endif /* BTA_AV_API_H */
726