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