Home | History | Annotate | Download | only in include
      1 /******************************************************************************
      2  *
      3  *  Copyright 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_target.h"
     29 #include "bt_types.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 /* Per the AVRC spec, minimum MTU for the control channel */
     58 #define AVCT_MIN_CONTROL_MTU 48
     59 /* Per the AVRC spec, minimum MTU for the browsing channel */
     60 #define AVCT_MIN_BROWSE_MTU 335
     61 
     62 /* Message offset.  The number of bytes needed by the protocol stack for the
     63  * protocol headers of an AVCTP message packet.
     64 */
     65 #define AVCT_MSG_OFFSET 15
     66 #define AVCT_BROWSE_OFFSET 17 /* the default offset for browsing channel */
     67 
     68 /* Connection role. */
     69 #define AVCT_INT 0 /* Initiator connection */
     70 #define AVCT_ACP 1 /* Acceptor connection */
     71 
     72 /* Control role. */
     73 #define AVCT_TARGET 1  /* target  */
     74 #define AVCT_CONTROL 2 /* controller  */
     75 #define AVCT_PASSIVE 4 /* If conflict, allow the other side to succeed  */
     76 
     77 /* Command/Response indicator. */
     78 #define AVCT_CMD 0 /* Command message */
     79 #define AVCT_RSP 2 /* Response message */
     80 #define AVCT_REJ 3 /* Message rejected */
     81 
     82 /* Control callback events. */
     83 #define AVCT_CONNECT_CFM_EVT 0        /* Connection confirm */
     84 #define AVCT_CONNECT_IND_EVT 1        /* Connection indication */
     85 #define AVCT_DISCONNECT_CFM_EVT 2     /* Disconnect confirm */
     86 #define AVCT_DISCONNECT_IND_EVT 3     /* Disconnect indication */
     87 #define AVCT_CONG_IND_EVT 4           /* Congestion indication */
     88 #define AVCT_UNCONG_IND_EVT 5         /* Uncongestion indication */
     89 #define AVCT_BROWSE_CONN_CFM_EVT 6    /* Browse Connection confirm */
     90 #define AVCT_BROWSE_CONN_IND_EVT 7    /* Browse Connection indication */
     91 #define AVCT_BROWSE_DISCONN_CFM_EVT 8 /* Browse Disconnect confirm */
     92 #define AVCT_BROWSE_DISCONN_IND_EVT 9 /* Browse Disconnect indication */
     93 #define AVCT_BROWSE_CONG_IND_EVT 10   /* Congestion indication */
     94 #define AVCT_BROWSE_UNCONG_IND_EVT 11 /* Uncongestion indication */
     95 
     96 /* General purpose failure result code for callback events. */
     97 #define AVCT_RESULT_FAIL 5
     98 
     99 /*****************************************************************************
    100  *  Type Definitions
    101  ****************************************************************************/
    102 
    103 /* Control callback function. */
    104 typedef void(tAVCT_CTRL_CBACK)(uint8_t handle, uint8_t event, uint16_t result,
    105                                const RawAddress* peer_addr);
    106 
    107 /* Message callback function */
    108 /* p_pkt->layer_specific is AVCT_DATA_CTRL or AVCT_DATA_BROWSE */
    109 typedef void(tAVCT_MSG_CBACK)(uint8_t handle, uint8_t label, uint8_t cr,
    110                               BT_HDR* p_pkt);
    111 
    112 /* Structure used by AVCT_CreateConn. */
    113 typedef struct {
    114   tAVCT_CTRL_CBACK* p_ctrl_cback; /* Control callback */
    115   tAVCT_MSG_CBACK* p_msg_cback;   /* Message callback */
    116   uint16_t pid;                   /* Profile ID */
    117   uint8_t role;                   /* Initiator/acceptor role */
    118   uint8_t control;                /* Control role (Control/Target) */
    119 } tAVCT_CC;
    120 
    121 /*****************************************************************************
    122  *  External Function Declarations
    123  ****************************************************************************/
    124 
    125 /*******************************************************************************
    126  *
    127  * Function         AVCT_Register
    128  *
    129  * Description      This is the system level registration function for the
    130  *                  AVCTP protocol.  This function initializes AVCTP and
    131  *                  prepares the protocol stack for its use.  This function
    132  *                  must be called once by the system or platform using AVCTP
    133  *                  before the other functions of the API an be used.
    134  *
    135  *
    136  * Returns          void
    137  *
    138  ******************************************************************************/
    139 extern void AVCT_Register(uint16_t mtu, uint16_t mtu_br, uint8_t sec_mask);
    140 
    141 /*******************************************************************************
    142  *
    143  * Function         AVCT_Deregister
    144  *
    145  * Description      This function is called to deregister use AVCTP protocol.
    146  *                  It is called when AVCTP is no longer being used by any
    147  *                  application in the system.  Before this function can be
    148  *                  called, all connections must be removed with
    149  *                  AVCT_RemoveConn().
    150  *
    151  *
    152  * Returns          void
    153  *
    154  ******************************************************************************/
    155 extern void AVCT_Deregister(void);
    156 
    157 /*******************************************************************************
    158  *
    159  * Function         AVCT_CreateConn
    160  *
    161  * Description      Create an AVCTP connection.  There are two types of
    162  *                  connections, initiator and acceptor, as determined by
    163  *                  the p_cc->role parameter.  When this function is called to
    164  *                  create an initiator connection, an AVCTP connection to
    165  *                  the peer device is initiated if one does not already exist.
    166  *                  If an acceptor connection is created, the connection waits
    167  *                  passively for an incoming AVCTP connection from a peer
    168  *                  device.
    169  *
    170  *
    171  * Returns          AVCT_SUCCESS if successful, otherwise error.
    172  *
    173  ******************************************************************************/
    174 extern uint16_t AVCT_CreateConn(uint8_t* p_handle, tAVCT_CC* p_cc,
    175                                 const RawAddress& peer_addr);
    176 
    177 /*******************************************************************************
    178  *
    179  * Function         AVCT_RemoveConn
    180  *
    181  * Description      Remove an AVCTP connection.  This function is called when
    182  *                  the application is no longer using a connection.  If this
    183  *                  is the last connection to a peer the L2CAP channel for AVCTP
    184  *                  will be closed.
    185  *
    186  *
    187  * Returns          AVCT_SUCCESS if successful, otherwise error.
    188  *
    189  ******************************************************************************/
    190 extern uint16_t AVCT_RemoveConn(uint8_t handle);
    191 
    192 /*******************************************************************************
    193  *
    194  * Function         AVCT_CreateBrowse
    195  *
    196  * Description      Create an AVCTP connection.  There are two types of
    197  *                  connections, initiator and acceptor, as determined by
    198  *                  the p_cc->role parameter.  When this function is called to
    199  *                  create an initiator connection, an AVCTP connection to
    200  *                  the peer device is initiated if one does not already exist.
    201  *                  If an acceptor connection is created, the connection waits
    202  *                  passively for an incoming AVCTP connection from a peer
    203  *                  device.
    204  *
    205  *
    206  * Returns          AVCT_SUCCESS if successful, otherwise error.
    207  *
    208  ******************************************************************************/
    209 extern uint16_t AVCT_CreateBrowse(uint8_t handle, uint8_t 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 extern uint16_t AVCT_RemoveBrowse(uint8_t 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 extern uint16_t AVCT_GetBrowseMtu(uint8_t 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 extern uint16_t AVCT_GetPeerMtu(uint8_t 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
    262  *                  channel or
    263  *                  AVCT_BROWSE_CONN_CFM_EVT or AVCT_BROWSE_CONN_IND_EVT on
    264  *                  browsing channel.
    265  *
    266  *                  p_msg->layer_specific must be set to
    267  *                  AVCT_DATA_CTRL for control channel traffic;
    268  *                  AVCT_DATA_BROWSE for for browse channel traffic.
    269  *
    270  * Returns          AVCT_SUCCESS if successful, otherwise error.
    271  *
    272  ******************************************************************************/
    273 extern uint16_t AVCT_MsgReq(uint8_t handle, uint8_t label, uint8_t cr,
    274                             BT_HDR* p_msg);
    275 
    276 #endif /* AVCT_API_H */
    277