📄 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-2004 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 version 2 as * published by the Free Software Foundation; * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS * SOFTWARE IS DISCLAIMED. * * * $Id: hci.h,v 1.37 2004/07/10 11:28:03 holtmann Exp $ */#ifndef __HCI_H#define __HCI_H#ifdef __cplusplusextern "C" {#endif#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_VHCI 0#define HCI_USB 1#define HCI_PCCARD 2#define HCI_UART 3#define HCI_RS232 4#define HCI_PCI 5/* 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 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)/* HCI timeouts */#define HCI_CONN_TIMEOUT (HZ * 40)#define HCI_DISCONN_TIMEOUT (HZ * 2)#define HCI_CONN_IDLE_TIMEOUT (HZ * 60)#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_UNKNOWN_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 (~SCO_PTYPE_MASK)/* 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_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/* 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/* 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_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_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/* ----- 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_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_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_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_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/* Link Policy */#define OGF_LINK_POLICY 0x02#define OCF_HOLD_MODE 0x0001typedef struct { uint16_t handle; uint16_t max_interval; uint16_t min_interval;} __attribute__ ((packed)) hold_mode_cp;#define HOLD_MODE_CP_SIZE 6#define OCF_SNIFF_MODE 0x0003typedef struct { uint16_t handle; uint16_t max_interval; uint16_t min_interval; uint16_t attempt; uint16_t timeout;} __attribute__ ((packed)) sniff_mode_cp;#define SNIFF_MODE_CP_SIZE 10#define OCF_EXIT_SNIFF_MODE 0x0004typedef struct { uint16_t handle;} __attribute__ ((packed)) exit_sniff_mode_cp;#define EXIT_SNIFF_MODE_CP_SIZE 2#define OCF_PARK_MODE 0x0005typedef struct { uint16_t handle; uint16_t max_interval; uint16_t min_interval;} __attribute__ ((packed)) park_mode_cp;#define PARK_MODE_CP_SIZE 6#define OCF_EXIT_PARK_MODE 0x0006typedef struct { uint16_t handle;} __attribute__ ((packed)) exit_park_mode_cp;#define EXIT_PARK_MODE_CP_SIZE 2#define OCF_QOS_SETUP 0x0007typedef struct { uint8_t service_type; /* 1 = best effort */ uint32_t token_rate; /* Byte per seconds */ uint32_t peak_bandwidth; /* Byte per seconds */ uint32_t latency; /* Microseconds */ uint32_t delay_variation; /* Microseconds */} __attribute__ ((packed)) hci_qos;#define HCI_QOS_CP_SIZE 17typedef struct { uint16_t handle; uint8_t flags; /* Reserved */ hci_qos qos;} __attribute__ ((packed)) qos_setup_cp;#define QOS_SETUP_CP_SIZE (3 + HCI_QOS_CP_SIZE)#define OCF_ROLE_DISCOVERY 0x0009typedef struct { uint16_t handle;} __attribute__ ((packed)) role_discovery_cp;#define ROLE_DISCOVERY_CP_SIZE 2typedef struct { uint8_t status; uint16_t handle; uint8_t role;} __attribute__ ((packed)) role_discovery_rp;#define ROLE_DISCOVERY_RP_SIZE 4#define OCF_SWITCH_ROLE 0x000Btypedef struct { bdaddr_t bdaddr; uint8_t role;} __attribute__ ((packed)) switch_role_cp;#define SWITCH_ROLE_CP_SIZE 7#define OCF_READ_LINK_POLICY 0x000Ctypedef struct { uint16_t handle;} __attribute__ ((packed)) read_link_policy_cp;#define READ_LINK_POLICY_CP_SIZE 2typedef struct { uint8_t status; uint16_t handle; uint16_t policy;} __attribute__ ((packed)) read_link_policy_rp;#define READ_LINK_POLICY_RP_SIZE 5#define OCF_WRITE_LINK_POLICY 0x000Dtypedef struct { uint16_t handle; uint16_t policy;} __attribute__ ((packed)) write_link_policy_cp;#define WRITE_LINK_POLICY_CP_SIZE 4typedef struct { uint8_t status; uint16_t handle;} __attribute__ ((packed)) write_link_policy_rp;#define WRITE_LINK_POLICY_RP_SIZE 3/* Host Controller and Baseband */#define OGF_HOST_CTL 0x03#define OCF_RESET 0x0003#define OCF_SET_EVENT_FLT 0x0005typedef struct { uint8_t flt_type; uint8_t cond_type; uint8_t condition[0];} __attribute__ ((packed)) set_event_flt_cp;#define SET_EVENT_FLT_CP_SIZE 2/* Filter types */#define FLT_CLEAR_ALL 0x00#define FLT_INQ_RESULT 0x01#define FLT_CONN_SETUP 0x02/* CONN_SETUP Condition types */#define CONN_SETUP_ALLOW_ALL 0x00#define CONN_SETUP_ALLOW_CLASS 0x01#define CONN_SETUP_ALLOW_BDADDR 0x02/* CONN_SETUP Conditions */#define CONN_SETUP_AUTO_OFF 0x01#define CONN_SETUP_AUTO_ON 0x02#define OCF_CHANGE_LOCAL_NAME 0x0013typedef struct { uint8_t name[248];} __attribute__ ((packed)) change_local_name_cp;#define CHANGE_LOCAL_NAME_CP_SIZE 248 #define OCF_READ_LOCAL_NAME 0x0014typedef struct { uint8_t status; uint8_t name[248];} __attribute__ ((packed)) read_local_name_rp;#define READ_LOCAL_NAME_RP_SIZE 249 #define OCF_WRITE_CA_TIMEOUT 0x0016#define OCF_WRITE_PG_TIMEOUT 0x0018#define OCF_READ_PAGE_TIMEOUT 0x0017typedef struct { uint8_t status; uint16_t timeout;} __attribute__ ((packed)) read_page_timeout_rp;#define READ_PAGE_TIMEOUT_RP_SIZE 3#define OCF_WRITE_PAGE_TIMEOUT 0x0018typedef struct { uint16_t timeout;} __attribute__ ((packed)) write_page_timeout_cp;#define WRITE_PAGE_TIMEOUT_CP_SIZE 2#define OCF_WRITE_SCAN_ENABLE 0x001A #define SCAN_DISABLED 0x00 #define SCAN_INQUIRY 0x01 #define SCAN_PAGE 0x02#define OCF_READ_PAGE_ACTIVITY 0x001Btypedef struct { uint8_t status; uint16_t interval; uint16_t window;} __attribute__ ((packed)) read_page_activity_rp;#define READ_PAGE_ACTIVITY_RP_SIZE 5#define OCF_WRITE_PAGE_ACTIVITY 0x001Ctypedef struct { uint16_t interval; uint16_t window;} __attribute__ ((packed)) write_page_activity_cp;#define WRITE_PAGE_ACTIVITY_CP_SIZE 4#define OCF_READ_INQ_ACTIVITY 0x001Dtypedef struct { uint8_t status; uint16_t interval; uint16_t window;} __attribute__ ((packed)) read_inq_activity_rp;#define READ_INQ_ACTIVITY_RP_SIZE 5#define OCF_WRITE_INQ_ACTIVITY 0x001Etypedef struct { uint16_t interval;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -