• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
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. */
102 typedef 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 */
107 typedef void (tAVCT_MSG_CBACK)(UINT8 handle, UINT8 label, UINT8 cr,
108                                BT_HDR *p_pkt);
109 
110 /* Structure used by AVCT_CreateConn. */
111 typedef 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
123 extern "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 *******************************************************************************/
141 AVCT_API extern void AVCT_Register(UINT16 mtu, UINT16 mtu_br, UINT8 sec_mask);
142 
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 *******************************************************************************/
157 AVCT_API extern void AVCT_Deregister(void);
158 
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 *******************************************************************************/
175 AVCT_API extern UINT16 AVCT_CreateConn(UINT8 *p_handle, tAVCT_CC *p_cc,
176                                        BD_ADDR peer_addr);
177 
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 *******************************************************************************/
191 AVCT_API extern UINT16 AVCT_RemoveConn(UINT8 handle);
192 
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 *******************************************************************************/
209 AVCT_API extern UINT16 AVCT_CreateBrowse(UINT8 handle, UINT8 role);
210 
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 *******************************************************************************/
224 AVCT_API extern UINT16 AVCT_RemoveBrowse(UINT8 handle);
225 
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 *******************************************************************************/
236 AVCT_API extern UINT16 AVCT_GetBrowseMtu (UINT8 handle);
237 
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 *******************************************************************************/
248 AVCT_API extern UINT16 AVCT_GetPeerMtu (UINT8 handle);
249 
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 *******************************************************************************/
271 AVCT_API extern UINT16 AVCT_MsgReq(UINT8 handle, UINT8 label, UINT8 cr, BT_HDR *p_msg);
272 
273 #ifdef __cplusplus
274 }
275 #endif
276 
277 
278 #endif /* AVCT_API_H */
279 
280