summaryrefslogtreecommitdiff
path: root/include/bluetooth_le.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/bluetooth_le.h')
-rw-r--r--include/bluetooth_le.h244
1 files changed, 120 insertions, 124 deletions
diff --git a/include/bluetooth_le.h b/include/bluetooth_le.h
index 286653dda6..e65b3d448b 100644
--- a/include/bluetooth_le.h
+++ b/include/bluetooth_le.h
@@ -1,4 +1,4 @@
-/* Copyright 2014 The Chromium OS Authors. All rights reserved.
+/* Copyright 2014 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
@@ -23,69 +23,67 @@
#include "common.h"
#include "util.h"
-#define BLUETOOTH_ADDR_OCTETS 6
+#define BLUETOOTH_ADDR_OCTETS 6
/*
* GAP assigned numbers
* https://www.bluetooth.org/en-us/specification/
* assigned-numbers/generic-access-profile
*/
-#define GAP_FLAGS 0x01
-#define GAP_INCOMP_16_BIT_UUID 0x02
-#define GAP_COMP_16_BIT_UUID 0x03
-#define GAP_INCOMP_32_BIT_UUID 0x04
-#define GAP_COMP_32_BIT_UUID 0x05
-#define GAP_INCOMP_128_BIT_UUID 0x06
-#define GAP_COMP_128_BIT_UUID 0x07
-#define GAP_SHORT_NAME 0x08
-#define GAP_COMPLETE_NAME 0x09
-#define GAP_TX_POWER_LEVEL 0x0A
-#define GAP_CLASS_OF_DEVICE 0x0D
-#define GAP_SIMPLE_PAIRING_HASH 0x0E
-#define GAP_SIMPLE_PAIRING_HASH_192 0x0E
-#define GAP_SIMPLE_PAIRING_RAND 0x0F
-#define GAP_SIMPLE_PAIRING_RAND_192 0x0F
-#define GAP_DEVICE_ID 0x10
-#define GAP_SECURITY_MANAGER_TK 0x10
-#define GAP_SECURITY_MANAGER_OOB_FLAGS 0x11
-#define GAP_SLAVE_CONNECTION_INTERVAL_RANGE 0x12
-#define GAP_SERVICE_SOLICITATION_UUID_16 0x14
-#define GAP_SERVICE_SOLICITATION_UUID_32 0x1F
-#define GAP_SERVICE_SOLICITATION_UUID_128 0x15
-#define GAP_SERVICE_DATA 0x16
-#define GAP_SERVICE_DATA_UUID_16 0x16
-#define GAP_SERVICE_DATA_UUID_32 0x20
-#define GAP_SERVICE_DATA_UUID_128 0x21
-#define GAP_LE_SECURE_CONNECTIONS_CONFIRMATION 0x22
-#define GAP_LE_SECURE_CONNECTIONS_RAND 0x23
-#define GAP_PUBLIC_TARGET_ADDRESS 0x17
-#define GAP_RANDOM_TARGET_ADDRESS 0x18
-#define GAP_APPEARANCE 0x19
-#define GAP_ADVERTISING_INTERVAL 0x1A
-#define GAP_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B
-#define GAP_LE_ROLE 0x1C
-#define GAP_SIMPLE_PAIRING_HASH_256 0x1D
-#define GAP_SIMPLE_PAIRING_RAND_256 0x1E
-#define GAP_3D_INFORMATION_DATA 0x3D
-#define GAP_MANUFACTURER_SPECIFIC_DATA 0xFF
-
+#define GAP_FLAGS 0x01
+#define GAP_INCOMP_16_BIT_UUID 0x02
+#define GAP_COMP_16_BIT_UUID 0x03
+#define GAP_INCOMP_32_BIT_UUID 0x04
+#define GAP_COMP_32_BIT_UUID 0x05
+#define GAP_INCOMP_128_BIT_UUID 0x06
+#define GAP_COMP_128_BIT_UUID 0x07
+#define GAP_SHORT_NAME 0x08
+#define GAP_COMPLETE_NAME 0x09
+#define GAP_TX_POWER_LEVEL 0x0A
+#define GAP_CLASS_OF_DEVICE 0x0D
+#define GAP_SIMPLE_PAIRING_HASH 0x0E
+#define GAP_SIMPLE_PAIRING_HASH_192 0x0E
+#define GAP_SIMPLE_PAIRING_RAND 0x0F
+#define GAP_SIMPLE_PAIRING_RAND_192 0x0F
+#define GAP_DEVICE_ID 0x10
+#define GAP_SECURITY_MANAGER_TK 0x10
+#define GAP_SECURITY_MANAGER_OOB_FLAGS 0x11
+#define GAP_SLAVE_CONNECTION_INTERVAL_RANGE 0x12
+#define GAP_SERVICE_SOLICITATION_UUID_16 0x14
+#define GAP_SERVICE_SOLICITATION_UUID_32 0x1F
+#define GAP_SERVICE_SOLICITATION_UUID_128 0x15
+#define GAP_SERVICE_DATA 0x16
+#define GAP_SERVICE_DATA_UUID_16 0x16
+#define GAP_SERVICE_DATA_UUID_32 0x20
+#define GAP_SERVICE_DATA_UUID_128 0x21
+#define GAP_LE_SECURE_CONNECTIONS_CONFIRMATION 0x22
+#define GAP_LE_SECURE_CONNECTIONS_RAND 0x23
+#define GAP_PUBLIC_TARGET_ADDRESS 0x17
+#define GAP_RANDOM_TARGET_ADDRESS 0x18
+#define GAP_APPEARANCE 0x19
+#define GAP_ADVERTISING_INTERVAL 0x1A
+#define GAP_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B
+#define GAP_LE_ROLE 0x1C
+#define GAP_SIMPLE_PAIRING_HASH_256 0x1D
+#define GAP_SIMPLE_PAIRING_RAND_256 0x1E
+#define GAP_3D_INFORMATION_DATA 0x3D
+#define GAP_MANUFACTURER_SPECIFIC_DATA 0xFF
/* org.bluetooth.characteristic.gap.appearance.xml */
-#define GAP_APPEARANCE_HID_KEYBOARD 961
+#define GAP_APPEARANCE_HID_KEYBOARD 961
/* org.bluetooth.service.human_interface_device.xml */
-#define GATT_SERVICE_HID_UUID 0x1812
+#define GATT_SERVICE_HID_UUID 0x1812
/* Bluetooth Core Supplement v5 */
/* Bluetooth Core Supplement v5 1.3 */
-#define GAP_FLAGS_LE_LIM_DISC 0x01
-#define GAP_FLAGS_LE_GEN_DISC 0x02
-#define GAP_FLAGS_LE_NO_BR_EDR 0x04
+#define GAP_FLAGS_LE_LIM_DISC 0x01
+#define GAP_FLAGS_LE_GEN_DISC 0x02
+#define GAP_FLAGS_LE_NO_BR_EDR 0x04
/* Bluetooth Core Supplement v5 1.3 */
-
/* BLE 4.1 Vol 6 section 2.3 pg 38+ */
/* Advertising PDU Header
@@ -103,49 +101,48 @@ struct ble_adv_header {
uint8_t length;
};
-#define BLE_ADV_HEADER_PDU_TYPE_SHIFT 0
-#define BLE_ADV_HEADER_TXADD_SHIFT 6
-#define BLE_ADV_HEADER_RXADD_SHIFT 7
-#define BLE_ADV_HEADER_LENGTH_SHIFT 8
+#define BLE_ADV_HEADER_PDU_TYPE_SHIFT 0
+#define BLE_ADV_HEADER_TXADD_SHIFT 6
+#define BLE_ADV_HEADER_RXADD_SHIFT 7
+#define BLE_ADV_HEADER_LENGTH_SHIFT 8
-#define BLE_ADV_HEADER(type, tx, rx, length) \
- ((uint16_t) \
- ((((length) & 0x3f) << BLE_ADV_HEADER_LENGTH_SHIFT) | \
- (((rx) & 0x1) << BLE_ADV_HEADER_RXADD_SHIFT) | \
- (((tx) & 0x1) << BLE_ADV_HEADER_TXADD_SHIFT) | \
- (((type) & 0xf) << BLE_ADV_HEADER_PDU_TYPE_SHIFT)))
+#define BLE_ADV_HEADER(type, tx, rx, length) \
+ ((uint16_t)((((length)&0x3f) << BLE_ADV_HEADER_LENGTH_SHIFT) | \
+ (((rx)&0x1) << BLE_ADV_HEADER_RXADD_SHIFT) | \
+ (((tx)&0x1) << BLE_ADV_HEADER_TXADD_SHIFT) | \
+ (((type)&0xf) << BLE_ADV_HEADER_PDU_TYPE_SHIFT)))
-#define BLE_ADV_HEADER_PDU_TYPE_ADV_IND 0
-#define BLE_ADV_HEADER_PDU_TYPE_ADV_DIRECT_IND 1
+#define BLE_ADV_HEADER_PDU_TYPE_ADV_IND 0
+#define BLE_ADV_HEADER_PDU_TYPE_ADV_DIRECT_IND 1
#define BLE_ADV_HEADER_PDU_TYPE_ADV_NONCONN_IND 2
-#define BLE_ADV_HEADER_PDU_TYPE_SCAN_REQ 3
-#define BLE_ADV_HEADER_PDU_TYPE_SCAN_RSP 4
-#define BLE_ADV_HEADER_PDU_TYPE_CONNECT_REQ 5
-#define BLE_ADV_HEADER_PDU_TYPE_ADV_SCAN_IND 6
+#define BLE_ADV_HEADER_PDU_TYPE_SCAN_REQ 3
+#define BLE_ADV_HEADER_PDU_TYPE_SCAN_RSP 4
+#define BLE_ADV_HEADER_PDU_TYPE_CONNECT_REQ 5
+#define BLE_ADV_HEADER_PDU_TYPE_ADV_SCAN_IND 6
-#define BLE_ADV_HEADER_PUBLIC_ADDR 0
-#define BLE_ADV_HEADER_RANDOM_ADDR 1
+#define BLE_ADV_HEADER_PUBLIC_ADDR 0
+#define BLE_ADV_HEADER_RANDOM_ADDR 1
/* BLE 4.1 Vol 3 Part C 10.8 */
-#define BLE_RANDOM_ADDR_MSBS_PRIVATE 0x00
-#define BLE_RANDOM_ADDR_MSBS_RESOLVABLE_PRIVATE 0x40
-#define BLE_RANDOM_ADDR_MSBS_RFU 0x80
-#define BLE_RANDOM_ADDR_MSBS_STATIC 0xC0
+#define BLE_RANDOM_ADDR_MSBS_PRIVATE 0x00
+#define BLE_RANDOM_ADDR_MSBS_RESOLVABLE_PRIVATE 0x40
+#define BLE_RANDOM_ADDR_MSBS_RFU 0x80
+#define BLE_RANDOM_ADDR_MSBS_STATIC 0xC0
#define BLE_ADV_ACCESS_ADDRESS 0x8E89BED6
#define BLE_ADV_CRCINIT 0x555555
-#define BLE_MAX_ADV_PAYLOAD_OCTETS 37
+#define BLE_MAX_ADV_PAYLOAD_OCTETS 37
/* LL SCA Values. They are shifted left 5 bits for Hop values */
-#define BLE_LL_SCA_251_PPM_TO_500_PPM (0 << 5)
-#define BLE_LL_SCA_151_PPM_TO_250_PPM BIT(5)
-#define BLE_LL_SCA_101_PPM_TO_150_PPM (2 << 5)
-#define BLE_LL_SCA_076_PPM_TO_100_PPM (3 << 5)
-#define BLE_LL_SCA_051_PPM_TO_075_PPM (4 << 5)
-#define BLE_LL_SCA_031_PPM_TO_050_PPM (5 << 5)
-#define BLE_LL_SCA_021_PPM_TO_030_PPM (6 << 5)
-#define BLE_LL_SCA_000_PPM_TO_020_PPM (7 << 5)
+#define BLE_LL_SCA_251_PPM_TO_500_PPM (0 << 5)
+#define BLE_LL_SCA_151_PPM_TO_250_PPM BIT(5)
+#define BLE_LL_SCA_101_PPM_TO_150_PPM (2 << 5)
+#define BLE_LL_SCA_076_PPM_TO_100_PPM (3 << 5)
+#define BLE_LL_SCA_051_PPM_TO_075_PPM (4 << 5)
+#define BLE_LL_SCA_031_PPM_TO_050_PPM (5 << 5)
+#define BLE_LL_SCA_021_PPM_TO_030_PPM (6 << 5)
+#define BLE_LL_SCA_000_PPM_TO_020_PPM (7 << 5)
/* BLE 4.1 Vol 6 section 2.4 pg 45 */
@@ -169,26 +166,25 @@ struct ble_data_header {
uint8_t length;
};
-#define BLE_DATA_HEADER_LLID_SHIFT 0
-#define BLE_DATA_HEADER_NESN_SHIFT 2
-#define BLE_DATA_HEADER_SN_SHIFT 3
-#define BLE_DATA_HEADER_MD_SHIFT 4
-#define BLE_DATA_HEADER_LENGTH_SHIFT 8
+#define BLE_DATA_HEADER_LLID_SHIFT 0
+#define BLE_DATA_HEADER_NESN_SHIFT 2
+#define BLE_DATA_HEADER_SN_SHIFT 3
+#define BLE_DATA_HEADER_MD_SHIFT 4
+#define BLE_DATA_HEADER_LENGTH_SHIFT 8
#define BLE_DATA_HEADER_LLID_DATANOSTART 1
-#define BLE_DATA_HEADER_LLID_DATASTART 2
-#define BLE_DATA_HEADER_LLID_CONTROL 3
+#define BLE_DATA_HEADER_LLID_DATASTART 2
+#define BLE_DATA_HEADER_LLID_CONTROL 3
-#define BLE_DATA_HEADER(llid, nesn, sn, md, length) \
- ((uint16_t) \
- ((((length) & 0x1f) << BLE_DATA_HEADER_LENGTH_SHIFT) | \
- (((MD) & 0x1) << BLE_DATA_HEADER_MD_SHIFT) | \
- (((SN) & 0x1) << BLE_DATA_HEADER_SN_SHIFT) | \
- (((NESN) & 0x1) << BLE_DATA_HEADER_NESN_SHIFT) | \
- (((llid) & 0x3) << BLE_DATA_HEADER_LLID_SHIFT)))
+#define BLE_DATA_HEADER(llid, nesn, sn, md, length) \
+ ((uint16_t)((((length)&0x1f) << BLE_DATA_HEADER_LENGTH_SHIFT) | \
+ (((MD)&0x1) << BLE_DATA_HEADER_MD_SHIFT) | \
+ (((SN)&0x1) << BLE_DATA_HEADER_SN_SHIFT) | \
+ (((NESN)&0x1) << BLE_DATA_HEADER_NESN_SHIFT) | \
+ (((llid)&0x3) << BLE_DATA_HEADER_LLID_SHIFT)))
-#define BLE_MAX_DATA_PAYLOAD_OCTETS 31
-#define BLE_MAX_PAYLOAD_OCTETS BLE_MAX_ADV_PAYLOAD_OCTETS
+#define BLE_MAX_DATA_PAYLOAD_OCTETS 31
+#define BLE_MAX_PAYLOAD_OCTETS BLE_MAX_ADV_PAYLOAD_OCTETS
union ble_header {
struct ble_adv_header adv;
@@ -210,34 +206,34 @@ struct ble_packet {
};
/* LL Control PDU Opcodes BLE 4.1 Vol 6 2.4.2 */
-#define BLE_LL_CONNECTION_UPDATE_REQ 0x00
-#define BLE_LL_CHANNEL_MAP_REQ 0x01
-#define BLE_LL_TERMINATE_IND 0x02
-#define BLE_LL_ENC_REQ 0x03
-#define BLE_LL_ENC_RSP 0x04
-#define BLE_LL_START_ENC_REQ 0x05
-#define BLE_LL_START_ENC_RSP 0x06
-#define BLE_LL_UNKNOWN_RSP 0x07
-#define BLE_LL_FEATURE_REQ 0x08
-#define BLE_LL_FEATURE_RSP 0x09
-#define BLE_LL_PAUSE_ENC_REQ 0x0A
-#define BLE_LL_PAUSE_ENC_RSP 0x0B
-#define BLE_LL_VERSION_IND 0x0C
-#define BLE_LL_REJECT_IND 0x0D
-#define BLE_LL_SLAVE_FEATURE_REQ 0x0E
-#define BLE_LL_CONNECTION_PARAM_REQ 0x0F
-#define BLE_LL_CONNECTION_PARAM_RSP 0x10
-#define BLE_LL_REJECT_IND_EXT 0x11
-#define BLE_LL_PING_REQ 0x12
-#define BLE_LL_PING_RSP 0x13
-#define BLE_LL_RFU 0x14
+#define BLE_LL_CONNECTION_UPDATE_REQ 0x00
+#define BLE_LL_CHANNEL_MAP_REQ 0x01
+#define BLE_LL_TERMINATE_IND 0x02
+#define BLE_LL_ENC_REQ 0x03
+#define BLE_LL_ENC_RSP 0x04
+#define BLE_LL_START_ENC_REQ 0x05
+#define BLE_LL_START_ENC_RSP 0x06
+#define BLE_LL_UNKNOWN_RSP 0x07
+#define BLE_LL_FEATURE_REQ 0x08
+#define BLE_LL_FEATURE_RSP 0x09
+#define BLE_LL_PAUSE_ENC_REQ 0x0A
+#define BLE_LL_PAUSE_ENC_RSP 0x0B
+#define BLE_LL_VERSION_IND 0x0C
+#define BLE_LL_REJECT_IND 0x0D
+#define BLE_LL_SLAVE_FEATURE_REQ 0x0E
+#define BLE_LL_CONNECTION_PARAM_REQ 0x0F
+#define BLE_LL_CONNECTION_PARAM_RSP 0x10
+#define BLE_LL_REJECT_IND_EXT 0x11
+#define BLE_LL_PING_REQ 0x12
+#define BLE_LL_PING_RSP 0x13
+#define BLE_LL_RFU 0x14
/* BLE 4.1 Vol 6 4.6 Table 4.3 */
-#define BLE_LL_FEATURE_LE_ENCRYPTION 0x00
-#define BLE_LL_FEATURE_CONN_PARAMS_REQ 0x01
-#define BLE_LL_FEATURE_EXT_REJ_IND 0x02
-#define BLE_LL_FEATURE_SLAVE_FEAT_EXCHG 0x03
-#define BLE_LL_FEATURE_LE_PING 0x04
+#define BLE_LL_FEATURE_LE_ENCRYPTION 0x00
+#define BLE_LL_FEATURE_CONN_PARAMS_REQ 0x01
+#define BLE_LL_FEATURE_EXT_REJ_IND 0x02
+#define BLE_LL_FEATURE_SLAVE_FEAT_EXCHG 0x03
+#define BLE_LL_FEATURE_LE_PING 0x04
struct ble_ll_connection_update_req {
uint8_t win_size;
@@ -285,8 +281,8 @@ struct ble_ll_feature_rsp {
/* ble_ll_pause_enc_rsp has no CtrData field */
-#define BLE_LL_VERS_NR_4_0 6
-#define BLE_LL_VERS_NR_4_1 7
+#define BLE_LL_VERS_NR_4_0 6
+#define BLE_LL_VERS_NR_4_1 7
struct ble_ll_version_ind {
uint8_t vers_nr; /* Version Number */
@@ -348,7 +344,7 @@ int chan2freq(int channel);
/* BLE 4.1 Vol 6 2.3.3.1 */
void fill_remapping_table(struct remapping_table *rt, uint8_t map[5],
- int hop_increment);
+ int hop_increment);
void ble_tx(struct ble_pdu *pdu);
@@ -376,7 +372,7 @@ uint8_t *pack_adv_int(uint8_t *dest, int length, int type, int data);
uint8_t *pack_adv_addr(uint8_t *dest, uint64_t addr);
const uint8_t *unpack_adv(const uint8_t *src, int *length, int *type,
- const uint8_t **data);
+ const uint8_t **data);
void dump_ble_addr(uint8_t *mem, char *name);