| /****************************************************************************** |
| * |
| * Copyright (C) 2009-2012 Broadcom Corporation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at: |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| ******************************************************************************/ |
| |
| /****************************************************************************** |
| * |
| * This interface file contains the interface to the Multi-Channel |
| * Adaptation Protocol (MCAP). |
| * |
| ******************************************************************************/ |
| #ifndef MCA_API_H |
| #define MCA_API_H |
| |
| #include "bt_target.h" |
| #include "l2c_api.h" |
| |
| /* move the following to bt_target.h or other place later */ |
| #define MCA_NUM_TC_TBL ((MCA_NUM_REGS) * (MCA_NUM_LINKS) * (MCA_NUM_MDLS + 1)) |
| /* Number of control channel control blocks */ |
| #define MCA_NUM_CCBS ((MCA_NUM_REGS) * (MCA_NUM_LINKS)) |
| /* Number of data channel control blocks */ |
| #define MCA_NUM_DCBS ((MCA_NUM_REGS) * (MCA_NUM_LINKS) * (MCA_NUM_MDLS)) |
| |
| /***************************************************************************** |
| * constants |
| ****************************************************************************/ |
| /* API function return value result codes. */ |
| #define MCA_SUCCESS 0 /* Function successful */ |
| #define MCA_BAD_PARAMS 1 /* Invalid parameters */ |
| #define MCA_NO_RESOURCES 2 /* Not enough resources */ |
| #define MCA_BAD_HANDLE 3 /* Bad handle */ |
| #define MCA_BUSY 4 /* A procedure is already in progress */ |
| #define MCA_WRITE_FAIL 5 /* Write failed */ |
| #define MCA_BAD_MDL_ID 6 /* MDL ID is not valid for the current API */ |
| typedef uint8_t tMCA_RESULT; |
| |
| /* MDEP data type. */ |
| #define MCA_TDEP_ECHO 0 /* MDEP for echo test */ |
| #define MCA_TDEP_DATA 1 /* MDEP for normal data */ |
| |
| /* Control callback events. */ |
| #define MCA_ERROR_RSP_EVT 0 /* error response */ |
| #define MCA_CREATE_IND_EVT 1 /* create mdl indication */ |
| #define MCA_CREATE_CFM_EVT 2 /* create mdl confirm */ |
| #define MCA_RECONNECT_IND_EVT 3 /* reconnect mdl indication */ |
| #define MCA_RECONNECT_CFM_EVT 4 /* reconnect mdl confirm */ |
| #define MCA_ABORT_IND_EVT 5 /* abort mdl indication */ |
| #define MCA_ABORT_CFM_EVT 6 /* abort mdl confirm */ |
| #define MCA_DELETE_IND_EVT 7 /* delete mdl indication */ |
| #define MCA_DELETE_CFM_EVT 8 /* delete mdl confirm */ |
| |
| /* request sync capabilities & requirements */ |
| #define MCA_SYNC_CAP_IND_EVT 0x11 |
| #define MCA_SYNC_CAP_CFM_EVT 0x12 /* indicate completion */ |
| /* request to set the time-stamp clock */ |
| #define MCA_SYNC_SET_IND_EVT 0x13 |
| #define MCA_SYNC_SET_CFM_EVT 0x14 /* indicate completion */ |
| /* update of the actual time-stamp clock instant from the sync slave */ |
| #define MCA_SYNC_INFO_IND_EVT 0x15 |
| |
| #define MCA_CONNECT_IND_EVT 0x20 /* Control channel connected */ |
| #define MCA_DISCONNECT_IND_EVT 0x21 /* Control channel disconnected */ |
| #define MCA_OPEN_IND_EVT 0x22 /* Data channel open indication */ |
| #define MCA_OPEN_CFM_EVT 0x23 /* Data channel open confirm */ |
| #define MCA_CLOSE_IND_EVT 0x24 /* Data channel close indication */ |
| #define MCA_CLOSE_CFM_EVT 0x25 /* Data channel close confirm */ |
| #define MCA_CONG_CHG_EVT 0x26 /* congestion change event */ |
| #define MCA_RSP_TOUT_IND_EVT \ |
| 0x27 /* Control channel message response timeout \ |
| */ |
| /***************************************************************************** |
| * Type Definitions |
| ****************************************************************************/ |
| typedef uint8_t |
| tMCA_HANDLE; /* the handle for registration. 1 based index to rcb */ |
| typedef uint8_t tMCA_CL; /* the handle for a control channel; reported at |
| MCA_CONNECT_IND_EVT */ |
| typedef uint8_t |
| tMCA_DEP; /* the handle for MCA_CreateDep. This is also the local mdep_id */ |
| typedef uint16_t tMCA_DL; /* the handle for the data channel. This is reported |
| at MCA_OPEN_CFM_EVT or MCA_OPEN_IND_EVT */ |
| |
| /* This is the data callback function. It is executed when MCAP has a data |
| * packet ready for the application. |
| */ |
| typedef void(tMCA_DATA_CBACK)(tMCA_DL mdl, BT_HDR* p_pkt); |
| |
| /* This structure contains parameters which are set at registration. */ |
| typedef struct { |
| uint32_t rsp_tout; /* MCAP signaling response timeout */ |
| uint16_t ctrl_psm; /* L2CAP PSM for the MCAP control channel */ |
| uint16_t data_psm; /* L2CAP PSM for the MCAP data channel */ |
| uint16_t sec_mask; /* Security mask for BTM_SetSecurityLevel() */ |
| } tMCA_REG; |
| |
| /* This structure contains parameters to create a MDEP. */ |
| typedef struct { |
| uint8_t type; /* MCA_TDEP_DATA, or MCA_TDEP_ECHO. a regiatration may have only |
| one MCA_TDEP_ECHO MDEP */ |
| uint8_t max_mdl; /* The maximum number of MDLs for this MDEP (max is |
| MCA_NUM_MDLS) */ |
| tMCA_DATA_CBACK* p_data_cback; /* Data callback function */ |
| } tMCA_CS; |
| |
| #define MCA_FCS_NONE 0 /* fcs_present=false */ |
| #define MCA_FCS_BYPASS 0x10 /* fcs_present=true, fcs=L2CAP_CFG_FCS_BYPASS */ |
| #define MCA_FCS_USE 0x11 /* fcs_present=true, fcs=L2CAP_CFG_FCS_USE */ |
| #define MCA_FCS_PRESNT_MASK 0x10 /* fcs_present=true */ |
| #define MCA_FCS_USE_MASK 0x01 /* mask for fcs */ |
| typedef uint8_t tMCA_FCS_OPT; |
| |
| /* This structure contains L2CAP configuration parameters for the channel. */ |
| typedef struct { |
| tL2CAP_FCR_OPTS fcr_opt; |
| uint16_t user_rx_buf_size; |
| uint16_t user_tx_buf_size; |
| uint16_t fcr_rx_buf_size; |
| uint16_t fcr_tx_buf_size; |
| tMCA_FCS_OPT fcs; |
| uint16_t data_mtu; /* L2CAP MTU of the MCAP data channel */ |
| } tMCA_CHNL_CFG; |
| |
| /* Header structure for callback event parameters. */ |
| typedef struct { |
| uint16_t mdl_id; /* The associated MDL ID */ |
| uint8_t op_code; /* The op (request/response) code */ |
| } tMCA_EVT_HDR; |
| |
| /* Response Header structure for callback event parameters. */ |
| typedef struct { |
| uint16_t mdl_id; /* The associated MDL ID */ |
| uint8_t op_code; /* The op (request/response) code */ |
| uint8_t rsp_code; /* The response code */ |
| } tMCA_RSP_EVT; |
| |
| /* This data structure is associated with the MCA_CREATE_IND_EVT. */ |
| typedef struct { |
| uint16_t mdl_id; /* The associated MDL ID */ |
| uint8_t op_code; /* The op (request/response) code */ |
| uint8_t dep_id; /* MDEP ID */ |
| uint8_t cfg; /* The configuration to negotiate */ |
| } tMCA_CREATE_IND; |
| |
| /* This data structure is associated with the MCA_CREATE_CFM_EVT. */ |
| typedef struct { |
| uint16_t mdl_id; /* The associated MDL ID */ |
| uint8_t op_code; /* The op (request/response) code */ |
| uint8_t rsp_code; /* The response code. */ |
| uint8_t cfg; /* The configuration to negotiate */ |
| } tMCA_CREATE_CFM; |
| |
| /* This data structure is associated with MCA_CONNECT_IND_EVT. */ |
| typedef struct { |
| RawAddress bd_addr; /* The peer address */ |
| uint16_t mtu; /* peer mtu */ |
| } tMCA_CONNECT_IND; |
| |
| /* This data structure is associated with MCA_DISCONNECT_IND_EVT. */ |
| typedef struct { |
| RawAddress bd_addr; /* The peer address */ |
| uint16_t reason; /* disconnect reason given by L2CAP */ |
| } tMCA_DISCONNECT_IND; |
| |
| /* This data structure is for MCA_OPEN_IND_EVT, and MCA_OPEN_CFM_EVT. */ |
| typedef struct { |
| uint16_t mdl_id; /* The associated MDL ID */ |
| tMCA_DL mdl; /* The handle for the data channel */ |
| uint16_t mtu; /* peer mtu */ |
| } tMCA_DL_OPEN; |
| |
| /* This data structure is for MCA_CLOSE_IND_EVT and MCA_CLOSE_CFM_EVT. */ |
| typedef struct { |
| uint16_t mdl_id; /* The associated MDL ID */ |
| tMCA_DL mdl; /* The handle for the data channel */ |
| uint16_t reason; /* disconnect reason given by L2CAP */ |
| } tMCA_DL_CLOSE; |
| |
| /* This data structure is associated with MCA_CONG_CHG_EVT. */ |
| typedef struct { |
| uint16_t mdl_id; /* N/A - This is a place holder */ |
| tMCA_DL mdl; /* The handle for the data channel */ |
| bool cong; /* true, if the channel is congested */ |
| } tMCA_CONG_CHG; |
| |
| /* Union of all control callback event data structures */ |
| typedef union { |
| tMCA_EVT_HDR hdr; |
| tMCA_RSP_EVT rsp; |
| tMCA_CREATE_IND create_ind; |
| tMCA_CREATE_CFM create_cfm; |
| tMCA_EVT_HDR reconnect_ind; |
| tMCA_RSP_EVT reconnect_cfm; |
| tMCA_EVT_HDR abort_ind; |
| tMCA_RSP_EVT abort_cfm; |
| tMCA_EVT_HDR delete_ind; |
| tMCA_RSP_EVT delete_cfm; |
| tMCA_CONNECT_IND connect_ind; |
| tMCA_DISCONNECT_IND disconnect_ind; |
| tMCA_DL_OPEN open_ind; |
| tMCA_DL_OPEN open_cfm; |
| tMCA_DL_CLOSE close_ind; |
| tMCA_DL_CLOSE close_cfm; |
| tMCA_CONG_CHG cong_chg; |
| } tMCA_CTRL; |
| |
| /* This is the control callback function. This function passes control events |
| * to the application. |
| */ |
| typedef void(tMCA_CTRL_CBACK)(tMCA_HANDLE handle, tMCA_CL mcl, uint8_t event, |
| tMCA_CTRL* p_data); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_Init |
| * |
| * Description Initialize MCAP internal control blocks. |
| * This function is called at stack start up. |
| * |
| * Returns void |
| * |
| ******************************************************************************/ |
| extern void MCA_Init(void); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_SetTraceLevel |
| * |
| * Description This function sets the debug trace level for MCA. |
| * If 0xff is passed, the current trace level is returned. |
| * |
| * Input Parameters: |
| * level: The level to set the MCA tracing to: |
| * 0xff-returns the current setting. |
| * 0-turns off tracing. |
| * >= 1-Errors. |
| * >= 2-Warnings. |
| * >= 3-APIs. |
| * >= 4-Events. |
| * >= 5-Debug. |
| * |
| * Returns The new trace level or current trace level if |
| * the input parameter is 0xff. |
| * |
| ******************************************************************************/ |
| extern uint8_t MCA_SetTraceLevel(uint8_t level); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_Register |
| * |
| * Description This function registers an MCAP implementation. |
| * It is assumed that the control channel PSM and data channel |
| * PSM are not used by any other instances of the stack. |
| * If the given p_reg->ctrl_psm is 0, this handle is INT only. |
| * |
| * Returns 0, if failed. Otherwise, the MCA handle. |
| * |
| ******************************************************************************/ |
| extern tMCA_HANDLE MCA_Register(tMCA_REG* p_reg, tMCA_CTRL_CBACK* p_cback); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_Deregister |
| * |
| * Description Deregister an MCAP implementation. Before this function can |
| * be called, all control and data channels must be removed |
| * with MCA_DisconnectReq and MCA_CloseReq. |
| * |
| * Returns void |
| * |
| ******************************************************************************/ |
| extern void MCA_Deregister(tMCA_HANDLE handle); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_CreateDep |
| * |
| * Description Create a data endpoint. If the MDEP is created |
| * successfully, the MDEP ID is returned in *p_dep. After a |
| * data endpoint is created, an application can initiate a |
| * connection between this endpoint and an endpoint on a peer |
| * device. |
| * |
| * Returns MCA_SUCCESS if successful, otherwise error. |
| * |
| ******************************************************************************/ |
| extern tMCA_RESULT MCA_CreateDep(tMCA_HANDLE handle, tMCA_DEP* p_dep, |
| tMCA_CS* p_cs); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_DeleteDep |
| * |
| * Description Delete a data endpoint. This function is called when |
| * the implementation is no longer using a data endpoint. |
| * If this function is called when the endpoint is connected |
| * the connection is closed and the data endpoint |
| * is removed. |
| * |
| * Returns MCA_SUCCESS if successful, otherwise error. |
| * |
| ******************************************************************************/ |
| extern tMCA_RESULT MCA_DeleteDep(tMCA_HANDLE handle, tMCA_DEP dep); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_ConnectReq |
| * |
| * Description This function initiates an MCAP control channel connection |
| * to the peer device. When the connection is completed, an |
| * MCA_CONNECT_IND_EVT is reported to the application via its |
| * control callback function. |
| * This control channel is identified by tMCA_CL. |
| * If the connection attempt fails, an MCA_DISCONNECT_IND_EVT |
| * is reported. The security mask parameter overrides the |
| * outgoing security mask set in MCA_Register(). |
| * |
| * Returns MCA_SUCCESS if successful, otherwise error. |
| * |
| ******************************************************************************/ |
| extern tMCA_RESULT MCA_ConnectReq(tMCA_HANDLE handle, const RawAddress& bd_addr, |
| uint16_t ctrl_psm, uint16_t sec_mask); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_DisconnectReq |
| * |
| * Description This function disconnect an MCAP control channel |
| * to the peer device. |
| * If associated data channel exists, they are disconnected. |
| * When the MCL is disconnected an MCA_DISCONNECT_IND_EVT is |
| * reported to the application via its control callback |
| * function. |
| * |
| * Returns MCA_SUCCESS if successful, otherwise error. |
| * |
| ******************************************************************************/ |
| extern tMCA_RESULT MCA_DisconnectReq(tMCA_CL mcl); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_CreateMdl |
| * |
| * Description This function sends a CREATE_MDL request to the peer device. |
| * When the response is received, a MCA_CREATE_CFM_EVT is |
| * reported with the given MDL ID. |
| * If the response is successful, a data channel is open |
| * with the given p_chnl_cfg |
| * When the data channel is open successfully, a |
| * MCA_OPEN_CFM_EVT is reported. This data channel is |
| * identified as tMCA_DL. |
| * |
| * Returns MCA_SUCCESS if successful, otherwise error. |
| * |
| ******************************************************************************/ |
| extern tMCA_RESULT MCA_CreateMdl(tMCA_CL mcl, tMCA_DEP dep, uint16_t data_psm, |
| uint16_t mdl_id, uint8_t peer_dep_id, |
| uint8_t cfg, const tMCA_CHNL_CFG* p_chnl_cfg); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_CreateMdlRsp |
| * |
| * Description This function sends a CREATE_MDL response to the peer device |
| * in response to a received MCA_CREATE_IND_EVT. |
| * If the rsp_code is successful, a data channel is open |
| * with the given p_chnl_cfg |
| * When the data channel is open successfully, a |
| * MCA_OPEN_IND_EVT is reported. This data channel is |
| * identified as tMCA_DL. |
| * |
| * Returns MCA_SUCCESS if successful, otherwise error. |
| * |
| ******************************************************************************/ |
| extern tMCA_RESULT MCA_CreateMdlRsp(tMCA_CL mcl, tMCA_DEP dep, uint16_t mdl_id, |
| uint8_t cfg, uint8_t rsp_code, |
| const tMCA_CHNL_CFG* p_chnl_cfg); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_CloseReq |
| * |
| * Description Close a data channel. When the channel is closed, an |
| * MCA_CLOSE_CFM_EVT is sent to the application via the |
| * control callback function for this handle. |
| * |
| * Returns MCA_SUCCESS if successful, otherwise error. |
| * |
| ******************************************************************************/ |
| extern tMCA_RESULT MCA_CloseReq(tMCA_DL mdl); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_ReconnectMdl |
| * |
| * Description This function sends a RECONNECT_MDL request to the peer |
| * device. When the response is received, a |
| * MCA_RECONNECT_CFM_EVT is reported. If the response is |
| * successful, a data channel is open. When the data channel is |
| * open successfully, a MCA_OPEN_CFM_EVT is reported. |
| * |
| * Returns MCA_SUCCESS if successful, otherwise error. |
| * |
| ******************************************************************************/ |
| extern tMCA_RESULT MCA_ReconnectMdl(tMCA_CL mcl, tMCA_DEP dep, |
| uint16_t data_psm, uint16_t mdl_id, |
| const tMCA_CHNL_CFG* p_chnl_cfg); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_ReconnectMdlRsp |
| * |
| * Description Send a RECONNECT_MDL response to the peer device in response |
| * to a MCA_RECONNECT_IND_EVT event. |
| * If the response is successful, a data channel is open. |
| * When the data channel is open successfully, a |
| * MCA_OPEN_IND_EVT is reported. |
| * |
| * Returns MCA_SUCCESS if successful, otherwise error. |
| * |
| ******************************************************************************/ |
| extern tMCA_RESULT MCA_ReconnectMdlRsp(tMCA_CL mcl, tMCA_DEP dep, |
| uint16_t mdl_id, uint8_t rsp_code, |
| const tMCA_CHNL_CFG* p_chnl_cfg); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_DataChnlCfg |
| * |
| * Description This function initiates a data channel connection toward the |
| * connected peer device. |
| * When the data channel is open successfully, a |
| * MCA_OPEN_CFM_EVT is reported. This data channel is |
| * identified as tMCA_DL. |
| * |
| * Returns MCA_SUCCESS if successful, otherwise error. |
| * |
| ******************************************************************************/ |
| extern tMCA_RESULT MCA_DataChnlCfg(tMCA_CL mcl, |
| const tMCA_CHNL_CFG* p_chnl_cfg); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_Abort |
| * |
| * Description This function sends a ABORT_MDL request to the peer device. |
| * When the response is received, a MCA_ABORT_CFM_EVT is |
| * reported. |
| * |
| * Returns MCA_SUCCESS if successful, otherwise error. |
| * |
| ******************************************************************************/ |
| extern tMCA_RESULT MCA_Abort(tMCA_CL mcl); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_Delete |
| * |
| * Description This function sends a DELETE_MDL request to the peer device. |
| * When the response is received, a MCA_DELETE_CFM_EVT is |
| * reported. |
| * |
| * Returns MCA_SUCCESS if successful, otherwise error. |
| * |
| ******************************************************************************/ |
| extern tMCA_RESULT MCA_Delete(tMCA_CL mcl, uint16_t mdl_id); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_WriteReq |
| * |
| * Description Send a data packet to the peer device. |
| * |
| * The application passes the packet using the BT_HDR |
| * structure. The offset field must be equal to or greater than |
| * L2CAP_MIN_OFFSET. This allows enough space in the buffer for |
| * the L2CAP header. |
| * |
| * The memory pointed to by p_pkt must be a GKI buffer |
| * allocated by the application. This buffer will be freed |
| * by the protocol stack; the application must not free |
| * this buffer. |
| * |
| * Returns MCA_SUCCESS if successful, otherwise error. |
| * |
| ******************************************************************************/ |
| extern tMCA_RESULT MCA_WriteReq(tMCA_DL mdl, BT_HDR* p_pkt); |
| |
| /******************************************************************************* |
| * |
| * Function MCA_GetL2CapChannel |
| * |
| * Description Get the L2CAP CID used by the given data channel handle. |
| * |
| * Returns L2CAP channel ID if successful, otherwise 0. |
| * |
| ******************************************************************************/ |
| extern uint16_t MCA_GetL2CapChannel(tMCA_DL mdl); |
| |
| /** |
| * The following definitions are for test interface only, they mirror function |
| * definitions above. This struct allows an external application to load and |
| * call these methods without linking against the core library. |
| */ |
| typedef struct { |
| size_t size; |
| void (*init)(void); |
| tMCA_HANDLE (*register_application)(tMCA_REG* p_reg, |
| tMCA_CTRL_CBACK* p_cback); |
| void (*deregister_application)(tMCA_HANDLE handle); |
| tMCA_RESULT (*create_mdep)(tMCA_HANDLE handle, tMCA_DEP* p_dep, |
| tMCA_CS* p_cs); |
| tMCA_RESULT (*delete_mdep)(tMCA_HANDLE handle, tMCA_DEP dep); |
| tMCA_RESULT (*connect_mcl)(tMCA_HANDLE handle, const RawAddress& bd_addr, |
| uint16_t ctrl_psm, uint16_t sec_mask); |
| tMCA_RESULT (*disconnect_mcl)(tMCA_CL mcl); |
| tMCA_RESULT (*create_mdl_request)(tMCA_CL mcl, tMCA_DEP dep, |
| uint16_t data_psm, uint16_t mdl_id, |
| uint8_t peer_dep_id, uint8_t cfg, |
| const tMCA_CHNL_CFG* p_chnl_cfg); |
| tMCA_RESULT (*create_mdl_response)(tMCA_CL mcl, tMCA_DEP dep, uint16_t mdl_id, |
| uint8_t cfg, uint8_t rsp_code, |
| const tMCA_CHNL_CFG* p_chnl_cfg); |
| tMCA_RESULT (*close_mdl_request)(tMCA_DL mdl); |
| tMCA_RESULT (*reconnect_mdl_request)(tMCA_CL mcl, tMCA_DEP dep, |
| uint16_t data_psm, uint16_t mdl_id, |
| const tMCA_CHNL_CFG* p_chnl_cfg); |
| tMCA_RESULT (*reconnect_mdl_response)(tMCA_CL mcl, tMCA_DEP dep, |
| uint16_t mdl_id, uint8_t rsp_code, |
| const tMCA_CHNL_CFG* p_chnl_cfg); |
| tMCA_RESULT (*data_channel_config)(tMCA_CL mcl, |
| const tMCA_CHNL_CFG* p_chnl_cfg); |
| tMCA_RESULT (*abort_mdl)(tMCA_CL mcl); |
| tMCA_RESULT (*delete_mdl)(tMCA_CL mcl, uint16_t mdl_id); |
| tMCA_RESULT (*write_mdl)(tMCA_DL mdl, BT_HDR* p_pkt); |
| uint16_t (*get_l2cap_channel)(tMCA_DL mdl); |
| } btmcap_test_interface_t; |
| |
| #endif /* MCA_API_H */ |