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