📄 hci.h
字号:
#define READ_REMOTE_VERSION_CP_SIZE 2/* Link Policy */#define OGF_LINK_POLICY 0x02 #define OCF_ROLE_DISCOVERY 0x0009typedef struct { __u16 handle;} __attribute__ ((packed)) role_discovery_cp;#define ROLE_DISCOVERY_CP_SIZE 2typedef struct { __u8 status; __u16 handle; __u8 role;} __attribute__ ((packed)) role_discovery_rp;#define ROLE_DISCOVERY_RP_SIZE 4#define OCF_READ_LINK_POLICY 0x000Ctypedef struct { __u16 handle;} __attribute__ ((packed)) read_link_policy_cp;#define READ_LINK_POLICY_CP_SIZE 2typedef struct { __u8 status; __u16 handle; __u16 policy;} __attribute__ ((packed)) read_link_policy_rp;#define READ_LINK_POLICY_RP_SIZE 5#define OCF_SWITCH_ROLE 0x000Btypedef struct { bdaddr_t bdaddr; __u8 role;} __attribute__ ((packed)) switch_role_cp;#define SWITCH_ROLE_CP_SIZE 7#define OCF_WRITE_LINK_POLICY 0x000Dtypedef struct { __u16 handle; __u16 policy;} __attribute__ ((packed)) write_link_policy_cp;#define WRITE_LINK_POLICY_CP_SIZE 4typedef struct { __u8 status; __u16 handle;} __attribute__ ((packed)) write_link_policy_rp;#define WRITE_LINK_POLICY_RP_SIZE 3/* Status params */#define OGF_STATUS_PARAM 0x05/* Testing commands */#define OGF_TESTING_CMD 0x3e/* Vendor specific commands */#define OGF_VENDOR_CMD 0x3f/* ---- HCI Events ---- */#define EVT_INQUIRY_COMPLETE 0x01#define EVT_INQUIRY_RESULT 0x02typedef struct { bdaddr_t bdaddr; __u8 pscan_rep_mode; __u8 pscan_period_mode; __u8 pscan_mode; __u8 dev_class[3]; __u16 clock_offset;} __attribute__ ((packed)) inquiry_info;#define INQUIRY_INFO_SIZE 14#define EVT_INQUIRY_RESULT_WITH_RSSI 0x22typedef struct { bdaddr_t bdaddr; __u8 pscan_rep_mode; __u8 pscan_period_mode; __u8 dev_class[3]; __u16 clock_offset; __s8 rssi;} __attribute__ ((packed)) inquiry_info_with_rssi;#define INQUIRY_INFO_WITH_RSSI_SIZE 14#define EVT_CONN_COMPLETE 0x03typedef struct { __u8 status; __u16 handle; bdaddr_t bdaddr; __u8 link_type; __u8 encr_mode;} __attribute__ ((packed)) evt_conn_complete;#define EVT_CONN_COMPLETE_SIZE 13#define EVT_CONN_REQUEST 0x04typedef struct { bdaddr_t bdaddr; __u8 dev_class[3]; __u8 link_type;} __attribute__ ((packed)) evt_conn_request;#define EVT_CONN_REQUEST_SIZE 10#define EVT_DISCONN_COMPLETE 0x05typedef struct { __u8 status; __u16 handle; __u8 reason;} __attribute__ ((packed)) evt_disconn_complete;#define EVT_DISCONN_COMPLETE_SIZE 4#define EVT_AUTH_COMPLETE 0x06typedef struct { __u8 status; __u16 handle;} __attribute__ ((packed)) evt_auth_complete;#define EVT_AUTH_COMPLETE_SIZE 3#define EVT_REMOTE_NAME_REQ_COMPLETE 0x07typedef struct { __u8 status; bdaddr_t bdaddr; __u8 name[248];} __attribute__ ((packed)) evt_remote_name_req_complete;#define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255#define EVT_ENCRYPT_CHANGE 0x08typedef struct { __u8 status; __u16 handle; __u8 encrypt;} __attribute__ ((packed)) evt_encrypt_change;#define EVT_ENCRYPT_CHANGE_SIZE 5#define EVT_QOS_SETUP_COMPLETE 0x0Dtypedef struct { __u8 service_type; __u32 token_rate; __u32 peak_bandwidth; __u32 latency; __u32 delay_variation;} __attribute__ ((packed)) hci_qos;typedef struct { __u8 status; __u16 handle; hci_qos qos;} __attribute__ ((packed)) evt_qos_setup_complete;#define EVT_QOS_SETUP_COMPLETE_SIZE 20#define EVT_CMD_COMPLETE 0x0etypedef struct { __u8 ncmd; __u16 opcode;} __attribute__ ((packed)) evt_cmd_complete;#define EVT_CMD_COMPLETE_SIZE 3#define EVT_CMD_STATUS 0x0ftypedef struct { __u8 status; __u8 ncmd; __u16 opcode;} __attribute__ ((packed)) evt_cmd_status;#define EVT_CMD_STATUS_SIZE 4#define EVT_NUM_COMP_PKTS 0x13typedef struct { __u8 num_hndl; /* variable length part */} __attribute__ ((packed)) evt_num_comp_pkts;#define EVT_NUM_COMP_PKTS_SIZE 1#define EVT_ROLE_CHANGE 0x12typedef struct { __u8 status; bdaddr_t bdaddr; __u8 role;} __attribute__ ((packed)) evt_role_change;#define EVT_ROLE_CHANGE_SIZE 8#define EVT_PIN_CODE_REQ 0x16typedef struct { bdaddr_t bdaddr;} __attribute__ ((packed)) evt_pin_code_req;#define EVT_PIN_CODE_REQ_SIZE 6#define EVT_LINK_KEY_REQ 0x17typedef struct { bdaddr_t bdaddr;} __attribute__ ((packed)) evt_link_key_req;#define EVT_LINK_KEY_REQ_SIZE 6#define EVT_LINK_KEY_NOTIFY 0x18typedef struct { bdaddr_t bdaddr; __u8 link_key[16]; __u8 key_type;} __attribute__ ((packed)) evt_link_key_notify;#define EVT_LINK_KEY_NOTIFY_SIZE 23#define EVT_READ_REMOTE_FEATURES_COMPLETE 0x0Btypedef struct { __u8 status; __u16 handle; __u8 features[8];} __attribute__ ((packed)) evt_read_remote_features_complete;#define EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 11#define EVT_READ_REMOTE_VERSION_COMPLETE 0x0Ctypedef struct { __u8 status; __u16 handle; __u8 lmp_ver; __u16 manufacturer; __u16 lmp_subver;} __attribute__ ((packed)) evt_read_remote_version_complete;#define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8/* Internal events generated by BlueZ stack */#define EVT_STACK_INTERNAL 0xfdtypedef struct { __u16 type; __u8 data[0];} __attribute__ ((packed)) evt_stack_internal;#define EVT_STACK_INTERNAL_SIZE 2#define EVT_SI_DEVICE 0x01typedef struct { __u16 event; __u16 dev_id;} __attribute__ ((packed)) evt_si_device;#define EVT_SI_DEVICE_SIZE 4#define EVT_SI_SECURITY 0x02typedef struct { __u16 event; __u16 proto; __u16 subproto; __u8 incomming;} __attribute__ ((packed)) evt_si_security;/* -------- HCI Packet structures -------- */#define HCI_TYPE_LEN 1typedef struct { __u16 opcode; /* OCF & OGF */ __u8 plen;} __attribute__ ((packed)) hci_command_hdr;#define HCI_COMMAND_HDR_SIZE 3typedef struct { __u8 evt; __u8 plen;} __attribute__ ((packed)) hci_event_hdr;#define HCI_EVENT_HDR_SIZE 2typedef struct { __u16 handle; /* Handle & Flags(PB, BC) */ __u16 dlen;} __attribute__ ((packed)) hci_acl_hdr;#define HCI_ACL_HDR_SIZE 4typedef struct { __u16 handle; __u8 dlen;} __attribute__ ((packed)) hci_sco_hdr;#define HCI_SCO_HDR_SIZE 3/* Command opcode pack/unpack */#define cmd_opcode_pack(ogf, ocf) (__u16)((ocf & 0x03ff)|(ogf << 10))#define cmd_opcode_ogf(op) (op >> 10)#define cmd_opcode_ocf(op) (op & 0x03ff)/* ACL handle and flags pack/unpack */#define acl_handle_pack(h, f) (__u16)((h & 0x0fff)|(f << 12))#define acl_handle(h) (h & 0x0fff)#define acl_flags(h) (h >> 12)/* HCI Socket options */#define HCI_DATA_DIR 1#define HCI_FILTER 2#define HCI_TIME_STAMP 3/* HCI CMSG flags */#define HCI_CMSG_DIR 0x0001#define HCI_CMSG_TSTAMP 0x0002struct sockaddr_hci { sa_family_t hci_family; unsigned short hci_dev;};#define HCI_DEV_NONE 0xffffstruct hci_filter { __u32 type_mask; __u32 event_mask[2]; __u16 opcode;};#define HCI_FLT_TYPE_BITS 31#define HCI_FLT_EVENT_BITS 63#define HCI_FLT_OGF_BITS 63#define HCI_FLT_OCF_BITS 127#if BITS_PER_LONG == 64static inline void hci_set_bit(int nr, void *addr){ *((__u32 *) addr + (nr >> 5)) |= ((__u32) 1 << (nr & 31));}static inline int hci_test_bit(int nr, void *addr){ return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31));}#else#define hci_set_bit set_bit#define hci_test_bit test_bit#endif/* Ioctl requests structures */struct hci_dev_stats { __u32 err_rx; __u32 err_tx; __u32 cmd_tx; __u32 evt_rx; __u32 acl_tx; __u32 acl_rx; __u32 sco_tx; __u32 sco_rx; __u32 byte_rx; __u32 byte_tx;};struct hci_dev_info { __u16 dev_id; char name[8]; bdaddr_t bdaddr; __u32 flags; __u8 type; __u8 features[8]; __u32 pkt_type; __u32 link_policy; __u32 link_mode; __u16 acl_mtu; __u16 acl_pkts; __u16 sco_mtu; __u16 sco_pkts; struct hci_dev_stats stat;};struct hci_conn_info { __u16 handle; bdaddr_t bdaddr; __u8 type; __u8 out; __u16 state; __u32 link_mode;};struct hci_dev_req { __u16 dev_id; __u32 dev_opt;};struct hci_dev_list_req { __u16 dev_num; struct hci_dev_req dev_req[0]; /* hci_dev_req structures */};struct hci_conn_list_req { __u16 dev_id; __u16 conn_num; struct hci_conn_info conn_info[0];};struct hci_conn_info_req { bdaddr_t bdaddr; __u8 type; struct hci_conn_info conn_info[0];};struct hci_inquiry_req { __u16 dev_id; __u16 flags; __u8 lap[3]; __u8 length; __u8 num_rsp;};#define IREQ_CACHE_FLUSH 0x0001struct hci_remotename_req { __u16 dev_id; __u16 flags; bdaddr_t bdaddr; __u8 name[248];};#endif /* __HCI_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -