Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Path: blob/next/external/cache/sources/hcitools/lib/bluetooth/hci.h
Views: 3960
/*1*2* BlueZ - Bluetooth protocol stack for Linux3*4* Copyright (C) 2000-2001 Qualcomm Incorporated5* Copyright (C) 2002-2003 Maxim Krasnyansky <[email protected]>6* Copyright (C) 2002-2010 Marcel Holtmann <[email protected]>7*8*9* This program is free software; you can redistribute it and/or modify10* it under the terms of the GNU General Public License as published by11* the Free Software Foundation; either version 2 of the License, or12* (at your option) any later version.13*14* This program is distributed in the hope that it will be useful,15* but WITHOUT ANY WARRANTY; without even the implied warranty of16* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the17* GNU General Public License for more details.18*19* You should have received a copy of the GNU General Public License20* along with this program; if not, write to the Free Software21* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA22*23*/2425#ifndef __HCI_H26#define __HCI_H2728#ifdef __cplusplus29extern "C" {30#endif3132#include <sys/socket.h>3334#define HCI_MAX_DEV 163536#define HCI_MAX_ACL_SIZE (1492 + 4)37#define HCI_MAX_SCO_SIZE 25538#define HCI_MAX_EVENT_SIZE 26039#define HCI_MAX_FRAME_SIZE (HCI_MAX_ACL_SIZE + 4)4041/* HCI dev events */42#define HCI_DEV_REG 143#define HCI_DEV_UNREG 244#define HCI_DEV_UP 345#define HCI_DEV_DOWN 446#define HCI_DEV_SUSPEND 547#define HCI_DEV_RESUME 64849/* HCI bus types */50#define HCI_VIRTUAL 051#define HCI_USB 152#define HCI_PCCARD 253#define HCI_UART 354#define HCI_RS232 455#define HCI_PCI 556#define HCI_SDIO 65758/* HCI controller types */59#define HCI_BREDR 0x0060#define HCI_AMP 0x016162/* HCI device flags */63enum {64HCI_UP,65HCI_INIT,66HCI_RUNNING,6768HCI_PSCAN,69HCI_ISCAN,70HCI_AUTH,71HCI_ENCRYPT,72HCI_INQUIRY,7374HCI_RAW,75};7677/* LE address type */78enum {79LE_PUBLIC_ADDRESS = 0x00,80LE_RANDOM_ADDRESS = 0x0181};8283/* HCI ioctl defines */84#define HCIDEVUP _IOW('H', 201, int)85#define HCIDEVDOWN _IOW('H', 202, int)86#define HCIDEVRESET _IOW('H', 203, int)87#define HCIDEVRESTAT _IOW('H', 204, int)8889#define HCIGETDEVLIST _IOR('H', 210, int)90#define HCIGETDEVINFO _IOR('H', 211, int)91#define HCIGETCONNLIST _IOR('H', 212, int)92#define HCIGETCONNINFO _IOR('H', 213, int)93#define HCIGETAUTHINFO _IOR('H', 215, int)9495#define HCISETRAW _IOW('H', 220, int)96#define HCISETSCAN _IOW('H', 221, int)97#define HCISETAUTH _IOW('H', 222, int)98#define HCISETENCRYPT _IOW('H', 223, int)99#define HCISETPTYPE _IOW('H', 224, int)100#define HCISETLINKPOL _IOW('H', 225, int)101#define HCISETLINKMODE _IOW('H', 226, int)102#define HCISETACLMTU _IOW('H', 227, int)103#define HCISETSCOMTU _IOW('H', 228, int)104105#define HCIBLOCKADDR _IOW('H', 230, int)106#define HCIUNBLOCKADDR _IOW('H', 231, int)107108#define HCIINQUIRY _IOR('H', 240, int)109110#ifndef __NO_HCI_DEFS111112/* HCI Packet types */113#define HCI_COMMAND_PKT 0x01114#define HCI_ACLDATA_PKT 0x02115#define HCI_SCODATA_PKT 0x03116#define HCI_EVENT_PKT 0x04117#define HCI_VENDOR_PKT 0xff118119/* HCI Packet types */120#define HCI_2DH1 0x0002121#define HCI_3DH1 0x0004122#define HCI_DM1 0x0008123#define HCI_DH1 0x0010124#define HCI_2DH3 0x0100125#define HCI_3DH3 0x0200126#define HCI_DM3 0x0400127#define HCI_DH3 0x0800128#define HCI_2DH5 0x1000129#define HCI_3DH5 0x2000130#define HCI_DM5 0x4000131#define HCI_DH5 0x8000132133#define HCI_HV1 0x0020134#define HCI_HV2 0x0040135#define HCI_HV3 0x0080136137#define HCI_EV3 0x0008138#define HCI_EV4 0x0010139#define HCI_EV5 0x0020140#define HCI_2EV3 0x0040141#define HCI_3EV3 0x0080142#define HCI_2EV5 0x0100143#define HCI_3EV5 0x0200144145#define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3)146#define ACL_PTYPE_MASK (HCI_DM1 | HCI_DH1 | HCI_DM3 | HCI_DH3 | HCI_DM5 | HCI_DH5)147148/* HCI Error codes */149#define HCI_UNKNOWN_COMMAND 0x01150#define HCI_NO_CONNECTION 0x02151#define HCI_HARDWARE_FAILURE 0x03152#define HCI_PAGE_TIMEOUT 0x04153#define HCI_AUTHENTICATION_FAILURE 0x05154#define HCI_PIN_OR_KEY_MISSING 0x06155#define HCI_MEMORY_FULL 0x07156#define HCI_CONNECTION_TIMEOUT 0x08157#define HCI_MAX_NUMBER_OF_CONNECTIONS 0x09158#define HCI_MAX_NUMBER_OF_SCO_CONNECTIONS 0x0a159#define HCI_ACL_CONNECTION_EXISTS 0x0b160#define HCI_COMMAND_DISALLOWED 0x0c161#define HCI_REJECTED_LIMITED_RESOURCES 0x0d162#define HCI_REJECTED_SECURITY 0x0e163#define HCI_REJECTED_PERSONAL 0x0f164#define HCI_HOST_TIMEOUT 0x10165#define HCI_UNSUPPORTED_FEATURE 0x11166#define HCI_INVALID_PARAMETERS 0x12167#define HCI_OE_USER_ENDED_CONNECTION 0x13168#define HCI_OE_LOW_RESOURCES 0x14169#define HCI_OE_POWER_OFF 0x15170#define HCI_CONNECTION_TERMINATED 0x16171#define HCI_REPEATED_ATTEMPTS 0x17172#define HCI_PAIRING_NOT_ALLOWED 0x18173#define HCI_UNKNOWN_LMP_PDU 0x19174#define HCI_UNSUPPORTED_REMOTE_FEATURE 0x1a175#define HCI_SCO_OFFSET_REJECTED 0x1b176#define HCI_SCO_INTERVAL_REJECTED 0x1c177#define HCI_AIR_MODE_REJECTED 0x1d178#define HCI_INVALID_LMP_PARAMETERS 0x1e179#define HCI_UNSPECIFIED_ERROR 0x1f180#define HCI_UNSUPPORTED_LMP_PARAMETER_VALUE 0x20181#define HCI_ROLE_CHANGE_NOT_ALLOWED 0x21182#define HCI_LMP_RESPONSE_TIMEOUT 0x22183#define HCI_LMP_ERROR_TRANSACTION_COLLISION 0x23184#define HCI_LMP_PDU_NOT_ALLOWED 0x24185#define HCI_ENCRYPTION_MODE_NOT_ACCEPTED 0x25186#define HCI_UNIT_LINK_KEY_USED 0x26187#define HCI_QOS_NOT_SUPPORTED 0x27188#define HCI_INSTANT_PASSED 0x28189#define HCI_PAIRING_NOT_SUPPORTED 0x29190#define HCI_TRANSACTION_COLLISION 0x2a191#define HCI_QOS_UNACCEPTABLE_PARAMETER 0x2c192#define HCI_QOS_REJECTED 0x2d193#define HCI_CLASSIFICATION_NOT_SUPPORTED 0x2e194#define HCI_INSUFFICIENT_SECURITY 0x2f195#define HCI_PARAMETER_OUT_OF_RANGE 0x30196#define HCI_ROLE_SWITCH_PENDING 0x32197#define HCI_SLOT_VIOLATION 0x34198#define HCI_ROLE_SWITCH_FAILED 0x35199#define HCI_EIR_TOO_LARGE 0x36200#define HCI_SIMPLE_PAIRING_NOT_SUPPORTED 0x37201#define HCI_HOST_BUSY_PAIRING 0x38202203/* ACL flags */204#define ACL_START_NO_FLUSH 0x00205#define ACL_CONT 0x01206#define ACL_START 0x02207#define ACL_ACTIVE_BCAST 0x04208#define ACL_PICO_BCAST 0x08209210/* Baseband links */211#define SCO_LINK 0x00212#define ACL_LINK 0x01213#define ESCO_LINK 0x02214215/* LMP features */216#define LMP_3SLOT 0x01217#define LMP_5SLOT 0x02218#define LMP_ENCRYPT 0x04219#define LMP_SOFFSET 0x08220#define LMP_TACCURACY 0x10221#define LMP_RSWITCH 0x20222#define LMP_HOLD 0x40223#define LMP_SNIFF 0x80224225#define LMP_PARK 0x01226#define LMP_RSSI 0x02227#define LMP_QUALITY 0x04228#define LMP_SCO 0x08229#define LMP_HV2 0x10230#define LMP_HV3 0x20231#define LMP_ULAW 0x40232#define LMP_ALAW 0x80233234#define LMP_CVSD 0x01235#define LMP_PSCHEME 0x02236#define LMP_PCONTROL 0x04237#define LMP_TRSP_SCO 0x08238#define LMP_BCAST_ENC 0x80239240#define LMP_EDR_ACL_2M 0x02241#define LMP_EDR_ACL_3M 0x04242#define LMP_ENH_ISCAN 0x08243#define LMP_ILACE_ISCAN 0x10244#define LMP_ILACE_PSCAN 0x20245#define LMP_RSSI_INQ 0x40246#define LMP_ESCO 0x80247248#define LMP_EV4 0x01249#define LMP_EV5 0x02250#define LMP_AFH_CAP_SLV 0x08251#define LMP_AFH_CLS_SLV 0x10252#define LMP_NO_BREDR 0x20253#define LMP_LE 0x40254#define LMP_EDR_3SLOT 0x80255256#define LMP_EDR_5SLOT 0x01257#define LMP_SNIFF_SUBR 0x02258#define LMP_PAUSE_ENC 0x04259#define LMP_AFH_CAP_MST 0x08260#define LMP_AFH_CLS_MST 0x10261#define LMP_EDR_ESCO_2M 0x20262#define LMP_EDR_ESCO_3M 0x40263#define LMP_EDR_3S_ESCO 0x80264265#define LMP_EXT_INQ 0x01266#define LMP_LE_BREDR 0x02267#define LMP_SIMPLE_PAIR 0x08268#define LMP_ENCAPS_PDU 0x10269#define LMP_ERR_DAT_REP 0x20270#define LMP_NFLUSH_PKTS 0x40271272#define LMP_LSTO 0x01273#define LMP_INQ_TX_PWR 0x02274#define LMP_EPC 0x04275#define LMP_EXT_FEAT 0x80276277/* Extended LMP features */278#define LMP_HOST_SSP 0x01279#define LMP_HOST_LE 0x02280#define LMP_HOST_LE_BREDR 0x04281282/* Link policies */283#define HCI_LP_RSWITCH 0x0001284#define HCI_LP_HOLD 0x0002285#define HCI_LP_SNIFF 0x0004286#define HCI_LP_PARK 0x0008287288/* Link mode */289#define HCI_LM_ACCEPT 0x8000290#define HCI_LM_MASTER 0x0001291#define HCI_LM_AUTH 0x0002292#define HCI_LM_ENCRYPT 0x0004293#define HCI_LM_TRUSTED 0x0008294#define HCI_LM_RELIABLE 0x0010295#define HCI_LM_SECURE 0x0020296297/* Link Key types */298#define HCI_LK_COMBINATION 0x00299#define HCI_LK_LOCAL_UNIT 0x01300#define HCI_LK_REMOTE_UNIT 0x02301#define HCI_LK_DEBUG_COMBINATION 0x03302#define HCI_LK_UNAUTH_COMBINATION 0x04303#define HCI_LK_AUTH_COMBINATION 0x05304#define HCI_LK_CHANGED_COMBINATION 0x06305#define HCI_LK_INVALID 0xFF306307/* ----- HCI Commands ----- */308309/* Link Control */310#define OGF_LINK_CTL 0x01311312#define OCF_INQUIRY 0x0001313typedef struct {314uint8_t lap[3];315uint8_t length; /* 1.28s units */316uint8_t num_rsp;317} __attribute__ ((packed)) inquiry_cp;318#define INQUIRY_CP_SIZE 5319320typedef struct {321uint8_t status;322bdaddr_t bdaddr;323} __attribute__ ((packed)) status_bdaddr_rp;324#define STATUS_BDADDR_RP_SIZE 7325326#define OCF_INQUIRY_CANCEL 0x0002327328#define OCF_PERIODIC_INQUIRY 0x0003329typedef struct {330uint16_t max_period; /* 1.28s units */331uint16_t min_period; /* 1.28s units */332uint8_t lap[3];333uint8_t length; /* 1.28s units */334uint8_t num_rsp;335} __attribute__ ((packed)) periodic_inquiry_cp;336#define PERIODIC_INQUIRY_CP_SIZE 9337338#define OCF_EXIT_PERIODIC_INQUIRY 0x0004339340#define OCF_CREATE_CONN 0x0005341typedef struct {342bdaddr_t bdaddr;343uint16_t pkt_type;344uint8_t pscan_rep_mode;345uint8_t pscan_mode;346uint16_t clock_offset;347uint8_t role_switch;348} __attribute__ ((packed)) create_conn_cp;349#define CREATE_CONN_CP_SIZE 13350351#define OCF_DISCONNECT 0x0006352typedef struct {353uint16_t handle;354uint8_t reason;355} __attribute__ ((packed)) disconnect_cp;356#define DISCONNECT_CP_SIZE 3357358#define OCF_ADD_SCO 0x0007359typedef struct {360uint16_t handle;361uint16_t pkt_type;362} __attribute__ ((packed)) add_sco_cp;363#define ADD_SCO_CP_SIZE 4364365#define OCF_CREATE_CONN_CANCEL 0x0008366typedef struct {367bdaddr_t bdaddr;368} __attribute__ ((packed)) create_conn_cancel_cp;369#define CREATE_CONN_CANCEL_CP_SIZE 6370371#define OCF_ACCEPT_CONN_REQ 0x0009372typedef struct {373bdaddr_t bdaddr;374uint8_t role;375} __attribute__ ((packed)) accept_conn_req_cp;376#define ACCEPT_CONN_REQ_CP_SIZE 7377378#define OCF_REJECT_CONN_REQ 0x000A379typedef struct {380bdaddr_t bdaddr;381uint8_t reason;382} __attribute__ ((packed)) reject_conn_req_cp;383#define REJECT_CONN_REQ_CP_SIZE 7384385#define OCF_LINK_KEY_REPLY 0x000B386typedef struct {387bdaddr_t bdaddr;388uint8_t link_key[16];389} __attribute__ ((packed)) link_key_reply_cp;390#define LINK_KEY_REPLY_CP_SIZE 22391392#define OCF_LINK_KEY_NEG_REPLY 0x000C393394#define OCF_PIN_CODE_REPLY 0x000D395typedef struct {396bdaddr_t bdaddr;397uint8_t pin_len;398uint8_t pin_code[16];399} __attribute__ ((packed)) pin_code_reply_cp;400#define PIN_CODE_REPLY_CP_SIZE 23401402#define OCF_PIN_CODE_NEG_REPLY 0x000E403404#define OCF_SET_CONN_PTYPE 0x000F405typedef struct {406uint16_t handle;407uint16_t pkt_type;408} __attribute__ ((packed)) set_conn_ptype_cp;409#define SET_CONN_PTYPE_CP_SIZE 4410411#define OCF_AUTH_REQUESTED 0x0011412typedef struct {413uint16_t handle;414} __attribute__ ((packed)) auth_requested_cp;415#define AUTH_REQUESTED_CP_SIZE 2416417#define OCF_SET_CONN_ENCRYPT 0x0013418typedef struct {419uint16_t handle;420uint8_t encrypt;421} __attribute__ ((packed)) set_conn_encrypt_cp;422#define SET_CONN_ENCRYPT_CP_SIZE 3423424#define OCF_CHANGE_CONN_LINK_KEY 0x0015425typedef struct {426uint16_t handle;427} __attribute__ ((packed)) change_conn_link_key_cp;428#define CHANGE_CONN_LINK_KEY_CP_SIZE 2429430#define OCF_MASTER_LINK_KEY 0x0017431typedef struct {432uint8_t key_flag;433} __attribute__ ((packed)) master_link_key_cp;434#define MASTER_LINK_KEY_CP_SIZE 1435436#define OCF_REMOTE_NAME_REQ 0x0019437typedef struct {438bdaddr_t bdaddr;439uint8_t pscan_rep_mode;440uint8_t pscan_mode;441uint16_t clock_offset;442} __attribute__ ((packed)) remote_name_req_cp;443#define REMOTE_NAME_REQ_CP_SIZE 10444445#define OCF_REMOTE_NAME_REQ_CANCEL 0x001A446typedef struct {447bdaddr_t bdaddr;448} __attribute__ ((packed)) remote_name_req_cancel_cp;449#define REMOTE_NAME_REQ_CANCEL_CP_SIZE 6450451#define OCF_READ_REMOTE_FEATURES 0x001B452typedef struct {453uint16_t handle;454} __attribute__ ((packed)) read_remote_features_cp;455#define READ_REMOTE_FEATURES_CP_SIZE 2456457#define OCF_READ_REMOTE_EXT_FEATURES 0x001C458typedef struct {459uint16_t handle;460uint8_t page_num;461} __attribute__ ((packed)) read_remote_ext_features_cp;462#define READ_REMOTE_EXT_FEATURES_CP_SIZE 3463464#define OCF_READ_REMOTE_VERSION 0x001D465typedef struct {466uint16_t handle;467} __attribute__ ((packed)) read_remote_version_cp;468#define READ_REMOTE_VERSION_CP_SIZE 2469470#define OCF_READ_CLOCK_OFFSET 0x001F471typedef struct {472uint16_t handle;473} __attribute__ ((packed)) read_clock_offset_cp;474#define READ_CLOCK_OFFSET_CP_SIZE 2475476#define OCF_READ_LMP_HANDLE 0x0020477478#define OCF_SETUP_SYNC_CONN 0x0028479typedef struct {480uint16_t handle;481uint32_t tx_bandwith;482uint32_t rx_bandwith;483uint16_t max_latency;484uint16_t voice_setting;485uint8_t retrans_effort;486uint16_t pkt_type;487} __attribute__ ((packed)) setup_sync_conn_cp;488#define SETUP_SYNC_CONN_CP_SIZE 17489490#define OCF_ACCEPT_SYNC_CONN_REQ 0x0029491typedef struct {492bdaddr_t bdaddr;493uint32_t tx_bandwith;494uint32_t rx_bandwith;495uint16_t max_latency;496uint16_t voice_setting;497uint8_t retrans_effort;498uint16_t pkt_type;499} __attribute__ ((packed)) accept_sync_conn_req_cp;500#define ACCEPT_SYNC_CONN_REQ_CP_SIZE 21501502#define OCF_REJECT_SYNC_CONN_REQ 0x002A503typedef struct {504bdaddr_t bdaddr;505uint8_t reason;506} __attribute__ ((packed)) reject_sync_conn_req_cp;507#define REJECT_SYNC_CONN_REQ_CP_SIZE 7508509#define OCF_IO_CAPABILITY_REPLY 0x002B510typedef struct {511bdaddr_t bdaddr;512uint8_t capability;513uint8_t oob_data;514uint8_t authentication;515} __attribute__ ((packed)) io_capability_reply_cp;516#define IO_CAPABILITY_REPLY_CP_SIZE 9517518#define OCF_USER_CONFIRM_REPLY 0x002C519typedef struct {520bdaddr_t bdaddr;521} __attribute__ ((packed)) user_confirm_reply_cp;522#define USER_CONFIRM_REPLY_CP_SIZE 6523524#define OCF_USER_CONFIRM_NEG_REPLY 0x002D525526#define OCF_USER_PASSKEY_REPLY 0x002E527typedef struct {528bdaddr_t bdaddr;529uint32_t passkey;530} __attribute__ ((packed)) user_passkey_reply_cp;531#define USER_PASSKEY_REPLY_CP_SIZE 10532533#define OCF_USER_PASSKEY_NEG_REPLY 0x002F534535#define OCF_REMOTE_OOB_DATA_REPLY 0x0030536typedef struct {537bdaddr_t bdaddr;538uint8_t hash[16];539uint8_t randomizer[16];540} __attribute__ ((packed)) remote_oob_data_reply_cp;541#define REMOTE_OOB_DATA_REPLY_CP_SIZE 38542543#define OCF_REMOTE_OOB_DATA_NEG_REPLY 0x0033544545#define OCF_IO_CAPABILITY_NEG_REPLY 0x0034546typedef struct {547bdaddr_t bdaddr;548uint8_t reason;549} __attribute__ ((packed)) io_capability_neg_reply_cp;550#define IO_CAPABILITY_NEG_REPLY_CP_SIZE 7551552#define OCF_CREATE_PHYSICAL_LINK 0x0035553typedef struct {554uint8_t handle;555uint8_t key_length;556uint8_t key_type;557uint8_t key[32];558} __attribute__ ((packed)) create_physical_link_cp;559#define CREATE_PHYSICAL_LINK_CP_SIZE 35560561#define OCF_ACCEPT_PHYSICAL_LINK 0x0036562typedef struct {563uint8_t handle;564uint8_t key_length;565uint8_t key_type;566uint8_t key[32];567} __attribute__ ((packed)) accept_physical_link_cp;568#define ACCEPT_PHYSICAL_LINK_CP_SIZE 35569570#define OCF_DISCONNECT_PHYSICAL_LINK 0x0037571typedef struct {572uint8_t handle;573uint8_t reason;574} __attribute__ ((packed)) disconnect_physical_link_cp;575#define DISCONNECT_PHYSICAL_LINK_CP_SIZE 2576577#define OCF_CREATE_LOGICAL_LINK 0x0038578typedef struct {579uint8_t handle;580uint8_t tx_flow[16];581uint8_t rx_flow[16];582} __attribute__ ((packed)) create_logical_link_cp;583#define CREATE_LOGICAL_LINK_CP_SIZE 33584585#define OCF_ACCEPT_LOGICAL_LINK 0x0039586587#define OCF_DISCONNECT_LOGICAL_LINK 0x003A588typedef struct {589uint16_t handle;590} __attribute__ ((packed)) disconnect_logical_link_cp;591#define DISCONNECT_LOGICAL_LINK_CP_SIZE 2592593#define OCF_LOGICAL_LINK_CANCEL 0x003B594typedef struct {595uint8_t handle;596uint8_t tx_flow_id;597} __attribute__ ((packed)) cancel_logical_link_cp;598#define LOGICAL_LINK_CANCEL_CP_SIZE 2599typedef struct {600uint8_t status;601uint8_t handle;602uint8_t tx_flow_id;603} __attribute__ ((packed)) cancel_logical_link_rp;604#define LOGICAL_LINK_CANCEL_RP_SIZE 3605606#define OCF_FLOW_SPEC_MODIFY 0x003C607608/* Link Policy */609#define OGF_LINK_POLICY 0x02610611#define OCF_HOLD_MODE 0x0001612typedef struct {613uint16_t handle;614uint16_t max_interval;615uint16_t min_interval;616} __attribute__ ((packed)) hold_mode_cp;617#define HOLD_MODE_CP_SIZE 6618619#define OCF_SNIFF_MODE 0x0003620typedef struct {621uint16_t handle;622uint16_t max_interval;623uint16_t min_interval;624uint16_t attempt;625uint16_t timeout;626} __attribute__ ((packed)) sniff_mode_cp;627#define SNIFF_MODE_CP_SIZE 10628629#define OCF_EXIT_SNIFF_MODE 0x0004630typedef struct {631uint16_t handle;632} __attribute__ ((packed)) exit_sniff_mode_cp;633#define EXIT_SNIFF_MODE_CP_SIZE 2634635#define OCF_PARK_MODE 0x0005636typedef struct {637uint16_t handle;638uint16_t max_interval;639uint16_t min_interval;640} __attribute__ ((packed)) park_mode_cp;641#define PARK_MODE_CP_SIZE 6642643#define OCF_EXIT_PARK_MODE 0x0006644typedef struct {645uint16_t handle;646} __attribute__ ((packed)) exit_park_mode_cp;647#define EXIT_PARK_MODE_CP_SIZE 2648649#define OCF_QOS_SETUP 0x0007650typedef struct {651uint8_t service_type; /* 1 = best effort */652uint32_t token_rate; /* Byte per seconds */653uint32_t peak_bandwidth; /* Byte per seconds */654uint32_t latency; /* Microseconds */655uint32_t delay_variation; /* Microseconds */656} __attribute__ ((packed)) hci_qos;657#define HCI_QOS_CP_SIZE 17658typedef struct {659uint16_t handle;660uint8_t flags; /* Reserved */661hci_qos qos;662} __attribute__ ((packed)) qos_setup_cp;663#define QOS_SETUP_CP_SIZE (3 + HCI_QOS_CP_SIZE)664665#define OCF_ROLE_DISCOVERY 0x0009666typedef struct {667uint16_t handle;668} __attribute__ ((packed)) role_discovery_cp;669#define ROLE_DISCOVERY_CP_SIZE 2670typedef struct {671uint8_t status;672uint16_t handle;673uint8_t role;674} __attribute__ ((packed)) role_discovery_rp;675#define ROLE_DISCOVERY_RP_SIZE 4676677#define OCF_SWITCH_ROLE 0x000B678typedef struct {679bdaddr_t bdaddr;680uint8_t role;681} __attribute__ ((packed)) switch_role_cp;682#define SWITCH_ROLE_CP_SIZE 7683684#define OCF_READ_LINK_POLICY 0x000C685typedef struct {686uint16_t handle;687} __attribute__ ((packed)) read_link_policy_cp;688#define READ_LINK_POLICY_CP_SIZE 2689typedef struct {690uint8_t status;691uint16_t handle;692uint16_t policy;693} __attribute__ ((packed)) read_link_policy_rp;694#define READ_LINK_POLICY_RP_SIZE 5695696#define OCF_WRITE_LINK_POLICY 0x000D697typedef struct {698uint16_t handle;699uint16_t policy;700} __attribute__ ((packed)) write_link_policy_cp;701#define WRITE_LINK_POLICY_CP_SIZE 4702typedef struct {703uint8_t status;704uint16_t handle;705} __attribute__ ((packed)) write_link_policy_rp;706#define WRITE_LINK_POLICY_RP_SIZE 3707708#define OCF_READ_DEFAULT_LINK_POLICY 0x000E709710#define OCF_WRITE_DEFAULT_LINK_POLICY 0x000F711712#define OCF_FLOW_SPECIFICATION 0x0010713714#define OCF_SNIFF_SUBRATING 0x0011715typedef struct {716uint16_t handle;717uint16_t max_latency;718uint16_t min_remote_timeout;719uint16_t min_local_timeout;720} __attribute__ ((packed)) sniff_subrating_cp;721#define SNIFF_SUBRATING_CP_SIZE 8722723/* Host Controller and Baseband */724#define OGF_HOST_CTL 0x03725726#define OCF_SET_EVENT_MASK 0x0001727typedef struct {728uint8_t mask[8];729} __attribute__ ((packed)) set_event_mask_cp;730#define SET_EVENT_MASK_CP_SIZE 8731732#define OCF_RESET 0x0003733734#define OCF_SET_EVENT_FLT 0x0005735typedef struct {736uint8_t flt_type;737uint8_t cond_type;738uint8_t condition[0];739} __attribute__ ((packed)) set_event_flt_cp;740#define SET_EVENT_FLT_CP_SIZE 2741742/* Filter types */743#define FLT_CLEAR_ALL 0x00744#define FLT_INQ_RESULT 0x01745#define FLT_CONN_SETUP 0x02746/* INQ_RESULT Condition types */747#define INQ_RESULT_RETURN_ALL 0x00748#define INQ_RESULT_RETURN_CLASS 0x01749#define INQ_RESULT_RETURN_BDADDR 0x02750/* CONN_SETUP Condition types */751#define CONN_SETUP_ALLOW_ALL 0x00752#define CONN_SETUP_ALLOW_CLASS 0x01753#define CONN_SETUP_ALLOW_BDADDR 0x02754/* CONN_SETUP Conditions */755#define CONN_SETUP_AUTO_OFF 0x01756#define CONN_SETUP_AUTO_ON 0x02757758#define OCF_FLUSH 0x0008759760#define OCF_READ_PIN_TYPE 0x0009761typedef struct {762uint8_t status;763uint8_t pin_type;764} __attribute__ ((packed)) read_pin_type_rp;765#define READ_PIN_TYPE_RP_SIZE 2766767#define OCF_WRITE_PIN_TYPE 0x000A768typedef struct {769uint8_t pin_type;770} __attribute__ ((packed)) write_pin_type_cp;771#define WRITE_PIN_TYPE_CP_SIZE 1772773#define OCF_CREATE_NEW_UNIT_KEY 0x000B774775#define OCF_READ_STORED_LINK_KEY 0x000D776typedef struct {777bdaddr_t bdaddr;778uint8_t read_all;779} __attribute__ ((packed)) read_stored_link_key_cp;780#define READ_STORED_LINK_KEY_CP_SIZE 7781typedef struct {782uint8_t status;783uint16_t max_keys;784uint16_t num_keys;785} __attribute__ ((packed)) read_stored_link_key_rp;786#define READ_STORED_LINK_KEY_RP_SIZE 5787788#define OCF_WRITE_STORED_LINK_KEY 0x0011789typedef struct {790uint8_t num_keys;791/* variable length part */792} __attribute__ ((packed)) write_stored_link_key_cp;793#define WRITE_STORED_LINK_KEY_CP_SIZE 1794typedef struct {795uint8_t status;796uint8_t num_keys;797} __attribute__ ((packed)) write_stored_link_key_rp;798#define READ_WRITE_LINK_KEY_RP_SIZE 2799800#define OCF_DELETE_STORED_LINK_KEY 0x0012801typedef struct {802bdaddr_t bdaddr;803uint8_t delete_all;804} __attribute__ ((packed)) delete_stored_link_key_cp;805#define DELETE_STORED_LINK_KEY_CP_SIZE 7806typedef struct {807uint8_t status;808uint16_t num_keys;809} __attribute__ ((packed)) delete_stored_link_key_rp;810#define DELETE_STORED_LINK_KEY_RP_SIZE 3811812#define HCI_MAX_NAME_LENGTH 248813814#define OCF_CHANGE_LOCAL_NAME 0x0013815typedef struct {816uint8_t name[HCI_MAX_NAME_LENGTH];817} __attribute__ ((packed)) change_local_name_cp;818#define CHANGE_LOCAL_NAME_CP_SIZE 248819820#define OCF_READ_LOCAL_NAME 0x0014821typedef struct {822uint8_t status;823uint8_t name[HCI_MAX_NAME_LENGTH];824} __attribute__ ((packed)) read_local_name_rp;825#define READ_LOCAL_NAME_RP_SIZE 249826827#define OCF_READ_CONN_ACCEPT_TIMEOUT 0x0015828typedef struct {829uint8_t status;830uint16_t timeout;831} __attribute__ ((packed)) read_conn_accept_timeout_rp;832#define READ_CONN_ACCEPT_TIMEOUT_RP_SIZE 3833834#define OCF_WRITE_CONN_ACCEPT_TIMEOUT 0x0016835typedef struct {836uint16_t timeout;837} __attribute__ ((packed)) write_conn_accept_timeout_cp;838#define WRITE_CONN_ACCEPT_TIMEOUT_CP_SIZE 2839840#define OCF_READ_PAGE_TIMEOUT 0x0017841typedef struct {842uint8_t status;843uint16_t timeout;844} __attribute__ ((packed)) read_page_timeout_rp;845#define READ_PAGE_TIMEOUT_RP_SIZE 3846847#define OCF_WRITE_PAGE_TIMEOUT 0x0018848typedef struct {849uint16_t timeout;850} __attribute__ ((packed)) write_page_timeout_cp;851#define WRITE_PAGE_TIMEOUT_CP_SIZE 2852853#define OCF_READ_SCAN_ENABLE 0x0019854typedef struct {855uint8_t status;856uint8_t enable;857} __attribute__ ((packed)) read_scan_enable_rp;858#define READ_SCAN_ENABLE_RP_SIZE 2859860#define OCF_WRITE_SCAN_ENABLE 0x001A861#define SCAN_DISABLED 0x00862#define SCAN_INQUIRY 0x01863#define SCAN_PAGE 0x02864865#define OCF_READ_PAGE_ACTIVITY 0x001B866typedef struct {867uint8_t status;868uint16_t interval;869uint16_t window;870} __attribute__ ((packed)) read_page_activity_rp;871#define READ_PAGE_ACTIVITY_RP_SIZE 5872873#define OCF_WRITE_PAGE_ACTIVITY 0x001C874typedef struct {875uint16_t interval;876uint16_t window;877} __attribute__ ((packed)) write_page_activity_cp;878#define WRITE_PAGE_ACTIVITY_CP_SIZE 4879880#define OCF_READ_INQ_ACTIVITY 0x001D881typedef struct {882uint8_t status;883uint16_t interval;884uint16_t window;885} __attribute__ ((packed)) read_inq_activity_rp;886#define READ_INQ_ACTIVITY_RP_SIZE 5887888#define OCF_WRITE_INQ_ACTIVITY 0x001E889typedef struct {890uint16_t interval;891uint16_t window;892} __attribute__ ((packed)) write_inq_activity_cp;893#define WRITE_INQ_ACTIVITY_CP_SIZE 4894895#define OCF_READ_AUTH_ENABLE 0x001F896897#define OCF_WRITE_AUTH_ENABLE 0x0020898#define AUTH_DISABLED 0x00899#define AUTH_ENABLED 0x01900901#define OCF_READ_ENCRYPT_MODE 0x0021902903#define OCF_WRITE_ENCRYPT_MODE 0x0022904#define ENCRYPT_DISABLED 0x00905#define ENCRYPT_P2P 0x01906#define ENCRYPT_BOTH 0x02907908#define OCF_READ_CLASS_OF_DEV 0x0023909typedef struct {910uint8_t status;911uint8_t dev_class[3];912} __attribute__ ((packed)) read_class_of_dev_rp;913#define READ_CLASS_OF_DEV_RP_SIZE 4914915#define OCF_WRITE_CLASS_OF_DEV 0x0024916typedef struct {917uint8_t dev_class[3];918} __attribute__ ((packed)) write_class_of_dev_cp;919#define WRITE_CLASS_OF_DEV_CP_SIZE 3920921#define OCF_READ_VOICE_SETTING 0x0025922typedef struct {923uint8_t status;924uint16_t voice_setting;925} __attribute__ ((packed)) read_voice_setting_rp;926#define READ_VOICE_SETTING_RP_SIZE 3927928#define OCF_WRITE_VOICE_SETTING 0x0026929typedef struct {930uint16_t voice_setting;931} __attribute__ ((packed)) write_voice_setting_cp;932#define WRITE_VOICE_SETTING_CP_SIZE 2933934#define OCF_READ_AUTOMATIC_FLUSH_TIMEOUT 0x0027935936#define OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT 0x0028937938#define OCF_READ_NUM_BROADCAST_RETRANS 0x0029939940#define OCF_WRITE_NUM_BROADCAST_RETRANS 0x002A941942#define OCF_READ_HOLD_MODE_ACTIVITY 0x002B943944#define OCF_WRITE_HOLD_MODE_ACTIVITY 0x002C945946#define OCF_READ_TRANSMIT_POWER_LEVEL 0x002D947typedef struct {948uint16_t handle;949uint8_t type;950} __attribute__ ((packed)) read_transmit_power_level_cp;951#define READ_TRANSMIT_POWER_LEVEL_CP_SIZE 3952typedef struct {953uint8_t status;954uint16_t handle;955int8_t level;956} __attribute__ ((packed)) read_transmit_power_level_rp;957#define READ_TRANSMIT_POWER_LEVEL_RP_SIZE 4958959#define OCF_READ_SYNC_FLOW_ENABLE 0x002E960961#define OCF_WRITE_SYNC_FLOW_ENABLE 0x002F962963#define OCF_SET_CONTROLLER_TO_HOST_FC 0x0031964965#define OCF_HOST_BUFFER_SIZE 0x0033966typedef struct {967uint16_t acl_mtu;968uint8_t sco_mtu;969uint16_t acl_max_pkt;970uint16_t sco_max_pkt;971} __attribute__ ((packed)) host_buffer_size_cp;972#define HOST_BUFFER_SIZE_CP_SIZE 7973974#define OCF_HOST_NUM_COMP_PKTS 0x0035975typedef struct {976uint8_t num_hndl;977/* variable length part */978} __attribute__ ((packed)) host_num_comp_pkts_cp;979#define HOST_NUM_COMP_PKTS_CP_SIZE 1980981#define OCF_READ_LINK_SUPERVISION_TIMEOUT 0x0036982typedef struct {983uint8_t status;984uint16_t handle;985uint16_t timeout;986} __attribute__ ((packed)) read_link_supervision_timeout_rp;987#define READ_LINK_SUPERVISION_TIMEOUT_RP_SIZE 5988989#define OCF_WRITE_LINK_SUPERVISION_TIMEOUT 0x0037990typedef struct {991uint16_t handle;992uint16_t timeout;993} __attribute__ ((packed)) write_link_supervision_timeout_cp;994#define WRITE_LINK_SUPERVISION_TIMEOUT_CP_SIZE 4995typedef struct {996uint8_t status;997uint16_t handle;998} __attribute__ ((packed)) write_link_supervision_timeout_rp;999#define WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE 310001001#define OCF_READ_NUM_SUPPORTED_IAC 0x003810021003#define MAX_IAC_LAP 0x401004#define OCF_READ_CURRENT_IAC_LAP 0x00391005typedef struct {1006uint8_t status;1007uint8_t num_current_iac;1008uint8_t lap[MAX_IAC_LAP][3];1009} __attribute__ ((packed)) read_current_iac_lap_rp;1010#define READ_CURRENT_IAC_LAP_RP_SIZE 2+3*MAX_IAC_LAP10111012#define OCF_WRITE_CURRENT_IAC_LAP 0x003A1013typedef struct {1014uint8_t num_current_iac;1015uint8_t lap[MAX_IAC_LAP][3];1016} __attribute__ ((packed)) write_current_iac_lap_cp;1017#define WRITE_CURRENT_IAC_LAP_CP_SIZE 1+3*MAX_IAC_LAP10181019#define OCF_READ_PAGE_SCAN_PERIOD_MODE 0x003B10201021#define OCF_WRITE_PAGE_SCAN_PERIOD_MODE 0x003C10221023#define OCF_READ_PAGE_SCAN_MODE 0x003D10241025#define OCF_WRITE_PAGE_SCAN_MODE 0x003E10261027#define OCF_SET_AFH_CLASSIFICATION 0x003F1028typedef struct {1029uint8_t map[10];1030} __attribute__ ((packed)) set_afh_classification_cp;1031#define SET_AFH_CLASSIFICATION_CP_SIZE 101032typedef struct {1033uint8_t status;1034} __attribute__ ((packed)) set_afh_classification_rp;1035#define SET_AFH_CLASSIFICATION_RP_SIZE 110361037#define OCF_READ_INQUIRY_SCAN_TYPE 0x00421038typedef struct {1039uint8_t status;1040uint8_t type;1041} __attribute__ ((packed)) read_inquiry_scan_type_rp;1042#define READ_INQUIRY_SCAN_TYPE_RP_SIZE 210431044#define OCF_WRITE_INQUIRY_SCAN_TYPE 0x00431045typedef struct {1046uint8_t type;1047} __attribute__ ((packed)) write_inquiry_scan_type_cp;1048#define WRITE_INQUIRY_SCAN_TYPE_CP_SIZE 11049typedef struct {1050uint8_t status;1051} __attribute__ ((packed)) write_inquiry_scan_type_rp;1052#define WRITE_INQUIRY_SCAN_TYPE_RP_SIZE 110531054#define OCF_READ_INQUIRY_MODE 0x00441055typedef struct {1056uint8_t status;1057uint8_t mode;1058} __attribute__ ((packed)) read_inquiry_mode_rp;1059#define READ_INQUIRY_MODE_RP_SIZE 210601061#define OCF_WRITE_INQUIRY_MODE 0x00451062typedef struct {1063uint8_t mode;1064} __attribute__ ((packed)) write_inquiry_mode_cp;1065#define WRITE_INQUIRY_MODE_CP_SIZE 11066typedef struct {1067uint8_t status;1068} __attribute__ ((packed)) write_inquiry_mode_rp;1069#define WRITE_INQUIRY_MODE_RP_SIZE 110701071#define OCF_READ_PAGE_SCAN_TYPE 0x004610721073#define OCF_WRITE_PAGE_SCAN_TYPE 0x00471074#define PAGE_SCAN_TYPE_STANDARD 0x001075#define PAGE_SCAN_TYPE_INTERLACED 0x0110761077#define OCF_READ_AFH_MODE 0x00481078typedef struct {1079uint8_t status;1080uint8_t mode;1081} __attribute__ ((packed)) read_afh_mode_rp;1082#define READ_AFH_MODE_RP_SIZE 210831084#define OCF_WRITE_AFH_MODE 0x00491085typedef struct {1086uint8_t mode;1087} __attribute__ ((packed)) write_afh_mode_cp;1088#define WRITE_AFH_MODE_CP_SIZE 11089typedef struct {1090uint8_t status;1091} __attribute__ ((packed)) write_afh_mode_rp;1092#define WRITE_AFH_MODE_RP_SIZE 110931094#define HCI_MAX_EIR_LENGTH 24010951096#define OCF_READ_EXT_INQUIRY_RESPONSE 0x00511097typedef struct {1098uint8_t status;1099uint8_t fec;1100uint8_t data[HCI_MAX_EIR_LENGTH];1101} __attribute__ ((packed)) read_ext_inquiry_response_rp;1102#define READ_EXT_INQUIRY_RESPONSE_RP_SIZE 24211031104#define OCF_WRITE_EXT_INQUIRY_RESPONSE 0x00521105typedef struct {1106uint8_t fec;1107uint8_t data[HCI_MAX_EIR_LENGTH];1108} __attribute__ ((packed)) write_ext_inquiry_response_cp;1109#define WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE 2411110typedef struct {1111uint8_t status;1112} __attribute__ ((packed)) write_ext_inquiry_response_rp;1113#define WRITE_EXT_INQUIRY_RESPONSE_RP_SIZE 111141115#define OCF_REFRESH_ENCRYPTION_KEY 0x00531116typedef struct {1117uint16_t handle;1118} __attribute__ ((packed)) refresh_encryption_key_cp;1119#define REFRESH_ENCRYPTION_KEY_CP_SIZE 21120typedef struct {1121uint8_t status;1122} __attribute__ ((packed)) refresh_encryption_key_rp;1123#define REFRESH_ENCRYPTION_KEY_RP_SIZE 111241125#define OCF_READ_SIMPLE_PAIRING_MODE 0x00551126typedef struct {1127uint8_t status;1128uint8_t mode;1129} __attribute__ ((packed)) read_simple_pairing_mode_rp;1130#define READ_SIMPLE_PAIRING_MODE_RP_SIZE 211311132#define OCF_WRITE_SIMPLE_PAIRING_MODE 0x00561133typedef struct {1134uint8_t mode;1135} __attribute__ ((packed)) write_simple_pairing_mode_cp;1136#define WRITE_SIMPLE_PAIRING_MODE_CP_SIZE 11137typedef struct {1138uint8_t status;1139} __attribute__ ((packed)) write_simple_pairing_mode_rp;1140#define WRITE_SIMPLE_PAIRING_MODE_RP_SIZE 111411142#define OCF_READ_LOCAL_OOB_DATA 0x00571143typedef struct {1144uint8_t status;1145uint8_t hash[16];1146uint8_t randomizer[16];1147} __attribute__ ((packed)) read_local_oob_data_rp;1148#define READ_LOCAL_OOB_DATA_RP_SIZE 3311491150#define OCF_READ_INQ_RESPONSE_TX_POWER_LEVEL 0x00581151typedef struct {1152uint8_t status;1153int8_t level;1154} __attribute__ ((packed)) read_inq_response_tx_power_level_rp;1155#define READ_INQ_RESPONSE_TX_POWER_LEVEL_RP_SIZE 211561157#define OCF_READ_INQUIRY_TRANSMIT_POWER_LEVEL 0x00581158typedef struct {1159uint8_t status;1160int8_t level;1161} __attribute__ ((packed)) read_inquiry_transmit_power_level_rp;1162#define READ_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE 211631164#define OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL 0x00591165typedef struct {1166int8_t level;1167} __attribute__ ((packed)) write_inquiry_transmit_power_level_cp;1168#define WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_CP_SIZE 11169typedef struct {1170uint8_t status;1171} __attribute__ ((packed)) write_inquiry_transmit_power_level_rp;1172#define WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE 111731174#define OCF_READ_DEFAULT_ERROR_DATA_REPORTING 0x005A1175typedef struct {1176uint8_t status;1177uint8_t reporting;1178} __attribute__ ((packed)) read_default_error_data_reporting_rp;1179#define READ_DEFAULT_ERROR_DATA_REPORTING_RP_SIZE 211801181#define OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING 0x005B1182typedef struct {1183uint8_t reporting;1184} __attribute__ ((packed)) write_default_error_data_reporting_cp;1185#define WRITE_DEFAULT_ERROR_DATA_REPORTING_CP_SIZE 11186typedef struct {1187uint8_t status;1188} __attribute__ ((packed)) write_default_error_data_reporting_rp;1189#define WRITE_DEFAULT_ERROR_DATA_REPORTING_RP_SIZE 111901191#define OCF_ENHANCED_FLUSH 0x005F1192typedef struct {1193uint16_t handle;1194uint8_t type;1195} __attribute__ ((packed)) enhanced_flush_cp;1196#define ENHANCED_FLUSH_CP_SIZE 311971198#define OCF_SEND_KEYPRESS_NOTIFY 0x00601199typedef struct {1200bdaddr_t bdaddr;1201uint8_t type;1202} __attribute__ ((packed)) send_keypress_notify_cp;1203#define SEND_KEYPRESS_NOTIFY_CP_SIZE 71204typedef struct {1205uint8_t status;1206} __attribute__ ((packed)) send_keypress_notify_rp;1207#define SEND_KEYPRESS_NOTIFY_RP_SIZE 112081209#define OCF_READ_LOGICAL_LINK_ACCEPT_TIMEOUT 0x00611210typedef struct {1211uint8_t status;1212uint16_t timeout;1213} __attribute__ ((packed)) read_log_link_accept_timeout_rp;1214#define READ_LOGICAL_LINK_ACCEPT_TIMEOUT_RP_SIZE 312151216#define OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT 0x00621217typedef struct {1218uint16_t timeout;1219} __attribute__ ((packed)) write_log_link_accept_timeout_cp;1220#define WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_CP_SIZE 212211222#define OCF_SET_EVENT_MASK_PAGE_2 0x006312231224#define OCF_READ_LOCATION_DATA 0x006412251226#define OCF_WRITE_LOCATION_DATA 0x006512271228#define OCF_READ_FLOW_CONTROL_MODE 0x006612291230#define OCF_WRITE_FLOW_CONTROL_MODE 0x006712311232#define OCF_READ_ENHANCED_TRANSMIT_POWER_LEVEL 0x00681233typedef struct {1234uint8_t status;1235uint16_t handle;1236int8_t level_gfsk;1237int8_t level_dqpsk;1238int8_t level_8dpsk;1239} __attribute__ ((packed)) read_enhanced_transmit_power_level_rp;1240#define READ_ENHANCED_TRANSMIT_POWER_LEVEL_RP_SIZE 612411242#define OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT 0x00691243typedef struct {1244uint8_t status;1245uint32_t timeout;1246} __attribute__ ((packed)) read_best_effort_flush_timeout_rp;1247#define READ_BEST_EFFORT_FLUSH_TIMEOUT_RP_SIZE 512481249#define OCF_WRITE_BEST_EFFORT_FLUSH_TIMEOUT 0x006A1250typedef struct {1251uint16_t handle;1252uint32_t timeout;1253} __attribute__ ((packed)) write_best_effort_flush_timeout_cp;1254#define WRITE_BEST_EFFORT_FLUSH_TIMEOUT_CP_SIZE 61255typedef struct {1256uint8_t status;1257} __attribute__ ((packed)) write_best_effort_flush_timeout_rp;1258#define WRITE_BEST_EFFORT_FLUSH_TIMEOUT_RP_SIZE 112591260#define OCF_READ_LE_HOST_SUPPORTED 0x006C1261typedef struct {1262uint8_t status;1263uint8_t le;1264uint8_t simul;1265} __attribute__ ((packed)) read_le_host_supported_rp;1266#define READ_LE_HOST_SUPPORTED_RP_SIZE 312671268#define OCF_WRITE_LE_HOST_SUPPORTED 0x006D1269typedef struct {1270uint8_t le;1271uint8_t simul;1272} __attribute__ ((packed)) write_le_host_supported_cp;1273#define WRITE_LE_HOST_SUPPORTED_CP_SIZE 212741275/* Informational Parameters */1276#define OGF_INFO_PARAM 0x0412771278#define OCF_READ_LOCAL_VERSION 0x00011279typedef struct {1280uint8_t status;1281uint8_t hci_ver;1282uint16_t hci_rev;1283uint8_t lmp_ver;1284uint16_t manufacturer;1285uint16_t lmp_subver;1286} __attribute__ ((packed)) read_local_version_rp;1287#define READ_LOCAL_VERSION_RP_SIZE 912881289#define OCF_READ_LOCAL_COMMANDS 0x00021290typedef struct {1291uint8_t status;1292uint8_t commands[64];1293} __attribute__ ((packed)) read_local_commands_rp;1294#define READ_LOCAL_COMMANDS_RP_SIZE 6512951296#define OCF_READ_LOCAL_FEATURES 0x00031297typedef struct {1298uint8_t status;1299uint8_t features[8];1300} __attribute__ ((packed)) read_local_features_rp;1301#define READ_LOCAL_FEATURES_RP_SIZE 913021303#define OCF_READ_LOCAL_EXT_FEATURES 0x00041304typedef struct {1305uint8_t page_num;1306} __attribute__ ((packed)) read_local_ext_features_cp;1307#define READ_LOCAL_EXT_FEATURES_CP_SIZE 11308typedef struct {1309uint8_t status;1310uint8_t page_num;1311uint8_t max_page_num;1312uint8_t features[8];1313} __attribute__ ((packed)) read_local_ext_features_rp;1314#define READ_LOCAL_EXT_FEATURES_RP_SIZE 1113151316#define OCF_READ_BUFFER_SIZE 0x00051317typedef struct {1318uint8_t status;1319uint16_t acl_mtu;1320uint8_t sco_mtu;1321uint16_t acl_max_pkt;1322uint16_t sco_max_pkt;1323} __attribute__ ((packed)) read_buffer_size_rp;1324#define READ_BUFFER_SIZE_RP_SIZE 813251326#define OCF_READ_COUNTRY_CODE 0x000713271328#define OCF_READ_BD_ADDR 0x00091329typedef struct {1330uint8_t status;1331bdaddr_t bdaddr;1332} __attribute__ ((packed)) read_bd_addr_rp;1333#define READ_BD_ADDR_RP_SIZE 713341335#define OCF_READ_DATA_BLOCK_SIZE 0x000A1336typedef struct {1337uint8_t status;1338uint16_t max_acl_len;1339uint16_t data_block_len;1340uint16_t num_blocks;1341} __attribute__ ((packed)) read_data_block_size_rp;13421343/* Status params */1344#define OGF_STATUS_PARAM 0x0513451346#define OCF_READ_FAILED_CONTACT_COUNTER 0x00011347typedef struct {1348uint8_t status;1349uint16_t handle;1350uint8_t counter;1351} __attribute__ ((packed)) read_failed_contact_counter_rp;1352#define READ_FAILED_CONTACT_COUNTER_RP_SIZE 413531354#define OCF_RESET_FAILED_CONTACT_COUNTER 0x00021355typedef struct {1356uint8_t status;1357uint16_t handle;1358} __attribute__ ((packed)) reset_failed_contact_counter_rp;1359#define RESET_FAILED_CONTACT_COUNTER_RP_SIZE 313601361#define OCF_READ_LINK_QUALITY 0x00031362typedef struct {1363uint8_t status;1364uint16_t handle;1365uint8_t link_quality;1366} __attribute__ ((packed)) read_link_quality_rp;1367#define READ_LINK_QUALITY_RP_SIZE 413681369#define OCF_READ_RSSI 0x00051370typedef struct {1371uint8_t status;1372uint16_t handle;1373int8_t rssi;1374} __attribute__ ((packed)) read_rssi_rp;1375#define READ_RSSI_RP_SIZE 413761377#define OCF_READ_AFH_MAP 0x00061378typedef struct {1379uint8_t status;1380uint16_t handle;1381uint8_t mode;1382uint8_t map[10];1383} __attribute__ ((packed)) read_afh_map_rp;1384#define READ_AFH_MAP_RP_SIZE 1413851386#define OCF_READ_CLOCK 0x00071387typedef struct {1388uint16_t handle;1389uint8_t which_clock;1390} __attribute__ ((packed)) read_clock_cp;1391#define READ_CLOCK_CP_SIZE 31392typedef struct {1393uint8_t status;1394uint16_t handle;1395uint32_t clock;1396uint16_t accuracy;1397} __attribute__ ((packed)) read_clock_rp;1398#define READ_CLOCK_RP_SIZE 913991400#define OCF_READ_LOCAL_AMP_INFO 0x00091401typedef struct {1402uint8_t status;1403uint8_t amp_status;1404uint32_t total_bandwidth;1405uint32_t max_guaranteed_bandwidth;1406uint32_t min_latency;1407uint32_t max_pdu_size;1408uint8_t controller_type;1409uint16_t pal_caps;1410uint16_t max_amp_assoc_length;1411uint32_t max_flush_timeout;1412uint32_t best_effort_flush_timeout;1413} __attribute__ ((packed)) read_local_amp_info_rp;1414#define READ_LOCAL_AMP_INFO_RP_SIZE 3114151416#define OCF_READ_LOCAL_AMP_ASSOC 0x000A1417typedef struct {1418uint8_t handle;1419uint16_t length_so_far;1420uint16_t assoc_length;1421} __attribute__ ((packed)) read_local_amp_assoc_cp;1422#define READ_LOCAL_AMP_ASSOC_CP_SIZE 51423typedef struct {1424uint8_t status;1425uint8_t handle;1426uint16_t length;1427uint8_t fragment[HCI_MAX_NAME_LENGTH];1428} __attribute__ ((packed)) read_local_amp_assoc_rp;1429#define READ_LOCAL_AMP_ASSOC_RP_SIZE 25214301431#define OCF_WRITE_REMOTE_AMP_ASSOC 0x000B1432typedef struct {1433uint8_t handle;1434uint16_t length_so_far;1435uint16_t remaining_length;1436uint8_t fragment[HCI_MAX_NAME_LENGTH];1437} __attribute__ ((packed)) write_remote_amp_assoc_cp;1438#define WRITE_REMOTE_AMP_ASSOC_CP_SIZE 2531439typedef struct {1440uint8_t status;1441uint8_t handle;1442} __attribute__ ((packed)) write_remote_amp_assoc_rp;1443#define WRITE_REMOTE_AMP_ASSOC_RP_SIZE 214441445/* Testing commands */1446#define OGF_TESTING_CMD 0x3e14471448#define OCF_READ_LOOPBACK_MODE 0x000114491450#define OCF_WRITE_LOOPBACK_MODE 0x000214511452#define OCF_ENABLE_DEVICE_UNDER_TEST_MODE 0x000314531454#define OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE 0x00041455typedef struct {1456uint8_t mode;1457} __attribute__ ((packed)) write_simple_pairing_debug_mode_cp;1458#define WRITE_SIMPLE_PAIRING_DEBUG_MODE_CP_SIZE 11459typedef struct {1460uint8_t status;1461} __attribute__ ((packed)) write_simple_pairing_debug_mode_rp;1462#define WRITE_SIMPLE_PAIRING_DEBUG_MODE_RP_SIZE 114631464/* LE commands */1465#define OGF_LE_CTL 0x0814661467#define OCF_LE_SET_EVENT_MASK 0x00011468typedef struct {1469uint8_t mask[8];1470} __attribute__ ((packed)) le_set_event_mask_cp;1471#define LE_SET_EVENT_MASK_CP_SIZE 814721473#define OCF_LE_READ_BUFFER_SIZE 0x00021474typedef struct {1475uint8_t status;1476uint16_t pkt_len;1477uint8_t max_pkt;1478} __attribute__ ((packed)) le_read_buffer_size_rp;1479#define LE_READ_BUFFER_SIZE_RP_SIZE 414801481#define OCF_LE_READ_LOCAL_SUPPORTED_FEATURES 0x00031482typedef struct {1483uint8_t status;1484uint8_t features[8];1485} __attribute__ ((packed)) le_read_local_supported_features_rp;1486#define LE_READ_LOCAL_SUPPORTED_FEATURES_RP_SIZE 914871488#define OCF_LE_SET_RANDOM_ADDRESS 0x00051489typedef struct {1490bdaddr_t bdaddr;1491} __attribute__ ((packed)) le_set_random_address_cp;1492#define LE_SET_RANDOM_ADDRESS_CP_SIZE 614931494#define OCF_LE_SET_ADVERTISING_PARAMETERS 0x00061495typedef struct {1496uint16_t min_interval;1497uint16_t max_interval;1498uint8_t advtype;1499uint8_t own_bdaddr_type;1500uint8_t direct_bdaddr_type;1501bdaddr_t direct_bdaddr;1502uint8_t chan_map;1503uint8_t filter;1504} __attribute__ ((packed)) le_set_advertising_parameters_cp;1505#define LE_SET_ADVERTISING_PARAMETERS_CP_SIZE 1515061507#define OCF_LE_READ_ADVERTISING_CHANNEL_TX_POWER 0x00071508typedef struct {1509uint8_t status;1510int8_t level;1511} __attribute__ ((packed)) le_read_advertising_channel_tx_power_rp;1512#define LE_READ_ADVERTISING_CHANNEL_TX_POWER_RP_SIZE 215131514#define OCF_LE_SET_ADVERTISING_DATA 0x00081515typedef struct {1516uint8_t length;1517uint8_t data[31];1518} __attribute__ ((packed)) le_set_advertising_data_cp;1519#define LE_SET_ADVERTISING_DATA_CP_SIZE 3215201521#define OCF_LE_SET_SCAN_RESPONSE_DATA 0x00091522typedef struct {1523uint8_t length;1524uint8_t data[31];1525} __attribute__ ((packed)) le_set_scan_response_data_cp;1526#define LE_SET_SCAN_RESPONSE_DATA_CP_SIZE 3215271528#define OCF_LE_SET_ADVERTISE_ENABLE 0x000A1529typedef struct {1530uint8_t enable;1531} __attribute__ ((packed)) le_set_advertise_enable_cp;1532#define LE_SET_ADVERTISE_ENABLE_CP_SIZE 115331534#define OCF_LE_SET_SCAN_PARAMETERS 0x000B1535typedef struct {1536uint8_t type;1537uint16_t interval;1538uint16_t window;1539uint8_t own_bdaddr_type;1540uint8_t filter;1541} __attribute__ ((packed)) le_set_scan_parameters_cp;1542#define LE_SET_SCAN_PARAMETERS_CP_SIZE 715431544#define OCF_LE_SET_SCAN_ENABLE 0x000C1545typedef struct {1546uint8_t enable;1547uint8_t filter_dup;1548} __attribute__ ((packed)) le_set_scan_enable_cp;1549#define LE_SET_SCAN_ENABLE_CP_SIZE 215501551#define OCF_LE_CREATE_CONN 0x000D1552typedef struct {1553uint16_t interval;1554uint16_t window;1555uint8_t initiator_filter;1556uint8_t peer_bdaddr_type;1557bdaddr_t peer_bdaddr;1558uint8_t own_bdaddr_type;1559uint16_t min_interval;1560uint16_t max_interval;1561uint16_t latency;1562uint16_t supervision_timeout;1563uint16_t min_ce_length;1564uint16_t max_ce_length;1565} __attribute__ ((packed)) le_create_connection_cp;1566#define LE_CREATE_CONN_CP_SIZE 2515671568#define OCF_LE_CREATE_CONN_CANCEL 0x000E15691570#define OCF_LE_READ_WHITE_LIST_SIZE 0x000F1571typedef struct {1572uint8_t status;1573uint8_t size;1574} __attribute__ ((packed)) le_read_white_list_size_rp;1575#define LE_READ_WHITE_LIST_SIZE_RP_SIZE 215761577#define OCF_LE_CLEAR_WHITE_LIST 0x001015781579#define OCF_LE_ADD_DEVICE_TO_WHITE_LIST 0x00111580typedef struct {1581uint8_t bdaddr_type;1582bdaddr_t bdaddr;1583} __attribute__ ((packed)) le_add_device_to_white_list_cp;1584#define LE_ADD_DEVICE_TO_WHITE_LIST_CP_SIZE 715851586#define OCF_LE_REMOVE_DEVICE_FROM_WHITE_LIST 0x00121587typedef struct {1588uint8_t bdaddr_type;1589bdaddr_t bdaddr;1590} __attribute__ ((packed)) le_remove_device_from_white_list_cp;1591#define LE_REMOVE_DEVICE_FROM_WHITE_LIST_CP_SIZE 715921593#define OCF_LE_CONN_UPDATE 0x00131594typedef struct {1595uint16_t handle;1596uint16_t min_interval;1597uint16_t max_interval;1598uint16_t latency;1599uint16_t supervision_timeout;1600uint16_t min_ce_length;1601uint16_t max_ce_length;1602} __attribute__ ((packed)) le_connection_update_cp;1603#define LE_CONN_UPDATE_CP_SIZE 1416041605#define OCF_LE_SET_HOST_CHANNEL_CLASSIFICATION 0x00141606typedef struct {1607uint8_t map[5];1608} __attribute__ ((packed)) le_set_host_channel_classification_cp;1609#define LE_SET_HOST_CHANNEL_CLASSIFICATION_CP_SIZE 516101611#define OCF_LE_READ_CHANNEL_MAP 0x00151612typedef struct {1613uint16_t handle;1614} __attribute__ ((packed)) le_read_channel_map_cp;1615#define LE_READ_CHANNEL_MAP_CP_SIZE 21616typedef struct {1617uint8_t status;1618uint16_t handle;1619uint8_t map[5];1620} __attribute__ ((packed)) le_read_channel_map_rp;1621#define LE_READ_CHANNEL_MAP_RP_SIZE 816221623#define OCF_LE_READ_REMOTE_USED_FEATURES 0x00161624typedef struct {1625uint16_t handle;1626} __attribute__ ((packed)) le_read_remote_used_features_cp;1627#define LE_READ_REMOTE_USED_FEATURES_CP_SIZE 216281629#define OCF_LE_ENCRYPT 0x00171630typedef struct {1631uint8_t key[16];1632uint8_t plaintext[16];1633} __attribute__ ((packed)) le_encrypt_cp;1634#define LE_ENCRYPT_CP_SIZE 321635typedef struct {1636uint8_t status;1637uint8_t data[16];1638} __attribute__ ((packed)) le_encrypt_rp;1639#define LE_ENCRYPT_RP_SIZE 1716401641#define OCF_LE_RAND 0x00181642typedef struct {1643uint8_t status;1644uint64_t random;1645} __attribute__ ((packed)) le_rand_rp;1646#define LE_RAND_RP_SIZE 916471648#define OCF_LE_START_ENCRYPTION 0x00191649typedef struct {1650uint16_t handle;1651uint64_t random;1652uint16_t diversifier;1653uint8_t key[16];1654} __attribute__ ((packed)) le_start_encryption_cp;1655#define LE_START_ENCRYPTION_CP_SIZE 2816561657#define OCF_LE_LTK_REPLY 0x001A1658typedef struct {1659uint16_t handle;1660uint8_t key[16];1661} __attribute__ ((packed)) le_ltk_reply_cp;1662#define LE_LTK_REPLY_CP_SIZE 181663typedef struct {1664uint8_t status;1665uint16_t handle;1666} __attribute__ ((packed)) le_ltk_reply_rp;1667#define LE_LTK_REPLY_RP_SIZE 316681669#define OCF_LE_LTK_NEG_REPLY 0x001B1670typedef struct {1671uint16_t handle;1672} __attribute__ ((packed)) le_ltk_neg_reply_cp;1673#define LE_LTK_NEG_REPLY_CP_SIZE 21674typedef struct {1675uint8_t status;1676uint16_t handle;1677} __attribute__ ((packed)) le_ltk_neg_reply_rp;1678#define LE_LTK_NEG_REPLY_RP_SIZE 316791680#define OCF_LE_READ_SUPPORTED_STATES 0x001C1681typedef struct {1682uint8_t status;1683uint64_t states;1684} __attribute__ ((packed)) le_read_supported_states_rp;1685#define LE_READ_SUPPORTED_STATES_RP_SIZE 916861687#define OCF_LE_RECEIVER_TEST 0x001D1688typedef struct {1689uint8_t frequency;1690} __attribute__ ((packed)) le_receiver_test_cp;1691#define LE_RECEIVER_TEST_CP_SIZE 116921693#define OCF_LE_TRANSMITTER_TEST 0x001E1694typedef struct {1695uint8_t frequency;1696uint8_t length;1697uint8_t payload;1698} __attribute__ ((packed)) le_transmitter_test_cp;1699#define LE_TRANSMITTER_TEST_CP_SIZE 317001701#define OCF_LE_TEST_END 0x001F1702typedef struct {1703uint8_t status;1704uint16_t num_pkts;1705} __attribute__ ((packed)) le_test_end_rp;1706#define LE_TEST_END_RP_SIZE 317071708/* Vendor specific commands */1709#define OGF_VENDOR_CMD 0x3f17101711/* ---- HCI Events ---- */17121713#define EVT_INQUIRY_COMPLETE 0x0117141715#define EVT_INQUIRY_RESULT 0x021716typedef struct {1717bdaddr_t bdaddr;1718uint8_t pscan_rep_mode;1719uint8_t pscan_period_mode;1720uint8_t pscan_mode;1721uint8_t dev_class[3];1722uint16_t clock_offset;1723} __attribute__ ((packed)) inquiry_info;1724#define INQUIRY_INFO_SIZE 1417251726#define EVT_CONN_COMPLETE 0x031727typedef struct {1728uint8_t status;1729uint16_t handle;1730bdaddr_t bdaddr;1731uint8_t link_type;1732uint8_t encr_mode;1733} __attribute__ ((packed)) evt_conn_complete;1734#define EVT_CONN_COMPLETE_SIZE 1117351736#define EVT_CONN_REQUEST 0x041737typedef struct {1738bdaddr_t bdaddr;1739uint8_t dev_class[3];1740uint8_t link_type;1741} __attribute__ ((packed)) evt_conn_request;1742#define EVT_CONN_REQUEST_SIZE 1017431744#define EVT_DISCONN_COMPLETE 0x051745typedef struct {1746uint8_t status;1747uint16_t handle;1748uint8_t reason;1749} __attribute__ ((packed)) evt_disconn_complete;1750#define EVT_DISCONN_COMPLETE_SIZE 417511752#define EVT_AUTH_COMPLETE 0x061753typedef struct {1754uint8_t status;1755uint16_t handle;1756} __attribute__ ((packed)) evt_auth_complete;1757#define EVT_AUTH_COMPLETE_SIZE 317581759#define EVT_REMOTE_NAME_REQ_COMPLETE 0x071760typedef struct {1761uint8_t status;1762bdaddr_t bdaddr;1763uint8_t name[HCI_MAX_NAME_LENGTH];1764} __attribute__ ((packed)) evt_remote_name_req_complete;1765#define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 25517661767#define EVT_ENCRYPT_CHANGE 0x081768typedef struct {1769uint8_t status;1770uint16_t handle;1771uint8_t encrypt;1772} __attribute__ ((packed)) evt_encrypt_change;1773#define EVT_ENCRYPT_CHANGE_SIZE 417741775#define EVT_CHANGE_CONN_LINK_KEY_COMPLETE 0x091776typedef struct {1777uint8_t status;1778uint16_t handle;1779} __attribute__ ((packed)) evt_change_conn_link_key_complete;1780#define EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE 317811782#define EVT_MASTER_LINK_KEY_COMPLETE 0x0A1783typedef struct {1784uint8_t status;1785uint16_t handle;1786uint8_t key_flag;1787} __attribute__ ((packed)) evt_master_link_key_complete;1788#define EVT_MASTER_LINK_KEY_COMPLETE_SIZE 417891790#define EVT_READ_REMOTE_FEATURES_COMPLETE 0x0B1791typedef struct {1792uint8_t status;1793uint16_t handle;1794uint8_t features[8];1795} __attribute__ ((packed)) evt_read_remote_features_complete;1796#define EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 1117971798#define EVT_READ_REMOTE_VERSION_COMPLETE 0x0C1799typedef struct {1800uint8_t status;1801uint16_t handle;1802uint8_t lmp_ver;1803uint16_t manufacturer;1804uint16_t lmp_subver;1805} __attribute__ ((packed)) evt_read_remote_version_complete;1806#define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 818071808#define EVT_QOS_SETUP_COMPLETE 0x0D1809typedef struct {1810uint8_t status;1811uint16_t handle;1812uint8_t flags; /* Reserved */1813hci_qos qos;1814} __attribute__ ((packed)) evt_qos_setup_complete;1815#define EVT_QOS_SETUP_COMPLETE_SIZE (4 + HCI_QOS_CP_SIZE)18161817#define EVT_CMD_COMPLETE 0x0E1818typedef struct {1819uint8_t ncmd;1820uint16_t opcode;1821} __attribute__ ((packed)) evt_cmd_complete;1822#define EVT_CMD_COMPLETE_SIZE 318231824#define EVT_CMD_STATUS 0x0F1825typedef struct {1826uint8_t status;1827uint8_t ncmd;1828uint16_t opcode;1829} __attribute__ ((packed)) evt_cmd_status;1830#define EVT_CMD_STATUS_SIZE 418311832#define EVT_HARDWARE_ERROR 0x101833typedef struct {1834uint8_t code;1835} __attribute__ ((packed)) evt_hardware_error;1836#define EVT_HARDWARE_ERROR_SIZE 118371838#define EVT_FLUSH_OCCURRED 0x111839typedef struct {1840uint16_t handle;1841} __attribute__ ((packed)) evt_flush_occured;1842#define EVT_FLUSH_OCCURRED_SIZE 218431844#define EVT_ROLE_CHANGE 0x121845typedef struct {1846uint8_t status;1847bdaddr_t bdaddr;1848uint8_t role;1849} __attribute__ ((packed)) evt_role_change;1850#define EVT_ROLE_CHANGE_SIZE 818511852#define EVT_NUM_COMP_PKTS 0x131853typedef struct {1854uint8_t num_hndl;1855/* variable length part */1856} __attribute__ ((packed)) evt_num_comp_pkts;1857#define EVT_NUM_COMP_PKTS_SIZE 118581859#define EVT_MODE_CHANGE 0x141860typedef struct {1861uint8_t status;1862uint16_t handle;1863uint8_t mode;1864uint16_t interval;1865} __attribute__ ((packed)) evt_mode_change;1866#define EVT_MODE_CHANGE_SIZE 618671868#define EVT_RETURN_LINK_KEYS 0x151869typedef struct {1870uint8_t num_keys;1871/* variable length part */1872} __attribute__ ((packed)) evt_return_link_keys;1873#define EVT_RETURN_LINK_KEYS_SIZE 118741875#define EVT_PIN_CODE_REQ 0x161876typedef struct {1877bdaddr_t bdaddr;1878} __attribute__ ((packed)) evt_pin_code_req;1879#define EVT_PIN_CODE_REQ_SIZE 618801881#define EVT_LINK_KEY_REQ 0x171882typedef struct {1883bdaddr_t bdaddr;1884} __attribute__ ((packed)) evt_link_key_req;1885#define EVT_LINK_KEY_REQ_SIZE 618861887#define EVT_LINK_KEY_NOTIFY 0x181888typedef struct {1889bdaddr_t bdaddr;1890uint8_t link_key[16];1891uint8_t key_type;1892} __attribute__ ((packed)) evt_link_key_notify;1893#define EVT_LINK_KEY_NOTIFY_SIZE 2318941895#define EVT_LOOPBACK_COMMAND 0x1918961897#define EVT_DATA_BUFFER_OVERFLOW 0x1A1898typedef struct {1899uint8_t link_type;1900} __attribute__ ((packed)) evt_data_buffer_overflow;1901#define EVT_DATA_BUFFER_OVERFLOW_SIZE 119021903#define EVT_MAX_SLOTS_CHANGE 0x1B1904typedef struct {1905uint16_t handle;1906uint8_t max_slots;1907} __attribute__ ((packed)) evt_max_slots_change;1908#define EVT_MAX_SLOTS_CHANGE_SIZE 319091910#define EVT_READ_CLOCK_OFFSET_COMPLETE 0x1C1911typedef struct {1912uint8_t status;1913uint16_t handle;1914uint16_t clock_offset;1915} __attribute__ ((packed)) evt_read_clock_offset_complete;1916#define EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE 519171918#define EVT_CONN_PTYPE_CHANGED 0x1D1919typedef struct {1920uint8_t status;1921uint16_t handle;1922uint16_t ptype;1923} __attribute__ ((packed)) evt_conn_ptype_changed;1924#define EVT_CONN_PTYPE_CHANGED_SIZE 519251926#define EVT_QOS_VIOLATION 0x1E1927typedef struct {1928uint16_t handle;1929} __attribute__ ((packed)) evt_qos_violation;1930#define EVT_QOS_VIOLATION_SIZE 219311932#define EVT_PSCAN_REP_MODE_CHANGE 0x201933typedef struct {1934bdaddr_t bdaddr;1935uint8_t pscan_rep_mode;1936} __attribute__ ((packed)) evt_pscan_rep_mode_change;1937#define EVT_PSCAN_REP_MODE_CHANGE_SIZE 719381939#define EVT_FLOW_SPEC_COMPLETE 0x211940typedef struct {1941uint8_t status;1942uint16_t handle;1943uint8_t flags;1944uint8_t direction;1945hci_qos qos;1946} __attribute__ ((packed)) evt_flow_spec_complete;1947#define EVT_FLOW_SPEC_COMPLETE_SIZE (5 + HCI_QOS_CP_SIZE)19481949#define EVT_INQUIRY_RESULT_WITH_RSSI 0x221950typedef struct {1951bdaddr_t bdaddr;1952uint8_t pscan_rep_mode;1953uint8_t pscan_period_mode;1954uint8_t dev_class[3];1955uint16_t clock_offset;1956int8_t rssi;1957} __attribute__ ((packed)) inquiry_info_with_rssi;1958#define INQUIRY_INFO_WITH_RSSI_SIZE 141959typedef struct {1960bdaddr_t bdaddr;1961uint8_t pscan_rep_mode;1962uint8_t pscan_period_mode;1963uint8_t pscan_mode;1964uint8_t dev_class[3];1965uint16_t clock_offset;1966int8_t rssi;1967} __attribute__ ((packed)) inquiry_info_with_rssi_and_pscan_mode;1968#define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE 1519691970#define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE 0x231971typedef struct {1972uint8_t status;1973uint16_t handle;1974uint8_t page_num;1975uint8_t max_page_num;1976uint8_t features[8];1977} __attribute__ ((packed)) evt_read_remote_ext_features_complete;1978#define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE 1319791980#define EVT_SYNC_CONN_COMPLETE 0x2C1981typedef struct {1982uint8_t status;1983uint16_t handle;1984bdaddr_t bdaddr;1985uint8_t link_type;1986uint8_t trans_interval;1987uint8_t retrans_window;1988uint16_t rx_pkt_len;1989uint16_t tx_pkt_len;1990uint8_t air_mode;1991} __attribute__ ((packed)) evt_sync_conn_complete;1992#define EVT_SYNC_CONN_COMPLETE_SIZE 1719931994#define EVT_SYNC_CONN_CHANGED 0x2D1995typedef struct {1996uint8_t status;1997uint16_t handle;1998uint8_t trans_interval;1999uint8_t retrans_window;2000uint16_t rx_pkt_len;2001uint16_t tx_pkt_len;2002} __attribute__ ((packed)) evt_sync_conn_changed;2003#define EVT_SYNC_CONN_CHANGED_SIZE 920042005#define EVT_SNIFF_SUBRATING 0x2E2006typedef struct {2007uint8_t status;2008uint16_t handle;2009uint16_t max_tx_latency;2010uint16_t max_rx_latency;2011uint16_t min_remote_timeout;2012uint16_t min_local_timeout;2013} __attribute__ ((packed)) evt_sniff_subrating;2014#define EVT_SNIFF_SUBRATING_SIZE 1120152016#define EVT_EXTENDED_INQUIRY_RESULT 0x2F2017typedef struct {2018bdaddr_t bdaddr;2019uint8_t pscan_rep_mode;2020uint8_t pscan_period_mode;2021uint8_t dev_class[3];2022uint16_t clock_offset;2023int8_t rssi;2024uint8_t data[HCI_MAX_EIR_LENGTH];2025} __attribute__ ((packed)) extended_inquiry_info;2026#define EXTENDED_INQUIRY_INFO_SIZE 25420272028#define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE 0x302029typedef struct {2030uint8_t status;2031uint16_t handle;2032} __attribute__ ((packed)) evt_encryption_key_refresh_complete;2033#define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE_SIZE 320342035#define EVT_IO_CAPABILITY_REQUEST 0x312036typedef struct {2037bdaddr_t bdaddr;2038} __attribute__ ((packed)) evt_io_capability_request;2039#define EVT_IO_CAPABILITY_REQUEST_SIZE 620402041#define EVT_IO_CAPABILITY_RESPONSE 0x322042typedef struct {2043bdaddr_t bdaddr;2044uint8_t capability;2045uint8_t oob_data;2046uint8_t authentication;2047} __attribute__ ((packed)) evt_io_capability_response;2048#define EVT_IO_CAPABILITY_RESPONSE_SIZE 920492050#define EVT_USER_CONFIRM_REQUEST 0x332051typedef struct {2052bdaddr_t bdaddr;2053uint32_t passkey;2054} __attribute__ ((packed)) evt_user_confirm_request;2055#define EVT_USER_CONFIRM_REQUEST_SIZE 1020562057#define EVT_USER_PASSKEY_REQUEST 0x342058typedef struct {2059bdaddr_t bdaddr;2060} __attribute__ ((packed)) evt_user_passkey_request;2061#define EVT_USER_PASSKEY_REQUEST_SIZE 620622063#define EVT_REMOTE_OOB_DATA_REQUEST 0x352064typedef struct {2065bdaddr_t bdaddr;2066} __attribute__ ((packed)) evt_remote_oob_data_request;2067#define EVT_REMOTE_OOB_DATA_REQUEST_SIZE 620682069#define EVT_SIMPLE_PAIRING_COMPLETE 0x362070typedef struct {2071uint8_t status;2072bdaddr_t bdaddr;2073} __attribute__ ((packed)) evt_simple_pairing_complete;2074#define EVT_SIMPLE_PAIRING_COMPLETE_SIZE 720752076#define EVT_LINK_SUPERVISION_TIMEOUT_CHANGED 0x382077typedef struct {2078uint16_t handle;2079uint16_t timeout;2080} __attribute__ ((packed)) evt_link_supervision_timeout_changed;2081#define EVT_LINK_SUPERVISION_TIMEOUT_CHANGED_SIZE 420822083#define EVT_ENHANCED_FLUSH_COMPLETE 0x392084typedef struct {2085uint16_t handle;2086} __attribute__ ((packed)) evt_enhanced_flush_complete;2087#define EVT_ENHANCED_FLUSH_COMPLETE_SIZE 220882089#define EVT_USER_PASSKEY_NOTIFY 0x3B2090typedef struct {2091bdaddr_t bdaddr;2092uint32_t passkey;2093} __attribute__ ((packed)) evt_user_passkey_notify;2094#define EVT_USER_PASSKEY_NOTIFY_SIZE 1020952096#define EVT_KEYPRESS_NOTIFY 0x3C2097typedef struct {2098bdaddr_t bdaddr;2099uint8_t type;2100} __attribute__ ((packed)) evt_keypress_notify;2101#define EVT_KEYPRESS_NOTIFY_SIZE 721022103#define EVT_REMOTE_HOST_FEATURES_NOTIFY 0x3D2104typedef struct {2105bdaddr_t bdaddr;2106uint8_t features[8];2107} __attribute__ ((packed)) evt_remote_host_features_notify;2108#define EVT_REMOTE_HOST_FEATURES_NOTIFY_SIZE 1421092110#define EVT_LE_META_EVENT 0x3E2111typedef struct {2112uint8_t subevent;2113uint8_t data[0];2114} __attribute__ ((packed)) evt_le_meta_event;2115#define EVT_LE_META_EVENT_SIZE 121162117#define EVT_LE_CONN_COMPLETE 0x012118typedef struct {2119uint8_t status;2120uint16_t handle;2121uint8_t role;2122uint8_t peer_bdaddr_type;2123bdaddr_t peer_bdaddr;2124uint16_t interval;2125uint16_t latency;2126uint16_t supervision_timeout;2127uint8_t master_clock_accuracy;2128} __attribute__ ((packed)) evt_le_connection_complete;2129#define EVT_LE_CONN_COMPLETE_SIZE 1821302131#define EVT_LE_ADVERTISING_REPORT 0x022132typedef struct {2133uint8_t evt_type;2134uint8_t bdaddr_type;2135bdaddr_t bdaddr;2136uint8_t length;2137uint8_t data[0];2138} __attribute__ ((packed)) le_advertising_info;2139#define LE_ADVERTISING_INFO_SIZE 921402141#define EVT_LE_CONN_UPDATE_COMPLETE 0x032142typedef struct {2143uint8_t status;2144uint16_t handle;2145uint16_t interval;2146uint16_t latency;2147uint16_t supervision_timeout;2148} __attribute__ ((packed)) evt_le_connection_update_complete;2149#define EVT_LE_CONN_UPDATE_COMPLETE_SIZE 921502151#define EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE 0x042152typedef struct {2153uint8_t status;2154uint16_t handle;2155uint8_t features[8];2156} __attribute__ ((packed)) evt_le_read_remote_used_features_complete;2157#define EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE_SIZE 1121582159#define EVT_LE_LTK_REQUEST 0x052160typedef struct {2161uint16_t handle;2162uint64_t random;2163uint16_t diversifier;2164} __attribute__ ((packed)) evt_le_long_term_key_request;2165#define EVT_LE_LTK_REQUEST_SIZE 1221662167#define EVT_PHYSICAL_LINK_COMPLETE 0x402168typedef struct {2169uint8_t status;2170uint8_t handle;2171} __attribute__ ((packed)) evt_physical_link_complete;2172#define EVT_PHYSICAL_LINK_COMPLETE_SIZE 221732174#define EVT_CHANNEL_SELECTED 0x4121752176#define EVT_DISCONNECT_PHYSICAL_LINK_COMPLETE 0x422177typedef struct {2178uint8_t status;2179uint8_t handle;2180uint8_t reason;2181} __attribute__ ((packed)) evt_disconn_physical_link_complete;2182#define EVT_DISCONNECT_PHYSICAL_LINK_COMPLETE_SIZE 321832184#define EVT_PHYSICAL_LINK_LOSS_EARLY_WARNING 0x432185typedef struct {2186uint8_t handle;2187uint8_t reason;2188} __attribute__ ((packed)) evt_physical_link_loss_warning;2189#define EVT_PHYSICAL_LINK_LOSS_WARNING_SIZE 221902191#define EVT_PHYSICAL_LINK_RECOVERY 0x442192typedef struct {2193uint8_t handle;2194} __attribute__ ((packed)) evt_physical_link_recovery;2195#define EVT_PHYSICAL_LINK_RECOVERY_SIZE 121962197#define EVT_LOGICAL_LINK_COMPLETE 0x452198typedef struct {2199uint8_t status;2200uint16_t log_handle;2201uint8_t handle;2202uint8_t tx_flow_id;2203} __attribute__ ((packed)) evt_logical_link_complete;2204#define EVT_LOGICAL_LINK_COMPLETE_SIZE 522052206#define EVT_DISCONNECT_LOGICAL_LINK_COMPLETE 0x4622072208#define EVT_FLOW_SPEC_MODIFY_COMPLETE 0x472209typedef struct {2210uint8_t status;2211uint16_t handle;2212} __attribute__ ((packed)) evt_flow_spec_modify_complete;2213#define EVT_FLOW_SPEC_MODIFY_COMPLETE_SIZE 322142215#define EVT_NUMBER_COMPLETED_BLOCKS 0x482216typedef struct {2217uint16_t handle;2218uint16_t num_cmplt_pkts;2219uint16_t num_cmplt_blks;2220} __attribute__ ((packed)) cmplt_handle;2221typedef struct {2222uint16_t total_num_blocks;2223uint8_t num_handles;2224cmplt_handle handles[0];2225} __attribute__ ((packed)) evt_num_completed_blocks;22262227#define EVT_AMP_STATUS_CHANGE 0x4D2228typedef struct {2229uint8_t status;2230uint8_t amp_status;2231} __attribute__ ((packed)) evt_amp_status_change;2232#define EVT_AMP_STATUS_CHANGE_SIZE 222332234#define EVT_TESTING 0xFE22352236#define EVT_VENDOR 0xFF22372238/* Internal events generated by BlueZ stack */2239#define EVT_STACK_INTERNAL 0xFD2240typedef struct {2241uint16_t type;2242uint8_t data[0];2243} __attribute__ ((packed)) evt_stack_internal;2244#define EVT_STACK_INTERNAL_SIZE 222452246#define EVT_SI_DEVICE 0x012247typedef struct {2248uint16_t event;2249uint16_t dev_id;2250} __attribute__ ((packed)) evt_si_device;2251#define EVT_SI_DEVICE_SIZE 422522253/* -------- HCI Packet structures -------- */2254#define HCI_TYPE_LEN 122552256typedef struct {2257uint16_t opcode; /* OCF & OGF */2258uint8_t plen;2259} __attribute__ ((packed)) hci_command_hdr;2260#define HCI_COMMAND_HDR_SIZE 322612262typedef struct {2263uint8_t evt;2264uint8_t plen;2265} __attribute__ ((packed)) hci_event_hdr;2266#define HCI_EVENT_HDR_SIZE 222672268typedef struct {2269uint16_t handle; /* Handle & Flags(PB, BC) */2270uint16_t dlen;2271} __attribute__ ((packed)) hci_acl_hdr;2272#define HCI_ACL_HDR_SIZE 422732274typedef struct {2275uint16_t handle;2276uint8_t dlen;2277} __attribute__ ((packed)) hci_sco_hdr;2278#define HCI_SCO_HDR_SIZE 322792280typedef struct {2281uint16_t device;2282uint16_t type;2283uint16_t plen;2284} __attribute__ ((packed)) hci_msg_hdr;2285#define HCI_MSG_HDR_SIZE 622862287/* Command opcode pack/unpack */2288#define cmd_opcode_pack(ogf, ocf) (uint16_t)((ocf & 0x03ff)|(ogf << 10))2289#define cmd_opcode_ogf(op) (op >> 10)2290#define cmd_opcode_ocf(op) (op & 0x03ff)22912292/* ACL handle and flags pack/unpack */2293#define acl_handle_pack(h, f) (uint16_t)((h & 0x0fff)|(f << 12))2294#define acl_handle(h) (h & 0x0fff)2295#define acl_flags(h) (h >> 12)22962297#endif /* _NO_HCI_DEFS */22982299/* HCI Socket options */2300#define HCI_DATA_DIR 12301#define HCI_FILTER 22302#define HCI_TIME_STAMP 323032304/* HCI CMSG flags */2305#define HCI_CMSG_DIR 0x00012306#define HCI_CMSG_TSTAMP 0x000223072308struct sockaddr_hci {2309sa_family_t hci_family;2310unsigned short hci_dev;2311unsigned short hci_channel;2312};2313#define HCI_DEV_NONE 0xffff23142315#define HCI_CHANNEL_RAW 02316#define HCI_CHANNEL_USER 12317#define HCI_CHANNEL_MONITOR 22318#define HCI_CHANNEL_CONTROL 323192320struct hci_filter {2321uint32_t type_mask;2322uint32_t event_mask[2];2323uint16_t opcode;2324};23252326#define HCI_FLT_TYPE_BITS 312327#define HCI_FLT_EVENT_BITS 632328#define HCI_FLT_OGF_BITS 632329#define HCI_FLT_OCF_BITS 12723302331/* Ioctl requests structures */2332struct hci_dev_stats {2333uint32_t err_rx;2334uint32_t err_tx;2335uint32_t cmd_tx;2336uint32_t evt_rx;2337uint32_t acl_tx;2338uint32_t acl_rx;2339uint32_t sco_tx;2340uint32_t sco_rx;2341uint32_t byte_rx;2342uint32_t byte_tx;2343};23442345struct hci_dev_info {2346uint16_t dev_id;2347char name[8];23482349bdaddr_t bdaddr;23502351uint32_t flags;2352uint8_t type;23532354uint8_t features[8];23552356uint32_t pkt_type;2357uint32_t link_policy;2358uint32_t link_mode;23592360uint16_t acl_mtu;2361uint16_t acl_pkts;2362uint16_t sco_mtu;2363uint16_t sco_pkts;23642365struct hci_dev_stats stat;2366};23672368struct hci_conn_info {2369uint16_t handle;2370bdaddr_t bdaddr;2371uint8_t type;2372uint8_t out;2373uint16_t state;2374uint32_t link_mode;2375};23762377struct hci_dev_req {2378uint16_t dev_id;2379uint32_t dev_opt;2380};23812382struct hci_dev_list_req {2383uint16_t dev_num;2384struct hci_dev_req dev_req[0]; /* hci_dev_req structures */2385};23862387struct hci_conn_list_req {2388uint16_t dev_id;2389uint16_t conn_num;2390struct hci_conn_info conn_info[0];2391};23922393struct hci_conn_info_req {2394bdaddr_t bdaddr;2395uint8_t type;2396struct hci_conn_info conn_info[0];2397};23982399struct hci_auth_info_req {2400bdaddr_t bdaddr;2401uint8_t type;2402};24032404struct hci_inquiry_req {2405uint16_t dev_id;2406uint16_t flags;2407uint8_t lap[3];2408uint8_t length;2409uint8_t num_rsp;2410};2411#define IREQ_CACHE_FLUSH 0x000124122413#ifdef __cplusplus2414}2415#endif24162417#endif /* __HCI_H */241824192420