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