Home | History | Annotate | Download | only in include
      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