Home | History | Annotate | Download | only in include
      1 /******************************************************************************
      2  *
      3  *  Copyright 2009-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 Multi-Channel
     22  *  Adaptation Protocol (MCAP).
     23  *
     24  ******************************************************************************/
     25 #ifndef MCA_API_H
     26 #define MCA_API_H
     27 
     28 #include "bt_target.h"
     29 #include "l2c_api.h"
     30 
     31 /* move the following to bt_target.h or other place later */
     32 #define MCA_NUM_TC_TBL ((MCA_NUM_REGS) * (MCA_NUM_LINKS) * (MCA_NUM_MDLS + 1))
     33 /* Number of control channel control blocks	*/
     34 #define MCA_NUM_CCBS ((MCA_NUM_REGS) * (MCA_NUM_LINKS))
     35 /* Number of data channel control blocks */
     36 #define MCA_NUM_DCBS ((MCA_NUM_REGS) * (MCA_NUM_LINKS) * (MCA_NUM_MDLS))
     37 
     38 /*****************************************************************************
     39  * constants
     40  ****************************************************************************/
     41 /* API function return value result codes. */
     42 #define MCA_SUCCESS 0      /* Function successful */
     43 #define MCA_BAD_PARAMS 1   /* Invalid parameters */
     44 #define MCA_NO_RESOURCES 2 /* Not enough resources */
     45 #define MCA_BAD_HANDLE 3   /* Bad handle */
     46 #define MCA_BUSY 4         /* A procedure is already in progress */
     47 #define MCA_WRITE_FAIL 5   /* Write failed */
     48 #define MCA_BAD_MDL_ID 6   /* MDL ID is not valid for the current API */
     49 typedef uint8_t tMCA_RESULT;
     50 
     51 /* MDEP data type.  */
     52 #define MCA_TDEP_ECHO 0 /* MDEP for echo test  */
     53 #define MCA_TDEP_DATA 1 /* MDEP for normal data */
     54 
     55 /* Control callback events. */
     56 #define MCA_ERROR_RSP_EVT 0     /* error response */
     57 #define MCA_CREATE_IND_EVT 1    /* create mdl indication */
     58 #define MCA_CREATE_CFM_EVT 2    /* create mdl confirm */
     59 #define MCA_RECONNECT_IND_EVT 3 /* reconnect mdl indication */
     60 #define MCA_RECONNECT_CFM_EVT 4 /* reconnect mdl confirm */
     61 #define MCA_ABORT_IND_EVT 5     /* abort mdl indication */
     62 #define MCA_ABORT_CFM_EVT 6     /* abort mdl confirm */
     63 #define MCA_DELETE_IND_EVT 7    /* delete mdl indication */
     64 #define MCA_DELETE_CFM_EVT 8    /* delete mdl confirm */
     65 
     66 /* request sync capabilities & requirements */
     67 #define MCA_SYNC_CAP_IND_EVT 0x11
     68 #define MCA_SYNC_CAP_CFM_EVT 0x12 /* indicate completion */
     69 /* request to set the time-stamp clock */
     70 #define MCA_SYNC_SET_IND_EVT 0x13
     71 #define MCA_SYNC_SET_CFM_EVT 0x14 /* indicate completion */
     72 /* update of the actual time-stamp clock instant from the sync slave */
     73 #define MCA_SYNC_INFO_IND_EVT 0x15
     74 
     75 #define MCA_CONNECT_IND_EVT 0x20    /* Control channel connected */
     76 #define MCA_DISCONNECT_IND_EVT 0x21 /* Control channel disconnected */
     77 #define MCA_OPEN_IND_EVT 0x22       /* Data channel open indication */
     78 #define MCA_OPEN_CFM_EVT 0x23       /* Data channel open confirm */
     79 #define MCA_CLOSE_IND_EVT 0x24      /* Data channel close indication */
     80 #define MCA_CLOSE_CFM_EVT 0x25      /* Data channel close confirm */
     81 #define MCA_CONG_CHG_EVT 0x26       /* congestion change event */
     82 #define MCA_RSP_TOUT_IND_EVT                       \
     83   0x27 /* Control channel message response timeout \
     84           */
     85 /*****************************************************************************
     86  *  Type Definitions
     87  ****************************************************************************/
     88 typedef uint8_t
     89     tMCA_HANDLE;         /* the handle for registration. 1 based index to rcb */
     90 typedef uint8_t tMCA_CL; /* the handle for a control channel; reported at
     91                             MCA_CONNECT_IND_EVT */
     92 typedef uint8_t
     93     tMCA_DEP; /* the handle for MCA_CreateDep. This is also the local mdep_id */
     94 typedef uint16_t tMCA_DL; /* the handle for the data channel. This is reported
     95                              at MCA_OPEN_CFM_EVT or MCA_OPEN_IND_EVT */
     96 
     97 /* This is the data callback function.  It is executed when MCAP has a data
     98  * packet ready for the application.
     99 */
    100 typedef void(tMCA_DATA_CBACK)(tMCA_DL mdl, BT_HDR* p_pkt);
    101 
    102 /* This structure contains parameters which are set at registration. */
    103 typedef struct {
    104   uint32_t rsp_tout; /* MCAP signaling response timeout */
    105   uint16_t ctrl_psm; /* L2CAP PSM for the MCAP control channel */
    106   uint16_t data_psm; /* L2CAP PSM for the MCAP data channel */
    107   uint16_t sec_mask; /* Security mask for BTM_SetSecurityLevel() */
    108 } tMCA_REG;
    109 
    110 /* This structure contains parameters to create a MDEP. */
    111 typedef struct {
    112   uint8_t type; /* MCA_TDEP_DATA, or MCA_TDEP_ECHO. a regiatration may have only
    113                    one MCA_TDEP_ECHO MDEP */
    114   uint8_t max_mdl; /* The maximum number of MDLs for this MDEP (max is
    115                       MCA_NUM_MDLS) */
    116   tMCA_DATA_CBACK* p_data_cback; /* Data callback function */
    117 } tMCA_CS;
    118 
    119 #define MCA_FCS_NONE 0      /* fcs_present=false */
    120 #define MCA_FCS_BYPASS 0x10 /* fcs_present=true, fcs=L2CAP_CFG_FCS_BYPASS */
    121 #define MCA_FCS_USE 0x11    /* fcs_present=true, fcs=L2CAP_CFG_FCS_USE */
    122 #define MCA_FCS_PRESNT_MASK 0x10 /* fcs_present=true */
    123 #define MCA_FCS_USE_MASK 0x01    /* mask for fcs */
    124 typedef uint8_t tMCA_FCS_OPT;
    125 
    126 /* This structure contains L2CAP configuration parameters for the channel. */
    127 typedef struct {
    128   tL2CAP_FCR_OPTS fcr_opt;
    129   uint16_t user_rx_buf_size;
    130   uint16_t user_tx_buf_size;
    131   uint16_t fcr_rx_buf_size;
    132   uint16_t fcr_tx_buf_size;
    133   tMCA_FCS_OPT fcs;
    134   uint16_t data_mtu; /* L2CAP MTU of the MCAP data channel */
    135 } tMCA_CHNL_CFG;
    136 
    137 /* Header structure for callback event parameters. */
    138 typedef struct {
    139   uint16_t mdl_id; /* The associated MDL ID */
    140   uint8_t op_code; /* The op (request/response) code */
    141 } tMCA_EVT_HDR;
    142 
    143 /* Response Header structure for callback event parameters. */
    144 typedef struct {
    145   uint16_t mdl_id;  /* The associated MDL ID */
    146   uint8_t op_code;  /* The op (request/response) code */
    147   uint8_t rsp_code; /* The response code */
    148 } tMCA_RSP_EVT;
    149 
    150 /* This data structure is associated with the MCA_CREATE_IND_EVT. */
    151 typedef struct {
    152   uint16_t mdl_id; /* The associated MDL ID */
    153   uint8_t op_code; /* The op (request/response) code */
    154   uint8_t dep_id;  /* MDEP ID */
    155   uint8_t cfg;     /* The configuration to negotiate */
    156 } tMCA_CREATE_IND;
    157 
    158 /* This data structure is associated with the MCA_CREATE_CFM_EVT. */
    159 typedef struct {
    160   uint16_t mdl_id;  /* The associated MDL ID */
    161   uint8_t op_code;  /* The op (request/response) code */
    162   uint8_t rsp_code; /* The response code. */
    163   uint8_t cfg;      /* The configuration to negotiate */
    164 } tMCA_CREATE_CFM;
    165 
    166 /* This data structure is associated with MCA_CONNECT_IND_EVT. */
    167 typedef struct {
    168   RawAddress bd_addr; /* The peer address */
    169   uint16_t mtu;    /* peer mtu */
    170 } tMCA_CONNECT_IND;
    171 
    172 /* This data structure is associated with MCA_DISCONNECT_IND_EVT. */
    173 typedef struct {
    174   RawAddress bd_addr; /* The peer address */
    175   uint16_t reason; /* disconnect reason given by L2CAP */
    176 } tMCA_DISCONNECT_IND;
    177 
    178 /* This data structure is for MCA_OPEN_IND_EVT, and MCA_OPEN_CFM_EVT. */
    179 typedef struct {
    180   uint16_t mdl_id; /* The associated MDL ID */
    181   tMCA_DL mdl;     /* The handle for the data channel */
    182   uint16_t mtu;    /* peer mtu */
    183 } tMCA_DL_OPEN;
    184 
    185 /* This data structure is for MCA_CLOSE_IND_EVT and MCA_CLOSE_CFM_EVT. */
    186 typedef struct {
    187   uint16_t mdl_id; /* The associated MDL ID */
    188   tMCA_DL mdl;     /* The handle for the data channel */
    189   uint16_t reason; /* disconnect reason given by L2CAP */
    190 } tMCA_DL_CLOSE;
    191 
    192 /* This data structure is associated with MCA_CONG_CHG_EVT. */
    193 typedef struct {
    194   uint16_t mdl_id; /* N/A - This is a place holder */
    195   tMCA_DL mdl;     /* The handle for the data channel */
    196   bool cong;       /* true, if the channel is congested */
    197 } tMCA_CONG_CHG;
    198 
    199 /* Union of all control callback event data structures */
    200 typedef union {
    201   tMCA_EVT_HDR hdr;
    202   tMCA_RSP_EVT rsp;
    203   tMCA_CREATE_IND create_ind;
    204   tMCA_CREATE_CFM create_cfm;
    205   tMCA_EVT_HDR reconnect_ind;
    206   tMCA_RSP_EVT reconnect_cfm;
    207   tMCA_EVT_HDR abort_ind;
    208   tMCA_RSP_EVT abort_cfm;
    209   tMCA_EVT_HDR delete_ind;
    210   tMCA_RSP_EVT delete_cfm;
    211   tMCA_CONNECT_IND connect_ind;
    212   tMCA_DISCONNECT_IND disconnect_ind;
    213   tMCA_DL_OPEN open_ind;
    214   tMCA_DL_OPEN open_cfm;
    215   tMCA_DL_CLOSE close_ind;
    216   tMCA_DL_CLOSE close_cfm;
    217   tMCA_CONG_CHG cong_chg;
    218 } tMCA_CTRL;
    219 
    220 /* This is the control callback function.  This function passes control events
    221  * to the application.
    222 */
    223 typedef void(tMCA_CTRL_CBACK)(tMCA_HANDLE handle, tMCA_CL mcl, uint8_t event,
    224                               tMCA_CTRL* p_data);
    225 
    226 /*******************************************************************************
    227  *
    228  * Function         MCA_Init
    229  *
    230  * Description      Initialize MCAP internal control blocks.
    231  *                  This function is called at stack start up.
    232  *
    233  * Returns          void
    234  *
    235  ******************************************************************************/
    236 extern void MCA_Init(void);
    237 
    238 /*******************************************************************************
    239  *
    240  * Function         MCA_SetTraceLevel
    241  *
    242  * Description      This function sets the debug trace level for MCA.
    243  *                  If 0xff is passed, the current trace level is returned.
    244  *
    245  *                  Input Parameters:
    246  *                      level:  The level to set the MCA tracing to:
    247  *                      0xff-returns the current setting.
    248  *                      0-turns off tracing.
    249  *                      >= 1-Errors.
    250  *                      >= 2-Warnings.
    251  *                      >= 3-APIs.
    252  *                      >= 4-Events.
    253  *                      >= 5-Debug.
    254  *
    255  * Returns          The new trace level or current trace level if
    256  *                  the input parameter is 0xff.
    257  *
    258  ******************************************************************************/
    259 extern uint8_t MCA_SetTraceLevel(uint8_t level);
    260 
    261 /*******************************************************************************
    262  *
    263  * Function         MCA_Register
    264  *
    265  * Description      This function registers an MCAP implementation.
    266  *                  It is assumed that the control channel PSM and data channel
    267  *                  PSM are not used by any other instances of the stack.
    268  *                  If the given p_reg->ctrl_psm is 0, this handle is INT only.
    269  *
    270  * Returns          0, if failed. Otherwise, the MCA handle.
    271  *
    272  ******************************************************************************/
    273 extern tMCA_HANDLE MCA_Register(tMCA_REG* p_reg, tMCA_CTRL_CBACK* p_cback);
    274 
    275 /*******************************************************************************
    276  *
    277  * Function         MCA_Deregister
    278  *
    279  * Description      Deregister an MCAP implementation. Before this function can
    280  *                  be called, all control and data channels must be removed
    281  *                  with MCA_DisconnectReq and MCA_CloseReq.
    282  *
    283  * Returns          void
    284  *
    285  ******************************************************************************/
    286 extern void MCA_Deregister(tMCA_HANDLE handle);
    287 
    288 /*******************************************************************************
    289  *
    290  * Function         MCA_CreateDep
    291  *
    292  * Description      Create a data endpoint.  If the MDEP is created
    293  *                  successfully, the MDEP ID is returned in *p_dep. After a
    294  *                  data endpoint is created, an application can initiate a
    295  *                  connection between this endpoint and an endpoint on a peer
    296  *                  device.
    297  *
    298  * Returns          MCA_SUCCESS if successful, otherwise error.
    299  *
    300  ******************************************************************************/
    301 extern tMCA_RESULT MCA_CreateDep(tMCA_HANDLE handle, tMCA_DEP* p_dep,
    302                                  tMCA_CS* p_cs);
    303 
    304 /*******************************************************************************
    305  *
    306  * Function         MCA_DeleteDep
    307  *
    308  * Description      Delete a data endpoint.  This function is called when
    309  *                  the implementation is no longer using a data endpoint.
    310  *                  If this function is called when the endpoint is connected
    311  *                  the connection is closed and the data endpoint
    312  *                  is removed.
    313  *
    314  * Returns          MCA_SUCCESS if successful, otherwise error.
    315  *
    316  ******************************************************************************/
    317 extern tMCA_RESULT MCA_DeleteDep(tMCA_HANDLE handle, tMCA_DEP dep);
    318 
    319 /*******************************************************************************
    320  *
    321  * Function         MCA_ConnectReq
    322  *
    323  * Description      This function initiates an MCAP control channel connection
    324  *                  to the peer device.  When the connection is completed, an
    325  *                  MCA_CONNECT_IND_EVT is reported to the application via its
    326  *                  control callback function.
    327  *                  This control channel is identified by tMCA_CL.
    328  *                  If the connection attempt fails, an MCA_DISCONNECT_IND_EVT
    329  *                  is reported. The security mask parameter overrides the
    330  *                  outgoing security mask set in MCA_Register().
    331  *
    332  * Returns          MCA_SUCCESS if successful, otherwise error.
    333  *
    334  ******************************************************************************/
    335 extern tMCA_RESULT MCA_ConnectReq(tMCA_HANDLE handle, const RawAddress& bd_addr,
    336                                   uint16_t ctrl_psm, uint16_t sec_mask);
    337 
    338 /*******************************************************************************
    339  *
    340  * Function         MCA_DisconnectReq
    341  *
    342  * Description      This function disconnect an MCAP control channel
    343  *                  to the peer device.
    344  *                  If associated data channel exists, they are disconnected.
    345  *                  When the MCL is disconnected an MCA_DISCONNECT_IND_EVT is
    346  *                  reported to the application via its control callback
    347  *                  function.
    348  *
    349  * Returns          MCA_SUCCESS if successful, otherwise error.
    350  *
    351  ******************************************************************************/
    352 extern tMCA_RESULT MCA_DisconnectReq(tMCA_CL mcl);
    353 
    354 /*******************************************************************************
    355  *
    356  * Function         MCA_CreateMdl
    357  *
    358  * Description      This function sends a CREATE_MDL request to the peer device.
    359  *                  When the response is received, a MCA_CREATE_CFM_EVT is
    360  *                  reported with the given MDL ID.
    361  *                  If the response is successful, a data channel is open
    362  *                  with the given p_chnl_cfg
    363  *                  When the data channel is open successfully, a
    364  *                  MCA_OPEN_CFM_EVT is reported. This data channel is
    365  *                  identified as tMCA_DL.
    366  *
    367  * Returns          MCA_SUCCESS if successful, otherwise error.
    368  *
    369  ******************************************************************************/
    370 extern tMCA_RESULT MCA_CreateMdl(tMCA_CL mcl, tMCA_DEP dep, uint16_t data_psm,
    371                                  uint16_t mdl_id, uint8_t peer_dep_id,
    372                                  uint8_t cfg, const tMCA_CHNL_CFG* p_chnl_cfg);
    373 
    374 /*******************************************************************************
    375  *
    376  * Function         MCA_CreateMdlRsp
    377  *
    378  * Description      This function sends a CREATE_MDL response to the peer device
    379  *                  in response to a received MCA_CREATE_IND_EVT.
    380  *                  If the rsp_code is successful, a data channel is open
    381  *                  with the given p_chnl_cfg
    382  *                  When the data channel is open successfully, a
    383  *                  MCA_OPEN_IND_EVT is reported. This data channel is
    384  *                  identified as tMCA_DL.
    385  *
    386  * Returns          MCA_SUCCESS if successful, otherwise error.
    387  *
    388  ******************************************************************************/
    389 extern tMCA_RESULT MCA_CreateMdlRsp(tMCA_CL mcl, tMCA_DEP dep, uint16_t mdl_id,
    390                                     uint8_t cfg, uint8_t rsp_code,
    391                                     const tMCA_CHNL_CFG* p_chnl_cfg);
    392 
    393 /*******************************************************************************
    394  *
    395  * Function         MCA_CloseReq
    396  *
    397  * Description      Close a data channel.  When the channel is closed, an
    398  *                  MCA_CLOSE_CFM_EVT is sent to the application via the
    399  *                  control callback function for this handle.
    400  *
    401  * Returns          MCA_SUCCESS if successful, otherwise error.
    402  *
    403  ******************************************************************************/
    404 extern tMCA_RESULT MCA_CloseReq(tMCA_DL mdl);
    405 
    406 /*******************************************************************************
    407  *
    408  * Function         MCA_ReconnectMdl
    409  *
    410  * Description      This function sends a RECONNECT_MDL request to the peer
    411  *                  device. When the response is received, a
    412  *                  MCA_RECONNECT_CFM_EVT is reported. If the response is
    413  *                  successful, a data channel is open. When the data channel is
    414  *                  open successfully, a MCA_OPEN_CFM_EVT is reported.
    415  *
    416  * Returns          MCA_SUCCESS if successful, otherwise error.
    417  *
    418  ******************************************************************************/
    419 extern tMCA_RESULT MCA_ReconnectMdl(tMCA_CL mcl, tMCA_DEP dep,
    420                                     uint16_t data_psm, uint16_t mdl_id,
    421                                     const tMCA_CHNL_CFG* p_chnl_cfg);
    422 
    423 /*******************************************************************************
    424  *
    425  * Function         MCA_ReconnectMdlRsp
    426  *
    427  * Description      Send a RECONNECT_MDL response to the peer device in response
    428  *                  to a MCA_RECONNECT_IND_EVT event.
    429  *                  If the response is successful, a data channel is open.
    430  *                  When the data channel is open successfully, a
    431  *                  MCA_OPEN_IND_EVT is reported.
    432  *
    433  * Returns          MCA_SUCCESS if successful, otherwise error.
    434  *
    435  ******************************************************************************/
    436 extern tMCA_RESULT MCA_ReconnectMdlRsp(tMCA_CL mcl, tMCA_DEP dep,
    437                                        uint16_t mdl_id, uint8_t rsp_code,
    438                                        const tMCA_CHNL_CFG* p_chnl_cfg);
    439 
    440 /*******************************************************************************
    441  *
    442  * Function         MCA_DataChnlCfg
    443  *
    444  * Description      This function initiates a data channel connection toward the
    445  *                  connected peer device.
    446  *                  When the data channel is open successfully, a
    447  *                  MCA_OPEN_CFM_EVT is reported. This data channel is
    448  *                  identified as tMCA_DL.
    449  *
    450  * Returns          MCA_SUCCESS if successful, otherwise error.
    451  *
    452  ******************************************************************************/
    453 extern tMCA_RESULT MCA_DataChnlCfg(tMCA_CL mcl,
    454                                    const tMCA_CHNL_CFG* p_chnl_cfg);
    455 
    456 /*******************************************************************************
    457  *
    458  * Function         MCA_Abort
    459  *
    460  * Description      This function sends a ABORT_MDL request to the peer device.
    461  *                  When the response is received, a MCA_ABORT_CFM_EVT is
    462  *                  reported.
    463  *
    464  * Returns          MCA_SUCCESS if successful, otherwise error.
    465  *
    466  ******************************************************************************/
    467 extern tMCA_RESULT MCA_Abort(tMCA_CL mcl);
    468 
    469 /*******************************************************************************
    470  *
    471  * Function         MCA_Delete
    472  *
    473  * Description      This function sends a DELETE_MDL request to the peer device.
    474  *                  When the response is received, a MCA_DELETE_CFM_EVT is
    475  *                  reported.
    476  *
    477  * Returns          MCA_SUCCESS if successful, otherwise error.
    478  *
    479  ******************************************************************************/
    480 extern tMCA_RESULT MCA_Delete(tMCA_CL mcl, uint16_t mdl_id);
    481 
    482 /*******************************************************************************
    483  *
    484  * Function         MCA_WriteReq
    485  *
    486  * Description      Send a data packet to the peer device.
    487  *
    488  *                  The application passes the packet using the BT_HDR
    489  *                  structure. The offset field must be equal to or greater than
    490  *                  L2CAP_MIN_OFFSET. This allows enough space in the buffer for
    491  *                  the L2CAP header.
    492  *
    493  *                  The memory pointed to by p_pkt must be a GKI buffer
    494  *                  allocated by the application.  This buffer will be freed
    495  *                  by the protocol stack; the application must not free
    496  *                  this buffer.
    497  *
    498  * Returns          MCA_SUCCESS if successful, otherwise error.
    499  *
    500  ******************************************************************************/
    501 extern tMCA_RESULT MCA_WriteReq(tMCA_DL mdl, BT_HDR* p_pkt);
    502 
    503 /*******************************************************************************
    504  *
    505  * Function         MCA_GetL2CapChannel
    506  *
    507  * Description      Get the L2CAP CID used by the given data channel handle.
    508  *
    509  * Returns          L2CAP channel ID if successful, otherwise 0.
    510  *
    511  ******************************************************************************/
    512 extern uint16_t MCA_GetL2CapChannel(tMCA_DL mdl);
    513 
    514 /**
    515  * The following definitions are for test interface only, they mirror function
    516  * definitions above. This struct allows an external application to load and
    517  * call these methods without linking against the core library.
    518  */
    519 typedef struct {
    520   size_t size;
    521   void (*init)(void);
    522   tMCA_HANDLE (*register_application)(tMCA_REG* p_reg,
    523                                       tMCA_CTRL_CBACK* p_cback);
    524   void (*deregister_application)(tMCA_HANDLE handle);
    525   tMCA_RESULT (*create_mdep)(tMCA_HANDLE handle, tMCA_DEP* p_dep,
    526                              tMCA_CS* p_cs);
    527   tMCA_RESULT (*delete_mdep)(tMCA_HANDLE handle, tMCA_DEP dep);
    528   tMCA_RESULT (*connect_mcl)(tMCA_HANDLE handle, const RawAddress& bd_addr,
    529                              uint16_t ctrl_psm, uint16_t sec_mask);
    530   tMCA_RESULT (*disconnect_mcl)(tMCA_CL mcl);
    531   tMCA_RESULT (*create_mdl_request)(tMCA_CL mcl, tMCA_DEP dep,
    532                                     uint16_t data_psm, uint16_t mdl_id,
    533                                     uint8_t peer_dep_id, uint8_t cfg,
    534                                     const tMCA_CHNL_CFG* p_chnl_cfg);
    535   tMCA_RESULT (*create_mdl_response)(tMCA_CL mcl, tMCA_DEP dep, uint16_t mdl_id,
    536                                      uint8_t cfg, uint8_t rsp_code,
    537                                      const tMCA_CHNL_CFG* p_chnl_cfg);
    538   tMCA_RESULT (*close_mdl_request)(tMCA_DL mdl);
    539   tMCA_RESULT (*reconnect_mdl_request)(tMCA_CL mcl, tMCA_DEP dep,
    540                                        uint16_t data_psm, uint16_t mdl_id,
    541                                        const tMCA_CHNL_CFG* p_chnl_cfg);
    542   tMCA_RESULT (*reconnect_mdl_response)(tMCA_CL mcl, tMCA_DEP dep,
    543                                         uint16_t mdl_id, uint8_t rsp_code,
    544                                         const tMCA_CHNL_CFG* p_chnl_cfg);
    545   tMCA_RESULT (*data_channel_config)(tMCA_CL mcl,
    546                                      const tMCA_CHNL_CFG* p_chnl_cfg);
    547   tMCA_RESULT (*abort_mdl)(tMCA_CL mcl);
    548   tMCA_RESULT (*delete_mdl)(tMCA_CL mcl, uint16_t mdl_id);
    549   tMCA_RESULT (*write_mdl)(tMCA_DL mdl, BT_HDR* p_pkt);
    550   uint16_t (*get_l2cap_channel)(tMCA_DL mdl);
    551 } btmcap_test_interface_t;
    552 
    553 #endif /* MCA_API_H */
    554