160 lines
5.1 KiB
C
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
|
||
|
|