1/******************************************************************************
2 *
3 *  Copyright (C) 2003-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 interface file contains the interface to the Audio Video Control
22 *  Transport Protocol (AVCTP).
23 *
24 ******************************************************************************/
25#ifndef AVCT_API_H
26#define AVCT_API_H
27
28#include "bt_types.h"
29#include "bt_target.h"
30
31/*****************************************************************************
32**  Constants
33*****************************************************************************/
34
35/* API function return value result codes. */
36#define AVCT_SUCCESS                0       /* Function successful */
37#define AVCT_NO_RESOURCES           1       /* Not enough resources */
38#define AVCT_BAD_HANDLE             2       /* Bad handle */
39#define AVCT_PID_IN_USE             3       /* PID already in use */
40#define AVCT_NOT_OPEN               4       /* Connection not open */
41
42/* PSM for AVCT. */
43#define AVCT_PSM                    0x0017
44#define AVCT_BR_PSM                 0x001B
45
46/* Protocol revision numbers */
47#define AVCT_REV_1_0                0x0100
48#define AVCT_REV_1_2                0x0102
49#define AVCT_REV_1_3                0x0103
50#define AVCT_REV_1_4                0x0104
51
52/* the layer_specific settings */
53#define AVCT_DATA_CTRL              0x0001    /* for the control channel */
54#define AVCT_DATA_BROWSE            0x0002    /* for the browsing channel */
55#define AVCT_DATA_PARTIAL           0x0100    /* Only have room for a partial message */
56
57#define AVCT_MIN_CONTROL_MTU        48  /* Per the AVRC spec, minimum MTU for the control channel */
58#define AVCT_MIN_BROWSE_MTU         335 /* Per the AVRC spec, minimum MTU for the browsing channel */
59
60/* Message offset.  The number of bytes needed by the protocol stack for the
61** protocol headers of an AVCTP message packet.
62*/
63#define AVCT_MSG_OFFSET             15
64#define AVCT_BROWSE_OFFSET          17 /* the default offset for browsing channel */
65
66/* Connection role. */
67#define AVCT_INT                    0       /* Initiator connection */
68#define AVCT_ACP                    1       /* Acceptor connection */
69
70/* Control role. */
71#define AVCT_TARGET                 1       /* target  */
72#define AVCT_CONTROL                2       /* controller  */
73#define AVCT_PASSIVE                4       /* If conflict, allow the other side to succeed  */
74
75/* Command/Response indicator. */
76#define AVCT_CMD                    0       /* Command message */
77#define AVCT_RSP                    2       /* Response message */
78#define AVCT_REJ                    3       /* Message rejected */
79
80/* Control callback events. */
81#define AVCT_CONNECT_CFM_EVT        0       /* Connection confirm */
82#define AVCT_CONNECT_IND_EVT        1       /* Connection indication */
83#define AVCT_DISCONNECT_CFM_EVT     2       /* Disconnect confirm */
84#define AVCT_DISCONNECT_IND_EVT     3       /* Disconnect indication */
85#define AVCT_CONG_IND_EVT           4       /* Congestion indication */
86#define AVCT_UNCONG_IND_EVT         5       /* Uncongestion indication */
87#define AVCT_BROWSE_CONN_CFM_EVT    6       /* Browse Connection confirm */
88#define AVCT_BROWSE_CONN_IND_EVT    7       /* Browse Connection indication */
89#define AVCT_BROWSE_DISCONN_CFM_EVT 8       /* Browse Disconnect confirm */
90#define AVCT_BROWSE_DISCONN_IND_EVT 9       /* Browse Disconnect indication */
91#define AVCT_BROWSE_CONG_IND_EVT    10      /* Congestion indication */
92#define AVCT_BROWSE_UNCONG_IND_EVT  11      /* Uncongestion indication */
93
94
95/* General purpose failure result code for callback events. */
96#define AVCT_RESULT_FAIL            5
97
98/*****************************************************************************
99**  Type Definitions
100*****************************************************************************/
101
102/* Control callback function. */
103typedef void (tAVCT_CTRL_CBACK)(UINT8 handle, UINT8 event, UINT16 result,
104                                BD_ADDR peer_addr);
105
106/* Message callback function */
107/* p_pkt->layer_specific is AVCT_DATA_CTRL or AVCT_DATA_BROWSE */
108typedef void (tAVCT_MSG_CBACK)(UINT8 handle, UINT8 label, UINT8 cr,
109                               BT_HDR *p_pkt);
110
111/* Structure used by AVCT_CreateConn. */
112typedef struct {
113    tAVCT_CTRL_CBACK    *p_ctrl_cback;      /* Control callback */
114    tAVCT_MSG_CBACK     *p_msg_cback;       /* Message callback */
115    UINT16              pid;                /* Profile ID */
116    UINT8               role;               /* Initiator/acceptor role */
117    UINT8               control;        /* Control role (Control/Target) */
118} tAVCT_CC;
119
120/*****************************************************************************
121**  External Function Declarations
122*****************************************************************************/
123#ifdef __cplusplus
124extern "C"
125{
126#endif
127
128/*******************************************************************************
129**
130** Function         AVCT_Register
131**
132** Description      This is the system level registration function for the
133**                  AVCTP protocol.  This function initializes AVCTP and
134**                  prepares the protocol stack for its use.  This function
135**                  must be called once by the system or platform using AVCTP
136**                  before the other functions of the API an be used.
137**
138**
139** Returns          void
140**
141*******************************************************************************/
142extern void AVCT_Register(UINT16 mtu, UINT16 mtu_br, UINT8 sec_mask);
143
144/*******************************************************************************
145**
146** Function         AVCT_Deregister
147**
148** Description      This function is called to deregister use AVCTP protocol.
149**                  It is called when AVCTP is no longer being used by any
150**                  application in the system.  Before this function can be
151**                  called, all connections must be removed with
152**                  AVCT_RemoveConn().
153**
154**
155** Returns          void
156**
157*******************************************************************************/
158extern void AVCT_Deregister(void);
159
160/*******************************************************************************
161**
162** Function         AVCT_CreateConn
163**
164** Description      Create an AVCTP connection.  There are two types of
165**                  connections, initiator and acceptor, as determined by
166**                  the p_cc->role parameter.  When this function is called to
167**                  create an initiator connection, an AVCTP connection to
168**                  the peer device is initiated if one does not already exist.
169**                  If an acceptor connection is created, the connection waits
170**                  passively for an incoming AVCTP connection from a peer device.
171**
172**
173** Returns          AVCT_SUCCESS if successful, otherwise error.
174**
175*******************************************************************************/
176extern UINT16 AVCT_CreateConn(UINT8 *p_handle, tAVCT_CC *p_cc,
177                              BD_ADDR peer_addr);
178
179/*******************************************************************************
180**
181** Function         AVCT_RemoveConn
182**
183** Description      Remove an AVCTP connection.  This function is called when
184**                  the application is no longer using a connection.  If this
185**                  is the last connection to a peer the L2CAP channel for AVCTP
186**                  will be closed.
187**
188**
189** Returns          AVCT_SUCCESS if successful, otherwise error.
190**
191*******************************************************************************/
192extern UINT16 AVCT_RemoveConn(UINT8 handle);
193
194/*******************************************************************************
195**
196** Function         AVCT_CreateBrowse
197**
198** Description      Create an AVCTP connection.  There are two types of
199**                  connections, initiator and acceptor, as determined by
200**                  the p_cc->role parameter.  When this function is called to
201**                  create an initiator connection, an AVCTP connection to
202**                  the peer device is initiated if one does not already exist.
203**                  If an acceptor connection is created, the connection waits
204**                  passively for an incoming AVCTP connection from a peer device.
205**
206**
207** Returns          AVCT_SUCCESS if successful, otherwise error.
208**
209*******************************************************************************/
210extern UINT16 AVCT_CreateBrowse(UINT8 handle, UINT8 role);
211
212/*******************************************************************************
213**
214** Function         AVCT_RemoveBrowse
215**
216** Description      Remove an AVCTP connection.  This function is called when
217**                  the application is no longer using a connection.  If this
218**                  is the last connection to a peer the L2CAP channel for AVCTP
219**                  will be closed.
220**
221**
222** Returns          AVCT_SUCCESS if successful, otherwise error.
223**
224*******************************************************************************/
225extern UINT16 AVCT_RemoveBrowse(UINT8 handle);
226
227/*******************************************************************************
228**
229** Function         AVCT_GetBrowseMtu
230**
231** Description      Get the peer_mtu for the AVCTP Browse channel of the given
232**                  connection.
233**
234** Returns          the peer browsing channel MTU.
235**
236*******************************************************************************/
237extern UINT16 AVCT_GetBrowseMtu (UINT8 handle);
238
239/*******************************************************************************
240**
241** Function         AVCT_GetPeerMtu
242**
243** Description      Get the peer_mtu for the AVCTP channel of the given
244**                  connection.
245**
246** Returns          the peer MTU size.
247**
248*******************************************************************************/
249extern UINT16 AVCT_GetPeerMtu (UINT8 handle);
250
251/*******************************************************************************
252**
253** Function         AVCT_MsgReq
254**
255** Description      Send an AVCTP message to a peer device.  In calling
256**                  AVCT_MsgReq(), the application should keep track of the
257**                  congestion state of AVCTP as communicated with events
258**                  AVCT_CONG_IND_EVT and AVCT_UNCONG_IND_EVT.   If the
259**                  application calls AVCT_MsgReq() when AVCTP is congested
260**                  the message may be discarded.  The application may make its
261**                  first call to AVCT_MsgReq() after it receives an
262**                  AVCT_CONNECT_CFM_EVT or AVCT_CONNECT_IND_EVT on control channel or
263**                  AVCT_BROWSE_CONN_CFM_EVT or AVCT_BROWSE_CONN_IND_EVT on browsing channel.
264**
265**                  p_msg->layer_specific must be set to
266**                  AVCT_DATA_CTRL for control channel traffic;
267**                  AVCT_DATA_BROWSE for for browse channel traffic.
268**
269** Returns          AVCT_SUCCESS if successful, otherwise error.
270**
271*******************************************************************************/
272extern UINT16 AVCT_MsgReq(UINT8 handle, UINT8 label, UINT8 cr, BT_HDR *p_msg);
273
274#ifdef __cplusplus
275}
276#endif
277
278
279#endif /* AVCT_API_H */
280