MXC-A36_2024.04.18/fr3092_mcu/components/btdm/include/l2cap_api.h

160 lines
5.1 KiB
C

#ifndef __L2CAP_API_H
#define __L2CAP_API_H
#include <stdint.h>
#define L2CAP_COC_EVT_SPSM_ADDED 0x00 //!< new SPSM is added
#define L2CAP_COC_EVT_SPSM_REMOVED 0x01 //!< an added SPSM is removed
#define L2CAP_COC_EVT_CONNECTED 0x02 //!< Connection Oriented Channel is created.
#define L2CAP_COC_EVT_MTU_CHANGED 0x03 //!< MTU of created channel is changed
#define L2CAP_COC_EVT_DISCONNECTED 0x04 //!< Created channel is disconnected
#define L2CAP_COC_EVT_DATA_SENT 0x05 //!< data is sent to peer device
#define L2CAP_COC_EVT_CONNECT_REQ 0x06 //!< receive connect request from peer device
#define L2CAP_COC_EVT_DATA_RECV 0x07 //!< receive data from peer device
typedef struct _l2cap_coc_evt {
uint8_t event;
uint8_t status;
union {
/// parameter for L2CAP_COC_EVT_CONNECTED event
struct {
uint8_t conidx; //!< BLE connection index
uint8_t chan_lid; //!< channel link ID of created COC, this field will be useld in
//!< reconfig, disconnect, send data, etc. operation
uint16_t local_rx_mtu;
uint16_t peer_rx_mtu;
} connected;
/// parameter for L2CAP_COC_EVT_MTU_CHANGED event
struct {
uint8_t conidx;
uint8_t chan_lid;
uint16_t local_rx_mtu;
uint16_t peer_rx_mtu;
} mtu_changed;
/// parameter for L2CAP_COC_EVT_DISCONNECTED event
struct {
uint8_t conidx;
uint8_t chan_lid;
uint16_t reason;
} disconnected;
/// parameter for L2CAP_COC_EVT_DATA_SENT event
struct {
uint8_t conidx;
uint8_t chan_lid;
} sent;
/// parameter for L2CAP_COC_EVT_CONNECT_REQ event
struct {
uint16_t token; //!< used in l2cap_coc_conn_cfm to response connection request
uint8_t conidx;
uint8_t nb_chan;
uint16_t spsm;
uint16_t peer_rx_mtu;
} conn_req;
/// parameter for L2CAP_COC_EVT_DATA_RECV event
struct {
uint8_t conidx;
uint8_t chan_lid;
uint16_t status; //!< Error is detected if status is not 0.
uint16_t length;
uint8_t *data;
} data_recv;
} p;
} l2cap_coc_evt_t;
typedef void (*l2cap_coc_evt_cb_t)(l2cap_coc_evt_t *evt);
/*
* @fn l2cap_coc_spsm_new
*
* @brief add new SPSM to l2cap.
*
* @param[in] spsm : new SPSM
* @param[in] sec_lvl : reserved, keep this field to 0
*/
void l2cap_coc_spsm_new(uint16_t spsm, uint8_t sec_lvl);
/*
* @fn l2cap_coc_spsm_delete
*
* @brief remove added SPSM from l2cap.
*
* @param[in] spsm : SPSM to be removed
*/
void l2cap_coc_spsm_delete(uint16_t spsm);
/*
* @fn l2cap_coc_connect
*
* @brief remove added SPSM from l2cap.
*
* @param[in] conidx : BLE connection index
* @param[in] nb_ch : How many channel to create.
* @param[in] spsm : which spsm to connect.
* @param[in] rx_mtu : local RX MTU.
*/
void l2cap_coc_connect(uint8_t conidx, uint8_t nb_ch, uint16_t spsm, uint16_t rx_mtu);
/*
* @fn l2cap_coc_reconfig
*
* @brief used to reset local rx mtu.
*
* @param[in] conidx : BLE connection index
* @param[in] rx_mtu_new : new local RX MTU
* @param[in] nb_ch : how many channel to change MTU
* @param[in] chan_lids : link id of channels to change MTU
*/
void l2cap_coc_reconfig(uint8_t conidx, uint16_t rx_mtu_new, uint8_t nb_ch, uint8_t *chan_lids);
/*
* @fn l2cap_coc_disconnect
*
* @brief disconnect created channel.
*
* @param[in] conidx : BLE connection index
* @param[in] chan_lid : link id of channel to disconnect
*/
void l2cap_coc_disconnect(uint8_t conidx, uint8_t chan_lid);
/*
* @fn l2cap_coc_send_data
*
* @brief used to send data to peer device.
*
* @param[in] conidx : BLE connection index
* @param[in] chan_lid : link id of channel to send data
* @param[in] len : how many data to send, should not be more than peer_rx_mtu
* @param[in] data : storage pointer of sending data
*/
void l2cap_coc_send_data(uint8_t conidx, uint8_t chan_lid, uint16_t len, uint8_t *data);
/*
* @fn l2cap_coc_conn_cfm
*
* @brief used to confirm connect request from peer device.
*
* @param[in] token : used to identify connect request by internal implementation of l2cap, this filed should be
* same with "token" field in L2CAP_COC_EVT_CONNECT_REQ event.
* @param[in] conidx : BLE connection index
* @param[in] nb_chan : how many channels to create
* @param[in] local_rx_mtu : local RX MTU
*/
void l2cap_coc_conn_cfm(uint16_t token, uint8_t conidx, uint8_t nb_chan, uint16_t local_rx_mtu);
/*
* @fn l2cap_coc_init
*
* @brief used to set callback function used for dealing l2cap COC events.
*
* @param[in] cb : ballback function to handle events
*/
void l2cap_coc_init(l2cap_coc_evt_cb_t cb);
#endif // __L2CAP_API_H