| /* |
| * Copyright 2018 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| #ifndef _HCI_INT_H_ |
| #define _HCI_INT_H_ |
| |
| #include "newblue-macros.h" |
| #include "util.h" |
| #include "hci.h" |
| |
| |
| |
| #define HCI_INQUIRY_LENGTH_UNIT 1280 /* msec */ |
| #define HCI_INQUIRY_LENGTH_MAX 48 /* units */ |
| |
| #define HCI_LAP_Unlimited_Inquiry 0x9E8B33 |
| #define HCI_LAP_Limited_Inquiry 0x9E8B00 |
| |
| #define HCI_CLOCK_OFST_VALID 0x8000 |
| |
| #define HCI_PKT_TYP_NO_2_DH1 0x0002 /* BT 2.1+ */ |
| #define HCI_PKT_TYP_NO_3_DH1 0x0004 /* BT 2.1+ */ |
| #define HCI_PKT_TYP_DM1 0x0008 /* BT 1.1+ */ |
| #define HCI_PKT_TYP_DH1 0x0010 /* BT 1.1+ */ |
| #define HCI_PKT_TYP_NO_2_DH3 0x0100 /* BT 2.1+ */ |
| #define HCI_PKT_TYP_NO_3_DH3 0x0200 /* BT 2.1+ */ |
| #define HCI_PKT_TYP_DM3 0x0400 /* BT 1.1+ */ |
| #define HCI_PKT_TYP_DH3 0x0800 /* BT 1.1+ */ |
| #define HCI_PKT_TYP_NO_2_DH5 0x1000 /* BT 2.1+ */ |
| #define HCI_PKT_TYP_NO_3_DH5 0x1000 /* BT 2.1+ */ |
| #define HCI_PKT_TYP_DM5 0x4000 /* BT 1.1+ */ |
| #define HCI_PKT_TYP_DH5 0x8000 /* BT 1.1+ */ |
| #define HCI_PKT_TYP_DEFAULT 0xCC18 |
| |
| #define HCI_PKT_TYP_SCO_HV1 0x0001 /* BT 1.1+ */ |
| #define HCI_PKT_TYP_SCO_HV2 0x0002 /* BT 1.1+ */ |
| #define HCI_PKT_TYP_SCO_HV3 0x0004 /* BT 1.1+ */ |
| #define HCI_PKT_TYP_SCO_EV3 0x0008 /* BT 1.2+ */ |
| #define HCI_PKT_TYP_SCO_EV4 0x0010 /* BT 1.2+ */ |
| #define HCI_PKT_TYP_SCO_EV5 0x0020 /* BT 1.2+ */ |
| #define HCI_PKT_TYP_SCO_NO_2_EV3 0x0040 /* BT 2.1+ */ |
| #define HCI_PKT_TYP_SCO_NO_3_EV3 0x0080 /* BT 2.1+ */ |
| #define HCI_PKT_TYP_SCO_NO_2_EV5 0x0100 /* BT 2.1+ */ |
| #define HCI_PKT_TYP_SCO_NO_3_EV5 0x0200 /* BT 2.1+ */ |
| |
| #define HCI_LINK_POLICY_DISABLE_ALL_LM_MODES 0x0000 |
| #define HCI_LINK_POLICY_ENABLE_ROLESWITCH 0x0001 |
| #define HCI_LINK_POLICY_ENABLE_HOLD_MODE 0x0002 |
| #define HCI_LINK_POLICY_ENABLE_SNIFF_MODE 0x0004 |
| #define HCI_LINK_POLICY_ENABLE_PARK_MODE 0x0008 |
| |
| #define HCI_FILTER_TYPE_CLEAR_ALL 0x00 /* no subtypes, no data */ |
| #define HCI_FILTER_INQUIRY_RESULT 0x01 /* below subtypes */ |
| # define HCI_FILTER_COND_TYPE_RETURN_ALL_DEVS 0x00 /* no data */ |
| # define HCI_FILTER_COND_TYPE_SPECIFIC_DEV_CLS 0x01 /* uint24_t wanted_class, uint24_t wanted_mask (only set bits are compared to wanted_class) */ |
| # define HCI_FILTER_COND_TYPE_SPECIFIC_ADDR 0x02 /* uint8_t mac[6] */ |
| #define HCI_FILTER_CONNECTION_SETUP 0x02 /* below subtypes */ |
| # define HCI_FILTER_COND_TYPE_ALLOW_CONNS_FROM_ALL_DEVS 0x00 /* uint8_t auto_accept_type: 1 - no, 2 - yes w/ no roleswitch, 3 - yes w/ roleswitch */ |
| # define HCI_FILTER_COND_TYPE_ALLOW_CONNS_FROM_SPECIFIC_DEV_CLS 0x01 /* uint24_t wanted_class, uint24_t wanted_mask (only set bits are compared to wanted_class), auto_accept flag same as above */ |
| # define HCI_FILTER_COND_TYPE_ALLOW_CONNS_FROM_SPECIFIC_ADDR 0x02 /* uint8_t mac[6], auto_accept flag same as above */ |
| |
| #define HCI_SCAN_ENABLE_INQUIRY 0x01 /* discoverable */ |
| #define HCI_SCAN_ENABLE_PAGE 0x02 /* connectable */ |
| |
| #define HCI_HOLD_MODE_SUSPEND_PAGE_SCAN 0x01 |
| #define HCI_HOLD_MODE_SUSPEND_INQUIRY_SCAN 0x02 |
| #define HCI_HOLD_MODE_SUSPEND_PERIODIC_INQUIRIES 0x04 |
| |
| #define HCI_TO_HOST_FLOW_CTRL_ACL 0x01 |
| #define HCI_TO_HOST_FLOW_CTRL_SCO 0x02 |
| |
| #define HCI_INQ_MODE_STD 0 /* normal mode @ BT 1.1+ */ |
| #define HCI_INQ_MODE_RSSI 1 /* with RSSI @ BT 1.2+ */ |
| #define HCI_INQ_MODE_EIR 2 /* with EIR @ BT 2.1+ */ |
| |
| #define HCI_SSP_KEY_ENTRY_STARTED 0 |
| #define HCI_SSP_KEY_ENTRY_DIGIT_ENTERED 1 |
| #define HCI_SSP_KEY_ENTRY_DIGIT_ERASED 2 |
| #define HCI_SSP_KEY_ENTRY_CLEARED 3 |
| #define HCI_SSP_KEY_ENTRY_COMPLETED 4 |
| |
| #define HCI_LOCATION_DOMAIN_OPTION_NONE 0x20 /* ' ' */ |
| #define HCI_LOCATION_DOMAIN_OPTION_OUTDOORS_ONLY 0x4F /* 'O' */ |
| #define HCI_LOCATION_DOMAIN_OPTION_INDOORS_ONLY 0x49 /* 'I' */ |
| #define HCI_LOCATION_DOMAIN_OPTION_NON_COUNTRY_ENTITY 0x58 /* 'X' */ |
| |
| #define HCI_PERIOD_TYPE_DOWNLINK 0x00 |
| #define HCI_PERIOD_TYPE_UPLINK 0x01 |
| #define HCI_PERIOD_TYPE_BIDIRECTIONAL 0x02 |
| #define HCI_PERIOD_TYPE_GUARD_PERIOD 0x03 |
| |
| #define HCI_MWS_INTERVAL_TYPE_NO_RX_NO_TX 0x00 |
| #define HCI_MWS_INTERVAL_TYPE_TX_ALLOWED 0x01 |
| #define HCI_MWS_INTERVAL_TYPE_RX_ALLOWED 0x02 |
| #define HCI_MWS_INTERVAL_TYPE_TX_RX_ALLOWED 0x03 |
| #define HCI_MWS_INTERVAL_TYPE_FRAME 0x04 /* type defined by Set External Frame Configuration command */ |
| |
| #define HCI_CONNLESS_FRAG_TYPE_CONT 0x00 /* continuation fragment */ |
| #define HCI_CONNLESS_FRAG_TYPE_START 0x01 /* first fragment */ |
| #define HCI_CONNLESS_FRAG_TYPE_END 0x02 /* last fragment */ |
| #define HCI_CONNLESS_FRAG_TYPE_COMPLETE 0x03 /* complete fragment - no fragmentation */ |
| |
| #define HCI_CUR_MODE_ACTIVE 0x00 |
| #define HCI_CUR_MODE_HOLD 0x01 |
| #define HCI_CUR_MODE_SNIFF 0x02 |
| #define HCI_CUR_MODE_PARK 0x03 |
| |
| #define HCI_SCO_LINK_TYPE_SCO 0x00 |
| #define HCI_SCO_LINK_TYPE_ESCO 0x02 |
| |
| #define HCI_SCO_AIR_MODE_MULAW 0x00 |
| #define HCI_SCO_AIR_MODE_CVSD 0x02 |
| #define HCI_SCO_AIR_MODE_TRANSPARENT 0x03 |
| |
| #define HCI_MCA_500_PPM 0x00 |
| #define HCI_MCA_250_PPM 0x01 |
| #define HCI_MCA_150_PPM 0x02 |
| #define HCI_MCA_100_PPM 0x03 |
| #define HCI_MCA_75_PPM 0x04 |
| #define HCI_MCA_50_PPM 0x05 |
| #define HCI_MCA_30_PPM 0x06 |
| #define HCI_MCA_20_PPM 0x07 |
| |
| #define HCI_EDR_LINK_KEY_COMBO 0x00 |
| #define HCI_EDR_LINK_KEY_LOCAL 0x01 |
| #define HCI_EDR_LINK_KEY_REMOTE 0x02 |
| #define HCI_EDR_LINK_KEY_DEBUG 0x03 |
| #define HCI_EDR_LINK_KEY_UNAUTH_COMBO 0x04 |
| #define HCI_EDR_LINK_KEY_AUTH_COMBO 0x05 |
| #define HCI_EDR_LINK_KEY_CHANGED 0x06 |
| |
| #define HCI_VERSION_1_0_B 0 /* BT 1.0b */ |
| #define HCI_VERSION_1_1 1 /* BT 1.1 */ |
| #define HCI_VERSION_1_2 2 /* BT 1.2 */ |
| #define HCI_VERSION_2_0 4 /* BT 2.0 */ |
| #define HCI_VERSION_2_1 3 /* BT 2.1 */ |
| #define HCI_VERSION_3_0 4 /* BT 3.0 */ |
| #define HCI_VERSION_4_0 6 /* BT 4.0 */ |
| #define HCI_VERSION_4_1 7 /* BT 4.1 */ |
| #define HCI_VERSION_4_2 8 /* BT 4.2 */ |
| #define HCI_VERSION_5_0 9 /* BT 5.0 */ |
| #define HCI_VER_MAX_SUPPORTED HCI_VERSION_5_0 |
| |
| #define HCI_LE_STATE_NONCON_ADV 0x0000000000000001ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_SCANNABLE_ADV 0x0000000000000002ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_CONNECTIBLE_ADV 0x0000000000000004ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_DIRECT_ADV 0x0000000000000008ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_PASSIVE_SCAN 0x0000000000000010ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_ACTIVE_SCAN 0x0000000000000020ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_INITIATE 0x0000000000000040ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_SLAVE 0x0000000000000080ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_NONCON_ADV_w_PASSIVE_SCAN 0x0000000000000100ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_SCANNABLE_ADV_w_PASSIVE_SCAN 0x0000000000000200ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_CONNECTIBLE_ADV_w_PASSIVE_SCAN 0x0000000000000400ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_DIRECT_ADV_w_PASSIVE_SCAN 0x0000000000000800ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_NONCON_ADV_w_ACTIVE_SCAN 0x0000000000001000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_SCANNABLE_ADV_w_ACTIVE_SCAN 0x0000000000002000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_CONNECTIBLE_ADV_w_ACTIVE_SCAN 0x0000000000004000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_DIRECT_ADV_w_ACTIVE_SCAN 0x0000000000008000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_NONCON_ADV_w_INITIATING 0x0000000000010000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_SCANNABLE_ADV_w_INITIATING 0x0000000000020000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_NONCON_ADV_w_MASTER 0x0000000000040000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_SCANNABLE_ADV_w_MASTER 0x0000000000080000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_NONCON_ADV_w_SLAVE 0x0000000000100000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_SCANNABLE_ADV_w_SLAVE 0x0000000000200000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_PASSIVE_SCAN_w_INITIATING 0x0000000000400000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_ACTIVE_SCAN_w_INITIATING 0x0000000000800000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_PASSIVE_SCAN_w_MASTER 0x0000000001000000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_ACTIVE_SCAN_w_MASTER 0x0000000002000000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_PASSIVE_SCAN_w_SLAVE 0x0000000004000000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_ACTIVE_SCAN_w_SLAVE 0x0000000008000000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_INTIATING_w_MASTER 0x0000000010000000ULL /* BT 4.0+ */ |
| #define HCI_LE_STATE_LOW_DUTY_CYCLE_DIRECT_ADV 0x0000000020000000ULL /* BT 4.1+ */ |
| #define HCI_LE_STATE_PASSIVE_SCAN_w_LOW_DUTY_CYCLE_DIRECT_ADV 0x0000000040000000ULL /* BT 4.1+ */ |
| #define HCI_LE_STATE_ACTIVE_SCAN_w_LOW_DUTY_CYCLE_DIRECT_ADV 0x0000000080000000ULL /* BT 4.1+ */ |
| #define HCI_LE_STATE_CONNECTIBLE_ADV_w_INITIATING 0x0000000100000000ULL /* BT 4.1+ */ |
| #define HCI_LE_STATE_DIRECT_ADV_w_INITIATING 0x0000000200000000ULL /* BT 4.1+ */ |
| #define HCI_LE_STATE_LOW_DUTY_CYCLE_DIRECT_ADV_w_INITIATING 0x0000000400000000ULL /* BT 4.1+ */ |
| #define HCI_LE_STATE_CONNECTIBLE_ADV_w_MASTER 0x0000000800000000ULL /* BT 4.1+ */ |
| #define HCI_LE_STATE_DIRECT_ADV_w_MASTER 0x0000001000000000ULL /* BT 4.1+ */ |
| #define HCI_LE_STATE_LOW_DUTY_CYCLE_DIRECT_ADV_w_MASTER 0x0000002000000000ULL /* BT 4.1+ */ |
| #define HCI_LE_STATE_CONNECTIBLE_ADV_w_SLAVE 0x0000004000000000ULL /* BT 4.1+ */ |
| #define HCI_LE_STATE_DIRECT_ADV_w_SLAVE 0x0000008000000000ULL /* BT 4.1+ */ |
| #define HCI_LE_STATE_LOW_DUTY_CYCLE_DIRECT_ADV_w_SLAVE 0x0000010000000000ULL /* BT 4.1+ */ |
| #define HCI_LE_STATE_INITIATING_w_SLAVE 0x0000020000000000ULL /* BT 4.1+ */ |
| |
| #define HCI_LMP_FTR_3_SLOT_PACKETS 0x0000000000000001ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_5_SLOT_PACKETS 0x0000000000000002ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_ENCRYPTION 0x0000000000000004ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_SLOT_OFFSET 0x0000000000000008ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_TIMING_ACCURACY 0x0000000000000010ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_SWITCH 0x0000000000000020ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_HOLD_MODE 0x0000000000000040ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_SNIFF_MODE 0x0000000000000080ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_PARK_MODE 0x0000000000000100ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_RSSI 0x0000000000000200ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_CHANNEL_QUALITY_DRIVEN_DATA_RATE 0x0000000000000400ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_SCO_LINKS 0x0000000000000800ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_HV2_PACKETS 0x0000000000001000ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_HV3_PACKETS 0x0000000000002000ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_MU_LAW 0x0000000000004000ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_A_LAW 0x0000000000008000ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_CVSD 0x0000000000010000ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_PAGING_SCHEME 0x0000000000020000ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_POWER_CONTROL 0x0000000000040000ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_TRANSPARENT_SCO_DATA 0x0000000000080000ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_FLOW_CONTROL_LAG_B0 0x0000000000100000ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_FLOW_CONTROL_LAG_B1 0x0000000000200000ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_FLOW_CONTROL_LAG_B2 0x0000000000400000ULL /* BT 1.1+ */ |
| #define HCI_LMP_FTR_BROADCAST_ENCRYPTION 0x0000000000800000ULL /* BT 1.2+ */ |
| #define HCI_LMP_FTR_ACL_2MBPS 0x0000000002000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_ACL_3MBPS 0x0000000004000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_ENHANCED_INQUIRY_SCAN 0x0000000008000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_INTERLACED_INQUIRY_SCAN 0x0000000010000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_INTERLACED_PAGE_SCAN 0x0000000020000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_RSSI_WITH_INQUIRY_RESULTS 0x0000000040000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_EXTENDED_SCO_LINK 0x0000000080000000ULL /* BT 2.1+ */ /* EV3 packets */ |
| #define HCI_LMP_FTR_EV4_PACKETS 0x0000000100000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_EV5_PACKETS 0x0000000200000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_AFH_CAPABLE_SLAVE 0x0000000800000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_AFH_CLASSIFICATION_SLAVE 0x0000001000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_BR_EDR_NOT_SUPPORTED 0x0000002000000000ULL /* BT 4.0+ */ |
| #define HCI_LMP_FTR_LE_SUPPORTED_CONTROLLER 0x0000004000000000ULL /* BT 4.0+ */ |
| #define HCI_LMP_FTR_3_SLOT_ACL_PACKETS 0x0000008000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_5_SLOT_ACL_PACKETS 0x0000010000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_SNIFF_SUBRATING 0x0000020000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_PAUSE_ENCRYPTION 0x0000040000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_AFH_CAPABLE_MASTER 0x0000080000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_AFH_CLASSIFICATION_MASTER 0x0000100000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_ESCO_2MBPS 0x0000200000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_ESCO_3MBPS 0x0000400000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_3_SLOT_ESCO 0x0000800000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_EXTENDED_INQUIRY_RESPONSE 0x0001000000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_SSP 0x0008000000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_ENCAPSULATED_PDU 0x0010000000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_ERRONEOUS_DATA_REPORTING 0x0020000000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_NON_FLUSHABLE_PACKET_BOUNDARY_FLAG 0x0040000000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_LINK_SUPERVISION_TIMEOUT_CHANGED_EVENT 0x0100000000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_INQUIRY_RESPONSE_TX_POWER_LEVEL 0x0200000000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_EXTENDED_FEATURES 0x8000000000000000ULL /* BT 2.1+ */ |
| #define HCI_LMP_FTR_ENHANCED_POWER_CONTROL 0x0400000000000000ULL /* BT 3.0+ */ |
| #define HCI_LMP_FTR_SIMUL_LE_EDR_CAPABLE_CONTROLLER 0x0002000000000000ULL /* BT 4.0+ */ |
| |
| #define HCI_LMP_EXT_FTR_P1_SSP_HOST_SUPPORT 0x0000000000000001ULL /* BT 2.1+ */ |
| #define HCI_LMP_EXT_FTR_P1_LE_HOST_SUPPORT 0x0000000000000002ULL /* BT 4.0+ */ |
| #define HCI_LMP_EXT_FTR_P1_SIMUL_LE_EDR_HOST_SUPPORT 0x0000000000000004ULL /* BT 4.0+ */ |
| #define HCI_LMP_EXT_FTR_P1_SECURE_CONNECTIONS_HOST_SUPPORT 0x0000000000000008ULL /* BT 4.1+ */ |
| |
| #define HCI_LMP_EXT_FTR_P2_CONNLESS_SLAVE_BROADCAST_MASTER 0x0000000000000001ULL /* BT 4.1+ */ |
| #define HCI_LMP_EXT_FTR_P2_CONNLESS_SLAVE_BROADCAST_SLAVE 0x0000000000000002ULL /* BT 4.1+ */ |
| #define HCI_LMP_EXT_FTR_P2_SYNCHRONIZATION_TRAIN 0x0000000000000004ULL /* BT 4.1+ */ |
| #define HCI_LMP_EXT_FTR_P2_SYNCHRONIZATION_SCAN 0x0000000000000008ULL /* BT 4.1+ */ |
| #define HCI_LMP_EXT_FTR_P2_INQUIRY_RESPONSE_NOTIFICATION_EVT 0x0000000000000010ULL /* BT 4.1+ */ |
| #define HCI_LMP_EXT_FTR_P2_GENERALIZED_INTERLACED_SCAN 0x0000000000000020ULL /* BT 4.1+ */ |
| #define HCI_LMP_EXT_FTR_P2_COARSE_CLOCK_ADJUSTMENT 0x0000000000000040ULL /* BT 4.1+ */ |
| #define HCI_LMP_EXT_FTR_P2_SECURE_CONNECTIONS_CAPABLE_CONTROLLER 0x0000000000000100ULL /* BT 4.1+ */ |
| #define HCI_LMP_EXT_FTR_P2_PING 0x0000000000000200ULL /* BT 4.1+ */ |
| #define HCI_LMP_EXT_FTR_P2_TRAIN_NUDGING 0x0000000000000800ULL /* BT 4.1+ */ |
| |
| #define HCI_EVENT_INQUIRY_COMPLETE 0x0000000000000001ULL /* BT 1.1+ */ |
| #define HCI_EVENT_INQUIRY_RESULT 0x0000000000000002ULL /* BT 1.1+ */ |
| #define HCI_EVENT_CONN_COMPLETE 0x0000000000000004ULL /* BT 1.1+ */ |
| #define HCI_EVENT_CONN_REQUEST 0x0000000000000008ULL /* BT 1.1+ */ |
| #define HCI_EVENT_DISCONNECTION_COMPLETE 0x0000000000000010ULL /* BT 1.1+ */ |
| #define HCI_EVENT_AUTH_COMPLETE 0x0000000000000020ULL /* BT 1.1+ */ |
| #define HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE 0x0000000000000040ULL /* BT 1.1+ */ |
| #define HCI_EVENT_ENCR_CHANGE 0x0000000000000080ULL /* BT 1.1+ */ |
| #define HCI_EVENT_CHANGE_CONN_LINK_KEY_COMPLETE 0x0000000000000100ULL /* BT 1.1+ */ |
| #define HCI_EVENT_MASTER_LINK_KEY_COMPLETE 0x0000000000000200ULL /* BT 1.1+ */ |
| #define HCI_EVENT_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE 0x0000000000000400ULL /* BT 1.1+ */ |
| #define HCI_EVENT_READ_REMOTE_VERSON_INFO_COMPLETE 0x0000000000000800ULL /* BT 1.1+ */ |
| #define HCI_EVENT_QOS_SETUP_COMPLETE 0x0000000000001000ULL /* BT 1.1+ */ |
| #define HCI_EVENT_HARDWARE_ERROR 0x0000000000008000ULL /* BT 1.1+ */ |
| #define HCI_EVENT_FLUSH_OCCURED 0x0000000000010000ULL /* BT 1.1+ */ |
| #define HCI_EVENT_ROLE_CHANGE 0x0000000000020000ULL /* BT 1.1+ */ |
| #define HCI_EVENT_MODE_CHANGE 0x0000000000080000ULL /* BT 1.1+ */ |
| #define HCI_EVENT_RETURN_LINK_KEYS 0x0000000000100000ULL /* BT 1.1+ */ |
| #define HCI_EVENT_PIN_CODE_REQUEST 0x0000000000200000ULL /* BT 1.1+ */ |
| #define HCI_EVENT_LINK_KEY_REQUEST 0x0000000000400000ULL /* BT 1.1+ */ |
| #define HCI_EVENT_LINK_KEY_NOTIFICATION 0x0000000000800000ULL /* BT 1.1+ */ |
| #define HCI_EVENT_LOOPBACK_COMMAND 0x0000000001000000ULL /* BT 1.1+ */ |
| #define HCI_EVENT_DATA_BUFFER_OVERFLOW 0x0000000002000000ULL /* BT 1.1+ */ |
| #define HCI_EVENT_MAX_SLOTS_CHANGE 0x0000000004000000ULL /* BT 1.1+ */ |
| #define HCI_EVENT_READ_CLOCK_OFFSET_COMPLETE 0x0000000008000000ULL /* BT 1.1+ */ |
| #define HCI_EVENT_CONN_PACKET_TYPE_CHANGED 0x0000000010000000ULL /* BT 1.1+ */ |
| #define HCI_EVENT_QOS_VIOLATION 0x0000000020000000ULL /* BT 1.1+ */ |
| #define HCI_EVENT_PAGE_SCAN_MODE_CHANGE 0x0000000040000000ULL /* BT 1.1+, obsolete @ BT1.2+ */ |
| #define HCI_EVENT_PAGE_SCAN_REPETITION_MODE_CHANGE 0x0000000080000000ULL /* BT 1.1+ */ |
| #define HCI_EVENT_ALL_BT_1_1 0x00000000FFFFFFFFULL /* also the default for BT 1.1 */ |
| #define HCI_EVENT_FLOW_SPEC_COMPLETE 0x0000000100000000ULL /* BT 1.2+ */ |
| #define HCI_EVENT_INQUIRY_RESULT_WITH_RSSI 0x0000000200000000ULL /* BT 1.2+ */ |
| #define HCI_EVENT_READ_REMOTE_EXTENDED_FEATURES_COMPLETE 0x0000000400000000ULL /* BT 1.2+ */ |
| #define HCI_EVENT_SYNC_CONN_COMPLETE 0x0000080000000000ULL /* BT 1.2+ */ |
| #define HCI_EVENT_SYNC_CONN_CHANGED 0x0000100000000000ULL /* BT 1.2+ */ |
| #define HCI_EVENT_ALL_BT_1_2 0x00001FFFFFFFFFFFULL /* also the default for BT 1.2+ */ |
| #define HCI_EVENT_SNIFF_SUBRATING 0x0000200000000000ULL /* BT 2.1+ */ |
| #define HCI_EVENT_EXTENDED_INQUIRY_RESULT 0x0000400000000000ULL /* BT 2.1+ */ |
| #define HCI_EVENT_ENCR_KEY_REFRESH_COMPLETE 0x0000800000000000ULL /* BT 2.1+ */ |
| #define HCI_EVENT_IO_CAPABILITY_REQUEST 0x0001000000000000ULL /* BT 2.1+ */ |
| #define HCI_EVENT_IO_CAPABILITY_REQUEST_REPLY 0x0002000000000000ULL /* BT 2.1+ */ |
| #define HCI_EVENT_USER_CONFIRMATION_REQUEST 0x0004000000000000ULL /* BT 2.1+ */ |
| #define HCI_EVENT_USER_PASSKEY_REQUEST 0x0008000000000000ULL /* BT 2.1+ */ |
| #define HCI_EVENT_REMOTE_OOB_DATA_REQUEST 0x0010000000000000ULL /* BT 2.1+ */ |
| #define HCI_EVENT_SIMPLE_PAIRING_COMPLETE 0x0020000000000000ULL /* BT 2.1+ */ |
| #define HCI_EVENT_LINK_SUPERVISION_TIMOUT_CHANGED 0x0080000000000000ULL /* BT 2.1+ */ |
| #define HCI_EVENT_ENHANCED_FLUSH_COMPLETE 0x0100000000000000ULL /* BT 2.1+ */ |
| #define HCI_EVENT_USER_PASSKEY_NOTIFICATION 0x0400000000000000ULL /* BT 2.1+ */ |
| #define HCI_EVENT_KEYPRESS_NOTIFICATION 0x0800000000000000ULL /* BT 2.1+ */ |
| #define HCI_EVENT_REMOTE_HOST_SUPPORTED_FEATURES 0x1000000000000000ULL /* BT 2.1+ */ |
| #define HCI_EVENT_ALL_BT_2_1 0x1DBFFFFFFFFFFFFFULL |
| #define HCI_EVENT_ALL_BT_3_0 0x1DBFFFFFFFFFFFFFULL |
| #define HCI_EVENT_LE_META 0x2000000000000000ULL /* BT 4.0+ */ |
| #define HCI_EVENT_ALL_BT_4_0 0x3DBFFFFFFFFFFFFFULL |
| #define HCI_EVENT_ALL_BT_4_1 0x3DBFFFFFFFFFFFFFULL |
| #define HCI_EVENT_ALL_BT_4_2 0x3DBFFFFFFFFFFFFFULL |
| #define HCI_EVENT_ALL_BT_5_0 0x3DBFFFFFFFFFFFFFULL |
| |
| #define HCI_EVENT_P2_PHYS_LINK_COMPLETE 0x0000000000000001ULL /* BT 3.0+ */ |
| #define HCI_EVENT_P2_CHANNEL_SELECTED 0x0000000000000002ULL /* BT 3.0+ */ |
| #define HCI_EVENT_P2_DISCONNECTION_PHYSICAL_LINK 0x0000000000000004ULL /* BT 3.0+ */ |
| #define HCI_EVENT_P2_PHYSICAL_LINK_LOSS_EARLY_WARNING 0x0000000000000008ULL /* BT 3.0+ */ |
| #define HCI_EVENT_P2_PHYSICAL_LINK_RECOVERY 0x0000000000000010ULL /* BT 3.0+ */ |
| #define HCI_EVENT_P2_LOGICAL_LINK_COMPLETE 0x0000000000000020ULL /* BT 3.0+ */ |
| #define HCI_EVENT_P2_DISCONNECTION_LOGICAL_LINK_COMPLETE 0x0000000000000040ULL /* BT 3.0+ */ |
| #define HCI_EVENT_P2_FLOW_SPEC_MODIFY_COMPLETE 0x0000000000000080ULL /* BT 3.0+ */ |
| #define HCI_EVENT_P2_NUMBER_OF_COMPLETED_DATA_BLOCKS 0x0000000000000100ULL /* BT 3.0+ */ |
| #define HCI_EVENT_P2_AMP_START_TEST 0x0000000000000200ULL /* BT 3.0+ */ |
| #define HCI_EVENT_P2_AMP_TEST_END 0x0000000000000400ULL /* BT 3.0+ */ |
| #define HCI_EVENT_P2_AMP_RECEIVER_REPORT 0x0000000000000800ULL /* BT 3.0+ */ |
| #define HCI_EVENT_P2_SHORT_RANGE_MODE_CHANGE_COMPLETE 0x0000000000001000ULL /* BT 3.0+ */ |
| #define HCI_EVENT_P2_AMP_STATUS_CHANGE 0x0000000000002000ULL /* BT 3.0+ */ |
| #define HCI_EVENT_P2_ALL_BT_3_0 0x0000000000003FFFULL |
| #define HCI_EVENT_P2_ALL_BT_4_0 0x0000000000003FFFULL |
| #define HCI_EVENT_P2_TRIGGERED_CLOCK_CAPTURE 0x0000000000004000ULL /* BT 4.1+ */ |
| #define HCI_EVENT_P2_SYNCH_TRAIN_COMPLETE 0x0000000000008000ULL /* BT 4.1+ */ |
| #define HCI_EVENT_P2_SYNCH_TRAIN_RECEIVED 0x0000000000010000ULL /* BT 4.1+ */ |
| #define HCI_EVENT_P2_CONNLESS_SLAVE_BROADCAST_RXED 0x0000000000020000ULL /* BT 4.1+ */ |
| #define HCI_EVENT_P2_CONNLESS_SLAVE_BROADCAST_TIMEOUT 0x0000000000040000ULL /* BT 4.1+ */ |
| #define HCI_EVENT_P2_TRUNCATED_PAGE_COMPLETE 0x0000000000080000ULL /* BT 4.1+ */ |
| #define HCI_EVENT_P2_SLAVE_PAGE_RESPONSE_TIMEOUT 0x0000000000100000ULL /* BT 4.1+ */ |
| #define HCI_EVENT_P2_CONNLESS_SLAVE_BROADCAST_CHANNEL_MAP_CHANGE 0x0000000000200000ULL /* BT 4.1+ */ |
| #define HCI_EVENT_P2_INQUIRY_RESPONSE_NOTIFICATION 0x0000000000400000ULL /* BT 4.1+ */ |
| #define HCI_EVENT_P2_AUTHENTICATED_PAYLOAD_TIMEOUT_EXPIRED 0x0000000000800000ULL /* BT 4.1+ */ |
| #define HCI_EVENT_P2_ALL_BT_4_1 0x0000000000FFFFFFULL |
| #define HCI_EVENT_P2_ALL_BT_4_2 0x0000000000FFFFFFULL |
| #define HCI_EVENT_P2_SAM_STATUS_CHANGE 0x0000000001000000ULL /* BT 5.0+ */ |
| #define HCI_EVENT_P2_ALL_BT_5_0 0x0000000001FFFFFFULL |
| |
| |
| #define HCI_LE_EVENT_CONN_COMPLETE 0x0000000000000001ULL /* BT 4.0+ */ |
| #define HCI_LE_EVENT_ADV_REPORT 0x0000000000000002ULL /* BT 4.0+ */ |
| #define HCI_LE_EVENT_CONN_UPDATE_COMPLETE 0x0000000000000004ULL /* BT 4.0+ */ |
| #define HCI_LE_EVENT_READ_REMOTE_USED_FEATURES_COMPLETE 0x0000000000000008ULL /* BT 4.0+ */ |
| #define HCI_LE_EVENT_LTK_REQUEST 0x0000000000000010ULL /* BT 4.0+ */ |
| #define HCI_LE_EVENT_REMOTE_CONNECTION_PARAMETER_REQUEST 0x0000000000000020ULL /* BT 4.1+ */ |
| #define HCI_LE_EVENT_DATA_LENGTH_CHANGE 0x0000000000000040ULL /* BT 4.2+ */ |
| #define HCI_LE_EVENT_READ_LOCAL_P256_PUB_KEY_COMPLETE 0x0000000000000080ULL /* BT 4.2+ */ |
| #define HCI_LE_EVENT_GENERATE_DHKEY_COMPLETE 0x0000000000000100ULL /* BT 4.2+ */ |
| #define HCI_LE_EVENT_ENHANCED_CONN_COMPLETE 0x0000000000000200ULL /* BT 4.2+ */ |
| #define HCI_LE_EVENT_DIRECT_ADV_REPORT 0x0000000000000400ULL /* BT 4.2+ */ |
| |
| #define HCI_LE_EVENT_PHY_UPDATE_COMPLETE 0x0000000000000800ULL /* BT 5.0+ */ |
| #define HCI_LE_EVENT_EXTD_ADV_REPORT 0x0000000000001000ULL /* BT 5.0+ */ |
| #define HCI_LE_EVENT_PERIODIC_ADV_SYNC_ESTABLISHED 0x0000000000002000ULL /* BT 5.0+ */ |
| #define HCI_LE_EVENT_PERIODIC_ADV_REPORT 0x0000000000004000ULL /* BT 5.0+ */ |
| #define HCI_LE_EVENT_PERIODIC_ADV_SYNC_LOST 0x0000000000008000ULL /* BT 5.0+ */ |
| #define HCI_LE_EVENT_EXTD_SCAN_TIMEOUT 0x0000000000010000ULL /* BT 5.0+ */ |
| #define HCI_LE_EVENT_EXT_ADV_SET_TERMINATED 0x0000000000020000ULL /* BT 5.0+ */ |
| #define HCI_LE_EVENT_SCAN_REQUEST_RECVD 0x0000000000040000ULL /* BT 5.0+ */ |
| #define HCI_LE_EVENT_CHAN_SEL_ALGO_EVT 0x0000000000080000ULL /* BT 5.0+ */ |
| |
| #define HCI_LE_FTR_ENCRYPTION 0x0000000000000001ULL /* BT 4.0+ */ |
| #define HCI_LE_FTR_CONNECTION_PARAMETERS_REQUEST 0x0000000000000002ULL /* BT 4.1+ */ |
| #define HCI_LE_FTR_EXTENDED_REJECT_INDICATION 0x0000000000000004ULL /* BT 4.1+ */ |
| #define HCI_LE_FTR_SLAVE_INITIATED_FEATURES_EXCHANGE 0x0000000000000008ULL /* BT 4.1+ */ |
| #define HCI_LE_FTR_LE_PING 0x0000000000000010ULL /* BT 4.1+ */ |
| |
| #define HCI_LE_EVENT_ALL_BT_4_0 0x000000000000001FULL |
| #define HCI_LE_EVENT_ALL_BT_4_1 0x000000000000003FULL |
| #define HCI_LE_EVENT_ALL_BT_4_2 0x00000000000007FFULL |
| #define HCI_LE_EVENT_ALL_BT_5_0 0x00000000000FFFFFULL |
| |
| |
| |
| |
| #define HCI_OGF_Link_Control 1 |
| |
| |
| /* ==== BT 1.1 ==== */ |
| |
| #define HCI_CMD_Inquiry 0x0001 /* status */ |
| struct hciInquiry { |
| uint8_t lap[3]; |
| uint8_t inqLen; |
| uint8_t numResp; |
| } __packed; |
| |
| #define HCI_CMD_Inquiry_Cancel 0x0002 /* complete */ |
| struct hciCmplInquiryCancel { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Periodic_Inquiry_Mode 0x0003 /* complete */ |
| struct hciPeriodicInquiryMode { |
| uint16_t maxPeriodLen; |
| uint16_t minPeriodLen; |
| uint8_t lap[3]; |
| uint8_t inqLen; |
| uint8_t numResp; |
| } __packed; |
| struct hciCmplPeriodicInquiryMode { |
| uint8_t status; |
| } __packed; |
| |
| |
| #define HCI_CMD_Exit_Periodic_Inquiry_Mode 0x0004 /* complete */ |
| |
| #define HCI_CMD_Create_Connection 0x0005 /* status */ |
| struct hciCreateConnection { |
| uint8_t mac[6]; |
| uint16_t allowedPackets; /* HCI_PKT_TYP_* */ |
| uint8_t PSRM; |
| uint16_t clockOffset; /* possibly | HCI_CLOCK_OFST_VALID */ |
| uint8_t allowRoleSwitch; |
| } __packed; |
| |
| #define HCI_CMD_Disconnect 0x0006 /* status */ |
| struct hciDisconnect { |
| uint16_t conn; |
| uint8_t reason; |
| } __packed; |
| |
| #define HCI_CMD_Add_SCO_Connection 0x0007 /* status */ /* deprecated in BT 1.2+ */ |
| struct hciAddScoConnection { |
| uint16_t conn; |
| uint16_t packetTypes; /* HCI_PKT_TYP_SCO_* */ |
| } __packed; |
| |
| #define HCI_CMD_Create_Connection_Cancel 0x0008 /* complete */ |
| struct hciCreateConnectionCancel { |
| uint8_t mac[6]; |
| } __packed; |
| struct hciCmplCreateConnectionCancel { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_CMD_Accept_Connection_Request 0x0009 /* status */ |
| struct hciAcceptConnection { |
| uint8_t mac[6]; |
| uint8_t remainSlave; |
| } __packed; |
| |
| #define HCI_CMD_Reject_Connection_Request 0x000A /* status */ |
| struct hciRejectConnection { |
| uint8_t mac[6]; |
| uint8_t reason; |
| } __packed; |
| |
| #define HCI_CMD_Link_Key_Request_Reply 0x000B /* complete */ |
| struct hciLinkKeyRequestReply { |
| uint8_t mac[6]; |
| uint8_t key[16]; |
| } __packed; |
| struct hciCmplLinkKeyRequestReply { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_CMD_Link_Key_Request_Negative_Reply 0x000C /* complete */ |
| struct hciLinkKeyRequestNegativeReply { |
| uint8_t mac[6]; |
| } __packed; |
| struct hciCmplLinkKeyRequestNegativeReply { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_CMD_PIN_Code_Request_Reply 0x000D /* complete */ |
| struct hciPinCodeRequestReply { |
| uint8_t mac[6]; |
| uint8_t pinCodeLen; |
| uint8_t pinCode[16]; |
| } __packed; |
| struct hciCmplPinCodeRequestReply { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_CMD_PIN_Code_Request_Negative_Reply 0x000E /* complete */ |
| struct hciPinCodeRequestNegativeReply { |
| uint8_t mac[6]; |
| } __packed; |
| struct hciCmplPinCodeRequestNegativeReply { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_CMD_Change_Connection_Packet_Type 0x000F /* status */ |
| struct hciChangeConnectionPacketType { |
| uint16_t conn; |
| uint16_t allowedPackets; /* HCI_PKT_TYP_* */ |
| } __packed; |
| |
| #define HCI_CMD_Authentication_Requested 0x0011 /* status */ |
| struct hciAuthRequested { |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_Set_Connection_Encryption 0x0013 /* status */ |
| struct hciSetConnectionEncryption { |
| uint16_t conn; |
| uint8_t encrOn; |
| } __packed; |
| |
| #define HCI_CMD_Change_Connection_Link_Key 0x0015 /* status */ |
| struct hciChangeConnLinkKey { |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_Master_Link_Key 0x0017 /* status */ |
| struct hciMasterLinkKey { |
| uint8_t useTempKey; |
| } __packed; |
| |
| #define HCI_CMD_Remote_Name_Request 0x0019 /* status */ |
| struct hciRemoteNameRequest { |
| uint8_t mac[6]; |
| uint8_t PSRM; |
| uint8_t PSM; /* deprecated, should be zero for BT 1.2+ */ |
| uint16_t clockOffset; /* possibly | HCI_CLOCK_OFST_VALID */ |
| } __packed; |
| |
| #define HCI_CMD_Remote_Name_Request_Cancel 0x001A /* complete */ |
| struct hciRemoteNameRequestCancel { |
| uint8_t mac[6]; |
| } __packed; |
| struct hciCmplRemoteNameRequestCancel { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_CMD_Read_Remote_Supported_Features 0x001B /* status */ |
| struct hciReadRemoteSupportedFeatures { |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_Read_Remote_Version_Information 0x001D /* status */ |
| struct hciReadRemoteVersionInfo { |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_Read_Clock_Offset 0x001F /* status */ |
| struct hciReadClockOffset { |
| uint16_t conn; |
| } __packed; |
| |
| |
| /* ==== BT 1.2 ==== */ |
| |
| #define HCI_CMD_Read_Remote_Extended_Features 0x001C /* status */ |
| struct hciReadRemoteExtendedFeatures { |
| uint16_t conn; |
| uint8_t page; /* BT1.2 max: 0 */ |
| } __packed; |
| |
| #define HCI_CMD_Read_Lmp_Handle 0x0020 /* complete */ |
| struct hciReadLmpHandle { |
| uint16_t handle; |
| } __packed; |
| struct hciCmplReadLmpHandle { |
| uint8_t status; |
| uint16_t handle; |
| uint8_t lmpHandle; |
| uint32_t reserved; |
| } __packed; |
| |
| #define HCI_CMD_Setup_Synchronous_Connection 0x0028 /* status */ |
| struct hciSetupSyncConn { |
| uint16_t conn; |
| uint32_t txBandwidth; |
| uint32_t rxBandwidth; |
| uint16_t maxLatency; |
| uint16_t voiceSetting; |
| uint8_t retransmissionEffort; |
| uint16_t allowedPacketsSco; /* HCI_PKT_TYP_SCO_* */ |
| } __packed; |
| |
| #define HCI_CMD_Accept_Synchronous_Connection_Request 0x0029 /* status */ |
| struct hciAcceptSyncConn { |
| uint8_t mac[6]; |
| uint32_t txBandwidth; |
| uint32_t rxBandwidth; |
| uint16_t maxLatency; |
| uint16_t contentFormat; |
| uint8_t retransmissionEffort; |
| uint16_t allowedPacketsSco; /* HCI_PKT_TYP_SCO_* */ |
| } __packed; |
| |
| #define HCI_CMD_Reject_Synchronous_Connection_Request 0x002A /* status */ |
| struct hciRejectSyncConn { |
| uint8_t mac[6]; |
| uint8_t reason; |
| } __packed; |
| |
| |
| /* ==== BR 2.1 ==== */ |
| |
| #define HCI_CMD_IO_Capability_Request_Reply 0x002B /* complete */ |
| struct hciIoCapabilityRequestReply { |
| uint8_t mac[6]; |
| uint8_t cap; /* HCI_DISPLAY_CAP_* */ |
| uint8_t oobPresent; |
| uint8_t authReqments; /* HCI_AUTH_REQMENT_* */ |
| } __packed; |
| struct hciCmplIoCapabilityRequestReply { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_CMD_User_Confirmation_Request_Reply 0x002C /* complete */ |
| struct hciUserConfRequestReply { |
| uint8_t mac[6]; |
| } __packed; |
| struct hciCmplUserConfRequestReply { |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_CMD_User_Confirmation_Request_Negative_Reply 0x002D /* complete */ |
| struct hciUserConfRequestNegativeReply { |
| uint8_t mac[6]; |
| } __packed; |
| struct hciCmplUserConfRequestNegativeReply { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_CMD_User_Passkey_Request_Reply 0x002E /* complete */ |
| struct hciUserPasskeyRequestReply { |
| uint8_t mac[6]; |
| uint32_t num; |
| } __packed; |
| struct hciCmplUserPasskeyRequestReply { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_CMD_User_Passkey_Request_Negative_Reply 0x002F /* complete */ |
| struct hciUserPasskeyRequestNegativeReply { |
| uint8_t mac[6]; |
| } __packed; |
| struct hciCmplUserPasskeyRequestNegativeReply { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_CMD_Remote_OOB_Data_Request_Reply 0x0030 /* complete */ |
| struct hciRemoteOobDataRequestReply { |
| uint8_t mac[6]; |
| uint8_t C[16]; |
| uint8_t R[16]; |
| } __packed; |
| struct hciCmplRemoteOobDataRequestReply { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_CMD_Remote_OOB_Data_Request_Negative_Reply 0x0033 /* complete */ |
| struct hciRemoteOobDataRequestNegativeReply { |
| uint8_t mac[6]; |
| } __packed; |
| struct hciCmplRemoteOobDataRequestNegativeReply { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_CMD_IO_Capability_Request_Negative_Reply 0x0034 /* complete */ |
| struct hciIoCapabilityRequestNegativeReply { |
| uint8_t mac[6]; |
| uint8_t reason; |
| } __packed; |
| struct hciCmplIoCapabilityRequestNegativeReply { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| |
| /* ==== BT 3.0 ==== */ |
| |
| #define HCI_CMD_Create_Physical_link 0x0035 /* status */ |
| struct hciCreatePhysicalLink { |
| uint8_t physLinkHandle; |
| uint8_t dedicatedAmpKeyLength; |
| uint8_t dedicatedAmpKeyType; |
| uint8_t dedicatedAmpKey; |
| } __packed; |
| |
| #define HCI_CMD_Accept_Physical_link 0x0036 /* status */ |
| struct hciAcceptPhysicalLink { |
| uint8_t physLinkHandle; |
| uint8_t dedicatedAmpKeyLength; |
| uint8_t dedicatedAmpKeyType; |
| uint8_t dedicatedAmpKey; |
| } __packed; |
| |
| #define HCI_CMD_Disconnect_Physical_link 0x0037 /* status */ |
| struct hciDisconnectPhysicalLink { |
| uint8_t physLinkHandle; |
| uint8_t reason; |
| } __packed; |
| |
| #define HCI_CMD_Create_Logical_link 0x0038 /* status */ |
| struct hciCreateLogicalLink { |
| uint8_t physLinkHandle; |
| uint8_t txFlowSpec[16]; |
| uint8_t rxFlowSpec[16]; |
| } __packed; |
| |
| #define HCI_CMD_Accept_Logical_Link 0x0039 /* status */ |
| struct hciAcceptLogicalLink { |
| uint8_t physLinkHandle; |
| uint8_t txFlowSpec[16]; |
| uint8_t rxFlowSpec[16]; |
| } __packed; |
| |
| #define HCI_CMD_Disconnect_Logical_link 0x003A /* status */ |
| struct hciDisconnectLogicalLink { |
| uint8_t physLinkHandle; |
| } __packed; |
| |
| #define HCI_CMD_Logical_Link_Cancel 0x003B /* complete */ |
| struct hciLogicalLinkCancel { |
| uint8_t physLinkHandle; |
| uint8_t txFlowSpecID; |
| } __packed; |
| struct hciCmplLogicalLinkCancel { |
| uint8_t status; |
| uint8_t physLinkHandle; |
| uint8_t txFlowSpecID; |
| } __packed; |
| |
| #define HCI_CMD_Flow_Spec_Modify 0x003C /* status */ |
| struct hciFlowSpecModify { |
| uint16_t handle; |
| uint8_t txFlowSpec[16]; |
| uint8_t rxFlowSpec[16]; |
| } __packed; |
| |
| |
| /* ==== BT 4.1 ==== */ |
| |
| #define HCI_CMD_Enhanced_Setup_Synchronous_Connection 0x003D /* status */ |
| struct hciEnhSetupSyncConn { |
| uint16_t conn; |
| uint32_t txBandwidth; |
| uint32_t rxBandwidth; |
| uint8_t txCodingFormat[5]; |
| uint8_t rxCodingFormat[5]; |
| uint16_t txCodecFrameSize; |
| uint16_t rxCodecFrameSize; |
| uint32_t inputBandwidth; |
| uint32_t outputBandwidth; |
| uint8_t inputCodingFormat[5]; |
| uint8_t outputCodingFormat[5]; |
| uint16_t inputCodedDataSize; |
| uint16_t outputCodedDataSize; |
| uint8_t inputPcmDataFormat; |
| uint8_t outputPcmDataFormat; |
| uint8_t inputPcmSamplePayloadMsbPosition; |
| uint8_t outputPcmSamplePayloadMsbPosition; |
| uint8_t inputDataPath; |
| uint8_t outputDataPath; |
| uint8_t inputTransportUnitSize; |
| uint8_t outputTransportUnitSize; |
| uint16_t maxLatency; |
| uint16_t allowedPacketsSco; /* HCI_PKT_TYP_SCO_* */ |
| uint8_t retransmissionEffort; |
| } __packed; |
| |
| #define HCI_CMD_Enhanced_Accept_Synchronous_Connection 0x003E /* status */ |
| struct hciEnhAcceptSyncConn { |
| uint8_t mac[6]; |
| uint32_t txBandwidth; |
| uint32_t rxBandwidth; |
| uint8_t txCodingFormat[5]; |
| uint8_t rxCodingFormat[5]; |
| uint16_t txCodecFrameSize; |
| uint16_t rxCodecFrameSize; |
| uint32_t inputBandwidth; |
| uint32_t outputBandwidth; |
| uint8_t inputCodingFormat[5]; |
| uint8_t outputCodingFormat[5]; |
| uint16_t inputCodedDataSize; |
| uint16_t outputCodedDataSize; |
| uint8_t inputPcmDataFormat; |
| uint8_t outputPcmDataFormat; |
| uint8_t inputPcmSamplePayloadMsbPosition; |
| uint8_t outputPcmSamplePayloadMsbPosition; |
| uint8_t inputDataPath; |
| uint8_t outputDataPath; |
| uint8_t inputTransportUnitSize; |
| uint8_t outputTransportUnitSize; |
| uint16_t maxLatency; |
| uint16_t allowedPacketsSco; /* HCI_PKT_TYP_SCO_* */ |
| uint8_t retransmissionEffort; |
| } __packed; |
| |
| #define HCI_CMD_Truncated_Page 0x003F /* status */ |
| struct hciTruncatedPage { |
| uint8_t mac[6]; |
| uint8_t PSRM; |
| uint16_t clockOffset; /* possibly | HCI_CLOCK_OFST_VALID */ |
| } __packed; |
| |
| #define HCI_CMD_Truncated_Page_Cancel 0x0040 /* complete */ |
| struct hciTruncatedPageCancel { |
| uint8_t mac[6]; |
| } __packed; |
| struct hciCmplTruncatedPageCancel { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_CMD_Set_Connectionless_Slave_Broadcast 0x0041 /* complete */ |
| struct hciSetConnectionlessSlaveBroadcast { |
| uint8_t enabled; |
| uint8_t ltAddr; /* 1..7 */ |
| uint8_t lpoAllowed; /* can sleep? */ |
| uint16_t allowedPackets; /* HCI_PKT_TYP_* */ |
| uint16_t intervalMin; |
| uint16_t intervalMax; |
| uint16_t supervisionTimeout; |
| } __packed; |
| struct hciCmplSetConnectionlessSlaveBroadcast { |
| uint8_t status; |
| uint8_t ltAddr; /* 1..7 */ |
| uint16_t interval; |
| } __packed; |
| |
| #define HCI_CMD_Set_Connectionless_Slave_Broadcast_Receive 0x0042 /* complete */ |
| struct hciSetConnectionlessSlaveBroadcastReceive { |
| uint8_t enabled; |
| uint8_t mac[6]; /* add rof tranmitter */ |
| uint8_t ltAddr; /* 1..7 */ |
| uint16_t interval; |
| uint32_t clockOffset; /* lower 28 bits used */ |
| uint32_t nextConnectionlessSlaveBroadcastClock; /* lower 28 bits used */ |
| uint16_t supervisionTimeout; |
| uint8_t remoteTimingAccuracy; |
| uint8_t skip; |
| uint16_t allowedPackets; /* HCI_PKT_TYP_* */ |
| uint8_t afhChannelMap[10]; |
| } __packed; |
| struct hciCmplSetConnectionlessSlaveBroadcastReceive { |
| uint8_t status; |
| uint8_t mac[6]; /* add rof tranmitter */ |
| uint8_t ltAddr; /* 1..7 */ |
| } __packed; |
| |
| #define HCI_CMD_Start_Synchronisation_Train 0x0043 /* status */ |
| |
| #define HCI_CMD_Receive_Synchronisation_Train 0x0044 /* status */ |
| struct hciReceiveSyncTrain { |
| uint8_t mac[6]; |
| uint16_t syncScanTimeout; |
| uint16_t syncScanWindow; |
| uint16_t syncScanInterval; |
| } __packed; |
| |
| #define HCI_CMD_Remote_OOB_Extended_Data_Request_Reply 0x0045 /* complete */ |
| struct hciRemoteOobExtendedDataRequestReply { |
| uint8_t mac[6]; |
| uint8_t C_192[16]; |
| uint8_t R_192[16]; |
| uint8_t C_256[16]; |
| uint8_t R_256[16]; |
| } __packed; |
| struct hciCmplRemoteOobExtendedDataRequestReply { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| |
| |
| |
| |
| #define HCI_OGF_Link_Policy 2 |
| |
| |
| /* ==== BT 1.1 ==== */ |
| |
| #define HCI_CMD_Hold_Mode 0x0001 /* status */ |
| struct hciHoldMode { |
| uint16_t conn; |
| uint16_t holdModeMaxInt; |
| uint16_t holdModeMinInt; |
| } __packed; |
| |
| #define HCI_CMD_Sniff_Mode 0x0003 /* status */ |
| struct hciSniffMode { |
| uint16_t conn; |
| uint16_t sniffMaxInt; |
| uint16_t sniffMinInt; |
| uint16_t sniffAttempt; |
| uint16_t sniffTimeout; |
| } __packed; |
| |
| #define HCI_CMD_Exit_Sniff_Mode 0x0004 /* status */ |
| struct hciExitSniffMode { |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_Park_State 0x0005 /* status */ |
| struct hciParkState { |
| uint16_t conn; |
| uint16_t beaconMaxInt; |
| uint16_t beaconMinInt; |
| } __packed; |
| |
| #define HCI_CMD_Exit_Park_State 0x0006 /* status */ |
| struct hciExitParkState { |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_QoS_Setup 0x0007 /* status */ |
| struct hisQosSetup { |
| uint16_t conn; |
| uint8_t flags; |
| uint8_t serviceType; |
| uint32_t tokenRate; |
| uint32_t peakBandwidth; |
| uint32_t latency; |
| uint32_t delayVariation; |
| } __packed; |
| |
| #define HCI_CMD_Role_Discovery 0x0009 /* complete */ |
| struct hciRoleDiscovery { |
| uint16_t conn; |
| } __packed; |
| struct hciCmplRoleDiscovery { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Switch_Role 0x000B /* status */ |
| struct hciSwitchRole { |
| uint8_t mac[6]; |
| uint8_t becomeSlave; |
| } __packed; |
| |
| #define HCI_CMD_Read_Link_Policy_Settings 0x000C /* complete */ |
| struct hciReadLinkPolicySettings { |
| uint16_t conn; |
| } __packed; |
| struct hciCmplReadLinkPolicySettings { |
| uint8_t status; |
| uint16_t conn; |
| uint16_t policy; /* HCI_LINK_POLICY_* */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Link_Policy_Settings 0x000D /* complete */ |
| struct hciWriteLinkPolicySettings { |
| uint16_t conn; |
| uint16_t policy; /* HCI_LINK_POLICY_* */ |
| } __packed; |
| struct hciCmplWriteLinkPolicySettings { |
| uint8_t status; |
| uint16_t conn; |
| } __packed; |
| |
| |
| /* ==== BT 1.2 ==== */ |
| |
| #define HCI_CMD_Read_Default_Link_Policy_Settings 0x000E /* complete */ |
| struct hciCmplReadDefaultLinkPolicySettings { |
| uint8_t status; |
| uint16_t policy; /* HCI_LINK_POLICY_* */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Default_Link_Policy_Settings 0x000F /* complete */ |
| struct hciWriteDefaultLinkPolicySettings { |
| uint16_t policy; /* HCI_LINK_POLICY_* */ |
| } __packed; |
| struct hciCmplWriteDefaultLinkPolicySettings { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Flow_Specification 0x0010 /* status */ |
| struct hisFlowSpecification { |
| uint16_t conn; |
| uint8_t flags; |
| uint8_t flowDirection; |
| uint8_t serviceType; |
| uint32_t tokenRate; |
| uint32_t tockenBucketSize; |
| uint32_t peakBandwidth; |
| uint32_t accessLatency; |
| } __packed; |
| |
| |
| /* ==== BT 2.1 ==== */ |
| |
| #define HCI_CMD_Sniff_Subrating 0x0011 /* complete */ |
| struct hciSniffSubrating { |
| uint16_t conn; |
| uint16_t maxLatency; |
| uint16_t minRemoteTimeout; |
| uint16_t minLocalTimeout; |
| } __packed; |
| struct hciCmplSniffSubrating { |
| uint8_t status; |
| uint16_t conn; |
| } __packed; |
| |
| |
| |
| |
| |
| #define HCI_OGF_Controller_and_Baseband 3 |
| |
| |
| /* ==== BT 1.1 ==== */ |
| |
| #define HCI_CMD_Set_Event_Mask 0x0001 /* complete */ |
| struct hciSetEventMask { |
| uint64_t mask; /* bitmask of HCI_EVENT_* */ |
| } __packed; |
| struct hciCmplSetEventMask { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Reset 0x0003 /* complete */ |
| struct hciCmplReset { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Set_Event_Filter 0x0005 /* complete */ |
| struct hciSetEventFilter { |
| uint8_t filterType; /* HCI_FILTER_TYPE_* */ |
| /* more things are optional here */ |
| } __packed; |
| struct hciCmplSetEventFiler { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Flush 0x0008 /* complete */ |
| struct hciFlush { |
| uint16_t conn; |
| } __packed; |
| struct hciCmplFlush { |
| uint8_t status; |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_Read_PIN_Type 0x0009 /* complete */ |
| struct hciCmplReadPinType { |
| uint8_t status; |
| uint8_t isFixed; |
| } __packed; |
| |
| #define HCI_CMD_Write_PIN_Type 0x000A /* complete */ |
| struct hciWritePinType { |
| uint8_t isFixed; |
| } __packed; |
| struct hciCmplWritePinType { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Create_New_Unit_Key 0x000B /* complete */ |
| struct hciCmplCreateNewUnitKey { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Stored_Link_Key 0x000D /* complete */ |
| struct hciReadStoredLinkKey { |
| uint8_t mac[6]; |
| uint8_t readAll; |
| } __packed; |
| struct hciCmplReadStoredLinkKey { |
| uint8_t status; |
| uint16_t maxNumKeys; |
| uint16_t numKeysRead; |
| } __packed; |
| |
| #define HCI_CMD_Write_Stored_Link_Key 0x0011 /* complete */ |
| struct hciWriteStoredLinkKeyItem { |
| uint8_t mac[6]; |
| uint8_t key[16]; |
| } __packed; |
| struct hciWriteStoredLinkKey { |
| uint8_t numKeys; |
| struct hciWriteStoredLinkKeyItem items[]; |
| } __packed; |
| struct hciCmplWriteStoredLinkKey { |
| uint8_t status; |
| uint8_t numKeysWritten; |
| } __packed; |
| |
| #define HCI_CMD_Delete_Stored_Link_Key 0x0012 /* complete */ |
| struct hciDeleteStoredLinkKey { |
| uint8_t mac[6]; |
| uint8_t deleteAll; |
| } __packed; |
| struct hciCmplDeleteStoredLinkKey { |
| uint8_t status; |
| uint8_t numKeysDeleted; |
| } __packed; |
| |
| #define HCI_CMD_Write_Local_Name 0x0013 /* complete */ |
| struct hciWriteLocalName { |
| char name[HCI_DEV_NAME_LEN]; |
| } __packed; |
| struct hciCmplWriteLocalName { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Local_Name 0x0014 /* complete */ |
| struct hciCmplReadLocalName { |
| uint8_t status; |
| char name[HCI_DEV_NAME_LEN]; |
| } __packed; |
| |
| #define HCI_CMD_Read_Connection_Accept_Timeout 0x0015 /* complete */ |
| struct hciCmplReadConnAcceptTimeout { |
| uint8_t status; |
| uint16_t timeout; /* in units of 0.625ms 1..0xB540 */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Connection_Accept_Timeout 0x0016 /* complete */ |
| struct hciWriteConnAcceptTimeout { |
| uint16_t timeout; /* in units of 0.625ms 1..0xB540 */ |
| } __packed; |
| struct hciCmplWriteConnAcceptTimeout { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Page_Timeout 0x0017 /* complete */ |
| struct hciCmplReadPageTimeout { |
| uint8_t status; |
| uint16_t timeout; |
| } __packed; |
| |
| #define HCI_CMD_Write_Page_Timeout 0x0018 /* complete */ |
| struct hciWritePageTimeout { |
| uint16_t timeout; |
| } __packed; |
| struct hciCmplWritePageTimeout { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Scan_Enable 0x0019 /* complete */ |
| struct hciCmplReadScanEnable { |
| uint8_t status; |
| uint8_t state; /* bitmask of HCI_SCAN_ENABLE_* */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Scan_Enable 0x001A /* complete */ |
| struct hciWriteScanEnable { |
| uint8_t state; /* bitmask of HCI_SCAN_ENABLE_* */ |
| } __packed; |
| struct hciCmplWriteScanEnable { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Page_Scan_Activity 0x001B /* complete */ |
| struct hciCmplReadPageScanActivity { |
| uint8_t status; |
| uint16_t scanInterval; |
| uint16_t scanWindow; |
| } __packed; |
| |
| #define HCI_CMD_Write_Page_Scan_Activity 0x001C /* complete */ |
| struct hciWritePageScanActivity { |
| uint16_t scanInterval; |
| uint16_t scanWindow; |
| } __packed; |
| struct hciCmplWritePageScanActivity { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Inquiry_Scan_Activity 0x001D /* complete */ |
| struct hciCmplReadInquiryScanActivity { |
| uint8_t status; |
| uint16_t scanInterval; |
| uint16_t scanWindow; |
| } __packed; |
| |
| #define HCI_CMD_Write_Inquiry_Scan_Activity 0x001E /* complete */ |
| struct hciWriteInquiryScanActivity { |
| uint16_t scanInterval; |
| uint16_t scanWindow; |
| } __packed; |
| struct hciCmplWriteInquiryScanActivity { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Authentication_Enable 0x001F /* complete */ |
| struct hciCmplReadAuthEnable { |
| uint8_t status; |
| uint8_t authRequired; |
| } __packed; |
| |
| #define HCI_CMD_Write_Authentication_Enable 0x0020 /* complete */ |
| struct hciWriteAuthEnable { |
| uint8_t authRequired; |
| } __packed; |
| struct hciCmplWriteAuthEnable { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Encryption_Mode 0x0021 /* complete *//* deprecated in BT 2.1+ */ |
| struct hciCmplReadEncryptionMode { |
| uint8_t status; |
| uint8_t encrRequired; |
| } __packed; |
| |
| #define HCI_CMD_Write_Encryption_Mode 0x0022 /* complete *//* deprecated in BT 2.1+ */ |
| struct hciWriteEncryptionMode { |
| uint8_t encrRequired; |
| } __packed; |
| struct hciCmplWriteEncryptionMode { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Class_Of_Device 0x0023 /* complete */ |
| struct hciCmplReadClassOfDevice { |
| uint8_t status; |
| uint8_t cls[3]; |
| } __packed; |
| |
| #define HCI_CMD_Write_Class_Of_Device 0x0024 /* complete */ |
| struct hciWriteClassOfDevice { |
| uint8_t cls[3]; |
| } __packed; |
| struct hciCmplWriteClassOfDevice { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Voice_Setting 0x0025 /* complete */ |
| struct hciCmplReadVoiceSetting { |
| uint8_t status; |
| uint16_t voiceSetting; |
| } __packed; |
| |
| #define HCI_CMD_Write_Voice_Setting 0x0026 /* complete */ |
| struct hciWriteVoiceSetting { |
| uint16_t voiceSetting; |
| } __packed; |
| struct hciCmplWriteVoiceSetting { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Automatic_Flush_Timeout 0x0027 /* complete */ |
| struct hciReadAutoFlushTimeout { |
| uint16_t conn; |
| } __packed; |
| struct hciCmplReadAutoFlushTimeout { |
| uint8_t status; |
| uint16_t conn; |
| uint16_t timeout; |
| } __packed; |
| |
| #define HCI_CMD_Write_Automatic_Flush_Timeout 0x0028 /* complete */ |
| struct hciWriteAutoFlushTimeout { |
| uint16_t conn; |
| uint16_t timeout; |
| } __packed; |
| struct hciCmplWriteAutoFlushTimeout { |
| uint8_t status; |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_Read_Num_Broadcast_Retransmissions 0x0029 /* complete */ |
| struct hciCmplReadNumBroadcastRetransmissions { |
| uint8_t status; |
| uint8_t numRetransmissions; /* 0 .. 0xFE => 1 .. 255 TXes */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Num_Broadcast_Retransmissions 0x002A /* complete */ |
| struct hciWriteNumBroadcastRetransmissions { |
| uint8_t numRetransmissions; /* 0 .. 0xFE => 1 .. 255 TXes */ |
| } __packed; |
| struct hciCmplWriteNumBroadcastRetransmissions { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Hold_Mode_Activity 0x002B /* complete */ |
| struct hciCmplReadHoldModeActivity { |
| uint8_t status; |
| uint8_t holdModeActivity; /* bitfield if HCI_HOLD_MODE_SUSPEND_* */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Hold_Mode_Activity 0x002C /* complete */ |
| struct hciWriteHoldModeActivity { |
| uint8_t holdModeActivity; /* bitfield if HCI_HOLD_MODE_SUSPEND_* */ |
| } __packed; |
| struct hciCmplWriteHoldModeActivity { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Transmit_Power_Level 0x002D /* complete */ |
| struct hciReadTransmitPowerLevel { |
| uint16_t conn; |
| uint8_t max; /* else current */ |
| } __packed; |
| struct hciCmplReadTransmitPowerLevel { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t txPower; /* actually an int8_t */ |
| } __packed; |
| |
| #define HCI_CMD_Read_SCO_Flow_Control_Enable 0x002E /* complete */ |
| struct hciCmplReadSyncFlowCtrl { |
| uint8_t status; |
| uint8_t syncFlowCtrlOn; |
| } __packed; |
| |
| #define HCI_CMD_Write_SCO_Flow_Control_Enable 0x002F /* complete */ |
| struct hciWriteSyncFlowCtrlEnable { |
| uint8_t syncFlowCtrlOn; |
| } __packed; |
| struct hciCmplWriteSyncFlowCtrlEnable { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Set_Controller_To_Host_Flow_Control 0x0031 /* complete */ |
| struct hciSetControllerToHostFlowControl { |
| uint8_t chipToHostFlowCtrl; /* bitmask of HCI_TO_HOST_FLOW_CTRL_* */ |
| } __packed; |
| struct hciCmplSetControllerToHostFlowControl { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Host_Buffer_Size 0x0033 /* complete */ |
| struct hciHostBufferSize { |
| uint16_t maxAclPacket; |
| uint8_t maxScoPacket; |
| uint16_t numAclPackets; |
| uint16_t numScoPackets; |
| } __packed; |
| struct hciCmplHostBufferSize { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Host_Number_Of_Completed_Packets 0x0035 /* special: can be sent anytime (not subj to cmd flow control), does not generate events unless error */ |
| struct hciHostNumberOfCompletedPacketsItem { |
| uint16_t conn; |
| uint16_t numCompletedPackets; |
| } __packed; |
| struct hciHostNumberOfCompletedPackets { |
| uint8_t numHandles; |
| struct hciHostNumberOfCompletedPacketsItem items[]; |
| } __packed; |
| |
| #define HCI_CMD_Read_Link_Supervision_Timeout 0x0036 /* complete */ |
| struct hciReadLinkSupervisionTimeout { |
| uint16_t conn; |
| } __packed; |
| struct hciCmplReadLinkSupervisionTimeout { |
| uint8_t status; |
| uint16_t conn; |
| uint16_t timeout; /* in units of 0.625ms allowed: 1..0xffff, required support 0x0190 - 0xffff */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Link_Supervision_Timeout 0x0037 /* complete */ |
| struct hciWriteLinkSupervisionTimeout { |
| uint16_t conn; |
| uint16_t timeout; /* in units of 0.625ms allowed: 1..0xffff, required support 0x0190 - 0xffff */ |
| } __packed; |
| struct hciCmplWriteLinkSupervisionTimeout { |
| uint8_t status; |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_Read_Number_Of_Supported_IAC 0x0038 /* complete */ |
| struct hciCmplReadNumberOfSupportedIac { |
| uint8_t status; |
| uint8_t numSupportedIac; |
| } __packed; |
| |
| #define HCI_CMD_Read_Current_IAC_LAP 0x0039 /* complete */ |
| struct hciCmplReadCurrentIacItem { |
| uint8_t iac_lap[3]; |
| } __packed; |
| struct hciCmplReadCurrentIac { |
| uint8_t status; |
| uint8_t numCurrentIac; |
| struct hciCmplReadCurrentIacItem items[]; |
| } __packed; |
| |
| #define HCI_CMD_Write_Current_IAC_LAP 0x003A /* complete */ |
| struct hciWriteCurrentIacLapItem { |
| uint8_t iacLap[3]; |
| } __packed; |
| struct hciWriteCurrentIacLap { |
| uint8_t numCurrentIac; |
| struct hciWriteCurrentIacLapItem items[]; |
| } __packed; |
| struct hciCmplWriteCurrentIacLap { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Page_Scan_Period_Mode 0x003B /* complete */ |
| struct hciCmplReadPageScanPeriodMode { |
| uint8_t status; |
| uint8_t mode; |
| } __packed; |
| |
| #define HCI_CMD_Write_Page_Scan_Period_Mode 0x003C /* complete */ |
| struct hciWritePageScanPeriodMode { |
| uint8_t mode; |
| } __packed; |
| struct hciCmplWritePageScanPeriodMode { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Page_Scan_Mode 0x003D /* complete *//* deprecated in BT 1.2+ */ |
| struct hciCmplReadPageScanMode { |
| uint8_t status; |
| uint8_t pageScanMode; /* nonzero modes are optional */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Page_Scan_Mode 0x003E /* complete *//* deprecated in BT 1.2+ */ |
| struct hciWritePageScanMode { |
| uint8_t pageScanMode; /* nonzero modes are optional */ |
| } __packed; |
| struct hciCmplWritePageScanMode { |
| uint8_t status; |
| } __packed; |
| |
| |
| /* ==== BT 1.2 ==== */ |
| |
| #define HCI_CMD_Set_AFH_Host_Channel_Classification 0x003F /* complete */ |
| struct hciSetAfhHostChannelClassification { |
| uint8_t channels[10]; |
| } __packed; |
| struct hciCmplSetAfhHostChannelClassification { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Inquiry_Scan_Type 0x0042 /* complete */ |
| struct hciCmplReadInquiryScanType { |
| uint8_t status; |
| uint8_t interlaced; /* optional */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Inquiry_Scan_Type 0x0043 /* complete */ |
| struct hciWriteInquiryScanType { |
| uint8_t interlaced; /* optional */ |
| } __packed; |
| struct hciCmplWriteInquiryScanType { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Inquiry_Mode 0x0044 /* complete */ |
| struct hciCmplReadInquryMode { |
| uint8_t status; |
| uint8_t inqMode; /* HCI_INQ_MODE_* */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Inquiry_Mode 0x0045 /* complete */ |
| struct hciWriteInquiryMode { |
| uint8_t inqMode; /* HCI_INQ_MODE_* */ |
| } __packed; |
| struct hciCmplWriteInquiryMode { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Page_Scan_Type 0x0046 /* complete */ |
| struct hciCmplReadPageScanType { |
| uint8_t status; |
| uint8_t interlaced; /* optional */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Page_Scan_Type 0x0047 /* complete */ |
| struct hciWritePageScanType { |
| uint8_t interlaced; /* optional */ |
| } __packed; |
| struct hciCmplWritePageScanType { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_AFH_Channel_Assessment_Mode 0x0048 /* complete */ |
| struct hciCmplReadAfhChannelAssessment { |
| uint8_t status; |
| uint8_t channelAssessmentEnabled; |
| } __packed; |
| |
| #define HCI_CMD_Write_AFH_Channel_Assessment_Mode 0x0049 /* complete */ |
| struct hciWriteAfhChannelAssessment { |
| uint8_t channelAssessmentEnabled; |
| } __packed; |
| struct hciCmplWriteAfhChannelAssessment { |
| uint8_t status; |
| } __packed; |
| |
| |
| /* ==== BT 2.1 ==== */ |
| |
| #define HCI_CMD_Read_Extended_Inquiry_Reponse 0x0051 /* complete */ |
| struct hciCmplReadEIR { |
| uint8_t status; |
| uint8_t useFec; |
| uint8_t data[240]; |
| } __packed; |
| |
| #define HCI_CMD_Write_Extended_Inquiry_Response 0x0052 /* complete */ |
| struct hciWriteEIR { |
| uint8_t useFec; |
| uint8_t data[240]; |
| } __packed; |
| struct hciCmplWriteEIR { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Refresh_Encryption_Key 0x0052 /* status */ |
| struct hciRefreshEncryptionKey { |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_Read_Simple_Pairing_Mode 0x0055 /* complete */ |
| struct hciCmplReadSimplePairingMore { |
| uint8_t status; |
| uint8_t useSsp; |
| } __packed; |
| |
| #define HCI_CMD_Write_Simple_Pairing_Mode 0x0056 /* complete */ |
| struct hciWriteSimplePairingMode { |
| uint8_t useSsp; |
| } __packed; |
| struct hciCmplWriteSimplePairingMode { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Local_OOB_Data 0x0057 /* complete */ |
| struct hciCmplReadLocalOobData { |
| uint8_t status; |
| uint8_t C[16]; |
| uint8_t R[16]; |
| } __packed; |
| |
| #define HCI_CMD_Read_Inquiry_Response_Transmit_Power_Level 0x0058 /* complete */ |
| struct hciCmplReadInquiryTransmitPowerLevel { |
| uint8_t status; |
| uint8_t power; /* actually an int8_t */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Inquiry_Transmit_Power_Level 0x0059 /* complete */ |
| struct hciWriteInquiryTransmitPowerLevel { |
| uint8_t power; /* actually an int8_t */ |
| } __packed; |
| struct hciCmplWriteInquiryTransmitPowerLevel { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Default_Erroneous_Data_Reporting 0x005A /* complete */ |
| struct hciCmplReadErroneousDataReporting { |
| uint8_t status; |
| uint8_t reportingEnabled; |
| } __packed; |
| |
| #define HCI_CMD_Write_Default_Erroneous_Data_Reporting 0x005B /* complete */ |
| struct hciWriteErroneousDataReporting { |
| uint8_t reportingEnabled; |
| } __packed; |
| struct hciCmplWriteErroneousDataReporting { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Enhanced_Flush 0x005F /* status */ |
| struct hciEnhancedFlush { |
| uint16_t conn; |
| uint8_t which; /* 0 is the only value - flush auto-flushable packets only */ |
| } __packed; |
| |
| #define HCI_CMD_Send_Keypress_Notification 0x0060 /* complete */ |
| struct hciSendKeypressNotification { |
| uint8_t mac[6]; |
| uint8_t notifType; /* HCI_SSP_KEY_ENTRY_* */ |
| } __packed; |
| struct hciCmplSendKeypressNotification { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| |
| /* ==== BT 3.0 ==== */ |
| |
| #define HCI_CMD_Read_Logical_Link_Accept_Timeout 0x0061 /* complete */ |
| struct hciCmplReadLogicalLinkTimeout { |
| uint8_t status; |
| uint16_t timeout; /* in units of 0.625ms 1..0xB540. Required support 0x00A0..0xB540 */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Logical_Link_Accept_Timeout 0x0062 /* complete */ |
| struct hciWriteLogicalLinkTimeout { |
| uint16_t timeout; /* in units of 0.625ms 1..0xB540. Required support 0x00A0..0xB540 */ |
| } __packed; |
| struct hciCmplWriteLogicalLinkTimeout { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Set_Event_Mask_Page_2 0x0063 /* complete */ |
| struct hciSetEventMaskPage2 { |
| uint64_t mask; /* bitmask of HCI_EVENT_P2_* */ |
| } __packed; |
| struct hciCmplSetEventMaskPage2 { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Location_Data 0x0064 /* complete */ |
| struct hciCmplReadLocationData { |
| uint8_t status; |
| uint8_t regulatoryDomainKnown; |
| uint16_t domain; /* ISO3166-1 code if known, else 0x5858 'XX' */ |
| uint8_t locationSuffix; /* HCI_LOCATION_DOMAIN_OPTION_* */ |
| uint8_t mainsPowered; |
| } __packed; |
| |
| #define HCI_CMD_Write_Location_Data 0x0065 /* complete */ |
| struct hciWriteLocationData { |
| uint8_t regulatoryDomainKnown; |
| uint16_t domain; /* ISO3166-1 code if known, else 0x5858 'XX' */ |
| uint8_t locationSuffix; /* HCI_LOCATION_DOMAIN_OPTION_* */ |
| uint8_t mainsPowered; |
| } __packed; |
| struct hciCmplWriteLocationData { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Flow_Control_Mode 0x0066 /* complete */ |
| struct hciCmplReadFlowControlMode { |
| uint8_t status; |
| uint8_t blockBased; /* block based is for amp, packed-based is for BR/EDR */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Flow_Control_mode 0x0067 /* complete */ |
| struct hciWriteFlowControlMode { |
| uint8_t blockBased; /* block based is for amp, packed-based is for BR/EDR */ |
| } __packed; |
| struct hciCmplWriteFlowcontrolMode { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Enhanced_Transmit_Power_Level 0x0068 /* complete */ |
| struct hciReadEnhancedTransmitPowerLevel { |
| uint16_t conn; |
| uint8_t max; /* else currurent is read */ |
| } __packed; |
| struct hciCmplReadEnhancedTransmitPowerLevel { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t txLevelGFSK; /* actually an int8_t */ |
| uint8_t txLevelDQPSK; /* actually an int8_t */ |
| uint8_t txLevel8DPSK; /* actually an int8_t */ |
| } __packed; |
| |
| #define HCI_CMD_Read_Best_Effort_Flush_Timeout 0x0069 /* complete */ |
| struct hciReadBestEffortFlushTimeout { |
| uint16_t logicalLinkHandle; |
| } __packed; |
| struct hciCmplReadBestEffortFlushTimeout { |
| uint8_t status; |
| uint32_t bestEffortFlushTimeout; /* in microseconds */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Best_Effort_Flush_Timeout 0x006A /* complete */ |
| struct hciWriteBestEffortFlushTimeout { |
| uint16_t logicalLinkHandle; |
| uint32_t bestEffortFlushTimeout; /* in microseconds */ |
| } __packed; |
| struct hciCmplWriteBestEffortFlushTimeout { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Short_Range_Mode 0x006B /* status */ |
| struct hciShortRangeMode { |
| uint8_t physicalLinkHandle; |
| uint8_t shortRangeModeEnabled; |
| } __packed; |
| |
| |
| /* ==== BT 4.0 ==== */ |
| |
| #define HCI_CMD_Read_LE_Host_Supported 0x006C /* complete */ |
| struct hciCmplReadLeHostSupported { |
| uint8_t status; |
| uint8_t leSupportedHost; |
| uint8_t simultaneousLeHost; |
| } __packed; |
| |
| #define HCI_CMD_Write_LE_Host_Supported 0x006D /* complete */ |
| struct hciWriteLeHostSupported { |
| uint8_t leSupportedHost; |
| uint8_t simultaneousLeHost; |
| } __packed; |
| struct hciCmplWriteLeHostSupported { |
| uint8_t status; |
| } __packed; |
| |
| |
| /* ==== BT 4.1 ==== */ |
| |
| #define HCI_CMD_Set_MWS_Channel_Parameters 0x006E /* complete */ |
| struct hciSetMwsChannelParams { |
| uint8_t mwsEnabled; |
| uint16_t mwsChannelRxCenterFreq; /* in MHz */ |
| uint16_t mwsChannelTxCenterFreq; /* in MHz */ |
| uint16_t mwsChannelRxBandwidth; /* in MHz */ |
| uint16_t mwsChannelTxBandwidth; /* in MHz */ |
| uint8_t mwsChannelType; |
| } __packed; |
| struct hciCmplSetMwsChannelParams { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Set_External_Frame_Configuration 0x006F /* complete */ |
| struct hciSetExternalFrameConfigItem { |
| uint16_t periodDuration; /* in microseconds */ |
| uint8_t periodType; /* HCI_PERIOD_TYPE_* */ |
| } __packed; |
| struct hciSetExternalFrameConfig { |
| uint16_t extFrameDuration; /* in microseonds */ |
| uint16_t extFrameSyncAssertOffset; /* in microseonds */ |
| uint16_t extFrameSyncAssertJitter; /* in microseonds */ |
| uint8_t extNumPeriods; /* 1 .. 32 */ |
| struct hciSetExternalFrameConfigItem items[]; |
| } __packed; |
| struct hciCmplSetExternalFrameConfig { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Set_MWS_Signalling 0x0070 /* complete */ |
| struct hciSetMwsSignalling { |
| uint16_t mwsRxAssertOffset; /* all of these are in microseconds */ |
| uint16_t mwsRxAssertJitter; |
| uint16_t mwsRxDeassertOffset; |
| uint16_t mwsRxDeassertJitter; |
| uint16_t mwsTxAssertOffset; |
| uint16_t mwsTxAssertJitter; |
| uint16_t mwsTxDeassertOffset; |
| uint16_t mwsTxDeassertJitter; |
| uint16_t mwsPatternAssertOffset; |
| uint16_t mwsPatternAssertJitter; |
| uint16_t mwsInactivityDurationAssertOffset; |
| uint16_t mwsInactivityDurationAssertJitter; |
| uint16_t mwsScanFrequencyAssertOffset; |
| uint16_t mwsScanFrequencyAssertJitter; |
| uint16_t mwsPriorityAssertOffsetRequest; |
| } __packed; |
| struct hciCmplSetMwsSignalling { |
| uint8_t status; |
| uint16_t bluetoothRxPriorityAssertOffset; |
| uint16_t bluetoothRxPriorityAssertJitter; |
| uint16_t bluetoothRxPriorityDeassertOffset; |
| uint16_t bluetoothRxPriorityDeassertJitter; |
| uint16_t _802RxPriorityAssertOffset; |
| uint16_t _802RxPriorityAssertJitter; |
| uint16_t _802RxPriorityDeassertOffset; |
| uint16_t _802RxPriorityDeassertJitter; |
| uint16_t bluetoothTxOnAssertOffset; |
| uint16_t bluetoothTxOnAssertJitter; |
| uint16_t bluetoothTxOnDeassertOffset; |
| uint16_t bluetoothTxOnDeassertJitter; |
| uint16_t _802TxOnAssertOffset; |
| uint16_t _802TxOnAssertJitter; |
| uint16_t _802TxOnDeassertOffset; |
| uint16_t _802TxOnDeassertJitter; |
| } __packed; |
| |
| #define HCI_CMD_Set_MWS_Transport_Layer 0x0071 /* complete */ |
| struct hciSetMwsTransportLayer { |
| uint8_t transportLayer; |
| uint32_t toMwsBaudRate; /* in byte/sec */ |
| uint32_t fromMwsBaudRate; /* in byte/sec */ |
| } __packed; |
| struct hciCmplSetMwsTransportLayer { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Set_MWS_Scan_Frequency_Table 0x0072 /* complete */ |
| struct hciSetMwsScanFrequencyTableItem { |
| uint16_t scanFreqLow; /*in MHz */ |
| uint16_t scanFreqHigh; /*in MHz */ |
| } __packed; |
| struct hciSetMwsScanFrequencyTable { |
| uint8_t n; |
| struct hciSetMwsScanFrequencyTableItem items[]; |
| } __packed; |
| struct hciCmplSetMwsScanFrequencyTable { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Set_MWS_PATTERN_Configuration 0x0073 /* complete */ |
| struct hciSetMwsPatternConfigItem { |
| uint16_t intervalDuration; /* in microseconds */ |
| uint8_t intervalType; /* HCI_MWS_INTERVAL_TYPE_* */ |
| } __packed; |
| struct hciSetMwsPatternConfig { |
| uint8_t mwsPatternIndex; /* 0 .. 2 */ |
| uint8_t mwsPatternNumIntervals; |
| struct hciSetMwsPatternConfigItem items[]; |
| } __packed; |
| struct hciCmplSetMwsPatternConfig { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Set_Reserved_LT_ADDR 0x0074 /* complete */ |
| struct hciSetReservedLtAddr { |
| uint8_t ltAddr; |
| } __packed; |
| struct hciCmplSetReservedLtAddr { |
| uint8_t status; |
| uint8_t ltAddr; |
| } __packed; |
| |
| #define HCI_CMD_Delete_Reserved_LT_ADDR 0x0075 /* complete */ |
| struct hciDeleteReservedLtAddr { |
| uint8_t ltAddr; |
| } __packed; |
| struct hciCmplDeleteReservedLtAddr { |
| uint8_t status; |
| uint8_t ltAddr; |
| } __packed; |
| |
| #define HCI_CMD_Set_Connectionless_Slave_Broadcast_Data 0x0076 /* complete */ |
| struct hciSetConnlessSlaveBroadcastData { |
| uint8_t ltAddr; |
| uint8_t fragment; /* HCI_CONNLESS_FRAG_TYPE_* */ |
| uint8_t dataLen; |
| uint8_t data[]; |
| } __packed; |
| struct hciCmplSetConnlessSlaveBroadcastData { |
| uint8_t status; |
| uint8_t ltAddr; |
| } __packed; |
| |
| #define HCI_CMD_Read_Synchronisation_Train_Parameters 0x0077 /* complete */ |
| struct hciCmplReadSyncTrainParams { |
| uint8_t status; |
| uint16_t interval; |
| uint32_t syncTrainTimeout; |
| uint8_t serviceData; |
| } __packed; |
| |
| #define HCI_CMD_Write_Synchronisation_Train_Parameters 0x0078 /* complete */ |
| struct hciWriteSyncTrainParams { |
| uint16_t intMin; |
| uint16_t intMax; |
| uint32_t syncTrainTimeout; |
| uint8_t serviceData; |
| } __packed; |
| struct hciCmplWriteSyncTrainParams { |
| uint8_t status; |
| uint16_t interval; |
| } __packed; |
| |
| #define HCI_CMD_Read_Secure_Connections_Host_Support 0x0079 /* complete */ |
| struct hciCmplReadSecureConnectionsHostSupport { |
| uint8_t status; |
| uint8_t secureConnectionsSupported; |
| } __packed; |
| |
| #define HCI_CMD_Write_Secure_Connections_Host_Support 0x007A /* complete */ |
| struct hciWriteSecureConnectionsHostSupport { |
| uint8_t secureConnectionsSupported; |
| } __packed; |
| struct hciCmplWriteSecureConnectionsHostSupport { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Authenticated_Payload_Timeout 0x007B /* complete */ |
| struct hciReadAuthedPayloadTimeout { |
| uint16_t conn; |
| } __packed; |
| struct hciCmplReadAuthedPayloadTimeout { |
| uint8_t status; |
| uint16_t conn; |
| uint16_t timeout; /* in units of 10ms, 1 .. 0xffff */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Authenticated_Payload_Timeout 0x007C /* complete */ |
| struct hciWriteAuthedPayloadTimeout { |
| uint16_t conn; |
| uint16_t timeout; /* in units of 10ms, 1 .. 0xffff */ |
| } __packed; |
| struct hciCmplWriteAuthedPayloadTimeout { |
| uint8_t status; |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_Read_Local_OOB_Extended_Data 0x007D /* complete */ |
| struct hciCmplReadLocalOobExtendedData { |
| uint8_t status; |
| uint8_t C_192[16]; |
| uint8_t R_192[16]; |
| uint8_t C_256[16]; |
| uint8_t R_256[16]; |
| } __packed; |
| |
| #define HCI_CMD_Read_Extended_Page_Timeout 0x007E /* complete */ |
| struct hciCmplReadExtendedPageTimeout { |
| uint8_t status; |
| uint16_t timeout; /* in units of 0.625ms 0..0xffff */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Extended_Page_Timeout 0x007F /* complete */ |
| struct hciWriteExtendedPageTimeout { |
| uint16_t timeout; /* in units of 0.625ms 0..0xffff */ |
| } __packed; |
| struct hciCmplWriteExtendedPageTimeout { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_Read_Extended_Inquiry_Length 0x0080 /* complete */ |
| struct hciCmplReadExtendedInquiryLength { |
| uint8_t status; |
| uint16_t timeout; /* in units of 0.625ms 0..0xffff */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Extended_Inquiry_Length 0x0081 /* complete */ |
| struct hciWriteExtendedInquiryLength { |
| uint16_t timeout; /* in units of 0.625ms 0..0xffff */ |
| } __packed; |
| struct hciCmplWriteExtendedInquiryLength { |
| uint8_t status; |
| } __packed; |
| |
| |
| |
| |
| |
| #define HCI_OGF_Informational 4 |
| |
| |
| /* ==== BT 1.1 ==== */ |
| |
| #define HCI_CMD_Read_Local_Version_Information 0x0001 /* complete */ |
| struct hciCmplReadLocalVersion { |
| uint8_t status; |
| uint8_t hciVersion; /* HCI_VERSION_* */ |
| uint16_t hciRevision; |
| uint8_t lmpVersion; /* HCI_VERSION_* */ |
| uint16_t manufName; |
| uint16_t lmpSubversion; |
| } __packed; |
| |
| #define HCI_CMD_Read_Local_Supported_Commands 0x0002 /* complete */ |
| struct hciCmplReadLocalSupportedCommands { |
| uint8_t status; |
| uint64_t bitfield; |
| } __packed; |
| |
| #define HCI_CMD_Read_Local_Supported_Features 0x0003 /* complete */ |
| struct hciCmplReadLocalSupportedFeatures { |
| uint8_t status; |
| uint64_t features; /* bitmask of HCI_LMP_FTR_* */ |
| } __packed; |
| |
| #define HCI_CMD_Read_Local_Extended_Features 0x0004 /* complete */ |
| struct hciReadLocalExtendedFeatures { |
| uint8_t page; |
| } __packed; |
| struct hciCmplReadLocalExtendedFeatures { |
| uint8_t status; |
| uint8_t page; |
| uint8_t maxPage; |
| uint64_t features; /* bitmask of HCI_LMP_EXT_FTR_P* */ |
| } __packed; |
| |
| #define HCI_CMD_Read_Buffer_Size 0x0005 /* complete */ |
| struct hciCmplReadBufferSize { |
| uint8_t status; |
| uint16_t aclBufferLen; |
| uint8_t scoBufferLen; |
| uint16_t numAclBuffers; |
| uint16_t numScoBuffers; |
| } __packed; |
| |
| #define HCI_CMD_Read_BD_ADDR 0x0009 /* complete */ |
| struct hciCmplReadBdAddr { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| |
| /* ==== BT 3.0 ==== */ |
| |
| #define HCI_CMD_Read_Data_Block_Size 0x000A /* complete */ |
| struct hciCmplReadDataBlockSize { |
| uint8_t status; |
| uint16_t maxAclDataPacketLen; |
| uint16_t dataBlockLen; |
| uint16_t totalNumDataBlocks; |
| } __packed; |
| |
| |
| /* ==== BT 4.1 ==== */ |
| |
| #define HCI_CMD_Read_Local_Suported_Codecs 0x000B /* complete */ |
| struct hciCmplReadLocalSupportedCodecs { |
| uint8_t status; |
| uint8_t numSupportedCodecs; |
| uint8_t codecs[]; |
| /* these follow, but due to var array cannot be declared here: |
| uint8_t numVendorCodecs; |
| uint32_t vendorCodecs[]; |
| */ |
| } __packed; |
| |
| |
| |
| |
| |
| #define HCI_OGF_Status 5 |
| |
| |
| /* == BT 1.1 == */ |
| |
| #define HCI_CMD_Read_Failed_Contact_Counter 0x0001 /* complete */ |
| struct hciReadFailedContactCounter { |
| uint16_t conn; |
| } __packed; |
| struct hciCmplReadFailedContactCounter { |
| uint8_t status; |
| uint16_t conn; |
| uint16_t counter; |
| } __packed; |
| |
| #define HCI_CMD_Reset_Failed_Contact_Counter 0x0002 /* complete */ |
| struct hciResetFailedContactCounter { |
| uint16_t conn; |
| } __packed; |
| struct hciCmplResetFailedContactCounter { |
| uint8_t status; |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_Read_Link_Quality 0x0003 /* complete */ |
| struct hciReadLinkQuality { |
| uint16_t conn; |
| } __packed; |
| struct hciCmplReadLinkQuality { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t quality; |
| } __packed; |
| |
| #define HCI_CMD_Read_RSSI 0x0005 /* complete */ |
| struct hciReadRssi { |
| uint16_t conn; |
| } __packed; |
| struct hciCmplReadRssi { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t RSSI; /* actually an int8_t */ |
| } __packed; |
| |
| |
| /* ==== BT 1.2 ==== */ |
| |
| #define HCI_CMD_Read_AFH_Channel_Map 0x0006 /* complete */ |
| struct hciReadAfhChannelMap { |
| uint16_t conn; |
| } __packed; |
| struct hciCmplReadAfhChannelMap { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t map[10]; |
| } __packed; |
| |
| #define HCI_CMD_Read_Clock 0x0007 /* complete */ |
| struct hciReadClock { |
| uint16_t conn; |
| uint8_t readRemote; /* else reads local and ignores conn */ |
| } __packed; |
| struct hciCmplReadClock { |
| uint8_t status; |
| uint16_t conn; |
| uint32_t clock; |
| uint16_t accuracy; |
| } __packed; |
| |
| |
| /* ==== BT 3.0 ==== */ |
| |
| #define HCI_CMD_Read_Encryption_Key_Size 0x0008 /* complete */ |
| struct hciReadEncrKeySize { |
| uint16_t conn; |
| } __packed; |
| struct hciCmplReadEncrKeySize { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t keySize; |
| } __packed; |
| |
| #define HCI_CMD_Read_Local_AMP_Info 0x0009 /* complete */ |
| struct hciCmplReadLocalAmpInfo { |
| uint8_t status; |
| uint8_t ampStatus; |
| uint32_t totalBandwidth; |
| uint32_t maxGuaranteedBandwidth; |
| uint32_t minLatency; |
| uint16_t maxPduSize; |
| uint8_t controllerType; |
| uint16_t palCapabilities; |
| uint16_t maxAmpAssocLen; |
| uint32_t maxFlushTimeout; |
| uint32_t bestEffortFlushTimeout; |
| } __packed; |
| |
| #define HCI_CMD_Read_Local_AMP_ASSOC 0x000A /* complete */ |
| struct hciReadLocalAmpAssoc { |
| uint8_t physicalLinkHandle; |
| uint16_t lengthSoFar; |
| uint16_t ampAssocLen; |
| } __packed; |
| struct hciCmplReadLocalAmpAssoc { |
| uint8_t status; |
| uint8_t physicalLinkHandle; |
| uint16_t ampAssocRemainingLen; /* incl this fragment */ |
| uint8_t ampAssocFragment[]; /* 1.. 248 byutes */ |
| } __packed; |
| |
| #define HCI_CMD_Write_Remote_AMP_ASSOC 0x000B /* complete */ |
| struct hciWriteRemoteAmpAssoc { |
| uint8_t physicalLinkHandle; |
| uint16_t lengthSoFar; |
| uint16_t remaningLength; |
| uint8_t fragment[]; /* 248 bytes for all but last one */ |
| } __packed; |
| struct hciCmplWriteRemoteAmpAssoc { |
| uint8_t status; |
| uint8_t physicalLinkHandle; |
| } __packed; |
| |
| /* ==== BT 4.1 ==== */ |
| |
| #define HCI_CMD_Get_MWS_Transport_Layer_Configuration 0x000C /* complete */ |
| struct hciCmplGetMwsTransportLayerConfigItem { |
| uint8_t transportLayer; |
| uint8_t numBaudRates; |
| } __packed; |
| struct hciCmplGetMwsTransportLayerConfigBandwidthItem { |
| uint32_t toMwsBaudRate; |
| uint32_t fromMwsBaudRate; |
| } __packed; |
| struct hciCmplGetMwsTransportLayerConfig { |
| uint8_t status; |
| uint8_t numTransports; |
| struct hciCmplGetMwsTransportLayerConfigItem items[]; /* numTransports items */ |
| /* this follows: |
| struct hciCmplGetMwsTransportLayerConfigBandwidthItem items[] // sum(items[].numbaudRates) items |
| */ |
| } __packed; |
| |
| #define HCI_CMD_Set_Triggered_Clock_Capture 0x000D /* complete */ |
| struct hciSetTriggeredClockCapture { |
| uint16_t conn; |
| uint8_t enable; |
| uint8_t piconetClock; /* else local clock & "conn" is ignored */ |
| uint8_t lpoAllowed; /* can sleep? */ |
| uint8_t numClockCapturesToFilter; |
| } __packed; |
| struct hciCmplSetTriggeredClockCapture { |
| uint8_t status; |
| } __packed; |
| |
| |
| |
| |
| |
| #define HCI_OGF_LE 8 |
| |
| |
| /* ==== BT 4.0 ==== */ |
| |
| #define HCI_CMD_LE_Set_Event_Mask 0x0001 /* complete */ |
| struct hciLeSetEventMask { |
| uint64_t events; /* bitmask of HCI_LE_EVENT_* */ |
| } __packed; |
| struct hciCmplLeSetEventMask { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Read_Buffer_Size 0x0002 /* complete */ |
| struct hciCmplLeReadBufferSize { |
| uint8_t status; |
| uint16_t leBufferSize; |
| uint8_t leNumBuffers; |
| } __packed; |
| |
| #define HCI_CMD_LE_Read_Local_Supported_Features 0x0003 /* complete */ |
| struct hciCmplLeReadLocalSupportedFeatures { |
| uint8_t status; |
| uint64_t leFeatures; /* bitmask of HCI_LE_FTR_* */ |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Random_Address 0x0005 /* complete */ |
| struct hciLeSetRandomAddress{ |
| uint8_t mac[6]; |
| } __packed; |
| struct hciCmplLeSetRandomAddress{ |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Adv_Params 0x0006 /* complete */ |
| struct hciLeSetAdvParams { |
| uint16_t advIntervalMin; |
| uint16_t advIntervalMax; |
| uint8_t advType; |
| uint8_t ownAddressType; |
| uint8_t directRandomAddress; |
| uint8_t directAddr[6]; |
| uint8_t advChannelMap; |
| uint8_t advFilterPolicy; |
| } __packed; |
| struct hciCmplLeSetAdvParams { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Read_Adv_Channel_TX_Power 0x0007 /* complete */ |
| struct hciCmplLeReadAdvChannelTxPower { |
| uint8_t status; |
| uint8_t txPower; /* actually an int8_t */ |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Advertising_Data 0x0008 /* complete */ |
| struct hciLeSetAdvData { |
| uint8_t advDataLen; |
| uint8_t advData[31]; |
| } __packed; |
| struct hciCmplLeSetAdvData { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Scan_Response_Data 0x0009 /* complete */ |
| struct hciLeSetScanResponseData { |
| uint8_t scanRspDataLen; |
| uint8_t scanRspData[31]; |
| } __packed; |
| struct hciCmplLeSetScanResponseData { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Advertise_Enable 0x000A /* complete */ |
| struct hciLeSetAdvEnable { |
| uint8_t advOn; |
| } __packed; |
| struct hciCmplLeSetAdvEnable { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Scan_Parameters 0x000B /* complete */ |
| struct hciLeSetScanParams { |
| uint8_t activeScan; |
| uint16_t scanInterval; /* in units of 0.625ms, 4..0x4000 */ |
| uint16_t scanWindow; /* in units of 0.625ms, 4..0x4000 */ |
| uint8_t useOwnRandomAddr; |
| uint8_t onlyWhitelist; |
| } __packed; |
| struct hciCmplLeSetScanParams { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Scan_Enable 0x000C /* complete */ |
| struct hciLeSetScanEnable { |
| uint8_t scanOn; |
| uint8_t filterDuplicates; |
| } __packed; |
| struct hciCmplLeSetScanEnable { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Create_Connection 0x000D /* status */ |
| struct hciLeCreateConnection { |
| uint16_t scanInterval; /* in units of 0.625ms, 4..0x4000 */ |
| uint16_t scanWindow; /* in units of 0.625ms, 4..0x4000 */ |
| uint8_t connectToAnyWhitelistedDevice; /* if so, ignore next 2 params */ |
| uint8_t peerRandomAddr; |
| uint8_t peerMac[6]; |
| uint8_t useOwnRandomAddr; |
| uint16_t connIntervalMin; /* in units of 1.25ms, 6..0x0C80 */ |
| uint16_t connIntervalMax; /* in units of 1.25ms, 6..0x0C80 */ |
| uint16_t connLatency; /* 0..0x1F4 */ |
| uint16_t supervisionTimeout; /* in units of 10ms, 0xA...0x0C80 */ |
| uint16_t minConnLen; /* minimum conn len needed in units of 0.625ms 0..0xfff */ |
| uint16_t maxConnLen; /* minimum conn len needed in units of 0.625ms 0..0xfff */ |
| } __packed; |
| |
| #define HCI_CMD_LE_Create_Connection_Cancel 0x000E /* complete */ |
| struct hciCmplLeCreateConnectionCancel { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Read_White_List_Size 0x000F /* complete */ |
| struct hciCmplLeReadWhiteListSize { |
| uint8_t status; |
| uint8_t whitelistSize; |
| } __packed; |
| |
| #define HCI_CMD_LE_Clear_White_List 0x0010 /* complete */ |
| struct hciCmplLeClearWhiteList { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Add_Device_To_White_List 0x0011 /* complete */ |
| struct hciLeAddDeviceToWhiteList { |
| uint8_t randomAddr; |
| uint8_t mac[6]; |
| } __packed; |
| struct hciCmplLeAddDeviceToWhiteList { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Remove_Device_From_White_List 0x0012 /* complete */ |
| struct hciLeRemoveDeviceFromWhiteList { |
| uint8_t randomAddr; |
| uint8_t mac[6]; |
| } __packed; |
| struct hciCmplLeRemoveDeviceFromWhiteList { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Connection_Update 0x0013 /* status */ |
| struct hciLeConnectionUpdate { |
| uint16_t conn; |
| uint16_t connIntervalMin; /* in units of 1.25ms, 6..0x0C80 */ |
| uint16_t connIntervalMax; /* in units of 1.25ms, 6..0x0C80 */ |
| uint16_t connLatency; /* 0..0x1F4 */ |
| uint16_t supervisionTimeout; /* in units of 10ms, 0xA...0x0C80 */ |
| uint16_t minConnLen; /* minimum conn len needed in units of 0.625ms 0..0xfff */ |
| uint16_t maxConnLen; /* minimum conn len needed in units of 0.625ms 0..0xfff */ |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Host_Channel_Classification 0x0014 /* complete */ |
| struct hciLeSetHostChannelClassification { |
| uint8_t chMap[5]; |
| } __packed; |
| struct hciCmplLeSetHostChannelClassification { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Read_Channel_Map 0x0015 /* complete */ |
| struct hciLeReadChannelMap { |
| uint16_t conn; |
| } __packed; |
| struct hciCmplLeReadChannelMap { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t chMap[5]; |
| } __packed; |
| |
| #define HCI_CMD_LE_Read_Remote_Used_Features 0x0016 /* status */ |
| struct hciLeReadRemoteUsedFeatures { |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_LE_Encrypt 0x0017 /* complete */ |
| struct hciLeEncrypt { |
| uint8_t key[16]; |
| uint8_t plaintext[16]; |
| } __packed; |
| struct hciCmplLeEncrypt { |
| uint8_t status; |
| uint8_t encryptedData[16]; |
| } __packed; |
| |
| #define HCI_CMD_LE_Rand 0x0018 /* complete */ |
| struct hciCmplLeRand { |
| uint8_t status; |
| uint64_t rand; |
| } __packed; |
| |
| #define HCI_CMD_LE_Start_Encryption 0x0019 /* status */ |
| struct hciLeStartEncryption { |
| uint16_t conn; |
| uint64_t rand; |
| uint16_t diversifier; |
| uint8_t LTK[16]; |
| } __packed; |
| |
| #define HCI_CMD_LE_LTK_Request_Reply 0x001A /* complete */ |
| struct hciLeLtkRequestReply { |
| uint16_t conn; |
| uint8_t LTK[16]; |
| } __packed; |
| struct hciCmplLeLtkRequestReply { |
| uint8_t status; |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_LE_LTK_Request_Negative_Reply 0x001B /* complete */ |
| struct hciLeLtkRequestNegativeReply { |
| uint16_t conn; |
| } __packed; |
| struct hciCmplLeLtkRequestNegativeReply { |
| uint8_t status; |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_LE_Read_Supported_States 0x001C /* complete */ |
| struct hciCmplLeReadSupportedStates { |
| uint8_t status; |
| uint64_t states; /* bitmask of HCI_LE_STATE_* */ |
| } __packed; |
| |
| #define HCI_CMD_LE_Receiver_Test 0x001D /* complete */ |
| struct hciLeReceiverTest { |
| uint8_t radioChannelNum; /* 2402 + radioChannelNum * 2 MHz */ |
| } __packed; |
| struct hciCmplLeReceiverTest { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Transmitter_Test 0x001E /* complete */ |
| struct hciLeTransmitterTest { |
| uint8_t radioChannelNum; /* 2402 + radioChannelNum * 2 MHz */ |
| uint8_t lengthOfTestData; |
| uint8_t testPacketDataType; |
| } __packed; |
| struct hciCmplLeTransmitterTest { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Test_End 0x001F /* complete */ |
| struct hciCmplLeTestEnd { |
| uint8_t status; |
| uint16_t numPackets; |
| } __packed; |
| |
| |
| /* ==== BT 4.1 ==== */ |
| |
| #define HCI_CMD_LE_Remote_Conn_Param_Request_Reply 0x0020 /* complete */ |
| struct hciLeRemoteConnParamRequestReply { |
| uint16_t conn; |
| uint16_t connIntervalMin; /* in units of 1.25ms, 6..0x0C80 */ |
| uint16_t connIntervalMax; /* in units of 1.25ms, 6..0x0C80 */ |
| uint16_t connLatency; /* 0..0x1F4 */ |
| uint16_t supervisionTimeout; /* in units of 10ms, 0xA...0x0C80 */ |
| uint16_t minConnLen; /* minimum conn len needed in units of 0.625ms 0..0xfff */ |
| uint16_t maxConnLen; /* minimum conn len needed in units of 0.625ms 0..0xfff */ |
| } __packed; |
| struct hciCmplLeRemoteConnParamRequestReply { |
| uint8_t status; |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_LE_Remote_Conn_Param_Request_Negative_Reply 0x0021 /* complete */ |
| struct hciLeRemoteConnParamRequestNegativeReply { |
| uint16_t conn; |
| uint8_t reason; |
| } __packed; |
| struct hciCmplLeRemoteConnParamRequestNegativeReply { |
| uint8_t status; |
| uint16_t conn; |
| } __packed; |
| |
| /* ==== BT 4.2 ==== */ |
| |
| #define HCI_CMD_LE_Set_Data_Length 0x22 /* complete */ |
| struct hciLeSetDataLength { |
| uint16_t conn; |
| uint16_t txOctets; |
| uint16_t txTime; |
| } __packed; |
| struct hciCmplLeSetDataLength { |
| uint8_t status; |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_CMD_LE_Read_Suggested_Default_Data_Length 0x23 /* complete */ |
| struct hciLeCmplReadSuggestedDefaultDataLength { |
| uint8_t status; |
| uint16_t suggestedMaxTxOctets; |
| uint16_t suggestedMaxTxTime; |
| } __packed; |
| |
| #define HCI_CMD_LE_Write_Suggested_Default_Data_Length 0x24 /* complete */ |
| struct hciLeWriteSuggestedDefaultDataLength { |
| uint16_t suggestedMaxTxOctets; |
| uint16_t suggestedMaxTxTime; |
| } __packed; |
| struct hciCmplLeWriteSuggestedDefaultDataLength { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Read_Local_P256_Public_Key 0x25 /* status */ |
| |
| #define HCI_CMD_LE_Generate_DHKey 0x26 /* status */ |
| struct hciLeGenerateDHKey { |
| uint8_t remotePubKey[64]; |
| } __packed; |
| |
| #define HCI_CMD_LE_Add_Device_To_Resolving_List 0x27 /* complete */ |
| struct hciLeAddDeviceToResolvingList { |
| uint8_t peerAddrType; |
| uint8_t peerMac[6]; /* public or static random */ |
| uint8_t peerIrk[16]; |
| uint8_t localIrk[16]; |
| } __packed; |
| struct hciCmplLeAddDeviceToResolvingList { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Remove_Device_From_Resolving_List 0x28 /* complete */ |
| struct hciLeRemoveDeviceFromResolvingList { |
| uint8_t peerAddrType; |
| uint8_t peerMac[6]; /* public or static random */ |
| } __packed; |
| struct hciCmplLeRemoveDeviceFromResolvingList { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Clear_Resolving_List 0x29 /* complete */ |
| struct hciCmplLeClearResolvingList { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Read_Resolving_List_Size 0x2A /* complete */ |
| struct hciCmplLeReadResolvingListSize { |
| uint8_t status; |
| uint8_t maxListEntries; |
| } __packed; |
| |
| #define HCI_CMD_LE_Read_Peer_Resolvable_Addr 0x2B /* complete */ |
| struct hciLeReadPeerResolvableAddr { |
| uint8_t peerAddrType; |
| uint8_t peerMac[6]; /* public or static random */ |
| } __packed; |
| struct hciCmplLeReadPeerResolvableAddr { |
| uint8_t status; |
| uint8_t peerResolvableMac[6]; |
| } __packed; |
| |
| #define HCI_CMD_LE_Read_Local_Resolvable_Addr 0x2C /* complete */ |
| struct hciLeReadLocalResolvableAddr { |
| uint8_t peerAddrType; |
| uint8_t peerMac[6]; /* public or static random */ |
| } __packed; |
| struct hciCmplLeReadLocalResolvableAddr { |
| uint8_t status; |
| uint8_t localResolvableMac[6]; |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Addr_Resolution_Enable 0x2D /* complete */ |
| struct hciLeSetAddrResolutionEnable { |
| uint8_t enable; |
| } __packed; |
| struct hciCmplLeSetAddrResolutionEnable { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Resolvable_Private_Addr_Timeout 0x2E /* complete */ |
| struct hciLeSetResolvablePrivaeAddrTimeout { |
| uint16_t seconds; |
| } __packed; |
| struct hciCmplLeSetResolvablePrivaeAddrTimeout { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Read_Maximum_Data_Length 0x2F /* complete */ |
| struct hciCmplLeReadMaximumDataLength { |
| uint8_t status; |
| uint16_t supportedMaxTxOctets; |
| uint16_t supportedMaxTxTime; |
| uint16_t supportedMaxRxOctets; |
| uint16_t supportedMaxRxTime; |
| } __packed; |
| |
| /* ==== BT 5.0 ==== */ |
| |
| #define HCI_CMD_LE_Read_PHY 0x30 /* complete */ |
| struct hciLeReadPhy { |
| uint16_t conn; |
| } __packed; |
| struct hciCmplLeReadPhy { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t txPhy; |
| uint8_t rxPhy; |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Default_PHY 0x31 /* complete */ |
| struct hciLeSetDefaultPhy { |
| uint8_t allPhys; |
| uint8_t txPhys; |
| uint8_t rxPhys; |
| } __packed; |
| struct hciCmplLeSetDefaultPhy { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_PHY 0x32 /* status */ |
| struct hciLeSetPhy { |
| uint16_t conn; |
| uint8_t allPhys; |
| uint8_t txPhys; |
| uint8_t rxPhys; |
| uint16_t phyOptions; |
| } __packed; |
| |
| #define HCI_CMD_LE_Enhanced_Receiver_Test 0x33 /* complete */ |
| struct hciLeEnhancedReceiverTest { |
| uint8_t rxChannel; |
| uint8_t phy; |
| uint8_t modulationIndex; |
| } __packed; |
| struct hciCmplLeEnhancedReceiverTest { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Enhanced_Transmitter_Test 0x34 /* complete */ |
| struct hciLeEnhancedTransmitterTest { |
| uint8_t txChannel; |
| uint8_t lengthOfTestData; |
| uint8_t payloadType; |
| uint8_t phy; |
| } __packed; |
| struct hciCmplLeEnhancedTransmitterTest { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Adv_Set_Random_Addr 0x35 /* complete */ |
| struct hciLeSetAdvSetRandomAddr { |
| uint8_t advSetHandle; |
| uint8_t mac[6]; |
| } __packed; |
| struct hciCmplLeSetAdvSetRandomAddr { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Extended_Adv_Params 0x36 /* complete */ |
| struct hciLeSetExtendedAdvParams { |
| uint8_t advSetHandle; |
| uint16_t advSetProperties; |
| uint8_t primaryAdvIntervalMin[3]; /* uint24_t */ |
| uint8_t primaryAdvIntervalMax[3]; /* uint24_t */ |
| uint8_t primaryAdvChannelMap; |
| uint8_t ownAddrType; |
| uint8_t peerAddrType; |
| uint8_t peerMac[6]; |
| uint8_t filterPolicy; |
| uint8_t txPower; /* actually a int8_t */ |
| uint8_t primaryAdvPhy; |
| uint8_t secondaryAdvMaxSkip; |
| uint8_t secondaryAdvPhy; |
| uint8_t advSid; |
| uint8_t enableScanRequestNotif; |
| } __packed; |
| struct hciCmplLeSetExtendedAdvParams { |
| uint8_t status; |
| uint8_t txPowerChosen; /* actually a int8_t */ |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Extended_Adv_Data 0x37 /* complete, VARIABLE LENGTH */ |
| struct hciLeSetExtendedAdvData { |
| uint8_t advSetHandle; |
| uint8_t operation; |
| uint8_t fragmentPreference; |
| uint8_t advDataLen; /* 0..251 */ |
| uint8_t advData[]; |
| } __packed; |
| struct hciCmplLeSetExtendedAdvData { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Extended_Scan_Rsp_Data 0x38 /* complete, VARIABLE LENGTH */ |
| struct hciLeSetExtendedScanRspData { |
| uint8_t advSetHandle; |
| uint8_t operation; |
| uint8_t fragmentPreference; |
| uint8_t scanRspDataLen; /* 0..251 */ |
| uint8_t scanRspData[]; |
| } __packed; |
| struct hciCmplLeSetExtendedScanRspData { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Extended_Adv_Enable 0x39 /* complete, VARIABLE LENGTH */ |
| struct hciLeSetExtendedAdvEnableItem { |
| uint8_t advSetHandle; |
| uint16_t duration; |
| uint8_t maxExtdAdvEvts; |
| } __packed; |
| struct hciLeSetExtendedAdvEnable { |
| uint8_t enable; |
| uint8_t numSets; |
| struct hciLeSetExtendedAdvEnableItem sets[1]; /* 1 here since then we can use this command easily to control a single set at a time, other uses can be made with more work */ |
| } __packed; |
| struct hciCmplLeSetExtendedAdvEnable { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Read_Max_Adv_Data_Len 0x3A /* complete */ |
| struct hciCmplLeReadMaxAdvDataLen { |
| uint8_t status; |
| uint16_t maxLen; |
| } __packed; |
| |
| #define HCI_CMD_LE_Read_Num_Supported_Adv_Sets 0x3B /* complete */ //not a final limit - sets a cap on "advSetHandle" everywhere, but other caps may exist |
| struct hciCmplLeReadNumSupportedAdvSets { |
| uint8_t status; |
| uint8_t maxAdvsets; |
| } __packed; |
| |
| #define HCI_CMD_LE_Remove_Adv_Set 0x3C /* complete */ |
| struct hciLeRemoveAdvSet { |
| uint8_t advSetHandle; |
| } __packed; |
| struct hciCmplLeRemoveAdvSet { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Clear_Adv_Sets 0x3D /* complete */ |
| struct hciCmplLeClearAdvSets { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Periodic_Adv_Params 0x3E |
| /* we'll define if needed */ |
| |
| #define HCI_CMD_LE_Set_Periodic_Adv_Data 0x3F |
| /* we'll define if needed */ |
| |
| #define HCI_CMD_LE_Set_Periodic_Adv_Enable 0x40 |
| /* we'll define if needed */ |
| |
| #define HCI_CMD_LE_Set_Extended_Scan_Params 0x41 /* complete, VARIABLE LENGTH */ |
| struct hciLeSetExtendedScanParamsItem { |
| uint8_t scanType; |
| uint16_t scanInterval; |
| uint16_t scanWindow; |
| } __packed; |
| struct hciLeSetExtendedScanParams { |
| uint8_t ownAddrType; |
| uint8_t filterPolicy; |
| uint8_t phys; //number of items that follow |
| struct hciLeSetExtendedScanParamsItem perPhy[]; |
| } __packed; |
| struct hciCmplLeSetExtendedScanParams { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Set_Extended_Scan_Enable 0x42 /* complete */ |
| struct hciLeSetExtendedScanEnable { |
| uint8_t enable; |
| uint8_t filterDupes; |
| uint16_t duration; |
| uint16_t period; |
| } __packed; |
| struct hciCmplLeSetExtendedScanEnable { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_CMD_LE_Extended_Create_Connection 0x43 /* status, VARIABLE LENGTH */ |
| struct hciLeExtendedCreateConnectionItem { |
| uint16_t scanInterval; |
| uint16_t scanWindow; |
| uint16_t connIntervalMin; |
| uint16_t connIntervalMax; |
| uint16_t connLatency; |
| uint16_t supervisiontimeout; |
| uint16_t connCeLengthMin; |
| uint16_t connCeLengthMax; |
| } __packed; |
| struct hciLeExtendedCreateConnection { |
| uint8_t initiatorFilterPolicy; |
| uint8_t ownAddrType; |
| uint8_t peerAddrType; |
| uint8_t peerAddr[6]; |
| uint8_t phys; //number of items that follow |
| struct hciLeExtendedCreateConnectionItem perPhy[]; |
| } __packed; |
| |
| #define HCI_CMD_LE_Periodic_Adv_Create_Sync 0x44 |
| /* we'll define if needed */ |
| |
| #define HCI_CMD_LE_Periodic_Adv_Create_Sync_Calcel 0x45 |
| /* we'll define if needed */ |
| |
| #define HCI_CMD_LE_Periodic_Terminate_Sync 0x46 |
| /* we'll define if needed */ |
| |
| #define HCI_CMD_LE_Add_Dev_To_Periodic_Adv_List 0x47 |
| /* we'll define if needed */ |
| |
| #define HCI_CMD_LE_Remove_Dev_From_Periodic_Adv_List 0x48 |
| /* we'll define if needed */ |
| |
| #define HCI_CMD_LE_Clear_Periodic_Adv_List 0x49 |
| /* we'll define if needed */ |
| |
| #define HCI_CMD_LE_Read_Periodic_Adv_List_Size 0x4A |
| /* we'll define if needed */ |
| |
| #define HCI_CMD_LE_Read_Transmit_Power 0x4B /* complete */ |
| struct hciCmplLeReadTransmitPower { |
| uint8_t status; |
| uint8_t minTxPower; /* actually a int8_t */ |
| uint8_t maxTxPower; /* actually a int8_t */ |
| } __packed; |
| |
| #define HCI_CMD_LE_Read_RF_Path_Compensation 0x4C |
| /* we'll define if needed */ |
| |
| #define HCI_CMD_LE_Write_RF_Path_Compensation 0x4D |
| /* we'll define if needed */ |
| |
| #define HCI_CMD_LE_Set_Privacy_Mode 0x4E /* complete */ |
| struct hciLeSetPrivacyMode { |
| uint8_t peerIdentAddrType; |
| uint8_t peerMac[6]; /* public or static random */ |
| uint8_t privacyMode; |
| } __packed; |
| struct hciCmplLeSetPrivacyMode { |
| uint8_t status; |
| } __packed; |
| |
| |
| |
| #define HCI_OGF_Vendor 0x3F |
| |
| #define HCI_CMD_Vendor_LE_Get_Vendor_Capabilities 0x153 /* complete, android-extension */ |
| struct hciCmplVendorLeGetVendorCapabilities { |
| uint8_t status; |
| uint8_t maxAdvtInstances; |
| uint8_t isRpaCapable; |
| uint16_t scanResultStorageBytes; |
| uint8_t irkListSz; |
| uint8_t isFilteringSupported; |
| uint8_t maxNumFilters; |
| uint8_t isEnergyMeteringSupported; |
| } __packed; |
| |
| #define HCI_CMD_Vendor_LE_Multi_Adv_Set_Adv_Params 0x154 /* complete, note: duplicate OCF, sub-OCF exists */ |
| #define HCI_CMD_Vendor_LE_Multi_Adv_Set_Adv_Params_sub_ocf 0x01 |
| struct hciVendorLeMultiAdvSetAdvParams { |
| uint8_t subOcf; |
| uint16_t advIntervalMin; |
| uint16_t advIntervalMax; |
| uint8_t advType; |
| uint8_t ownAddressType; |
| uint8_t ownAddress[6]; |
| uint8_t directRandomAddress; |
| uint8_t directAddr[6]; |
| uint8_t advChannelMap; |
| uint8_t advFilterPolicy; |
| uint8_t advInstanceIdx; |
| uint8_t txPower; /* actually a int8_t */ |
| } __packed; |
| struct hciCmplVendorLeMultiAdvSetAdvParams { |
| uint8_t status; |
| uint8_t subOcf; |
| } __packed; |
| |
| #define HCI_CMD_Vendor_LE_Multi_Adv_Set_Adv_Data 0x154 /* complete, note: duplicate OCF, sub-OCF exists */ |
| #define HCI_CMD_Vendor_LE_Multi_Adv_Set_Adv_Data_sub_ocf 0x02 |
| struct hciVendorLeMultiAdvSetAdvData { |
| uint8_t subOcf; |
| uint8_t advDataLen; |
| uint8_t advData[31]; |
| uint8_t advInstanceIdx; |
| } __packed; |
| struct hciCmplVendorLeMultiAdvSetAdvData { |
| uint8_t status; |
| uint8_t subOcf; |
| } __packed; |
| |
| #define HCI_CMD_Vendor_LE_Multi_Adv_Set_Scan_Rsp_Data 0x154 /* complete, note: duplicate OCF, sub-OCF exists */ |
| #define HCI_CMD_Vendor_LE_Multi_Adv_Set_Scan_Rsp_Data_sub_ocf 0x03 |
| struct hciVendorLeMultiAdvSetScanRspData { |
| uint8_t subOcf; |
| uint8_t scanRspDataLen; |
| uint8_t scanRspData[31]; |
| uint8_t advInstanceIdx; |
| } __packed; |
| struct hciCmplVendorLeMultiAdvSetScanRspData { |
| uint8_t status; |
| uint8_t subOcf; |
| } __packed; |
| |
| #define HCI_CMD_Vendor_LE_Multi_Adv_Set_Random_Addr 0x154 /* complete, note: duplicate OCF, sub-OCF exists */ |
| #define HCI_CMD_Vendor_LE_Multi_Adv_Set_Random_Addr_sub_ocf 0x04 |
| struct hciVendorLeMultiAdvSetRandomAddr { |
| uint8_t subOcf; |
| uint8_t mac[6]; |
| uint8_t advInstanceIdx; |
| } __packed; |
| struct hciCmplVendorLeMultiAdvSetRandomAddr { |
| uint8_t status; |
| uint8_t subOcf; |
| } __packed; |
| |
| #define HCI_CMD_Vendor_LE_Multi_Adv_Set_Adv_Enable 0x154 /* complete, note: duplicate OCF, sub-OCF exists */ |
| #define HCI_CMD_Vendor_LE_Multi_Adv_Set_Adv_Enable_sub_ocf 0x05 |
| struct hciVendorLeMultiAdvSetAdvEnable { |
| uint8_t subOcf; |
| uint8_t enabled; |
| uint8_t advInstanceIdx; |
| } __packed; |
| struct hciCmplVendorLeMultiAdvSetAdvEnable { |
| uint8_t status; |
| uint8_t subOcf; |
| } __packed; |
| |
| |
| |
| |
| /* EVENTS */ |
| |
| |
| /* ==== BT 1.1 ==== */ |
| |
| #define HCI_EVT_Inquiry_Complete 0x01 |
| struct hciEvtInquiryComplete { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_EVT_Inquiry_Result 0x02 |
| struct hciEvtInquiryResultItem { |
| uint8_t mac[6]; |
| uint8_t PSRM; |
| uint8_t PSPM; |
| uint8_t PSM; /* obsoleted in BT 1.2+ */ |
| uint8_t deviceClass[3]; |
| uint16_t clockOffset; |
| } __packed; |
| struct hciEvtInquiryResult { |
| uint8_t numResponses; |
| struct hciEvtInquiryResultItem items[]; |
| } __packed; |
| |
| #define HCI_EVT_Connection_Complete 0x03 |
| struct hciEvtConnComplete { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t mac[6]; |
| uint8_t isAclLink; |
| uint8_t encrypted; |
| } __packed; |
| |
| #define HCI_EVT_Connection_Request 0x04 |
| struct hciEvtConnRequest { |
| uint8_t mac[6]; |
| uint8_t deviceClass[3]; |
| uint8_t isAclLink; |
| } __packed; |
| |
| #define HCI_EVT_Disconnection_Complete 0x05 |
| struct hciEvtDiscComplete { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t reason; |
| } __packed; |
| |
| #define HCI_EVT_Authentication_Complete 0x06 |
| struct hciEvtAuthComplete { |
| uint8_t status; |
| uint16_t handle; |
| } __packed; |
| |
| #define HCI_EVT_Remote_Name_Request_Complete 0x07 |
| struct hciEvtRemoteNameReqComplete { |
| uint8_t status; |
| uint8_t mac[6]; |
| char name[HCI_DEV_NAME_LEN]; |
| } __packed; |
| |
| #define HCI_EVT_Encryption_Change 0x08 |
| struct hciEvtEncrChange { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t encrOn; |
| } __packed; |
| |
| #define HCI_EVT_Change_Connection_Link_Key_Complete 0x09 |
| struct hciEvtChangeConnLinkKeyComplete { |
| uint8_t status; |
| uint16_t handle; |
| } __packed; |
| |
| #define HCI_EVT_Master_Link_Key_Complete 0x0A |
| struct hciEvtMasterLinkKeyComplete { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t usingTempKey; /* else using semi-permanent key */ |
| } __packed; |
| |
| #define HCI_EVT_Read_Remote_Supported_Features_Complete 0x0B |
| struct hciEvtReadRemoteSupportedFeaturesComplete { |
| uint8_t status; |
| uint16_t conn; |
| uint64_t lmpFeatures; /* bitmask of HCI_LMP_FTR_* */ |
| } __packed; |
| |
| #define HCI_EVT_Read_Remote_Version_Complete 0x0C |
| struct hciEvtReadRemoteVersionComplete { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t lmpVersion; /* HCI_VERSION_* */ |
| uint16_t manufName; |
| uint16_t lmpSubversion; |
| } __packed; |
| |
| #define HCI_EVT_QOS_Setup_Complete 0x0D |
| struct hciEvtQosSetupComplete { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t flags; |
| uint8_t serviceType; |
| uint32_t tokenRate; |
| uint32_t peakBandwidth; |
| uint32_t latency; |
| uint32_t delayVariation; |
| } __packed; |
| |
| #define HCI_EVT_Command_Complete 0x0E |
| struct hciEvtCmdComplete { |
| uint8_t numCmdCredits; |
| uint16_t opcode; |
| } __packed; |
| |
| #define HCI_EVT_Command_Status 0x0F |
| struct hciEvtCmdStatus { |
| uint8_t status; |
| uint8_t numCmdCredits; |
| uint16_t opcode; |
| } __packed; |
| |
| #define HCI_EVT_Hardware_Error 0x10 |
| struct hciEvtHwError { |
| uint8_t errCode; |
| } __packed; |
| |
| #define HCI_EVT_Flush_Occured 0x11 |
| struct hciEvtFlushOccured { |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_EVT_Role_Change 0x12 |
| struct hciEvtRoleChange { |
| uint8_t status; |
| uint8_t mac[6]; |
| uint8_t amSlave; |
| } __packed; |
| |
| #define HCI_EVT_Number_Of_Completed_Packets 0x13 |
| struct hciEvtNumCompletedPacketsItem { |
| uint16_t conn; |
| uint16_t numPackets; |
| } __packed; |
| struct hciEvtNumCompletedPackets { |
| uint8_t numHandles; |
| struct hciEvtNumCompletedPacketsItem items[]; |
| } __packed; |
| |
| #define HCI_EVT_Mode_Change 0x14 |
| struct hciEvtModeChange { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t mode; /* HCI_CUR_MODE_* */ |
| uint16_t interval; /* in units of 0.625ms 0..0xffff */ |
| } __packed; |
| |
| #define HCI_EVT_Return_Link_Keys 0x15 |
| struct hciEvtReturnLinkKeysItem { |
| uint8_t mac[6]; |
| uint8_t key[16]; |
| } __packed; |
| struct hciEvtReturnLinkKeys { |
| uint8_t numKeys; |
| struct hciEvtReturnLinkKeysItem items[]; |
| } __packed; |
| |
| #define HCI_EVT_PIN_Code_Request 0x16 |
| struct hciEvtPinCodeReq { |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_EVT_Link_Key_Request 0x17 |
| struct hciEvtLinkKeyReq { |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_EVT_Link_Key_Notification 0x18 |
| struct hciEvtLinkKeyNotif { |
| uint8_t mac[6]; |
| uint8_t key[16]; |
| uint8_t keyType; /* HCI_KEY_TYPE_ */ |
| } __packed; |
| |
| #define HCI_EVT_Loopback_Command 0x19 |
| /* data is the sent command, up to 252 bytes of it */ |
| |
| #define HCI_EVT_Data_Buffer_Overflow 0x1A |
| struct hciEvtDataBufferOverflow { |
| uint8_t aclLink; |
| } __packed; |
| |
| #define HCI_EVT_Max_Slots_Change 0x1B |
| struct hciEvtMaxSlotsChange { |
| uint16_t conn; |
| uint8_t lmpMaxSlots; |
| } __packed; |
| |
| #define HCI_EVT_Read_Clock_Offset_Complete 0x1C |
| struct hciEvtReadClockOffsetComplete { |
| uint8_t status; |
| uint16_t conn; |
| uint16_t clockOffset; |
| } __packed; |
| |
| #define HCI_EVT_Connection_Packet_Type_Changed 0x1D |
| struct hciEvtConnPacketTypeChanged { |
| uint8_t status; |
| uint16_t conn; |
| uint16_t packetsAllowed; /* HCI_PKT_TYP_* */ |
| } __packed; |
| |
| #define HCI_EVT_QoS_Violation 0x1E |
| struct hciEvtQosViolation { |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_EVT_Page_Scan_Mode_Change 0x1F /* deprecated in BT 1.2+ */ |
| struct hciEvtPsmChange { |
| uint8_t mac[6]; |
| uint8_t PSM; |
| } __packed; |
| |
| #define HCI_EVT_Page_Scan_Repetition_Mode_Change 0x20 |
| struct hciEvtPrsmChange { |
| uint8_t mac[6]; |
| uint8_t PSRM; |
| } __packed; |
| |
| #define HCI_EVT_Vendor 0xFF /* all versions */ |
| struct hciEvtVendor { |
| uint8_t subevent; |
| //data |
| } __packed; |
| |
| #define HCI_EVTVENDOR_Android_Subevent_Store_Thresh_Breach 0x54 |
| #define HCI_EVTVENDOR_Android_Subevent_Advt_State_Change 0x55 |
| |
| #define HCI_EVTVENDOR_Android_Subevent_Advt_State_Change_Reason 0x00 //always |
| struct hciEvtVendorAndroidVendorExtAdvtStateChange { |
| uint8_t advInstance; |
| uint8_t reason; |
| uint16_t connHandle; |
| } __packed; |
| |
| |
| /* ==== BT 1.2 ==== */ |
| |
| #define HCI_EVT_Flow_Specification_Complete 0x21 |
| struct hciEvtFlowSpecComplete { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t flags; |
| uint8_t flowDirection; |
| uint8_t serviceType; |
| uint32_t tokenRate; |
| uint32_t peakBandwidth; |
| uint32_t latency; |
| } __packed; |
| |
| #define HCI_EVT_Inquiry_Result_With_RSSI 0x22 |
| struct hciEvtInquiryResultWithRssiItem { |
| uint8_t mac[6]; |
| uint8_t PSRM; |
| uint8_t PSPM; |
| uint8_t deviceClass[3]; |
| uint16_t clockOffset; |
| uint8_t RSSI; /* actually a int8_t */ |
| } __packed; |
| struct hciEvtInquiryResultWithRssi { |
| uint8_t numResponses; |
| struct hciEvtInquiryResultWithRssiItem items[]; |
| } __packed; |
| |
| #define HCI_EVT_Read_Remote_Extended_Features_Complete 0x23 |
| struct hciEvtReadRemoteExtFeturesComplete { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t pageNum; |
| uint8_t maxPageNum; |
| uint64_t extLmpFeatures; /* HCI_LMP_EXT_FTR_P* & HCI_LMP_FTR_* */ |
| } __packed; |
| |
| #define HCI_EVT_Synchronous_Connection_Complete 0x2C |
| struct hciEvtSyncConnComplete { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t mac[6]; |
| uint8_t linkType; /* HCI_SCO_LINK_TYPE_* */ |
| uint8_t interval; |
| uint8_t retrWindow; |
| uint16_t rxPacketLen; |
| uint16_t txPacketLen; |
| uint8_t airMode; /* HCI_SCO_AIR_MODE_* */ |
| } __packed; |
| |
| #define HCI_EVT_Synchronous_Connection_Changed 0x2D |
| struct hciEvtSyncConnChanged { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t interval; |
| uint8_t retrWindow; |
| uint16_t rxPacketLen; |
| uint16_t txPacketLen; |
| } __packed; |
| |
| |
| /* ==== BT 2.1 ==== */ |
| |
| #define HCI_EVT_Sniff_Subrating 0x2E |
| struct hciEvtSniffSubrating { |
| uint8_t status; |
| uint16_t conn; |
| uint16_t maxTxLatency; |
| uint16_t maxRxLatency; |
| uint16_t minRemoteTimeout; |
| uint16_t minLocalTimeout; |
| } __packed; |
| |
| #define HCI_EVT_Extended_Inquiry_Result 0x2F |
| struct hciEvtExtendedInquiryResult { |
| uint8_t numResponses; /* must be 1 */ |
| uint8_t mac[6]; |
| uint8_t PSRM; |
| uint8_t reserved; |
| uint8_t deviceClass[3]; |
| uint16_t clockOffset; |
| uint8_t RSSI; /* actually a int8_t */ |
| uint8_t EIR[240]; |
| } __packed; |
| |
| #define HCI_EVT_Encryption_Key_Refresh_Complete 0x30 |
| struct hciEvtEncrKeyRefreshComplete { |
| uint8_t status; |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_EVT_IO_Capability_Request 0x31 |
| struct hciEvtIoCapRequest { |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_EVT_IO_Capability_Response 0x32 |
| struct hciEvtIoCapResponse { |
| uint8_t mac[6]; |
| uint8_t ioCapability; /* HCI_DISPLAY_CAP_* */ |
| uint8_t oobDataPresent; |
| uint8_t authReqments; /* HCI_AUTH_REQMENT_ */ |
| } __packed; |
| |
| #define HCI_EVT_User_Confirmation_Request 0x33 |
| struct hciEvtUserConfRequest { |
| uint8_t mac[6]; |
| uint32_t numericValue; |
| } __packed; |
| |
| #define HCI_EVT_User_Passkey_Request 0x34 |
| struct hciEvtUserPasskeyRequest { |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_EVT_Remote_OOB_Data_Request 0x35 |
| struct hciEvtRemoteOobRequest { |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_EVT_Simple_Pairing_Complete 0x36 |
| struct hciEvtSimplePairingComplete { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_EVT_Link_Supervision_Timeout_Changed 0x38 |
| struct hciEvtLinkSupervisionTimeoutChanged { |
| uint16_t conn; |
| uint16_t timeout; /* in units of 0.625 ms 1..0xffff */ |
| } __packed; |
| |
| #define HCI_EVT_Enhanced_Flush_Complete 0x39 |
| struct hciEvtEnahncedFlushComplete { |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_EVT_User_Passkey_Notification 0x3B |
| struct hciEvtUserPasskeyNotif { |
| uint8_t mac[6]; |
| uint32_t passkey; |
| } __packed; |
| |
| #define HCI_EVT_Keypress_Notification 0x3C |
| struct hciEvtKeypressNotification { |
| uint8_t mac[6]; |
| uint8_t notifType; /* HCI_SSP_KEY_ENTRY_* */ |
| } __packed; |
| |
| #define HCI_EVT_Remote_Host_Supported_Features_Notification 0x3D |
| struct hciEvtRemoteHostSupportedFeatures { |
| uint8_t mac[6]; |
| uint64_t hostSupportedFeatures; /* HCI_LMP_FTR_* */ |
| } __packed; |
| |
| |
| /* ==== BT 3.0 ==== */ |
| |
| #define HCI_EVT_Physical_Link_Complete 0x40 |
| struct hciEvtPhysLinkComplete { |
| uint8_t status; |
| uint8_t physLinkHandle; |
| } __packed; |
| |
| #define HIC_EVT_Channel_Selected 0x41 |
| struct hciEvtChannelSelected { |
| uint8_t physLinkHandle; |
| } __packed; |
| |
| #define HCI_EVT_Disconnection_Physical_Link_Complete 0x42 |
| struct hciEvtDiscPhysLinkComplete { |
| uint8_t status; |
| uint8_t physLinkHandle; |
| uint8_t reason; |
| } __packed; |
| |
| #define HCI_EVT_Physical_Link_Loss_Early_Warning 0x43 |
| struct hciEvtDiscPhysLinkLossEralyWarning { |
| uint8_t physLinkHandle; |
| uint8_t lossReason; |
| } __packed; |
| |
| #define HCI_EVT_Physical_Link_Recovery 0x44 |
| struct hciEvtDiscPhysLinkRecovery { |
| uint8_t physLinkHandle; |
| } __packed; |
| |
| #define HCI_EVT_Logical_Link_Complete 0x45 |
| struct hciEvtLogicalLinkComplete { |
| uint8_t status; |
| uint16_t logicalLinkHandle; |
| uint8_t physLinkHandle; |
| uint8_t txFlowSpecID; |
| } __packed; |
| |
| #define HCI_EVT_Disconnection_Logical_Link_Complete 0x46 |
| struct hciEvtDiscLogicalLinkComplete { |
| uint8_t status; |
| uint16_t logicalLinkHandle; |
| uint8_t reason; |
| } __packed; |
| |
| #define HCI_EVT_Flow_Spec_Modify_Complete 0x47 |
| struct hciEvtFlowSpecModifyComplete { |
| uint8_t status; |
| uint16_t conn; |
| } __packed; |
| |
| #define HCI_EVT_Number_Of_Completed_Data_Blocks 0x48 |
| struct hciEvtNumCompletedDataBlocksItem { |
| uint16_t conn; |
| uint16_t numPackets; |
| } __packed; |
| struct hciEvtNumCompletedDataBlocks { |
| uint16_t totalNumBlocks; |
| uint8_t numberOfHandles; |
| struct hciEvtNumCompletedDataBlocksItem items[]; |
| } __packed; |
| |
| #define HCI_EVT_AMP_Start_Test 0x49 |
| struct hciEvtAmpStartTest { |
| uint8_t status; |
| uint8_t scenario; |
| } __packed; |
| |
| #define HCI_EVT_AMP_Test_End 0x4A |
| struct hciEvtAmpTestEnd { |
| uint8_t status; |
| uint8_t scenario; |
| } __packed; |
| |
| #define HCI_EVT_AMP_Receiver_Report 0x4B |
| struct hciEvtampReceiverReport { |
| uint8_t controllerType; |
| uint8_t reason; |
| uint32_t eventType; |
| uint16_t numberOfFrames; |
| uint16_t numberOfErrorFrames; |
| uint32_t numberOfBits; |
| uint32_t numberOfErrorBits; |
| } __packed; |
| |
| #define HCI_EVT_Short_Range_Mode_Change_Complete 0x4C |
| struct hciEvtshortRangeModeChangeComplete { |
| uint8_t status; |
| uint8_t physLinkHandle; |
| uint8_t shortRangeModeOn; |
| } __packed; |
| |
| #define HCI_EVT_AMP_Status_Change 0x4D |
| struct hciEvtAmpStatusChange { |
| uint8_t status; |
| uint8_t ampStatus; |
| } __packed; |
| |
| |
| /* ==== BT 4.0 ==== */ |
| |
| #define HCI_EVT_LE_Meta 0x3E |
| struct hciEvtLeMeta { |
| uint8_t subevent; |
| } __packed; |
| |
| #define HCI_EVTLE_Connection_Complete 0x01 |
| struct hciEvtLeConnectionComplete { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t amSlave; |
| uint8_t peerAddrRandom; |
| uint8_t peerMac[6]; |
| uint16_t connInterval; /* in units of 1.25 ms 6..0x0C80 */ |
| uint16_t connLatency; /* 0..0x01f3 */ |
| uint16_t supervisionTimeout; /* in units of 10ms, 0xA..0x0C80 */ |
| uint8_t masterClockAccuracy; /* HCI_MCA_* */ |
| } __packed; |
| |
| #define HCI_EVTLE_Advertising_Report 0x02 |
| struct hciEvtLeAdvReportItem { |
| uint8_t advType; /* HCI_ADV_TYPE_* */ |
| uint8_t randomAddr; |
| uint8_t mac[6]; |
| uint8_t dataLen; |
| uint8_t data[]; |
| /* int8_t RSSI <-- this cannot be here due to variable data len, but in reality it is there */ |
| } __packed; |
| struct hciEvtLeAdvReport { |
| uint8_t numReports; |
| /* struct hciEvtLeAdvReportItem items[]; <- this cannot be here since data length is variable */ |
| } __packed; |
| |
| #define HCI_EVTLE_Connection_Update_Complete 0x03 |
| struct hciEvtLeConnectionUpdateComplete { |
| uint8_t status; |
| uint16_t conn; |
| uint16_t connInterval; /* in units of 1.25 ms 6..0x0C80 */ |
| uint16_t connLatency; /* 0..0x01f3 */ |
| uint16_t supervisionTimeout; /* in units of 10ms, 0xA..0x0C80 */ |
| } __packed; |
| |
| #define HCI_EVTLE_Read_Remote_Used_Features_Complete 0x04 |
| struct hciEvtLeReadRemoteFeaturesComplete { |
| uint8_t status; |
| uint16_t conn; |
| uint64_t leFeatures; /* bitmask of HCI_LE_FTR_* */ |
| } __packed; |
| |
| #define HCI_EVTLE_LTK_Request 0x05 |
| struct hciEvtLeLtkRequest { |
| uint16_t conn; |
| uint64_t randomNum; |
| uint16_t diversifier; |
| } __packed; |
| |
| |
| /* ==== BT 4.1 ==== */ |
| |
| #define HCI_EVTLE_Remote_Connection_Parameter_Request 0x06 |
| struct hciEvtLeRemoteConnParamRequest { |
| uint16_t conn; |
| uint16_t connIntervalMin; /* in units of 1.25 ms 6..0x0C80 */ |
| uint16_t connIntervalMax; /* in units of 1.25 ms 6..0x0C80 */ |
| uint16_t connLatency; /* 0..0x01f3 */ |
| uint16_t supervisionTimeout; /* iin units of 10ms, 0xA..0x0C80 */ |
| } __packed; |
| |
| #define HCI_EVT_Triggered_Clock_Capture 0x4E |
| struct hciEvtTriggeredClockCapture { |
| uint16_t conn; |
| uint8_t piconetClock; |
| uint32_t clock; |
| uint16_t slotOffset; |
| } __packed; |
| |
| #define HCI_EVT_Synchronization_Train_Complete 0x4F |
| struct hciEvtSyncTrainComplete { |
| uint8_t status; |
| } __packed; |
| |
| #define HCI_EVT_Synchronization_Train_Received 0x50 |
| struct hciEvtSyncTrainReceived { |
| uint8_t status; |
| uint8_t mac[6]; |
| uint32_t offset; |
| uint8_t afhChannelMap[10]; |
| uint8_t ltAddr; |
| uint32_t nextBroadcastInstant; |
| uint16_t connectionlessSlaveBroadcastInterval; |
| uint8_t serviceData; |
| } __packed; |
| |
| #define HCI_EVT_Connectionless_Slave_Broadcast_Receive 0x51 |
| struct hciEvtConnectionlessSlaveBroadcastReceive { |
| uint8_t mac[6]; |
| uint8_t ltAddr; |
| uint32_t clk; |
| uint32_t offset; |
| uint8_t rxFailed; |
| uint8_t fragment; /* HCI_CONNLESS_FRAG_TYPE_* */ |
| uint8_t dataLen; |
| /* data */ |
| } __packed; |
| |
| #define HCI_EVT_Connectionless_Slave_Broadcast_Timeout 0x52 |
| struct hciEvtConnectionlessSlaveBroadcastTimeout { |
| uint8_t mac[6]; |
| uint8_t ltAddr; |
| } __packed; |
| |
| #define HCI_EVT_Truncated_Page_Complete 0x53 |
| struct hciEvtTruncatedPageComplete { |
| uint8_t status; |
| uint8_t mac[6]; |
| } __packed; |
| |
| #define HCI_EVT_Slave_Page_Response_Timeout 0x54 |
| |
| #define HCI_EVT_Connless_Slave_Broadcast_Channel_Map_Change 0x55 |
| struct hciEvtConnlessSlaveBroadcastChannelMapChange { |
| uint8_t map[10]; |
| } __packed; |
| |
| #define HCI_EVT_Inquiry_Response_Notification 0x56 |
| struct hciEvtInquiryResponseNotif { |
| uint8_t lap[3]; |
| uint8_t RSSI; /* actually an int8_t */ |
| } __packed; |
| |
| #define HCI_EVT_Authenticated_Payload_Timeout_Expired 0x57 |
| struct hciEvtAuthedPayloadTimeoutExpired { |
| uint16_t conn; |
| } __packed; |
| |
| |
| /* ==== BT 4.2 ==== */ |
| |
| #define HCI_EVTLE_Data_Length_Change 0x07 |
| struct hciEvtLeDataLengthChange { |
| uint16_t conn; |
| uint16_t maxTxOctets; |
| uint16_t maxTxTime; |
| uint16_t maxRxOctets; |
| uint16_t maxRxTime; |
| } __packed; |
| |
| #define HCI_EVTLE_Read_Local_P256_Public_Key_Complete 0x08 |
| struct hciEvtLeReadLocalP256PublicKeyComplete { |
| uint8_t status; |
| uint8_t pubKey[64]; |
| } __packed; |
| |
| #define HCI_EVTLE_Generate_DHKey_Complete 0x09 |
| struct hciEvtLeGenerateDHKeyComplete { |
| uint8_t status; |
| uint8_t dhkey[32]; |
| } __packed; |
| |
| #define HCI_EVTLE_Enhanced_Connection_Complete 0x0A |
| struct hciEvtLeEnhancedConnectionComplete { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t role; |
| uint8_t peerAddrType; |
| uint8_t peerAddr[6]; |
| uint8_t localResolvablePrivateAddr[6]; |
| uint8_t peerResolvablePrivateAddr[6]; |
| uint16_t connInterval; |
| uint16_t connLatency; |
| uint16_t supervisionTimeout; |
| uint8_t MCA; |
| } __packed; |
| |
| #define HCI_EVTLE_Direct_Advertising_Report 0x0B |
| struct hciEvtLeDirectAdvReportItem { |
| uint8_t reportType; /* aka event type */ |
| uint8_t directAddrType; |
| uint8_t directAddr[6]; |
| uint8_t addrType; |
| uint8_t addr[6]; |
| uint8_t RSSI; /* actually an int8_t */ |
| } __packed; |
| struct hciEvtLeDirectAdvReport { |
| uint8_t numReports; |
| struct hciEvtLeDirectAdvReportItem reports[]; |
| } __packed; |
| |
| /* ==== BT 5.0 ==== */ |
| |
| #define HCI_EVT_SAM_Status_Change 0x58 |
| struct hciEvtSamStatusChange { |
| uint16_t conn; |
| uint8_t localSamIndex; |
| uint8_t localSamTxAvailability; |
| uint8_t localSamRxAvailability; |
| uint8_t remoteSamIndex; |
| uint8_t remoteSamTxAvailability; |
| uint8_t remoteSamRxAvailability; |
| } __packed; |
| |
| |
| #define HCI_EVTLE_PHY_Update_Complete 0x0C |
| struct hciEvtLePhyUpdateComplete { |
| uint8_t status; |
| uint16_t conn; |
| uint8_t txPhy; |
| uint8_t rxPhy; |
| } __packed; |
| |
| #define HCI_EVTLE_Extended_Advertising_Report 0x0D |
| struct hciEvtLeExtendedAdvReportItem { |
| uint8_t eventType; |
| uint8_t addrType; |
| uint8_t addr[6]; |
| uint8_t primaryPhy; |
| uint8_t secondaryPhy; |
| uint8_t advertisingSid; |
| uint8_t txPower; |
| uint8_t RSSI; /* actually an int8_t */ |
| uint16_t periodicAdvInterval; |
| uint8_t directAddrType; |
| uint8_t directAddr[6]; |
| uint8_t dataLen; |
| uint8_t data[]; |
| } __packed; |
| struct hciEvtLeExtendedAdvReport { |
| uint8_t numReports; |
| /* struct hciEvtLeExtendedAdvReportItem items[]; <- this cannot be here since data length is variable */ |
| } __packed; |
| |
| #define HCI_EVTLE_Periodic_Adv_Sync_Established 0x0E |
| /* we'll define if needed */ |
| |
| #define HCI_EVTLE_Periodic_Adv_Report 0x0F |
| /* we'll define if needed */ |
| |
| #define HCI_EVTLE_Periodic_Adv_Sync_Lost 0x10 |
| /* we'll define if needed */ |
| |
| #define HCI_EVTLE_Scan_Timeout 0x11 |
| |
| #define HCI_EVTLE_Adv_Set_Terminated 0x12 |
| struct hciEvtLeAdvSetTerminated { |
| uint8_t status; |
| uint8_t advSetHandle; |
| uint16_t conn; |
| uint8_t numComplExtendedAdvEvts; |
| } __packed; |
| |
| #define HCI_EVTLE_Scan_Request_Received 0x13 |
| struct hciEvtLeScanRequestReceived { |
| uint8_t advSetHandle; |
| uint8_t scannerAddrType; |
| uint8_t scannerAddr[6]; |
| } __packed; |
| |
| #define HCI_EVTLE_Channel_Selection_Algorithm 0x14 |
| struct hciEvtLeChannelSelectionAlgorithm { |
| uint16_t conn; |
| uint8_t algorithm; |
| } __packed; |
| |
| |
| |
| |
| |
| /* ERROR CODES */ |
| |
| /* ==== BT 1.1 ==== */ |
| |
| #define HCI_ERR_Unknown_HCI_Command 0x01 |
| #define HCI_ERR_No_Connection 0x02 |
| #define HCI_ERR_Hardware_Failure 0x03 |
| #define HCI_ERR_Page_Timeout 0x04 |
| #define HCI_ERR_Authentication_Failure 0x05 |
| #define HCI_ERR_Key_Missing 0x06 |
| #define HCI_ERR_Memory_Full 0x07 |
| #define HCI_ERR_Connection_Timeout 0x08 |
| #define HCI_ERR_Max_Number_Of_Connections 0x09 |
| #define HCI_ERR_Max_Number_Of_SCO_Connections_To_A_Device 0x0A |
| #define HCI_ERR_ACL_Connection_Already_Exists 0x0B |
| #define HCI_ERR_Command_Disallowed 0x0C |
| #define HCI_ERR_Host_Rejected_Due_To_Limited_Resources 0x0D |
| #define HCI_ERR_Host_Rejected_Due_To_Security_Reasons 0x0E |
| #define HCI_ERR_Host_Rejected_Remote_Device_Personal_Device 0x0F |
| #define HCI_ERR_Host_Timeout 0x10 |
| #define HCI_ERR_Unsupported_Feature_Or_Parameter_Value 0x11 |
| #define HCI_ERR_Invalid_HCI_Command_Parameters 0x12 |
| #define HCI_ERR_Other_End_Terminated_Connection_User_Requested 0x13 |
| #define HCI_ERR_Other_End_Terminated_Connection_Low_Resources 0x14 |
| #define HCI_ERR_Other_End_Terminated_Connection_Soon_Power_Off 0x15 |
| #define HCI_ERR_Connection_Terminated_By_Local_Host 0x16 |
| #define HCI_ERR_Repeated_Attempts 0x17 |
| #define HCI_ERR_Pairing_Not_Allowed 0x18 |
| #define HCI_ERR_Unknown_LMP_PDU 0x19 |
| #define HCI_ERR_Unsupported_Remote_Feature 0x1A |
| #define HCI_ERR_SCO_Offset_Rejected 0x1B |
| #define HCI_ERR_SCO_Interval_Rejected 0x1C |
| #define HCI_ERR_SCO_Air_Mode_Rejected 0x1D |
| #define HCI_ERR_Invalid_LMP_Parameters 0x1E |
| #define HCI_ERR_Unspecified_Error 0x1F |
| #define HCI_ERR_Unsupported_LMP_Parameter 0x20 |
| #define HCI_ERR_Role_Change_Not_Allowed 0x21 |
| #define HCI_ERR_LMP_Response_Timeout 0x22 |
| #define HCI_ERR_LMP_Error_Transaction_Collision 0x23 |
| #define HCI_ERR_LMP_PDU_Not_Allowed 0x24 |
| #define HCI_ERR_Encryption_Mode_Not_Acceptable 0x25 |
| #define HCI_ERR_Unit_Key_Used 0x26 |
| #define HCI_ERR_QoS_Not_Supported 0x27 |
| #define HCI_ERR_Instant_Passed 0x28 |
| #define HCI_ERR_Pairing_With_Unit_Key_Not_Supported 0x29 |
| |
| |
| /* ==== BT 1.2 ==== */ |
| |
| #define HCI_ERR_Different_Transaction_Collision 0x2A |
| #define HCI_ERR_QoS_Unacceptable_Parameter 0x2C |
| #define HCI_ERR_QoS_Rejected 0x2D |
| #define HCI_ERR_Channel_Classification_Not_Supported 0x2E |
| #define HCI_ERR_Insufficient_Security 0x2F |
| #define HCI_ERR_Parameter_Out_Of_Mandatory_Range 0x30 |
| #define HCI_ERR_Role_Switch_Pending 0x33 |
| #define HCI_ERR_Reserved_Slot_Violation 0x34 |
| #define HIC_ERR_Role_Switch_Failed 0x35 |
| |
| |
| /* ==== BT 2.1 ==== */ |
| |
| #define HCI_ERR_EIR_Too_Large 0x36 |
| #define HCI_ERR_SSP_Not_Supported_By_Host 0x37 |
| #define HCI_ERR_Host_Busy_Pairing 0x38 |
| |
| |
| /* ==== BT 3.0 ==== */ |
| |
| #define HCI_ERR_Connection_Rejected_No_Suitable_Channel_Found 0x39 |
| #define HCI_ERR_Controller_Busy 0x3A |
| |
| |
| /* ==== BT 4.0 ==== */ |
| |
| #define HCI_ERR_Unacceptable_Connection_Interval 0x3B |
| #define HCI_ERR_Directed_Advertising_Timeout 0x3C |
| #define HCI_ERR_Connection_Terminated_Due_To_MIC_Failure 0x3D |
| #define HCI_ERR_Connection_Failed_To_To_Established 0x3E |
| #define HCI_ERR_MAC_Connection_Failed 0x3F |
| |
| |
| /* ==== BT 4.1 ==== */ |
| |
| #define HCI_ERR_CoarceClock_AdjFailed_Will_Try_clock_Dragging 0x40 |
| |
| |
| |
| #endif |
| |