Home | History | Annotate | Download | only in include
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 1999-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 file contains the L2CAP API definitions
     22  *
     23  ******************************************************************************/
     24 #ifndef L2C_API_H
     25 #define L2C_API_H
     26 
     27 #include <stdbool.h>
     28 
     29 #include "bt_target.h"
     30 #include "hcidefs.h"
     31 #include "l2cdefs.h"
     32 
     33 /*****************************************************************************
     34  *  Constants
     35  ****************************************************************************/
     36 
     37 /* Define the minimum offset that L2CAP needs in a buffer. This is made up of
     38  * HCI type(1), len(2), handle(2), L2CAP len(2) and CID(2) => 9
     39 */
     40 #define L2CAP_MIN_OFFSET 13 /* plus control(2), SDU length(2) */
     41 
     42 #define L2CAP_LCC_SDU_LENGTH 2
     43 #define L2CAP_LCC_OFFSET \
     44   (L2CAP_MIN_OFFSET + L2CAP_LCC_SDU_LENGTH) /* plus SDU length(2) */
     45 
     46 /* ping result codes */
     47 #define L2CAP_PING_RESULT_OK 0      /* Ping reply received OK     */
     48 #define L2CAP_PING_RESULT_NO_LINK 1 /* Link could not be setup    */
     49 #define L2CAP_PING_RESULT_NO_RESP 2 /* Remote L2CAP did not reply */
     50 
     51 /* result code for L2CA_DataWrite() */
     52 #define L2CAP_DW_FAILED false
     53 #define L2CAP_DW_SUCCESS true
     54 #define L2CAP_DW_CONGESTED 2
     55 
     56 /* Values for priority parameter to L2CA_SetAclPriority */
     57 #define L2CAP_PRIORITY_NORMAL 0
     58 #define L2CAP_PRIORITY_HIGH 1
     59 
     60 /* Values for priority parameter to L2CA_SetTxPriority */
     61 #define L2CAP_CHNL_PRIORITY_HIGH 0
     62 #define L2CAP_CHNL_PRIORITY_MEDIUM 1
     63 #define L2CAP_CHNL_PRIORITY_LOW 2
     64 
     65 typedef uint8_t tL2CAP_CHNL_PRIORITY;
     66 
     67 /* Values for Tx/Rx data rate parameter to L2CA_SetChnlDataRate */
     68 #define L2CAP_CHNL_DATA_RATE_HIGH 3
     69 #define L2CAP_CHNL_DATA_RATE_MEDIUM 2
     70 #define L2CAP_CHNL_DATA_RATE_LOW 1
     71 #define L2CAP_CHNL_DATA_RATE_NO_TRAFFIC 0
     72 
     73 typedef uint8_t tL2CAP_CHNL_DATA_RATE;
     74 
     75 /* Data Packet Flags  (bits 2-15 are reserved) */
     76 /* layer specific 14-15 bits are used for FCR SAR */
     77 #define L2CAP_FLUSHABLE_MASK 0x0003
     78 #define L2CAP_FLUSHABLE_CH_BASED 0x0000
     79 #define L2CAP_FLUSHABLE_PKT 0x0001
     80 #define L2CAP_NON_FLUSHABLE_PKT 0x0002
     81 
     82 /* L2CA_FlushChannel num_to_flush definitions */
     83 #define L2CAP_FLUSH_CHANS_ALL 0xffff
     84 #define L2CAP_FLUSH_CHANS_GET 0x0000
     85 
     86 /* special CID for Multi-AV for reporting congestion */
     87 #define L2CAP_MULTI_AV_CID 0
     88 
     89 /* length of the HCI header block */
     90 /* HCI header(4) + SNK count(1) + FCR bits(1) + AV data length(2) */
     91 #define L2CAP_MULTI_AV_HCI_HDR_LEN 8
     92 
     93 /* length of padding for 4 bytes align */
     94 #define L2CAP_MULTI_AV_PADDING_LEN 2
     95 
     96 /* length of the HCI header block with padding for FCR */
     97 /* HCI header(4) + SNK count(1) + FCR bits(1) + AV data length(2) + padding(2)
     98  */
     99 #define L2CAP_MULTI_AV_HCI_HDR_LEN_WITH_PADDING 10
    100 
    101 /* length of the L2CAP header block */
    102 /* HCI header(4) + L2CAP header(4) + padding(4) or control word(2) + FCS(2) */
    103 #define L2CAP_MULTI_AV_L2C_HDR_LEN 12
    104 
    105 /* definition used for L2CA_SetDesireRole */
    106 #define L2CAP_ROLE_SLAVE HCI_ROLE_SLAVE
    107 #define L2CAP_ROLE_MASTER HCI_ROLE_MASTER
    108 /* set this bit to allow switch at create conn */
    109 #define L2CAP_ROLE_ALLOW_SWITCH 0x80
    110 /* set this bit to disallow switch at create conn */
    111 #define L2CAP_ROLE_DISALLOW_SWITCH 0x40
    112 #define L2CAP_ROLE_CHECK_SWITCH 0xC0
    113 
    114 /* Values for 'allowed_modes' field passed in structure tL2CAP_ERTM_INFO
    115 */
    116 #define L2CAP_FCR_CHAN_OPT_BASIC (1 << L2CAP_FCR_BASIC_MODE)
    117 #define L2CAP_FCR_CHAN_OPT_ERTM (1 << L2CAP_FCR_ERTM_MODE)
    118 #define L2CAP_FCR_CHAN_OPT_STREAM (1 << L2CAP_FCR_STREAM_MODE)
    119 
    120 #define L2CAP_FCR_CHAN_OPT_ALL_MASK                     \
    121   (L2CAP_FCR_CHAN_OPT_BASIC | L2CAP_FCR_CHAN_OPT_ERTM | \
    122    L2CAP_FCR_CHAN_OPT_STREAM)
    123 
    124 /* Validity check for PSM.  PSM values must be odd.  Also, all PSM values must
    125  * be assigned such that the least significant bit of the most sigificant
    126  * octet equals zero.
    127 */
    128 #define L2C_INVALID_PSM(psm) (((psm)&0x0101) != 0x0001)
    129 #define L2C_IS_VALID_PSM(psm) (((psm)&0x0101) == 0x0001)
    130 #define L2C_IS_VALID_LE_PSM(psm) (((psm) > 0x0000) && ((psm) < 0x0100))
    131 
    132 /*****************************************************************************
    133  *  Type Definitions
    134  ****************************************************************************/
    135 
    136 typedef struct {
    137 #define L2CAP_FCR_BASIC_MODE 0x00
    138 #define L2CAP_FCR_ERTM_MODE 0x03
    139 #define L2CAP_FCR_STREAM_MODE 0x04
    140 #define L2CAP_FCR_LE_COC_MODE 0x05
    141 
    142   uint8_t mode;
    143 
    144   uint8_t tx_win_sz;
    145   uint8_t max_transmit;
    146   uint16_t rtrans_tout;
    147   uint16_t mon_tout;
    148   uint16_t mps;
    149 } tL2CAP_FCR_OPTS;
    150 
    151 /* Define a structure to hold the configuration parameters. Since the
    152  * parameters are optional, for each parameter there is a boolean to
    153  * use to signify its presence or absence.
    154 */
    155 typedef struct {
    156   uint16_t result; /* Only used in confirm messages */
    157   bool mtu_present;
    158   uint16_t mtu;
    159   bool qos_present;
    160   FLOW_SPEC qos;
    161   bool flush_to_present;
    162   uint16_t flush_to;
    163   bool fcr_present;
    164   tL2CAP_FCR_OPTS fcr;
    165   bool fcs_present; /* Optionally bypasses FCS checks */
    166   uint8_t fcs;      /* '0' if desire is to bypass FCS, otherwise '1' */
    167   bool ext_flow_spec_present;
    168   tHCI_EXT_FLOW_SPEC ext_flow_spec;
    169   uint16_t flags; /* bit 0: 0-no continuation, 1-continuation */
    170 } tL2CAP_CFG_INFO;
    171 
    172 /* Define a structure to hold the configuration parameter for LE L2CAP
    173  * connection oriented channels.
    174 */
    175 typedef struct {
    176   uint16_t mtu;
    177   uint16_t mps;
    178   uint16_t credits;
    179 } tL2CAP_LE_CFG_INFO;
    180 
    181 /* L2CAP channel configured field bitmap */
    182 #define L2CAP_CH_CFG_MASK_MTU 0x0001
    183 #define L2CAP_CH_CFG_MASK_QOS 0x0002
    184 #define L2CAP_CH_CFG_MASK_FLUSH_TO 0x0004
    185 #define L2CAP_CH_CFG_MASK_FCR 0x0008
    186 #define L2CAP_CH_CFG_MASK_FCS 0x0010
    187 #define L2CAP_CH_CFG_MASK_EXT_FLOW_SPEC 0x0020
    188 
    189 typedef uint16_t tL2CAP_CH_CFG_BITS;
    190 
    191 /*********************************
    192  *  Callback Functions Prototypes
    193  *********************************/
    194 
    195 /* Connection indication callback prototype. Parameters are
    196  *              BD Address of remote
    197  *              Local CID assigned to the connection
    198  *              PSM that the remote wants to connect to
    199  *              Identifier that the remote sent
    200 */
    201 typedef void(tL2CA_CONNECT_IND_CB)(BD_ADDR, uint16_t, uint16_t, uint8_t);
    202 
    203 /* Connection confirmation callback prototype. Parameters are
    204  *              Local CID
    205  *              Result - 0 = connected, non-zero means failure reason
    206 */
    207 typedef void(tL2CA_CONNECT_CFM_CB)(uint16_t, uint16_t);
    208 
    209 /* Connection pending callback prototype. Parameters are
    210  *              Local CID
    211 */
    212 typedef void(tL2CA_CONNECT_PND_CB)(uint16_t);
    213 
    214 /* Configuration indication callback prototype. Parameters are
    215  *              Local CID assigned to the connection
    216  *              Pointer to configuration info
    217 */
    218 typedef void(tL2CA_CONFIG_IND_CB)(uint16_t, tL2CAP_CFG_INFO*);
    219 
    220 /* Configuration confirm callback prototype. Parameters are
    221  *              Local CID assigned to the connection
    222  *              Pointer to configuration info
    223 */
    224 typedef void(tL2CA_CONFIG_CFM_CB)(uint16_t, tL2CAP_CFG_INFO*);
    225 
    226 /* Disconnect indication callback prototype. Parameters are
    227  *              Local CID
    228  *              Boolean whether upper layer should ack this
    229 */
    230 typedef void(tL2CA_DISCONNECT_IND_CB)(uint16_t, bool);
    231 
    232 /* Disconnect confirm callback prototype. Parameters are
    233  *              Local CID
    234  *              Result
    235 */
    236 typedef void(tL2CA_DISCONNECT_CFM_CB)(uint16_t, uint16_t);
    237 
    238 /* QOS Violation indication callback prototype. Parameters are
    239  *              BD Address of violating device
    240 */
    241 typedef void(tL2CA_QOS_VIOLATION_IND_CB)(BD_ADDR);
    242 
    243 /* Data received indication callback prototype. Parameters are
    244  *              Local CID
    245  *              Address of buffer
    246 */
    247 typedef void(tL2CA_DATA_IND_CB)(uint16_t, BT_HDR*);
    248 
    249 /* Echo response callback prototype. Note that this is not included in the
    250  * registration information, but is passed to L2CAP as part of the API to
    251  * actually send an echo request. Parameters are
    252  *              Result
    253 */
    254 typedef void(tL2CA_ECHO_RSP_CB)(uint16_t);
    255 
    256 /* Callback function prototype to pass broadcom specific echo response  */
    257 /* to the upper layer                                                   */
    258 typedef void(tL2CA_ECHO_DATA_CB)(BD_ADDR, uint16_t, uint8_t*);
    259 
    260 /* Congestion status callback protype. This callback is optional. If
    261  * an application tries to send data when the transmit queue is full,
    262  * the data will anyways be dropped. The parameter is:
    263  *              Local CID
    264  *              true if congested, false if uncongested
    265 */
    266 typedef void(tL2CA_CONGESTION_STATUS_CB)(uint16_t, bool);
    267 
    268 /* Callback prototype for number of packets completed events.
    269  * This callback notifies the application when Number of Completed Packets
    270  * event has been received.
    271  * This callback is originally designed for 3DG devices.
    272  * The parameter is:
    273  *          peer BD_ADDR
    274 */
    275 typedef void(tL2CA_NOCP_CB)(BD_ADDR);
    276 
    277 /* Transmit complete callback protype. This callback is optional. If
    278  * set, L2CAP will call it when packets are sent or flushed. If the
    279  * count is 0xFFFF, it means all packets are sent for that CID (eRTM
    280  * mode only). The parameters are:
    281  *              Local CID
    282  *              Number of SDUs sent or dropped
    283 */
    284 typedef void(tL2CA_TX_COMPLETE_CB)(uint16_t, uint16_t);
    285 
    286 /* Define the structure that applications use to register with
    287  * L2CAP. This structure includes callback functions. All functions
    288  * MUST be provided, with the exception of the "connect pending"
    289  * callback and "congestion status" callback.
    290 */
    291 typedef struct {
    292   tL2CA_CONNECT_IND_CB* pL2CA_ConnectInd_Cb;
    293   tL2CA_CONNECT_CFM_CB* pL2CA_ConnectCfm_Cb;
    294   tL2CA_CONNECT_PND_CB* pL2CA_ConnectPnd_Cb;
    295   tL2CA_CONFIG_IND_CB* pL2CA_ConfigInd_Cb;
    296   tL2CA_CONFIG_CFM_CB* pL2CA_ConfigCfm_Cb;
    297   tL2CA_DISCONNECT_IND_CB* pL2CA_DisconnectInd_Cb;
    298   tL2CA_DISCONNECT_CFM_CB* pL2CA_DisconnectCfm_Cb;
    299   tL2CA_QOS_VIOLATION_IND_CB* pL2CA_QoSViolationInd_Cb;
    300   tL2CA_DATA_IND_CB* pL2CA_DataInd_Cb;
    301   tL2CA_CONGESTION_STATUS_CB* pL2CA_CongestionStatus_Cb;
    302   tL2CA_TX_COMPLETE_CB* pL2CA_TxComplete_Cb;
    303 
    304 } tL2CAP_APPL_INFO;
    305 
    306 /* Define the structure that applications use to create or accept
    307  * connections with enhanced retransmission mode.
    308 */
    309 typedef struct {
    310   uint8_t preferred_mode;
    311   uint8_t allowed_modes;
    312   uint16_t user_rx_buf_size;
    313   uint16_t user_tx_buf_size;
    314   uint16_t fcr_rx_buf_size;
    315   uint16_t fcr_tx_buf_size;
    316 
    317 } tL2CAP_ERTM_INFO;
    318 
    319 #define L2CA_REGISTER(a, b, c) L2CA_Register(a, (tL2CAP_APPL_INFO*)(b))
    320 #define L2CA_DEREGISTER(a) L2CA_Deregister(a)
    321 #define L2CA_CONNECT_REQ(a, b, c) L2CA_ErtmConnectReq(a, b, c)
    322 #define L2CA_CONNECT_RSP(a, b, c, d, e, f) L2CA_ErtmConnectRsp(a, b, c, d, e, f)
    323 #define L2CA_CONFIG_REQ(a, b) L2CA_ConfigReq(a, b)
    324 #define L2CA_CONFIG_RSP(a, b) L2CA_ConfigRsp(a, b)
    325 #define L2CA_DISCONNECT_REQ(a) L2CA_DisconnectReq(a)
    326 #define L2CA_DISCONNECT_RSP(a) L2CA_DisconnectRsp(a)
    327 #define L2CA_DATA_WRITE(a, b) L2CA_DataWrite(a, b)
    328 #define L2CA_REGISTER_COC(a, b, c) L2CA_RegisterLECoc(a, (tL2CAP_APPL_INFO*)(b))
    329 #define L2CA_DEREGISTER_COC(a) L2CA_DeregisterLECoc(a)
    330 #define L2CA_CONNECT_COC_REQ(a, b, c) L2CA_ConnectLECocReq(a, b, c)
    331 #define L2CA_CONNECT_COC_RSP(a, b, c, d, e, f) \
    332   L2CA_ConnectLECocRsp(a, b, c, d, e, f)
    333 #define L2CA_GET_PEER_COC_CONFIG(a, b) L2CA_GetPeerLECocConfig(a, b)
    334 
    335 /*****************************************************************************
    336  *  External Function Declarations
    337  ****************************************************************************/
    338 
    339 /*******************************************************************************
    340  *
    341  * Function         L2CA_Register
    342  *
    343  * Description      Other layers call this function to register for L2CAP
    344  *                  services.
    345  *
    346  * Returns          PSM to use or zero if error. Typically, the PSM returned
    347  *                  is the same as was passed in, but for an outgoing-only
    348  *                  connection to a dynamic PSM, a "virtual" PSM is returned
    349  *                  and should be used in the calls to L2CA_ConnectReq() and
    350  *                  BTM_SetSecurityLevel().
    351  *
    352  ******************************************************************************/
    353 extern uint16_t L2CA_Register(uint16_t psm, tL2CAP_APPL_INFO* p_cb_info);
    354 
    355 /*******************************************************************************
    356  *
    357  * Function         L2CA_Deregister
    358  *
    359  * Description      Other layers call this function to deregister for L2CAP
    360  *                  services.
    361  *
    362  * Returns          void
    363  *
    364  ******************************************************************************/
    365 extern void L2CA_Deregister(uint16_t psm);
    366 
    367 /*******************************************************************************
    368  *
    369  * Function         L2CA_AllocatePSM
    370  *
    371  * Description      Other layers call this function to find an unused PSM for
    372  *                  L2CAP services.
    373  *
    374  * Returns          PSM to use.
    375  *
    376  ******************************************************************************/
    377 extern uint16_t L2CA_AllocatePSM(void);
    378 
    379 /*******************************************************************************
    380  *
    381  * Function         L2CA_ConnectReq
    382  *
    383  * Description      Higher layers call this function to create an L2CAP
    384  *                  connection.
    385  *                  Note that the connection is not established at this time,
    386  *                  but connection establishment gets started. The callback
    387  *                  will be invoked when connection establishes or fails.
    388  *
    389  * Returns          the CID of the connection, or 0 if it failed to start
    390  *
    391  ******************************************************************************/
    392 extern uint16_t L2CA_ConnectReq(uint16_t psm, BD_ADDR p_bd_addr);
    393 
    394 /*******************************************************************************
    395  *
    396  * Function         L2CA_ConnectRsp
    397  *
    398  * Description      Higher layers call this function to accept an incoming
    399  *                  L2CAP connection, for which they had gotten an connect
    400  *                  indication callback.
    401  *
    402  * Returns          true for success, false for failure
    403  *
    404  ******************************************************************************/
    405 extern bool L2CA_ConnectRsp(BD_ADDR p_bd_addr, uint8_t id, uint16_t lcid,
    406                             uint16_t result, uint16_t status);
    407 
    408 /*******************************************************************************
    409  *
    410  * Function         L2CA_ErtmConnectReq
    411  *
    412  * Description      Higher layers call this function to create an L2CAP
    413  *                  connection that needs to use Enhanced Retransmission Mode.
    414  *                  Note that the connection is not established at this time,
    415  *                  but connection establishment gets started. The callback
    416  *                  will be invoked when connection establishes or fails.
    417  *
    418  * Returns          the CID of the connection, or 0 if it failed to start
    419  *
    420  ******************************************************************************/
    421 extern uint16_t L2CA_ErtmConnectReq(uint16_t psm, BD_ADDR p_bd_addr,
    422                                     tL2CAP_ERTM_INFO* p_ertm_info);
    423 
    424 /*******************************************************************************
    425  *
    426  * Function         L2CA_RegisterLECoc
    427  *
    428  * Description      Other layers call this function to register for L2CAP
    429  *                  Connection Oriented Channel.
    430  *
    431  * Returns          PSM to use or zero if error. Typically, the PSM returned
    432  *                  is the same as was passed in, but for an outgoing-only
    433  *                  connection to a dynamic PSM, a "virtual" PSM is returned
    434  *                  and should be used in the calls to L2CA_ConnectLECocReq()
    435  *                  and BTM_SetSecurityLevel().
    436  *
    437  ******************************************************************************/
    438 extern uint16_t L2CA_RegisterLECoc(uint16_t psm, tL2CAP_APPL_INFO* p_cb_info);
    439 
    440 /*******************************************************************************
    441  *
    442  * Function         L2CA_DeregisterLECoc
    443  *
    444  * Description      Other layers call this function to deregister for L2CAP
    445  *                  Connection Oriented Channel.
    446  *
    447  * Returns          void
    448  *
    449  ******************************************************************************/
    450 extern void L2CA_DeregisterLECoc(uint16_t psm);
    451 
    452 /*******************************************************************************
    453  *
    454  * Function         L2CA_ConnectLECocReq
    455  *
    456  * Description      Higher layers call this function to create an L2CAP LE COC.
    457  *                  Note that the connection is not established at this time,
    458  *                  but connection establishment gets started. The callback
    459  *                  will be invoked when connection establishes or fails.
    460  *
    461  * Returns          the CID of the connection, or 0 if it failed to start
    462  *
    463  ******************************************************************************/
    464 extern uint16_t L2CA_ConnectLECocReq(uint16_t psm, BD_ADDR p_bd_addr,
    465                                      tL2CAP_LE_CFG_INFO* p_cfg);
    466 
    467 /*******************************************************************************
    468  *
    469  * Function         L2CA_ConnectLECocRsp
    470  *
    471  * Description      Higher layers call this function to accept an incoming
    472  *                  L2CAP LE COC connection, for which they had gotten a connect
    473  *                  indication callback.
    474  *
    475  * Returns          true for success, false for failure
    476  *
    477  ******************************************************************************/
    478 extern bool L2CA_ConnectLECocRsp(BD_ADDR p_bd_addr, uint8_t id, uint16_t lcid,
    479                                  uint16_t result, uint16_t status,
    480                                  tL2CAP_LE_CFG_INFO* p_cfg);
    481 
    482 /*******************************************************************************
    483  *
    484  *  Function         L2CA_GetPeerLECocConfig
    485  *
    486  *  Description      Get peers configuration for LE Connection Oriented Channel.
    487  *
    488  *  Return value:    true if peer is connected
    489  *
    490  ******************************************************************************/
    491 extern bool L2CA_GetPeerLECocConfig(uint16_t lcid,
    492                                     tL2CAP_LE_CFG_INFO* peer_cfg);
    493 
    494 // This function sets the callback routines for the L2CAP connection referred to
    495 // by |local_cid|. The callback routines can only be modified for outgoing
    496 // connections established by |L2CA_ConnectReq| or accepted incoming
    497 // connections. |callbacks| must not be NULL. This function returns true if the
    498 // callbacks could be updated, false if not (e.g. |local_cid| was not found).
    499 bool L2CA_SetConnectionCallbacks(uint16_t local_cid,
    500                                  const tL2CAP_APPL_INFO* callbacks);
    501 
    502 /*******************************************************************************
    503  *
    504  * Function         L2CA_ErtmConnectRsp
    505  *
    506  * Description      Higher layers call this function to accept an incoming
    507  *                  L2CAP connection, for which they had gotten an connect
    508  *                  indication callback, and for which the higher layer wants
    509  *                  to use Enhanced Retransmission Mode.
    510  *
    511  * Returns          true for success, false for failure
    512  *
    513  ******************************************************************************/
    514 extern bool L2CA_ErtmConnectRsp(BD_ADDR p_bd_addr, uint8_t id, uint16_t lcid,
    515                                 uint16_t result, uint16_t status,
    516                                 tL2CAP_ERTM_INFO* p_ertm_info);
    517 
    518 /*******************************************************************************
    519  *
    520  * Function         L2CA_ConfigReq
    521  *
    522  * Description      Higher layers call this function to send configuration.
    523  *
    524  * Returns          true if configuration sent, else false
    525  *
    526  ******************************************************************************/
    527 extern bool L2CA_ConfigReq(uint16_t cid, tL2CAP_CFG_INFO* p_cfg);
    528 
    529 /*******************************************************************************
    530  *
    531  * Function         L2CA_ConfigRsp
    532  *
    533  * Description      Higher layers call this function to send a configuration
    534  *                  response.
    535  *
    536  * Returns          true if configuration response sent, else false
    537  *
    538  ******************************************************************************/
    539 extern bool L2CA_ConfigRsp(uint16_t cid, tL2CAP_CFG_INFO* p_cfg);
    540 
    541 /*******************************************************************************
    542  *
    543  * Function         L2CA_DisconnectReq
    544  *
    545  * Description      Higher layers call this function to disconnect a channel.
    546  *
    547  * Returns          true if disconnect sent, else false
    548  *
    549  ******************************************************************************/
    550 extern bool L2CA_DisconnectReq(uint16_t cid);
    551 
    552 /*******************************************************************************
    553  *
    554  * Function         L2CA_DisconnectRsp
    555  *
    556  * Description      Higher layers call this function to acknowledge the
    557  *                  disconnection of a channel.
    558  *
    559  * Returns          void
    560  *
    561  ******************************************************************************/
    562 extern bool L2CA_DisconnectRsp(uint16_t cid);
    563 
    564 /*******************************************************************************
    565  *
    566  * Function         L2CA_DataWrite
    567  *
    568  * Description      Higher layers call this function to write data.
    569  *
    570  * Returns          L2CAP_DW_SUCCESS, if data accepted, else false
    571  *                  L2CAP_DW_CONGESTED, if data accepted and the channel is
    572  *                                      congested
    573  *                  L2CAP_DW_FAILED, if error
    574  *
    575  ******************************************************************************/
    576 extern uint8_t L2CA_DataWrite(uint16_t cid, BT_HDR* p_data);
    577 
    578 /*******************************************************************************
    579  *
    580  * Function         L2CA_Ping
    581  *
    582  * Description      Higher layers call this function to send an echo request.
    583  *
    584  * Returns          true if echo request sent, else false.
    585  *
    586  ******************************************************************************/
    587 extern bool L2CA_Ping(BD_ADDR p_bd_addr, tL2CA_ECHO_RSP_CB* p_cb);
    588 
    589 /*******************************************************************************
    590  *
    591  * Function         L2CA_Echo
    592  *
    593  * Description      Higher layers call this function to send an echo request
    594  *                  with application-specific data.
    595  *
    596  * Returns          true if echo request sent, else false.
    597  *
    598  ******************************************************************************/
    599 extern bool L2CA_Echo(BD_ADDR p_bd_addr, BT_HDR* p_data,
    600                       tL2CA_ECHO_DATA_CB* p_callback);
    601 
    602 // Given a local channel identifier, |lcid|, this function returns the bound
    603 // remote channel identifier, |rcid|, and the ACL link handle, |handle|. If
    604 // |lcid| is not known or is invalid, this function returns false and does not
    605 // modify the values pointed at by |rcid| and |handle|. |rcid| and |handle| may
    606 // be NULL.
    607 bool L2CA_GetIdentifiers(uint16_t lcid, uint16_t* rcid, uint16_t* handle);
    608 
    609 /*******************************************************************************
    610  *
    611  * Function         L2CA_SetIdleTimeout
    612  *
    613  * Description      Higher layers call this function to set the idle timeout for
    614  *                  a connection, or for all future connections. The "idle
    615  *                  timeout" is the amount of time that a connection can remain
    616  *                  up with no L2CAP channels on it. A timeout of zero means
    617  *                  that the connection will be torn down immediately when the
    618  *                  last channel is removed. A timeout of 0xFFFF means no
    619  *                  timeout. Values are in seconds.
    620  *
    621  * Returns          true if command succeeded, false if failed
    622  *
    623  ******************************************************************************/
    624 extern bool L2CA_SetIdleTimeout(uint16_t cid, uint16_t timeout, bool is_global);
    625 
    626 /*******************************************************************************
    627  *
    628  * Function         L2CA_SetIdleTimeoutByBdAddr
    629  *
    630  * Description      Higher layers call this function to set the idle timeout for
    631  *                  a connection. The "idle timeout" is the amount of time that
    632  *                  a connection can remain up with no L2CAP channels on it.
    633  *                  A timeout of zero means that the connection will be torn
    634  *                  down immediately when the last channel is removed.
    635  *                  A timeout of 0xFFFF means no timeout. Values are in seconds.
    636  *                  A bd_addr is the remote BD address. If bd_addr = BT_BD_ANY,
    637  *                  then the idle timeouts for all active l2cap links will be
    638  *                  changed.
    639  *
    640  * Returns          true if command succeeded, false if failed
    641  *
    642  * NOTE             This timeout applies to all logical channels active on the
    643  *                  ACL link.
    644  ******************************************************************************/
    645 extern bool L2CA_SetIdleTimeoutByBdAddr(BD_ADDR bd_addr, uint16_t timeout,
    646                                         tBT_TRANSPORT transport);
    647 
    648 /*******************************************************************************
    649  *
    650  * Function         L2CA_SetTraceLevel
    651  *
    652  * Description      This function sets the trace level for L2CAP. If called with
    653  *                  a value of 0xFF, it simply reads the current trace level.
    654  *
    655  * Returns          the new (current) trace level
    656  *
    657  ******************************************************************************/
    658 extern uint8_t L2CA_SetTraceLevel(uint8_t trace_level);
    659 
    660 /*******************************************************************************
    661  *
    662  * Function     L2CA_SetDesireRole
    663  *
    664  * Description  This function sets the desire role for L2CAP.
    665  *              If the new role is L2CAP_ROLE_ALLOW_SWITCH, allow switch on
    666  *              HciCreateConnection.
    667  *              If the new role is L2CAP_ROLE_DISALLOW_SWITCH, do not allow
    668  *              switch on HciCreateConnection.
    669  *
    670  *              If the new role is a valid role (HCI_ROLE_MASTER or
    671  *              HCI_ROLE_SLAVE), the desire role is set to the new value.
    672  *              Otherwise, it is not changed.
    673  *
    674  * Returns      the new (current) role
    675  *
    676  ******************************************************************************/
    677 extern uint8_t L2CA_SetDesireRole(uint8_t new_role);
    678 
    679 /*******************************************************************************
    680  *
    681  * Function     L2CA_LocalLoopbackReq
    682  *
    683  * Description  This function sets up a CID for local loopback
    684  *
    685  * Returns      CID of 0 if none.
    686  *
    687  ******************************************************************************/
    688 extern uint16_t L2CA_LocalLoopbackReq(uint16_t psm, uint16_t handle,
    689                                       BD_ADDR p_bd_addr);
    690 
    691 /*******************************************************************************
    692  *
    693  * Function     L2CA_FlushChannel
    694  *
    695  * Description  This function flushes none, some or all buffers queued up
    696  *              for xmission for a particular CID. If called with
    697  *              L2CAP_FLUSH_CHANS_GET (0), it simply returns the number
    698  *              of buffers queued for that CID L2CAP_FLUSH_CHANS_ALL (0xffff)
    699  *              flushes all buffers.  All other values specifies the maximum
    700  *              buffers to flush.
    701  *
    702  * Returns      Number of buffers left queued for that CID
    703  *
    704  ******************************************************************************/
    705 extern uint16_t L2CA_FlushChannel(uint16_t lcid, uint16_t num_to_flush);
    706 
    707 /*******************************************************************************
    708  *
    709  * Function         L2CA_SetAclPriority
    710  *
    711  * Description      Sets the transmission priority for an ACL channel.
    712  *                  (For initial implementation only two values are valid.
    713  *                  L2CAP_PRIORITY_NORMAL and L2CAP_PRIORITY_HIGH).
    714  *
    715  * Returns          true if a valid channel, else false
    716  *
    717  ******************************************************************************/
    718 extern bool L2CA_SetAclPriority(BD_ADDR bd_addr, uint8_t priority);
    719 
    720 /*******************************************************************************
    721  *
    722  * Function         L2CA_FlowControl
    723  *
    724  * Description      Higher layers call this function to flow control a channel.
    725  *
    726  *                  data_enabled - true data flows, false data is stopped
    727  *
    728  * Returns          true if valid channel, else false
    729  *
    730  ******************************************************************************/
    731 extern bool L2CA_FlowControl(uint16_t cid, bool data_enabled);
    732 
    733 /*******************************************************************************
    734  *
    735  * Function         L2CA_SendTestSFrame
    736  *
    737  * Description      Higher layers call this function to send a test S-frame.
    738  *
    739  * Returns          true if valid Channel, else false
    740  *
    741  ******************************************************************************/
    742 extern bool L2CA_SendTestSFrame(uint16_t cid, uint8_t sup_type,
    743                                 uint8_t back_track);
    744 
    745 /*******************************************************************************
    746  *
    747  * Function         L2CA_SetTxPriority
    748  *
    749  * Description      Sets the transmission priority for a channel. (FCR Mode)
    750  *
    751  * Returns          true if a valid channel, else false
    752  *
    753  ******************************************************************************/
    754 extern bool L2CA_SetTxPriority(uint16_t cid, tL2CAP_CHNL_PRIORITY priority);
    755 
    756 /*******************************************************************************
    757  *
    758  * Function         L2CA_RegForNoCPEvt
    759  *
    760  * Description      Register callback for Number of Completed Packets event.
    761  *
    762  * Input Param      p_cb - callback for Number of completed packets event
    763  *                  p_bda - BT address of remote device
    764  *
    765  * Returns
    766  *
    767  ******************************************************************************/
    768 extern bool L2CA_RegForNoCPEvt(tL2CA_NOCP_CB* p_cb, BD_ADDR p_bda);
    769 
    770 /*******************************************************************************
    771  *
    772  * Function         L2CA_SetChnlDataRate
    773  *
    774  * Description      Sets the tx/rx data rate for a channel.
    775  *
    776  * Returns          true if a valid channel, else false
    777  *
    778  ******************************************************************************/
    779 extern bool L2CA_SetChnlDataRate(uint16_t cid, tL2CAP_CHNL_DATA_RATE tx,
    780                                  tL2CAP_CHNL_DATA_RATE rx);
    781 
    782 typedef void(tL2CA_RESERVE_CMPL_CBACK)(void);
    783 
    784 /*******************************************************************************
    785  *
    786  * Function         L2CA_SetFlushTimeout
    787  *
    788  * Description      This function set the automatic flush time out in Baseband
    789  *                  for ACL-U packets.
    790  *                  BdAddr : the remote BD address of ACL link. If it is
    791  *                           BT_DB_ANY then the flush time out will be applied
    792  *                           to all ACL link.
    793  *                  FlushTimeout: flush time out in ms
    794  *                           0x0000 : No automatic flush
    795  *                           L2CAP_NO_RETRANSMISSION : No retransmission
    796  *                           0x0002 - 0xFFFE : flush time out, if
    797  *                                             (flush_tout * 8) + 3 / 5)
    798  *                                               <= HCI_MAX_AUTO_FLUSH_TOUT
    799  *                                             (in 625us slot).
    800  *                                    Otherwise, return false.
    801  *                           L2CAP_NO_AUTOMATIC_FLUSH : No automatic flush
    802  *
    803  * Returns          true if command succeeded, false if failed
    804  *
    805  * NOTE             This flush timeout applies to all logical channels active on
    806  *                  the ACL link.
    807  ******************************************************************************/
    808 extern bool L2CA_SetFlushTimeout(BD_ADDR bd_addr, uint16_t flush_tout);
    809 
    810 /*******************************************************************************
    811  *
    812  * Function         L2CA_DataWriteEx
    813  *
    814  * Description      Higher layers call this function to write data with extended
    815  *                  flags.
    816  *                  flags : L2CAP_FLUSHABLE_CH_BASED
    817  *                          L2CAP_FLUSHABLE_PKT
    818  *                          L2CAP_NON_FLUSHABLE_PKT
    819  *
    820  * Returns          L2CAP_DW_SUCCESS, if data accepted, else false
    821  *                  L2CAP_DW_CONGESTED, if data accepted and the channel is
    822  *                                      congested
    823  *                  L2CAP_DW_FAILED, if error
    824  *
    825  ******************************************************************************/
    826 extern uint8_t L2CA_DataWriteEx(uint16_t cid, BT_HDR* p_data, uint16_t flags);
    827 
    828 /*******************************************************************************
    829  *
    830  * Function         L2CA_SetChnlFlushability
    831  *
    832  * Description      Higher layers call this function to set a channels
    833  *                  flushability flags
    834  *
    835  * Returns          true if CID found, else false
    836  *
    837  ******************************************************************************/
    838 extern bool L2CA_SetChnlFlushability(uint16_t cid, bool is_flushable);
    839 
    840 /*******************************************************************************
    841  *
    842  *  Function         L2CA_GetPeerFeatures
    843  *
    844  *  Description      Get a peers features and fixed channel map
    845  *
    846  *  Parameters:      BD address of the peer
    847  *                   Pointers to features and channel mask storage area
    848  *
    849  *  Return value:    true if peer is connected
    850  *
    851  ******************************************************************************/
    852 extern bool L2CA_GetPeerFeatures(BD_ADDR bd_addr, uint32_t* p_ext_feat,
    853                                  uint8_t* p_chnl_mask);
    854 
    855 /*******************************************************************************
    856  *
    857  *  Function         L2CA_GetBDAddrbyHandle
    858  *
    859  *  Description      Get BD address for the given HCI handle
    860  *
    861  *  Parameters:      HCI handle
    862  *                   BD address of the peer
    863  *
    864  *  Return value:    true if found lcb for the given handle, false otherwise
    865  *
    866  ******************************************************************************/
    867 extern bool L2CA_GetBDAddrbyHandle(uint16_t handle, BD_ADDR bd_addr);
    868 
    869 /*******************************************************************************
    870  *
    871  *  Function         L2CA_GetChnlFcrMode
    872  *
    873  *  Description      Get the channel FCR mode
    874  *
    875  *  Parameters:      Local CID
    876  *
    877  *  Return value:    Channel mode
    878  *
    879  ******************************************************************************/
    880 extern uint8_t L2CA_GetChnlFcrMode(uint16_t lcid);
    881 
    882 /*******************************************************************************
    883  *
    884  *                      UCD callback prototypes
    885  *
    886  ******************************************************************************/
    887 
    888 /* UCD discovery. Parameters are
    889  *      BD Address of remote
    890  *      Data Type
    891  *      Data
    892 */
    893 #define L2CAP_UCD_INFO_TYPE_RECEPTION 0x01
    894 #define L2CAP_UCD_INFO_TYPE_MTU 0x02
    895 
    896 typedef void(tL2CA_UCD_DISCOVER_CB)(BD_ADDR, uint8_t, uint32_t);
    897 
    898 /* UCD data received. Parameters are
    899  *      BD Address of remote
    900  *      Pointer to buffer with data
    901 */
    902 typedef void(tL2CA_UCD_DATA_CB)(BD_ADDR, BT_HDR*);
    903 
    904 /* Congestion status callback protype. This callback is optional. If
    905  * an application tries to send data when the transmit queue is full,
    906  * the data will anyways be dropped. The parameter is:
    907  *              remote BD_ADDR
    908  *              true if congested, false if uncongested
    909 */
    910 typedef void(tL2CA_UCD_CONGESTION_STATUS_CB)(BD_ADDR, bool);
    911 
    912 /* UCD registration info (the callback addresses and PSM)
    913 */
    914 typedef struct {
    915   tL2CA_UCD_DISCOVER_CB* pL2CA_UCD_Discover_Cb;
    916   tL2CA_UCD_DATA_CB* pL2CA_UCD_Data_Cb;
    917   tL2CA_UCD_CONGESTION_STATUS_CB* pL2CA_UCD_Congestion_Status_Cb;
    918 } tL2CAP_UCD_CB_INFO;
    919 
    920 /*******************************************************************************
    921  *
    922  *  Function        L2CA_UcdRegister
    923  *
    924  *  Description     Register PSM on UCD.
    925  *
    926  *  Parameters:     tL2CAP_UCD_CB_INFO
    927  *
    928  *  Return value:   true if successs
    929  *
    930  ******************************************************************************/
    931 extern bool L2CA_UcdRegister(uint16_t psm, tL2CAP_UCD_CB_INFO* p_cb_info);
    932 
    933 /*******************************************************************************
    934  *
    935  *  Function        L2CA_UcdDeregister
    936  *
    937  *  Description     Deregister PSM on UCD.
    938  *
    939  *  Parameters:     PSM
    940  *
    941  *  Return value:   true if successs
    942  *
    943  ******************************************************************************/
    944 extern bool L2CA_UcdDeregister(uint16_t psm);
    945 
    946 /*******************************************************************************
    947  *
    948  *  Function        L2CA_UcdDiscover
    949  *
    950  *  Description     Discover UCD of remote device.
    951  *
    952  *  Parameters:     PSM
    953  *                  BD_ADDR of remote device
    954  *                  info_type : L2CAP_UCD_INFO_TYPE_RECEPTION
    955  *                              L2CAP_UCD_INFO_TYPE_MTU
    956  *
    957  *
    958  *  Return value:   true if successs
    959  *
    960  ******************************************************************************/
    961 extern bool L2CA_UcdDiscover(uint16_t psm, BD_ADDR rem_bda, uint8_t info_type);
    962 
    963 /*******************************************************************************
    964  *
    965  *  Function        L2CA_UcdDataWrite
    966  *
    967  *  Description     Send UCD to remote device
    968  *
    969  *  Parameters:     PSM
    970  *                  BD Address of remote
    971  *                  Pointer to buffer of type BT_HDR
    972  *                  flags : L2CAP_FLUSHABLE_CH_BASED
    973  *                          L2CAP_FLUSHABLE_PKT
    974  *                          L2CAP_NON_FLUSHABLE_PKT
    975  *
    976  * Return value     L2CAP_DW_SUCCESS, if data accepted
    977  *                  L2CAP_DW_FAILED,  if error
    978  *
    979  ******************************************************************************/
    980 extern uint16_t L2CA_UcdDataWrite(uint16_t psm, BD_ADDR rem_bda, BT_HDR* p_buf,
    981                                   uint16_t flags);
    982 
    983 /*******************************************************************************
    984  *
    985  *  Function        L2CA_UcdSetIdleTimeout
    986  *
    987  *  Description     Set UCD Idle timeout.
    988  *
    989  *  Parameters:     BD Addr
    990  *                  Timeout in second
    991  *
    992  *  Return value:   true if successs
    993  *
    994  ******************************************************************************/
    995 extern bool L2CA_UcdSetIdleTimeout(BD_ADDR rem_bda, uint16_t timeout);
    996 
    997 /*******************************************************************************
    998  *
    999  * Function         L2CA_UCDSetTxPriority
   1000  *
   1001  * Description      Sets the transmission priority for a connectionless channel.
   1002  *
   1003  * Returns          true if a valid channel, else false
   1004  *
   1005  ******************************************************************************/
   1006 extern bool L2CA_UCDSetTxPriority(BD_ADDR rem_bda,
   1007                                   tL2CAP_CHNL_PRIORITY priority);
   1008 
   1009 /*******************************************************************************
   1010  *
   1011  *                      Fixed Channel callback prototypes
   1012  *
   1013  ******************************************************************************/
   1014 
   1015 /* Fixed channel connected and disconnected. Parameters are
   1016  *      channel
   1017  *      BD Address of remote
   1018  *      true if channel is connected, false if disconnected
   1019  *      Reason for connection failure
   1020  *      transport : physical transport, BR/EDR or LE
   1021 */
   1022 typedef void(tL2CA_FIXED_CHNL_CB)(uint16_t, BD_ADDR, bool, uint16_t,
   1023                                   tBT_TRANSPORT);
   1024 
   1025 /* Signalling data received. Parameters are
   1026  *      channel
   1027  *      BD Address of remote
   1028  *      Pointer to buffer with data
   1029 */
   1030 typedef void(tL2CA_FIXED_DATA_CB)(uint16_t, BD_ADDR, BT_HDR*);
   1031 
   1032 /* Congestion status callback protype. This callback is optional. If
   1033  * an application tries to send data when the transmit queue is full,
   1034  * the data will anyways be dropped. The parameter is:
   1035  *      remote BD_ADDR
   1036  *      true if congested, false if uncongested
   1037 */
   1038 typedef void(tL2CA_FIXED_CONGESTION_STATUS_CB)(BD_ADDR, bool);
   1039 
   1040 /* Fixed channel registration info (the callback addresses and channel config)
   1041 */
   1042 typedef struct {
   1043   tL2CA_FIXED_CHNL_CB* pL2CA_FixedConn_Cb;
   1044   tL2CA_FIXED_DATA_CB* pL2CA_FixedData_Cb;
   1045   tL2CA_FIXED_CONGESTION_STATUS_CB* pL2CA_FixedCong_Cb;
   1046   tL2CAP_FCR_OPTS fixed_chnl_opts;
   1047 
   1048   uint16_t default_idle_tout;
   1049   tL2CA_TX_COMPLETE_CB*
   1050       pL2CA_FixedTxComplete_Cb; /* fixed channel tx complete callback */
   1051 } tL2CAP_FIXED_CHNL_REG;
   1052 
   1053 #if (L2CAP_NUM_FIXED_CHNLS > 0)
   1054 /*******************************************************************************
   1055  *
   1056  *  Function        L2CA_RegisterFixedChannel
   1057  *
   1058  *  Description     Register a fixed channel.
   1059  *
   1060  *  Parameters:     Fixed Channel #
   1061  *                  Channel Callbacks and config
   1062  *
   1063  *  Return value:   true if registered OK
   1064  *
   1065  ******************************************************************************/
   1066 extern bool L2CA_RegisterFixedChannel(uint16_t fixed_cid,
   1067                                       tL2CAP_FIXED_CHNL_REG* p_freg);
   1068 
   1069 /*******************************************************************************
   1070  *
   1071  *  Function        L2CA_ConnectFixedChnl
   1072  *
   1073  *  Description     Connect an fixed signalling channel to a remote device.
   1074  *
   1075  *  Parameters:     Fixed CID
   1076  *                  BD Address of remote
   1077  *
   1078  *  Return value:   true if connection started
   1079  *
   1080  ******************************************************************************/
   1081 extern bool L2CA_ConnectFixedChnl(uint16_t fixed_cid, BD_ADDR bd_addr);
   1082 extern bool L2CA_ConnectFixedChnl(uint16_t fixed_cid, BD_ADDR bd_addr,
   1083                                   uint8_t initiating_phys);
   1084 
   1085 /*******************************************************************************
   1086  *
   1087  *  Function        L2CA_SendFixedChnlData
   1088  *
   1089  *  Description     Write data on a fixed signalling channel.
   1090  *
   1091  *  Parameters:     Fixed CID
   1092  *                  BD Address of remote
   1093  *                  Pointer to buffer of type BT_HDR
   1094  *
   1095  * Return value     L2CAP_DW_SUCCESS, if data accepted
   1096  *                  L2CAP_DW_FAILED,  if error
   1097  *
   1098  ******************************************************************************/
   1099 extern uint16_t L2CA_SendFixedChnlData(uint16_t fixed_cid, BD_ADDR rem_bda,
   1100                                        BT_HDR* p_buf);
   1101 
   1102 /*******************************************************************************
   1103  *
   1104  *  Function        L2CA_RemoveFixedChnl
   1105  *
   1106  *  Description     Remove a fixed channel to a remote device.
   1107  *
   1108  *  Parameters:     Fixed CID
   1109  *                  BD Address of remote
   1110  *                  Idle timeout to use (or 0xFFFF if don't care)
   1111  *
   1112  *  Return value:   true if channel removed
   1113  *
   1114  ******************************************************************************/
   1115 extern bool L2CA_RemoveFixedChnl(uint16_t fixed_cid, BD_ADDR rem_bda);
   1116 
   1117 /*******************************************************************************
   1118  *
   1119  * Function         L2CA_SetFixedChannelTout
   1120  *
   1121  * Description      Higher layers call this function to set the idle timeout for
   1122  *                  a fixed channel. The "idle timeout" is the amount of time
   1123  *                  that a connection can remain up with no L2CAP channels on
   1124  *                  it. A timeout of zero means that the connection will be torn
   1125  *                  down immediately when the last channel is removed.
   1126  *                  A timeout of 0xFFFF means no timeout. Values are in seconds.
   1127  *                  A bd_addr is the remote BD address. If bd_addr = BT_BD_ANY,
   1128  *                  then the idle timeouts for all active l2cap links will be
   1129  *                  changed.
   1130  *
   1131  * Returns          true if command succeeded, false if failed
   1132  *
   1133  ******************************************************************************/
   1134 extern bool L2CA_SetFixedChannelTout(BD_ADDR rem_bda, uint16_t fixed_cid,
   1135                                      uint16_t idle_tout);
   1136 
   1137 #endif /* (L2CAP_NUM_FIXED_CHNLS > 0) */
   1138 
   1139 /*******************************************************************************
   1140  *
   1141  * Function     L2CA_GetCurrentConfig
   1142  *
   1143  * Description  This function returns configurations of L2CAP channel
   1144  *              pp_our_cfg : pointer of our saved configuration options
   1145  *              p_our_cfg_bits : valid config in bitmap
   1146  *              pp_peer_cfg: pointer of peer's saved configuration options
   1147  *              p_peer_cfg_bits : valid config in bitmap
   1148  *
   1149  * Returns      true if successful
   1150  *
   1151  ******************************************************************************/
   1152 extern bool L2CA_GetCurrentConfig(uint16_t lcid, tL2CAP_CFG_INFO** pp_our_cfg,
   1153                                   tL2CAP_CH_CFG_BITS* p_our_cfg_bits,
   1154                                   tL2CAP_CFG_INFO** pp_peer_cfg,
   1155                                   tL2CAP_CH_CFG_BITS* p_peer_cfg_bits);
   1156 
   1157 /*******************************************************************************
   1158  *
   1159  * Function     L2CA_GetConnectionConfig
   1160  *
   1161  * Description  This function polulates the mtu, remote cid & lm_handle for
   1162  *              a given local L2CAP channel
   1163  *
   1164  * Returns      true if successful
   1165  *
   1166  ******************************************************************************/
   1167 extern bool L2CA_GetConnectionConfig(uint16_t lcid, uint16_t* mtu,
   1168                                      uint16_t* rcid, uint16_t* handle);
   1169 
   1170 /*******************************************************************************
   1171  *
   1172  *  Function        L2CA_CancelBleConnectReq
   1173  *
   1174  *  Description     Cancel a pending connection attempt to a BLE device.
   1175  *
   1176  *  Parameters:     BD Address of remote
   1177  *
   1178  *  Return value:   true if connection was cancelled
   1179  *
   1180  ******************************************************************************/
   1181 extern bool L2CA_CancelBleConnectReq(BD_ADDR rem_bda);
   1182 
   1183 /*******************************************************************************
   1184  *
   1185  *  Function        L2CA_UpdateBleConnParams
   1186  *
   1187  *  Description     Update BLE connection parameters.
   1188  *
   1189  *  Parameters:     BD Address of remote
   1190  *
   1191  *  Return value:   true if update started
   1192  *
   1193  ******************************************************************************/
   1194 extern bool L2CA_UpdateBleConnParams(BD_ADDR rem_bdRa, uint16_t min_int,
   1195                                      uint16_t max_int, uint16_t latency,
   1196                                      uint16_t timeout);
   1197 
   1198 /*******************************************************************************
   1199  *
   1200  *  Function        L2CA_EnableUpdateBleConnParams
   1201  *
   1202  *  Description     Update BLE connection parameters.
   1203  *
   1204  *  Parameters:     BD Address of remote
   1205  *                  enable flag
   1206  *
   1207  *  Return value:   true if update started
   1208  *
   1209  ******************************************************************************/
   1210 extern bool L2CA_EnableUpdateBleConnParams(BD_ADDR rem_bda, bool enable);
   1211 
   1212 /*******************************************************************************
   1213  *
   1214  * Function         L2CA_GetBleConnRole
   1215  *
   1216  * Description      This function returns the connection role.
   1217  *
   1218  * Returns          link role.
   1219  *
   1220  ******************************************************************************/
   1221 extern uint8_t L2CA_GetBleConnRole(BD_ADDR bd_addr);
   1222 
   1223 /*******************************************************************************
   1224  *
   1225  * Function         L2CA_GetDisconnectReason
   1226  *
   1227  * Description      This function returns the disconnect reason code.
   1228  *
   1229  *  Parameters:     BD Address of remote
   1230  *                  Physical transport for the L2CAP connection (BR/EDR or LE)
   1231  *
   1232  * Returns          disconnect reason
   1233  *
   1234  ******************************************************************************/
   1235 extern uint16_t L2CA_GetDisconnectReason(BD_ADDR remote_bda,
   1236                                          tBT_TRANSPORT transport);
   1237 
   1238 #endif /* L2C_API_H */
   1239