📄 hci.h
字号:
/* * * BlueZ - Bluetooth protocol stack for Linux * * Copyright (C) 2000-2001 Qualcomm Incorporated * Copyright (C) 2002-2003 Maxim Krasnyansky <maxk@qualcomm.com> * Copyright (C) 2002-2008 Marcel Holtmann <marcel@holtmann.org> * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * */#ifndef __HCI_H#define __HCI_H#ifdef __cplusplusextern "C" {#endif#include <sys/socket.h>#define HCI_MAX_DEV 16#define HCI_MAX_ACL_SIZE 1024#define HCI_MAX_SCO_SIZE 255#define HCI_MAX_EVENT_SIZE 260#define HCI_MAX_FRAME_SIZE (HCI_MAX_ACL_SIZE + 4)/* HCI dev events */#define HCI_DEV_REG 1#define HCI_DEV_UNREG 2#define HCI_DEV_UP 3#define HCI_DEV_DOWN 4#define HCI_DEV_SUSPEND 5#define HCI_DEV_RESUME 6/* HCI device types */#define HCI_VIRTUAL 0#define HCI_USB 1#define HCI_PCCARD 2#define HCI_UART 3#define HCI_RS232 4#define HCI_PCI 5#define HCI_SDIO 6/* HCI device flags */enum { HCI_UP, HCI_INIT, HCI_RUNNING, HCI_PSCAN, HCI_ISCAN, HCI_AUTH, HCI_ENCRYPT, HCI_INQUIRY, HCI_RAW,};/* HCI ioctl defines */#define HCIDEVUP _IOW('H', 201, int)#define HCIDEVDOWN _IOW('H', 202, int)#define HCIDEVRESET _IOW('H', 203, int)#define HCIDEVRESTAT _IOW('H', 204, int)#define HCIGETDEVLIST _IOR('H', 210, int)#define HCIGETDEVINFO _IOR('H', 211, int)#define HCIGETCONNLIST _IOR('H', 212, int)#define HCIGETCONNINFO _IOR('H', 213, int)#define HCIGETAUTHINFO _IOR('H', 215, int)#define HCISETRAW _IOW('H', 220, int)#define HCISETSCAN _IOW('H', 221, int)#define HCISETAUTH _IOW('H', 222, int)#define HCISETENCRYPT _IOW('H', 223, int)#define HCISETPTYPE _IOW('H', 224, int)#define HCISETLINKPOL _IOW('H', 225, int)#define HCISETLINKMODE _IOW('H', 226, int)#define HCISETACLMTU _IOW('H', 227, int)#define HCISETSCOMTU _IOW('H', 228, int)#define HCIINQUIRY _IOR('H', 240, int)#ifndef __NO_HCI_DEFS/* HCI Packet types */#define HCI_COMMAND_PKT 0x01#define HCI_ACLDATA_PKT 0x02#define HCI_SCODATA_PKT 0x03#define HCI_EVENT_PKT 0x04#define HCI_VENDOR_PKT 0xff/* HCI Packet types */#define HCI_2DH1 0x0002#define HCI_3DH1 0x0004#define HCI_DM1 0x0008#define HCI_DH1 0x0010#define HCI_2DH3 0x0100#define HCI_3DH3 0x0200#define HCI_DM3 0x0400#define HCI_DH3 0x0800#define HCI_2DH5 0x1000#define HCI_3DH5 0x2000#define HCI_DM5 0x4000#define HCI_DH5 0x8000#define HCI_HV1 0x0020#define HCI_HV2 0x0040#define HCI_HV3 0x0080#define HCI_EV3 0x0008#define HCI_EV4 0x0010#define HCI_EV5 0x0020#define HCI_2EV3 0x0040#define HCI_3EV3 0x0080#define HCI_2EV5 0x0100#define HCI_3EV5 0x0200#define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3)#define ACL_PTYPE_MASK (HCI_DM1 | HCI_DH1 | HCI_DM3 | HCI_DH3 | HCI_DM5 | HCI_DH5)/* HCI Error codes */#define HCI_UNKNOWN_COMMAND 0x01#define HCI_NO_CONNECTION 0x02#define HCI_HARDWARE_FAILURE 0x03#define HCI_PAGE_TIMEOUT 0x04#define HCI_AUTHENTICATION_FAILURE 0x05#define HCI_PIN_OR_KEY_MISSING 0x06#define HCI_MEMORY_FULL 0x07#define HCI_CONNECTION_TIMEOUT 0x08#define HCI_MAX_NUMBER_OF_CONNECTIONS 0x09#define HCI_MAX_NUMBER_OF_SCO_CONNECTIONS 0x0a#define HCI_ACL_CONNECTION_EXISTS 0x0b#define HCI_COMMAND_DISALLOWED 0x0c#define HCI_REJECTED_LIMITED_RESOURCES 0x0d#define HCI_REJECTED_SECURITY 0x0e#define HCI_REJECTED_PERSONAL 0x0f#define HCI_HOST_TIMEOUT 0x10#define HCI_UNSUPPORTED_FEATURE 0x11#define HCI_INVALID_PARAMETERS 0x12#define HCI_OE_USER_ENDED_CONNECTION 0x13#define HCI_OE_LOW_RESOURCES 0x14#define HCI_OE_POWER_OFF 0x15#define HCI_CONNECTION_TERMINATED 0x16#define HCI_REPEATED_ATTEMPTS 0x17#define HCI_PAIRING_NOT_ALLOWED 0x18#define HCI_UNKNOWN_LMP_PDU 0x19#define HCI_UNSUPPORTED_REMOTE_FEATURE 0x1a#define HCI_SCO_OFFSET_REJECTED 0x1b#define HCI_SCO_INTERVAL_REJECTED 0x1c#define HCI_AIR_MODE_REJECTED 0x1d#define HCI_INVALID_LMP_PARAMETERS 0x1e#define HCI_UNSPECIFIED_ERROR 0x1f#define HCI_UNSUPPORTED_LMP_PARAMETER_VALUE 0x20#define HCI_ROLE_CHANGE_NOT_ALLOWED 0x21#define HCI_LMP_RESPONSE_TIMEOUT 0x22#define HCI_LMP_ERROR_TRANSACTION_COLLISION 0x23#define HCI_LMP_PDU_NOT_ALLOWED 0x24#define HCI_ENCRYPTION_MODE_NOT_ACCEPTED 0x25#define HCI_UNIT_LINK_KEY_USED 0x26#define HCI_QOS_NOT_SUPPORTED 0x27#define HCI_INSTANT_PASSED 0x28#define HCI_PAIRING_NOT_SUPPORTED 0x29#define HCI_TRANSACTION_COLLISION 0x2a#define HCI_QOS_UNACCEPTABLE_PARAMETER 0x2c#define HCI_QOS_REJECTED 0x2d#define HCI_CLASSIFICATION_NOT_SUPPORTED 0x2e#define HCI_INSUFFICIENT_SECURITY 0x2f#define HCI_PARAMETER_OUT_OF_RANGE 0x30#define HCI_ROLE_SWITCH_PENDING 0x32#define HCI_SLOT_VIOLATION 0x34#define HCI_ROLE_SWITCH_FAILED 0x35#define HCI_EIR_TOO_LARGE 0x36#define HCI_SIMPLE_PAIRING_NOT_SUPPORTED 0x37#define HCI_HOST_BUSY_PAIRING 0x38/* ACL flags */#define ACL_CONT 0x01#define ACL_START 0x02#define ACL_ACTIVE_BCAST 0x04#define ACL_PICO_BCAST 0x08/* Baseband links */#define SCO_LINK 0x00#define ACL_LINK 0x01#define ESCO_LINK 0x02/* LMP features */#define LMP_3SLOT 0x01#define LMP_5SLOT 0x02#define LMP_ENCRYPT 0x04#define LMP_SOFFSET 0x08#define LMP_TACCURACY 0x10#define LMP_RSWITCH 0x20#define LMP_HOLD 0x40#define LMP_SNIFF 0x80#define LMP_PARK 0x01#define LMP_RSSI 0x02#define LMP_QUALITY 0x04#define LMP_SCO 0x08#define LMP_HV2 0x10#define LMP_HV3 0x20#define LMP_ULAW 0x40#define LMP_ALAW 0x80#define LMP_CVSD 0x01#define LMP_PSCHEME 0x02#define LMP_PCONTROL 0x04#define LMP_TRSP_SCO 0x08#define LMP_BCAST_ENC 0x80#define LMP_EDR_ACL_2M 0x02#define LMP_EDR_ACL_3M 0x04#define LMP_ENH_ISCAN 0x08#define LMP_ILACE_ISCAN 0x10#define LMP_ILACE_PSCAN 0x20#define LMP_RSSI_INQ 0x40#define LMP_ESCO 0x80#define LMP_EV4 0x01#define LMP_EV5 0x02#define LMP_AFH_CAP_SLV 0x08#define LMP_AFH_CLS_SLV 0x10#define LMP_EDR_3SLOT 0x80#define LMP_EDR_5SLOT 0x01#define LMP_SNIFF_SUBR 0x02#define LMP_PAUSE_ENC 0x04#define LMP_AFH_CAP_MST 0x08#define LMP_AFH_CLS_MST 0x10#define LMP_EDR_ESCO_2M 0x20#define LMP_EDR_ESCO_3M 0x40#define LMP_EDR_3S_ESCO 0x80#define LMP_EXT_INQ 0x01#define LMP_SIMPLE_PAIR 0x08#define LMP_ENCAPS_PDU 0x10#define LMP_ERR_DAT_REP 0x20#define LMP_NFLUSH_PKTS 0x40#define LMP_LSTO 0x01#define LMP_INQ_TX_PWR 0x02#define LMP_EXT_FEAT 0x80/* Link policies */#define HCI_LP_RSWITCH 0x0001#define HCI_LP_HOLD 0x0002#define HCI_LP_SNIFF 0x0004#define HCI_LP_PARK 0x0008/* Link mode */#define HCI_LM_ACCEPT 0x8000#define HCI_LM_MASTER 0x0001#define HCI_LM_AUTH 0x0002#define HCI_LM_ENCRYPT 0x0004#define HCI_LM_TRUSTED 0x0008#define HCI_LM_RELIABLE 0x0010#define HCI_LM_SECURE 0x0020/* ----- HCI Commands ----- *//* Link Control */#define OGF_LINK_CTL 0x01#define OCF_INQUIRY 0x0001typedef struct { uint8_t lap[3]; uint8_t length; /* 1.28s units */ uint8_t num_rsp;} __attribute__ ((packed)) inquiry_cp;#define INQUIRY_CP_SIZE 5typedef struct { uint8_t status; bdaddr_t bdaddr;} __attribute__ ((packed)) status_bdaddr_rp;#define STATUS_BDADDR_RP_SIZE 7#define OCF_INQUIRY_CANCEL 0x0002#define OCF_PERIODIC_INQUIRY 0x0003typedef struct { uint16_t max_period; /* 1.28s units */ uint16_t min_period; /* 1.28s units */ uint8_t lap[3]; uint8_t length; /* 1.28s units */ uint8_t num_rsp;} __attribute__ ((packed)) periodic_inquiry_cp;#define PERIODIC_INQUIRY_CP_SIZE 9#define OCF_EXIT_PERIODIC_INQUIRY 0x0004#define OCF_CREATE_CONN 0x0005typedef struct { bdaddr_t bdaddr; uint16_t pkt_type; uint8_t pscan_rep_mode; uint8_t pscan_mode; uint16_t clock_offset; uint8_t role_switch;} __attribute__ ((packed)) create_conn_cp;#define CREATE_CONN_CP_SIZE 13#define OCF_DISCONNECT 0x0006typedef struct { uint16_t handle; uint8_t reason;} __attribute__ ((packed)) disconnect_cp;#define DISCONNECT_CP_SIZE 3#define OCF_ADD_SCO 0x0007typedef struct { uint16_t handle; uint16_t pkt_type;} __attribute__ ((packed)) add_sco_cp;#define ADD_SCO_CP_SIZE 4#define OCF_CREATE_CONN_CANCEL 0x0008typedef struct { bdaddr_t bdaddr;} __attribute__ ((packed)) create_conn_cancel_cp;#define CREATE_CONN_CANCEL_CP_SIZE 6#define OCF_ACCEPT_CONN_REQ 0x0009typedef struct { bdaddr_t bdaddr; uint8_t role;} __attribute__ ((packed)) accept_conn_req_cp;#define ACCEPT_CONN_REQ_CP_SIZE 7#define OCF_REJECT_CONN_REQ 0x000Atypedef struct { bdaddr_t bdaddr; uint8_t reason;} __attribute__ ((packed)) reject_conn_req_cp;#define REJECT_CONN_REQ_CP_SIZE 7#define OCF_LINK_KEY_REPLY 0x000Btypedef struct { bdaddr_t bdaddr; uint8_t link_key[16];} __attribute__ ((packed)) link_key_reply_cp;#define LINK_KEY_REPLY_CP_SIZE 22#define OCF_LINK_KEY_NEG_REPLY 0x000C#define OCF_PIN_CODE_REPLY 0x000Dtypedef struct { bdaddr_t bdaddr; uint8_t pin_len; uint8_t pin_code[16];} __attribute__ ((packed)) pin_code_reply_cp;#define PIN_CODE_REPLY_CP_SIZE 23#define OCF_PIN_CODE_NEG_REPLY 0x000E#define OCF_SET_CONN_PTYPE 0x000Ftypedef struct { uint16_t handle; uint16_t pkt_type;} __attribute__ ((packed)) set_conn_ptype_cp;#define SET_CONN_PTYPE_CP_SIZE 4#define OCF_AUTH_REQUESTED 0x0011typedef struct { uint16_t handle;} __attribute__ ((packed)) auth_requested_cp;#define AUTH_REQUESTED_CP_SIZE 2#define OCF_SET_CONN_ENCRYPT 0x0013typedef struct { uint16_t handle; uint8_t encrypt;} __attribute__ ((packed)) set_conn_encrypt_cp;#define SET_CONN_ENCRYPT_CP_SIZE 3#define OCF_CHANGE_CONN_LINK_KEY 0x0015typedef struct { uint16_t handle;} __attribute__ ((packed)) change_conn_link_key_cp;#define CHANGE_CONN_LINK_KEY_CP_SIZE 2#define OCF_MASTER_LINK_KEY 0x0017typedef struct { uint8_t key_flag;} __attribute__ ((packed)) master_link_key_cp;#define MASTER_LINK_KEY_CP_SIZE 1#define OCF_REMOTE_NAME_REQ 0x0019typedef struct { bdaddr_t bdaddr; uint8_t pscan_rep_mode; uint8_t pscan_mode; uint16_t clock_offset;} __attribute__ ((packed)) remote_name_req_cp;#define REMOTE_NAME_REQ_CP_SIZE 10#define OCF_REMOTE_NAME_REQ_CANCEL 0x001Atypedef struct { bdaddr_t bdaddr;} __attribute__ ((packed)) remote_name_req_cancel_cp;#define REMOTE_NAME_REQ_CANCEL_CP_SIZE 6#define OCF_READ_REMOTE_FEATURES 0x001Btypedef struct { uint16_t handle;} __attribute__ ((packed)) read_remote_features_cp;#define READ_REMOTE_FEATURES_CP_SIZE 2#define OCF_READ_REMOTE_EXT_FEATURES 0x001Ctypedef struct { uint16_t handle; uint8_t page_num;} __attribute__ ((packed)) read_remote_ext_features_cp;#define READ_REMOTE_EXT_FEATURES_CP_SIZE 3#define OCF_READ_REMOTE_VERSION 0x001Dtypedef struct { uint16_t handle;} __attribute__ ((packed)) read_remote_version_cp;#define READ_REMOTE_VERSION_CP_SIZE 2#define OCF_READ_CLOCK_OFFSET 0x001Ftypedef struct { uint16_t handle;} __attribute__ ((packed)) read_clock_offset_cp;#define READ_CLOCK_OFFSET_CP_SIZE 2#define OCF_READ_LMP_HANDLE 0x0020#define OCF_SETUP_SYNC_CONN 0x0028typedef struct { uint16_t handle; uint32_t tx_bandwith; uint32_t rx_bandwith; uint16_t max_latency; uint16_t voice_setting; uint8_t retrans_effort; uint16_t pkt_type;} __attribute__ ((packed)) setup_sync_conn_cp;#define SETUP_SYNC_CONN_CP_SIZE 17
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -