Files
TAIXIN/sdk/include/lib/bluetooth/hci/hci_controller.h

100 lines
4.0 KiB
C
Raw Normal View History

#ifndef _HCI_CONTROLLER_H_
#define _HCI_CONTROLLER_H_
#include "basic_include.h"
#include "lib/skb/skb.h"
#include "lib/lmac/lmac_def.h"
#ifdef __cplusplus
extern "C" {
#endif
enum BLE_LL_TYPE {
BLE_LL_TYPE_ADV_TRX = 0x0,
BLE_LL_TYPE_ADV_CUSTOM,
BLE_LL_TYPE_CONNECT,
};
enum BLE_LL_EVENT {
BLE_LL_EVENT_CONNECTED = 0x1,
BLE_LL_EVENT_DISCONNECTED,
BLE_LL_EVENT_EXCHANGE_LEHGTH,
};
enum BLE_LL_IOCTL {
BLE_IOCTL_SET_DEV_ADDR = 1,
BLE_IOCTL_SET_ADV_DATA = 2,
BLE_IOCTL_SET_SCAN_RESP = 3,
BLE_IOCTL_SET_ADV_INTERVAL = 4,
BLE_IOCTL_SET_ADV_EN = 5,
BLE_IOCTL_SET_ADV_TYPE_FILTER = 6,
BLE_IOCTL_GET_PERR_ADDRTYPE = 7,
BLE_IOCTL_GET_PERR_ADDR = 8,
BLE_IOCTL_GET_CONN_INTERVAL = 9,
BLE_IOCTL_GET_CONN_LATENCY = 10,
BLE_IOCTL_GET_SUPERVISION_TIMEOUT = 11,
BLE_IOCTL_SET_COEXIST_EN = 12,
BLE_IOCTL_GET_COEXIST_CRASH = 13,
BLE_IOCTL_SET_LL_LENGTH = 14,
BLE_IOCTL_SET_DISCONNECT = 15,
BLE_IOCTL_GET_RSSI = 16,
BLE_IOCTL_GET_BLE_EN = 17,
};
struct bt_rx_info {
uint8 channel; //current channel
uint8 con_handle; //hci handle
int8 rssi;
uint8 frm_type;
uint32 rev;
};
struct bt_tx_info {
uint16 con_handle; //hci handle
uint8 data_type; //hci type
uint8 r1;
};
struct bt_ops {
void *priv;
void *lops;
uint8 headroom, tailroom;
int32(*open)(struct bt_ops *ops, uint8 type, uint8 chan);
int32(*close)(struct bt_ops *ops);
int32(*tx)(struct bt_ops *ops, struct sk_buff *skb);
int32(*tx_status)(void *priv, struct sk_buff *skb);
int32(*rx)(void *priv, struct sk_buff *skb);
int32(*ioctl)(struct bt_ops *ops, uint32 cmd, uint32 param1, uint32 param2);
int32(*event)(void *priv, uint32 event_id, uint32 param1, uint32 param2);
};
#define ble_ll_open(ops, type, chan) ops->open(ops, type, chan)
#define ble_ll_close(ops) ops->close(ops)
#define ble_ll_set_advdata(ops, data, len) ops->ioctl(ops, BLE_IOCTL_SET_ADV_DATA, (uint32)(data), (len))
#define ble_ll_set_scan_rsp(ops, data, len) ops->ioctl(ops, BLE_IOCTL_SET_SCAN_RESP, (uint32)(data), (len))
#define ble_ll_set_devaddr(ops, addr) ops->ioctl(ops, BLE_IOCTL_SET_DEV_ADDR, (uint32)(addr), 0)
#define ble_ll_set_adv_interval(ops, interval) ops->ioctl(ops, BLE_IOCTL_SET_ADV_INTERVAL, (uint32)(interval), 0)
#define ble_ll_set_adv_en(ops, en) ops->ioctl(ops, BLE_IOCTL_SET_ADV_EN, (uint32)(en), 0)
#define ble_ll_set_adv_type_filter(ops, type) ops->ioctl(ops, BLE_IOCTL_SET_ADV_TYPE_FILTER, (uint32)(type), 0)
#define ble_ll_get_peer_addr(ops, hdl) ops->ioctl(ops, BLE_IOCTL_GET_PERR_ADDR, (uint32)(hdl), 0)
#define ble_ll_get_peer_addrtype(ops, hdl) ops->ioctl(ops, BLE_IOCTL_GET_PERR_ADDRTYPE, (uint32)(hdl), 0)
#define ble_ll_get_conn_interval(ops, hdl) ops->ioctl(ops, BLE_IOCTL_GET_CONN_INTERVAL, (uint32)(hdl), 0)
#define ble_ll_get_conn_latency(ops, hdl) ops->ioctl(ops, BLE_IOCTL_GET_CONN_LATENCY, (uint32)(hdl), 0)
#define ble_ll_get_supervision_timeout(ops, hdl) ops->ioctl(ops, BLE_IOCTL_GET_SUPERVISION_TIMEOUT, (uint32)(hdl), 0)
#define ble_ll_set_coexist_en(ops, coexist_en, duty_en) ops->ioctl(ops, BLE_IOCTL_SET_COEXIST_EN, (uint32)(coexist_en), (uint32)(duty_en))
#define ble_ll_get_coexist_crash(ops) ops->ioctl(ops, BLE_IOCTL_GET_COEXIST_CRASH, 0, 0)
#define ble_ll_set_ll_length(ops, length) ops->ioctl(ops, BLE_IOCTL_SET_LL_LENGTH, length, 0)
#define ble_ll_set_disconnect(ops) ops->ioctl(ops, BLE_IOCTL_SET_DISCONNECT, 0, 0)
#define ble_ll_get_rssi(ops) ops->ioctl(ops, BLE_IOCTL_GET_RSSI, 0, 0)
#define ble_ll_get_ble_en(ops) ops->ioctl(ops, BLE_IOCTL_GET_BLE_EN, 0, 0)
struct bt_ops *ble_ll_init(struct lmac_ops *ops);
int32 bt_hci_init(struct bt_ops *btops);
#ifdef __cplusplus
}
#endif
#endif