blob: 001ca1bdb6144a3b36b5a29cea75f2c9727cb317 [file] [log] [blame]
The Android Open Source Project5738f832012-12-12 16:00:35 -08001/******************************************************************************
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
51/* the layer_specific settings */
52#define AVCT_DATA_CTRL 0x0001 /* for the control channel */
53#define AVCT_DATA_BROWSE 0x0002 /* for the browsing channel */
54#define AVCT_DATA_PARTIAL 0x0100 /* Only have room for a partial message */
55
56#define AVCT_MIN_CONTROL_MTU 48 /* Per the AVRC spec, minimum MTU for the control channel */
57#define AVCT_MIN_BROWSE_MTU 335 /* Per the AVRC spec, minimum MTU for the browsing channel */
58
59/* Message offset. The number of bytes needed by the protocol stack for the
60** protocol headers of an AVCTP message packet.
61*/
62#define AVCT_MSG_OFFSET 15
63#define AVCT_BROWSE_OFFSET 17 /* the default offset for browsing channel */
64
65/* Connection role. */
66#define AVCT_INT 0 /* Initiator connection */
67#define AVCT_ACP 1 /* Acceptor connection */
68
69/* Control role. */
70#define AVCT_TARGET 1 /* target */
71#define AVCT_CONTROL 2 /* controller */
72#define AVCT_PASSIVE 4 /* If conflict, allow the other side to succeed */
73
74/* Command/Response indicator. */
75#define AVCT_CMD 0 /* Command message */
76#define AVCT_RSP 2 /* Response message */
77#define AVCT_REJ 3 /* Message rejected */
78
79/* Control callback events. */
80#define AVCT_CONNECT_CFM_EVT 0 /* Connection confirm */
81#define AVCT_CONNECT_IND_EVT 1 /* Connection indication */
82#define AVCT_DISCONNECT_CFM_EVT 2 /* Disconnect confirm */
83#define AVCT_DISCONNECT_IND_EVT 3 /* Disconnect indication */
84#define AVCT_CONG_IND_EVT 4 /* Congestion indication */
85#define AVCT_UNCONG_IND_EVT 5 /* Uncongestion indication */
86#define AVCT_BROWSE_CONN_CFM_EVT 6 /* Browse Connection confirm */
87#define AVCT_BROWSE_CONN_IND_EVT 7 /* Browse Connection indication */
88#define AVCT_BROWSE_DISCONN_CFM_EVT 8 /* Browse Disconnect confirm */
89#define AVCT_BROWSE_DISCONN_IND_EVT 9 /* Browse Disconnect indication */
90#define AVCT_BROWSE_CONG_IND_EVT 10 /* Congestion indication */
91#define AVCT_BROWSE_UNCONG_IND_EVT 11 /* Uncongestion indication */
92
93
94/* General purpose failure result code for callback events. */
95#define AVCT_RESULT_FAIL 5
96
97/*****************************************************************************
98** Type Definitions
99*****************************************************************************/
100
101/* Control callback function. */
102typedef void (tAVCT_CTRL_CBACK)(UINT8 handle, UINT8 event, UINT16 result,
103 BD_ADDR peer_addr);
104
105/* Message callback function */
106/* p_pkt->layer_specific is AVCT_DATA_CTRL or AVCT_DATA_BROWSE */
107typedef void (tAVCT_MSG_CBACK)(UINT8 handle, UINT8 label, UINT8 cr,
108 BT_HDR *p_pkt);
109
110/* Structure used by AVCT_CreateConn. */
111typedef struct {
112 tAVCT_CTRL_CBACK *p_ctrl_cback; /* Control callback */
113 tAVCT_MSG_CBACK *p_msg_cback; /* Message callback */
114 UINT16 pid; /* Profile ID */
115 UINT8 role; /* Initiator/acceptor role */
116 UINT8 control; /* Control role (Control/Target) */
117} tAVCT_CC;
118
119/*****************************************************************************
120** External Function Declarations
121*****************************************************************************/
122#ifdef __cplusplus
123extern "C"
124{
125#endif
126
127/*******************************************************************************
128**
129** Function AVCT_Register
130**
131** Description This is the system level registration function for the
132** AVCTP protocol. This function initializes AVCTP and
133** prepares the protocol stack for its use. This function
134** must be called once by the system or platform using AVCTP
135** before the other functions of the API an be used.
136**
137**
138** Returns void
139**
140*******************************************************************************/
June R. Tate-Gans24933b52014-09-24 15:25:02 -0700141extern void AVCT_Register(UINT16 mtu, UINT16 mtu_br, UINT8 sec_mask);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800142
143/*******************************************************************************
144**
145** Function AVCT_Deregister
146**
147** Description This function is called to deregister use AVCTP protocol.
148** It is called when AVCTP is no longer being used by any
149** application in the system. Before this function can be
150** called, all connections must be removed with
151** AVCT_RemoveConn().
152**
153**
154** Returns void
155**
156*******************************************************************************/
June R. Tate-Gans24933b52014-09-24 15:25:02 -0700157extern void AVCT_Deregister(void);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800158
159/*******************************************************************************
160**
161** Function AVCT_CreateConn
162**
163** Description Create an AVCTP connection. There are two types of
164** connections, initiator and acceptor, as determined by
165** the p_cc->role parameter. When this function is called to
166** create an initiator connection, an AVCTP connection to
167** the peer device is initiated if one does not already exist.
168** If an acceptor connection is created, the connection waits
169** passively for an incoming AVCTP connection from a peer device.
170**
171**
172** Returns AVCT_SUCCESS if successful, otherwise error.
173**
174*******************************************************************************/
June R. Tate-Gans24933b52014-09-24 15:25:02 -0700175extern UINT16 AVCT_CreateConn(UINT8 *p_handle, tAVCT_CC *p_cc,
176 BD_ADDR peer_addr);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800177
178/*******************************************************************************
179**
180** Function AVCT_RemoveConn
181**
182** Description Remove an AVCTP connection. This function is called when
183** the application is no longer using a connection. If this
184** is the last connection to a peer the L2CAP channel for AVCTP
185** will be closed.
186**
187**
188** Returns AVCT_SUCCESS if successful, otherwise error.
189**
190*******************************************************************************/
June R. Tate-Gans24933b52014-09-24 15:25:02 -0700191extern UINT16 AVCT_RemoveConn(UINT8 handle);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800192
193/*******************************************************************************
194**
195** Function AVCT_CreateBrowse
196**
197** Description Create an AVCTP connection. There are two types of
198** connections, initiator and acceptor, as determined by
199** the p_cc->role parameter. When this function is called to
200** create an initiator connection, an AVCTP connection to
201** the peer device is initiated if one does not already exist.
202** If an acceptor connection is created, the connection waits
203** passively for an incoming AVCTP connection from a peer device.
204**
205**
206** Returns AVCT_SUCCESS if successful, otherwise error.
207**
208*******************************************************************************/
June R. Tate-Gans24933b52014-09-24 15:25:02 -0700209extern UINT16 AVCT_CreateBrowse(UINT8 handle, UINT8 role);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800210
211/*******************************************************************************
212**
213** Function AVCT_RemoveBrowse
214**
215** Description Remove an AVCTP connection. This function is called when
216** the application is no longer using a connection. If this
217** is the last connection to a peer the L2CAP channel for AVCTP
218** will be closed.
219**
220**
221** Returns AVCT_SUCCESS if successful, otherwise error.
222**
223*******************************************************************************/
June R. Tate-Gans24933b52014-09-24 15:25:02 -0700224extern UINT16 AVCT_RemoveBrowse(UINT8 handle);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800225
226/*******************************************************************************
227**
228** Function AVCT_GetBrowseMtu
229**
230** Description Get the peer_mtu for the AVCTP Browse channel of the given
231** connection.
232**
233** Returns the peer browsing channel MTU.
234**
235*******************************************************************************/
June R. Tate-Gans24933b52014-09-24 15:25:02 -0700236extern UINT16 AVCT_GetBrowseMtu (UINT8 handle);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800237
238/*******************************************************************************
239**
240** Function AVCT_GetPeerMtu
241**
242** Description Get the peer_mtu for the AVCTP channel of the given
243** connection.
244**
245** Returns the peer MTU size.
246**
247*******************************************************************************/
June R. Tate-Gans24933b52014-09-24 15:25:02 -0700248extern UINT16 AVCT_GetPeerMtu (UINT8 handle);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800249
250/*******************************************************************************
251**
252** Function AVCT_MsgReq
253**
254** Description Send an AVCTP message to a peer device. In calling
255** AVCT_MsgReq(), the application should keep track of the
256** congestion state of AVCTP as communicated with events
257** AVCT_CONG_IND_EVT and AVCT_UNCONG_IND_EVT. If the
258** application calls AVCT_MsgReq() when AVCTP is congested
259** the message may be discarded. The application may make its
260** first call to AVCT_MsgReq() after it receives an
261** AVCT_CONNECT_CFM_EVT or AVCT_CONNECT_IND_EVT on control channel or
262** AVCT_BROWSE_CONN_CFM_EVT or AVCT_BROWSE_CONN_IND_EVT on browsing channel.
263**
264** p_msg->layer_specific must be set to
265** AVCT_DATA_CTRL for control channel traffic;
266** AVCT_DATA_BROWSE for for browse channel traffic.
267**
268** Returns AVCT_SUCCESS if successful, otherwise error.
269**
270*******************************************************************************/
June R. Tate-Gans24933b52014-09-24 15:25:02 -0700271extern UINT16 AVCT_MsgReq(UINT8 handle, UINT8 label, UINT8 cr, BT_HDR *p_msg);
The Android Open Source Project5738f832012-12-12 16:00:35 -0800272
273#ifdef __cplusplus
274}
275#endif
276
277
278#endif /* AVCT_API_H */