📄 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-2005 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.71 2005/06/17 11:48:17 holtmann Exp $ */#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_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_SECMGR};/* 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 HCISETSECMGR _IOW('H', 230, 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_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/* 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#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#define OCF_ACCEPT_SYNC_CONN_REQ 0x0029typedef struct { bdaddr_t bdaddr; 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)) accept_sync_conn_req_cp;#define ACCEPT_SYNC_CONN_REQ_CP_SIZE 21#define OCF_REJECT_SYNC_CONN_REQ 0x002Atypedef struct { bdaddr_t bdaddr; uint8_t reason;} __attribute__ ((packed)) reject_sync_conn_req_cp;#define REJECT_SYNC_CONN_REQ_CP_SIZE 7/* 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -