📄 hci.h
字号:
uint8_t map[10];} __attribute__ ((packed)) read_afh_map_rp;#define READ_AFH_MAP_RP_SIZE 14#define OCF_READ_CLOCK 0x0007typedef struct { uint16_t handle; uint8_t which_clock;} __attribute__ ((packed)) read_clock_cp;#define READ_CLOCK_CP_SIZE 3typedef struct { uint8_t status; uint16_t handle; uint32_t clock; uint16_t accuracy;} __attribute__ ((packed)) read_clock_rp;#define READ_CLOCK_RP_SIZE 9/* 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; uint8_t pscan_rep_mode; uint8_t pscan_period_mode; uint8_t pscan_mode; uint8_t dev_class[3]; uint16_t clock_offset;} __attribute__ ((packed)) inquiry_info;#define INQUIRY_INFO_SIZE 14#define EVT_CONN_COMPLETE 0x03typedef struct { uint8_t status; uint16_t handle; bdaddr_t bdaddr; uint8_t link_type; uint8_t encr_mode;} __attribute__ ((packed)) evt_conn_complete;#define EVT_CONN_COMPLETE_SIZE 13#define EVT_CONN_REQUEST 0x04typedef struct { bdaddr_t bdaddr; uint8_t dev_class[3]; uint8_t link_type;} __attribute__ ((packed)) evt_conn_request;#define EVT_CONN_REQUEST_SIZE 10#define EVT_DISCONN_COMPLETE 0x05typedef struct { uint8_t status; uint16_t handle; uint8_t reason;} __attribute__ ((packed)) evt_disconn_complete;#define EVT_DISCONN_COMPLETE_SIZE 4#define EVT_AUTH_COMPLETE 0x06typedef struct { uint8_t status; uint16_t handle;} __attribute__ ((packed)) evt_auth_complete;#define EVT_AUTH_COMPLETE_SIZE 3#define EVT_REMOTE_NAME_REQ_COMPLETE 0x07typedef struct { uint8_t status; bdaddr_t bdaddr; uint8_t name[248];} __attribute__ ((packed)) evt_remote_name_req_complete;#define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255#define EVT_ENCRYPT_CHANGE 0x08typedef struct { uint8_t status; uint16_t handle; uint8_t encrypt;} __attribute__ ((packed)) evt_encrypt_change;#define EVT_ENCRYPT_CHANGE_SIZE 5#define EVT_CHANGE_CONN_LINK_KEY_COMPLETE 0x09typedef struct { uint8_t status; uint16_t handle;} __attribute__ ((packed)) evt_change_conn_link_key_complete;#define EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE 3#define EVT_MASTER_LINK_KEY_COMPLETE 0x0Atypedef struct { uint8_t status; uint16_t handle; uint8_t key_flag;} __attribute__ ((packed)) evt_master_link_key_complete;#define EVT_MASTER_LINK_KEY_COMPLETE_SIZE 4#define EVT_READ_REMOTE_FEATURES_COMPLETE 0x0Btypedef struct { uint8_t status; uint16_t handle; uint8_t 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 { uint8_t status; uint16_t handle; uint8_t lmp_ver; uint16_t manufacturer; uint16_t lmp_subver;} __attribute__ ((packed)) evt_read_remote_version_complete;#define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8#define EVT_QOS_SETUP_COMPLETE 0x0Dtypedef struct { uint8_t status; uint16_t handle; uint8_t flags; /* Reserved */ hci_qos qos;} __attribute__ ((packed)) evt_qos_setup_complete;#define EVT_QOS_SETUP_COMPLETE_SIZE (4 + HCI_QOS_CP_SIZE)#define EVT_CMD_COMPLETE 0x0Etypedef struct { uint8_t ncmd; uint16_t opcode;} __attribute__ ((packed)) evt_cmd_complete;#define EVT_CMD_COMPLETE_SIZE 3#define EVT_CMD_STATUS 0x0Ftypedef struct { uint8_t status; uint8_t ncmd; uint16_t opcode;} __attribute__ ((packed)) evt_cmd_status;#define EVT_CMD_STATUS_SIZE 4#define EVT_HARDWARE_ERROR 0x10typedef struct { uint8_t code;} __attribute__ ((packed)) evt_hardware_error;#define EVT_HARDWARE_ERROR_SIZE 1#define EVT_FLUSH_OCCURRED 0x11typedef struct { uint16_t handle;} __attribute__ ((packed)) evt_flush_occured;#define EVT_FLUSH_OCCURRED_SIZE 2#define EVT_ROLE_CHANGE 0x12typedef struct { uint8_t status; bdaddr_t bdaddr; uint8_t role;} __attribute__ ((packed)) evt_role_change;#define EVT_ROLE_CHANGE_SIZE 8#define EVT_NUM_COMP_PKTS 0x13typedef struct { uint8_t num_hndl; /* variable length part */} __attribute__ ((packed)) evt_num_comp_pkts;#define EVT_NUM_COMP_PKTS_SIZE 1#define EVT_MODE_CHANGE 0x14typedef struct { uint8_t status; uint16_t handle; uint8_t mode; uint16_t interval;} __attribute__ ((packed)) evt_mode_change;#define EVT_MODE_CHANGE_SIZE 6#define EVT_RETURN_LINK_KEYS 0x15typedef struct { uint8_t num_keys; /* variable length part */} __attribute__ ((packed)) evt_return_link_keys;#define EVT_RETURN_LINK_KEYS_SIZE 1#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; uint8_t link_key[16]; uint8_t key_type;} __attribute__ ((packed)) evt_link_key_notify;#define EVT_LINK_KEY_NOTIFY_SIZE 23#define EVT_LOOPBACK_COMMAND 0x19#define EVT_DATA_BUFFER_OVERFLOW 0x1Atypedef struct { uint8_t link_type;} __attribute__ ((packed)) evt_data_buffer_overflow;#define EVT_DATA_BUFFER_OVERFLOW_SIZE 1#define EVT_MAX_SLOTS_CHANGE 0x1Btypedef struct { uint16_t handle; uint8_t max_slots;} __attribute__ ((packed)) evt_max_slots_change;#define EVT_MAX_SLOTS_CHANGE_SIZE 3#define EVT_READ_CLOCK_OFFSET_COMPLETE 0x1Ctypedef struct { uint8_t status; uint16_t handle; uint16_t clock_offset;} __attribute__ ((packed)) evt_read_clock_offset_complete;#define EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE 5#define EVT_CONN_PTYPE_CHANGED 0x1Dtypedef struct { uint8_t status; uint16_t handle; uint16_t ptype;} __attribute__ ((packed)) evt_conn_ptype_changed;#define EVT_CONN_PTYPE_CHANGED_SIZE 5#define EVT_QOS_VIOLATION 0x1Etypedef struct { uint16_t handle;} __attribute__ ((packed)) evt_qos_violation;#define EVT_QOS_VIOLATION_SIZE 2#define EVT_PSCAN_REP_MODE_CHANGE 0x20typedef struct { bdaddr_t bdaddr; uint8_t pscan_rep_mode;} __attribute__ ((packed)) evt_pscan_rep_mode_change;#define EVT_PSCAN_REP_MODE_CHANGE_SIZE 7#define EVT_FLOW_SPEC_COMPLETE 0x21typedef struct { uint8_t status; uint16_t handle; uint8_t flags; uint8_t direction; hci_qos qos;} __attribute__ ((packed)) evt_flow_spec_complete;#define EVT_FLOW_SPEC_COMPLETE_SIZE (5 + HCI_QOS_CP_SIZE)#define EVT_INQUIRY_RESULT_WITH_RSSI 0x22typedef struct { bdaddr_t bdaddr; uint8_t pscan_rep_mode; uint8_t pscan_period_mode; uint8_t dev_class[3]; uint16_t clock_offset; int8_t rssi;} __attribute__ ((packed)) inquiry_info_with_rssi;#define INQUIRY_INFO_WITH_RSSI_SIZE 14typedef struct { bdaddr_t bdaddr; uint8_t pscan_rep_mode; uint8_t pscan_period_mode; uint8_t pscan_mode; uint8_t dev_class[3]; uint16_t clock_offset; int8_t rssi;} __attribute__ ((packed)) inquiry_info_with_rssi_and_pscan_mode;#define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE 15#define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE 0x23typedef struct { uint8_t status; uint16_t handle; uint8_t page_num; uint8_t max_page_num; uint8_t features[8];} __attribute__ ((packed)) evt_read_remote_ext_features_complete;#define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE 13#define EVT_SYNC_CONN_COMPLETE 0x2Ctypedef struct { uint8_t status; uint16_t handle; bdaddr_t bdaddr; uint8_t link_type; uint8_t trans_interval; uint8_t retrans_window; uint16_t rx_pkt_len; uint16_t tx_pkt_len; uint8_t air_mode;} __attribute__ ((packed)) evt_sync_conn_complete;#define EVT_SYNC_CONN_COMPLETE_SIZE 17#define EVT_SYNC_CONN_CHANGED 0x2Dtypedef struct { uint8_t status; uint16_t handle; uint8_t trans_interval; uint8_t retrans_window; uint16_t rx_pkt_len; uint16_t tx_pkt_len;} __attribute__ ((packed)) evt_sync_conn_changed;#define EVT_SYNC_CONN_CHANGED_SIZE 9#define EVT_TESTING 0xFE#define EVT_VENDOR 0xFF/* Internal events generated by BlueZ stack */#define EVT_STACK_INTERNAL 0xFDtypedef struct { uint16_t type; uint8_t data[0];} __attribute__ ((packed)) evt_stack_internal;#define EVT_STACK_INTERNAL_SIZE 2#define EVT_SI_DEVICE 0x01typedef struct { uint16_t event; uint16_t dev_id;} __attribute__ ((packed)) evt_si_device;#define EVT_SI_DEVICE_SIZE 4#define EVT_SI_SECURITY 0x02typedef struct { uint16_t event; uint16_t proto; uint16_t subproto; uint8_t incoming;} __attribute__ ((packed)) evt_si_security;/* -------- HCI Packet structures -------- */#define HCI_TYPE_LEN 1typedef struct { uint16_t opcode; /* OCF & OGF */ uint8_t plen;} __attribute__ ((packed)) hci_command_hdr;#define HCI_COMMAND_HDR_SIZE 3typedef struct { uint8_t evt; uint8_t plen;} __attribute__ ((packed)) hci_event_hdr;#define HCI_EVENT_HDR_SIZE 2typedef struct { uint16_t handle; /* Handle & Flags(PB, BC) */ uint16_t dlen;} __attribute__ ((packed)) hci_acl_hdr;#define HCI_ACL_HDR_SIZE 4typedef struct { uint16_t handle; uint8_t dlen;} __attribute__ ((packed)) hci_sco_hdr;#define HCI_SCO_HDR_SIZE 3/* Command opcode pack/unpack */#define cmd_opcode_pack(ogf, ocf) (uint16_t)((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) (uint16_t)((h & 0x0fff)|(f << 12))#define acl_handle(h) (h & 0x0fff)#define acl_flags(h) (h >> 12)#endif /* _NO_HCI_DEFS *//* 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 { uint32_t type_mask; uint32_t event_mask[2]; uint16_t 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/* Ioctl requests structures */struct hci_dev_stats { uint32_t err_rx; uint32_t err_tx; uint32_t cmd_tx; uint32_t evt_rx; uint32_t acl_tx; uint32_t acl_rx; uint32_t sco_tx; uint32_t sco_rx; uint32_t byte_rx; uint32_t byte_tx;};struct hci_dev_info { uint16_t dev_id; char name[8]; bdaddr_t bdaddr; uint32_t flags; uint8_t type; uint8_t features[8]; uint32_t pkt_type; uint32_t link_policy; uint32_t link_mode; uint16_t acl_mtu; uint16_t acl_pkts; uint16_t sco_mtu; uint16_t sco_pkts; struct hci_dev_stats stat;};struct hci_conn_info { uint16_t handle; bdaddr_t bdaddr; uint8_t type; uint8_t out; uint16_t state; uint32_t link_mode;};struct hci_dev_req { uint16_t dev_id; uint32_t dev_opt;};struct hci_dev_list_req { uint16_t dev_num; struct hci_dev_req dev_req[0]; /* hci_dev_req structures */};struct hci_conn_list_req { uint16_t dev_id; uint16_t conn_num; struct hci_conn_info conn_info[0];};struct hci_conn_info_req { bdaddr_t bdaddr; uint8_t type; struct hci_conn_info conn_info[0];};struct hci_inquiry_req { uint16_t dev_id; uint16_t flags; uint8_t lap[3]; uint8_t length; uint8_t num_rsp;};#define IREQ_CACHE_FLUSH 0x0001struct hci_remotename_req { uint16_t dev_id; uint16_t flags; bdaddr_t bdaddr; uint8_t name[248];};#ifdef __cplusplus}#endif#endif /* __HCI_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -