summaryrefslogtreecommitdiff
path: root/devices/ble_hci/common-hal/_bleio/hci_include
diff options
context:
space:
mode:
Diffstat (limited to 'devices/ble_hci/common-hal/_bleio/hci_include')
-rw-r--r--devices/ble_hci/common-hal/_bleio/hci_include/addr.h1
-rw-r--r--devices/ble_hci/common-hal/_bleio/hci_include/att.h41
-rw-r--r--devices/ble_hci/common-hal/_bleio/hci_include/att_internal.h266
-rw-r--r--devices/ble_hci/common-hal/_bleio/hci_include/hci.h1
-rw-r--r--devices/ble_hci/common-hal/_bleio/hci_include/l2cap_internal.h230
5 files changed, 539 insertions, 0 deletions
diff --git a/devices/ble_hci/common-hal/_bleio/hci_include/addr.h b/devices/ble_hci/common-hal/_bleio/hci_include/addr.h
index 8f503b8a1..fd74a95e8 100644
--- a/devices/ble_hci/common-hal/_bleio/hci_include/addr.h
+++ b/devices/ble_hci/common-hal/_bleio/hci_include/addr.h
@@ -12,6 +12,7 @@
#ifndef ZEPHYR_INCLUDE_BLUETOOTH_ADDR_H_
#define ZEPHYR_INCLUDE_BLUETOOTH_ADDR_H_
+#include <stdbool.h>
#include <string.h>
/**
diff --git a/devices/ble_hci/common-hal/_bleio/hci_include/att.h b/devices/ble_hci/common-hal/_bleio/hci_include/att.h
new file mode 100644
index 000000000..8117a48f4
--- /dev/null
+++ b/devices/ble_hci/common-hal/_bleio/hci_include/att.h
@@ -0,0 +1,41 @@
+// CircuitPython: Adapted from Zephyr include file.
+/** @file
+ * @brief Attribute Protocol handling.
+ */
+
+/*
+ * Copyright (c) 2016 Intel Corporation
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+#ifndef ZEPHYR_INCLUDE_BLUETOOTH_ATT_H_
+#define ZEPHYR_INCLUDE_BLUETOOTH_ATT_H_
+
+/* Error codes for Error response PDU */
+#define BT_ATT_ERR_INVALID_HANDLE 0x01
+#define BT_ATT_ERR_READ_NOT_PERMITTED 0x02
+#define BT_ATT_ERR_WRITE_NOT_PERMITTED 0x03
+#define BT_ATT_ERR_INVALID_PDU 0x04
+#define BT_ATT_ERR_AUTHENTICATION 0x05
+#define BT_ATT_ERR_NOT_SUPPORTED 0x06
+#define BT_ATT_ERR_INVALID_OFFSET 0x07
+#define BT_ATT_ERR_AUTHORIZATION 0x08
+#define BT_ATT_ERR_PREPARE_QUEUE_FULL 0x09
+#define BT_ATT_ERR_ATTRIBUTE_NOT_FOUND 0x0a
+#define BT_ATT_ERR_ATTRIBUTE_NOT_LONG 0x0b
+#define BT_ATT_ERR_ENCRYPTION_KEY_SIZE 0x0c
+#define BT_ATT_ERR_INVALID_ATTRIBUTE_LEN 0x0d
+#define BT_ATT_ERR_UNLIKELY 0x0e
+#define BT_ATT_ERR_INSUFFICIENT_ENCRYPTION 0x0f
+#define BT_ATT_ERR_UNSUPPORTED_GROUP_TYPE 0x10
+#define BT_ATT_ERR_INSUFFICIENT_RESOURCES 0x11
+#define BT_ATT_ERR_DB_OUT_OF_SYNC 0x12
+#define BT_ATT_ERR_VALUE_NOT_ALLOWED 0x13
+
+/* Common Profile Error Codes (from CSS) */
+#define BT_ATT_ERR_WRITE_REQ_REJECTED 0xfc
+#define BT_ATT_ERR_CCC_IMPROPER_CONF 0xfd
+#define BT_ATT_ERR_PROCEDURE_IN_PROGRESS 0xfe
+#define BT_ATT_ERR_OUT_OF_RANGE 0xff
+
+#endif /* ZEPHYR_INCLUDE_BLUETOOTH_ATT_H_ */
diff --git a/devices/ble_hci/common-hal/_bleio/hci_include/att_internal.h b/devices/ble_hci/common-hal/_bleio/hci_include/att_internal.h
new file mode 100644
index 000000000..1c75275da
--- /dev/null
+++ b/devices/ble_hci/common-hal/_bleio/hci_include/att_internal.h
@@ -0,0 +1,266 @@
+// CircuitPython: Adapted from Zephyr include file.
+
+/* att_internal.h - Attribute protocol handling */
+
+/*
+ * Copyright (c) 2015-2016 Intel Corporation
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+
+#include <stdbool.h>
+// for __packed
+#include <string.h>
+
+#define BT_EATT_PSM 0x27
+#define BT_ATT_DEFAULT_LE_MTU 23
+#define BT_ATT_TIMEOUT K_SECONDS(30)
+
+//FIX #if BT_L2CAP_RX_MTU < CONFIG_BT_L2CAP_TX_MTU
+// #define BT_ATT_MTU BT_L2CAP_RX_MTU
+// #else
+// #define BT_ATT_MTU CONFIG_BT_L2CAP_TX_MTU
+// #endif
+
+struct bt_att_hdr {
+ uint8_t code;
+} __packed;
+
+#define BT_ATT_OP_ERROR_RSP 0x01
+struct bt_att_error_rsp {
+ uint8_t request;
+ uint16_t handle;
+ uint8_t error;
+} __packed;
+
+#define BT_ATT_OP_MTU_REQ 0x02
+struct bt_att_exchange_mtu_req {
+ uint16_t mtu;
+} __packed;
+
+#define BT_ATT_OP_MTU_RSP 0x03
+struct bt_att_exchange_mtu_rsp {
+ uint16_t mtu;
+} __packed;
+
+/* Find Information Request */
+#define BT_ATT_OP_FIND_INFO_REQ 0x04
+struct bt_att_find_info_req {
+ uint16_t start_handle;
+ uint16_t end_handle;
+} __packed;
+
+/* Format field values for BT_ATT_OP_FIND_INFO_RSP */
+#define BT_ATT_INFO_16 0x01
+#define BT_ATT_INFO_128 0x02
+
+struct bt_att_info_16 {
+ uint16_t handle;
+ uint16_t uuid;
+} __packed;
+
+struct bt_att_info_128 {
+ uint16_t handle;
+ uint8_t uuid[16];
+} __packed;
+
+/* Find Information Response */
+#define BT_ATT_OP_FIND_INFO_RSP 0x05
+struct bt_att_find_info_rsp {
+ uint8_t format;
+ uint8_t info[0];
+} __packed;
+
+/* Find By Type Value Request */
+#define BT_ATT_OP_FIND_TYPE_REQ 0x06
+struct bt_att_find_type_req {
+ uint16_t start_handle;
+ uint16_t end_handle;
+ uint16_t type;
+ uint8_t value[0];
+} __packed;
+
+struct bt_att_handle_group {
+ uint16_t start_handle;
+ uint16_t end_handle;
+} __packed;
+
+/* Find By Type Value Response */
+#define BT_ATT_OP_FIND_TYPE_RSP 0x07
+struct bt_att_find_type_rsp {
+ struct bt_att_handle_group list[0];
+} __packed;
+
+/* Read By Type Request */
+#define BT_ATT_OP_READ_TYPE_REQ 0x08
+struct bt_att_read_type_req {
+ uint16_t start_handle;
+ uint16_t end_handle;
+ uint8_t uuid[0];
+} __packed;
+
+struct bt_att_data {
+ uint16_t handle;
+ uint8_t value[0];
+} __packed;
+
+/* Read By Type Response */
+#define BT_ATT_OP_READ_TYPE_RSP 0x09
+struct bt_att_read_type_rsp {
+ uint8_t len;
+ struct bt_att_data data[0];
+} __packed;
+
+/* Read Request */
+#define BT_ATT_OP_READ_REQ 0x0a
+struct bt_att_read_req {
+ uint16_t handle;
+} __packed;
+
+/* Read Response */
+#define BT_ATT_OP_READ_RSP 0x0b
+struct bt_att_read_rsp {
+ uint8_t value[0];
+} __packed;
+
+/* Read Blob Request */
+#define BT_ATT_OP_READ_BLOB_REQ 0x0c
+struct bt_att_read_blob_req {
+ uint16_t handle;
+ uint16_t offset;
+} __packed;
+
+/* Read Blob Response */
+#define BT_ATT_OP_READ_BLOB_RSP 0x0d
+struct bt_att_read_blob_rsp {
+ uint8_t value[0];
+} __packed;
+
+/* Read Multiple Request */
+#define BT_ATT_READ_MULT_MIN_LEN_REQ 0x04
+
+#define BT_ATT_OP_READ_MULT_REQ 0x0e
+struct bt_att_read_mult_req {
+ uint16_t handles[0];
+} __packed;
+
+/* Read Multiple Respose */
+#define BT_ATT_OP_READ_MULT_RSP 0x0f
+struct bt_att_read_mult_rsp {
+ uint8_t value[0];
+} __packed;
+
+/* Read by Group Type Request */
+#define BT_ATT_OP_READ_GROUP_REQ 0x10
+struct bt_att_read_group_req {
+ uint16_t start_handle;
+ uint16_t end_handle;
+ uint8_t uuid[0];
+} __packed;
+
+struct bt_att_group_data {
+ uint16_t start_handle;
+ uint16_t end_handle;
+ uint8_t value[0];
+} __packed;
+
+/* Read by Group Type Response */
+#define BT_ATT_OP_READ_GROUP_RSP 0x11
+struct bt_att_read_group_rsp {
+ uint8_t len;
+ struct bt_att_group_data data[0];
+} __packed;
+
+/* Write Request */
+#define BT_ATT_OP_WRITE_REQ 0x12
+struct bt_att_write_req {
+ uint16_t handle;
+ uint8_t value[0];
+} __packed;
+
+/* Write Response */
+#define BT_ATT_OP_WRITE_RSP 0x13
+
+/* Prepare Write Request */
+#define BT_ATT_OP_PREPARE_WRITE_REQ 0x16
+struct bt_att_prepare_write_req {
+ uint16_t handle;
+ uint16_t offset;
+ uint8_t value[0];
+} __packed;
+
+/* Prepare Write Respond */
+#define BT_ATT_OP_PREPARE_WRITE_RSP 0x17
+struct bt_att_prepare_write_rsp {
+ uint16_t handle;
+ uint16_t offset;
+ uint8_t value[0];
+} __packed;
+
+/* Execute Write Request */
+#define BT_ATT_FLAG_CANCEL 0x00
+#define BT_ATT_FLAG_EXEC 0x01
+
+#define BT_ATT_OP_EXEC_WRITE_REQ 0x18
+struct bt_att_exec_write_req {
+ uint8_t flags;
+} __packed;
+
+/* Execute Write Response */
+#define BT_ATT_OP_EXEC_WRITE_RSP 0x19
+
+/* Handle Value Notification */
+#define BT_ATT_OP_NOTIFY 0x1b
+struct bt_att_notify {
+ uint16_t handle;
+ uint8_t value[0];
+} __packed;
+
+/* Handle Value Indication */
+#define BT_ATT_OP_INDICATE 0x1d
+struct bt_att_indicate {
+ uint16_t handle;
+ uint8_t value[0];
+} __packed;
+
+/* Handle Value Confirm */
+#define BT_ATT_OP_CONFIRM 0x1e
+
+struct bt_att_signature {
+ uint8_t value[12];
+} __packed;
+
+#define BT_ATT_OP_READ_MULT_VL_REQ 0x20
+struct bt_att_read_mult_vl_req {
+ uint16_t handles[0];
+} __packed;
+
+/* Read Multiple Respose */
+#define BT_ATT_OP_READ_MULT_VL_RSP 0x21
+struct bt_att_read_mult_vl_rsp {
+ uint16_t len;
+ uint8_t value[0];
+} __packed;
+
+/* Handle Multiple Value Notification */
+#define BT_ATT_OP_NOTIFY_MULT 0x23
+struct bt_att_notify_mult {
+ uint16_t handle;
+ uint16_t len;
+ uint8_t value[0];
+} __packed;
+
+/* Write Command */
+#define BT_ATT_OP_WRITE_CMD 0x52
+struct bt_att_write_cmd {
+ uint16_t handle;
+ uint8_t value[0];
+} __packed;
+
+/* Signed Write Command */
+#define BT_ATT_OP_SIGNED_WRITE_CMD 0xd2
+struct bt_att_signed_write_cmd {
+ uint16_t handle;
+ uint8_t value[0];
+} __packed;
diff --git a/devices/ble_hci/common-hal/_bleio/hci_include/hci.h b/devices/ble_hci/common-hal/_bleio/hci_include/hci.h
index 2de58b3d8..6c3a2b5bd 100644
--- a/devices/ble_hci/common-hal/_bleio/hci_include/hci.h
+++ b/devices/ble_hci/common-hal/_bleio/hci_include/hci.h
@@ -1,4 +1,5 @@
// CircuitPython: Adapted from Zephyr include file.
+
/* hci.h - Bluetooth Host Control Interface definitions */
/*
diff --git a/devices/ble_hci/common-hal/_bleio/hci_include/l2cap_internal.h b/devices/ble_hci/common-hal/_bleio/hci_include/l2cap_internal.h
new file mode 100644
index 000000000..bed311cf3
--- /dev/null
+++ b/devices/ble_hci/common-hal/_bleio/hci_include/l2cap_internal.h
@@ -0,0 +1,230 @@
+// CircuitPython: Adapted from Zephyr include file.
+
+/** @file
+ * @brief Internal APIs for Bluetooth L2CAP handling.
+ */
+
+/*
+ * Copyright (c) 2015-2016 Intel Corporation
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include <stdbool.h>
+// for __packed
+#include <string.h>
+
+enum l2cap_conn_list_action {
+ BT_L2CAP_CHAN_LOOKUP,
+ BT_L2CAP_CHAN_DETACH,
+};
+
+#define BT_L2CAP_CID_BR_SIG 0x0001
+#define BT_L2CAP_CID_ATT 0x0004
+#define BT_L2CAP_CID_LE_SIG 0x0005
+#define BT_L2CAP_CID_SMP 0x0006
+#define BT_L2CAP_CID_BR_SMP 0x0007
+
+#define BT_L2CAP_PSM_RFCOMM 0x0003
+
+struct bt_l2cap_hdr {
+ uint16_t len;
+ uint16_t cid;
+} __packed;
+
+struct bt_l2cap_sig_hdr {
+ uint8_t code;
+ uint8_t ident;
+ uint16_t len;
+} __packed;
+
+#define BT_L2CAP_REJ_NOT_UNDERSTOOD 0x0000
+#define BT_L2CAP_REJ_MTU_EXCEEDED 0x0001
+#define BT_L2CAP_REJ_INVALID_CID 0x0002
+
+#define BT_L2CAP_CMD_REJECT 0x01
+struct bt_l2cap_cmd_reject {
+ uint16_t reason;
+ uint8_t data[0];
+} __packed;
+
+struct bt_l2cap_cmd_reject_cid_data {
+ uint16_t scid;
+ uint16_t dcid;
+} __packed;
+
+#define BT_L2CAP_CONN_REQ 0x02
+struct bt_l2cap_conn_req {
+ uint16_t psm;
+ uint16_t scid;
+} __packed;
+
+/* command statuses in reposnse */
+#define BT_L2CAP_CS_NO_INFO 0x0000
+#define BT_L2CAP_CS_AUTHEN_PEND 0x0001
+
+/* valid results in conn response on BR/EDR */
+#define BT_L2CAP_BR_SUCCESS 0x0000
+#define BT_L2CAP_BR_PENDING 0x0001
+#define BT_L2CAP_BR_ERR_PSM_NOT_SUPP 0x0002
+#define BT_L2CAP_BR_ERR_SEC_BLOCK 0x0003
+#define BT_L2CAP_BR_ERR_NO_RESOURCES 0x0004
+#define BT_L2CAP_BR_ERR_INVALID_SCID 0x0006
+#define BT_L2CAP_BR_ERR_SCID_IN_USE 0x0007
+
+#define BT_L2CAP_CONN_RSP 0x03
+struct bt_l2cap_conn_rsp {
+ uint16_t dcid;
+ uint16_t scid;
+ uint16_t result;
+ uint16_t status;
+} __packed;
+
+#define BT_L2CAP_CONF_SUCCESS 0x0000
+#define BT_L2CAP_CONF_UNACCEPT 0x0001
+#define BT_L2CAP_CONF_REJECT 0x0002
+
+#define BT_L2CAP_CONF_REQ 0x04
+struct bt_l2cap_conf_req {
+ uint16_t dcid;
+ uint16_t flags;
+ uint8_t data[0];
+} __packed;
+
+#define BT_L2CAP_CONF_RSP 0x05
+struct bt_l2cap_conf_rsp {
+ uint16_t scid;
+ uint16_t flags;
+ uint16_t result;
+ uint8_t data[0];
+} __packed;
+
+/* Option type used by MTU config request data */
+#define BT_L2CAP_CONF_OPT_MTU 0x01
+/* Options bits selecting most significant bit (hint) in type field */
+#define BT_L2CAP_CONF_HINT 0x80
+#define BT_L2CAP_CONF_MASK 0x7f
+
+struct bt_l2cap_conf_opt {
+ uint8_t type;
+ uint8_t len;
+ uint8_t data[0];
+} __packed;
+
+#define BT_L2CAP_DISCONN_REQ 0x06
+struct bt_l2cap_disconn_req {
+ uint16_t dcid;
+ uint16_t scid;
+} __packed;
+
+#define BT_L2CAP_DISCONN_RSP 0x07
+struct bt_l2cap_disconn_rsp {
+ uint16_t dcid;
+ uint16_t scid;
+} __packed;
+
+#define BT_L2CAP_INFO_FEAT_MASK 0x0002
+#define BT_L2CAP_INFO_FIXED_CHAN 0x0003
+
+#define BT_L2CAP_INFO_REQ 0x0a
+struct bt_l2cap_info_req {
+ uint16_t type;
+} __packed;
+
+/* info result */
+#define BT_L2CAP_INFO_SUCCESS 0x0000
+#define BT_L2CAP_INFO_NOTSUPP 0x0001
+
+#define BT_L2CAP_INFO_RSP 0x0b
+struct bt_l2cap_info_rsp {
+ uint16_t type;
+ uint16_t result;
+ uint8_t data[0];
+} __packed;
+
+#define BT_L2CAP_CONN_PARAM_REQ 0x12
+struct bt_l2cap_conn_param_req {
+ uint16_t min_interval;
+ uint16_t max_interval;
+ uint16_t latency;
+ uint16_t timeout;
+} __packed;
+
+#define BT_L2CAP_CONN_PARAM_ACCEPTED 0x0000
+#define BT_L2CAP_CONN_PARAM_REJECTED 0x0001
+
+#define BT_L2CAP_CONN_PARAM_RSP 0x13
+struct bt_l2cap_conn_param_rsp {
+ uint16_t result;
+} __packed;
+
+#define BT_L2CAP_LE_CONN_REQ 0x14
+struct bt_l2cap_le_conn_req {
+ uint16_t psm;
+ uint16_t scid;
+ uint16_t mtu;
+ uint16_t mps;
+ uint16_t credits;
+} __packed;
+
+/* valid results in conn response on LE */
+#define BT_L2CAP_LE_SUCCESS 0x0000
+#define BT_L2CAP_LE_ERR_PSM_NOT_SUPP 0x0002
+#define BT_L2CAP_LE_ERR_NO_RESOURCES 0x0004
+#define BT_L2CAP_LE_ERR_AUTHENTICATION 0x0005
+#define BT_L2CAP_LE_ERR_AUTHORIZATION 0x0006
+#define BT_L2CAP_LE_ERR_KEY_SIZE 0x0007
+#define BT_L2CAP_LE_ERR_ENCRYPTION 0x0008
+#define BT_L2CAP_LE_ERR_INVALID_SCID 0x0009
+#define BT_L2CAP_LE_ERR_SCID_IN_USE 0x000A
+#define BT_L2CAP_LE_ERR_UNACCEPT_PARAMS 0x000B
+#define BT_L2CAP_LE_ERR_INVALID_PARAMS 0x000C
+
+#define BT_L2CAP_LE_CONN_RSP 0x15
+struct bt_l2cap_le_conn_rsp {
+ uint16_t dcid;
+ uint16_t mtu;
+ uint16_t mps;
+ uint16_t credits;
+ uint16_t result;
+} __packed;
+
+#define BT_L2CAP_LE_CREDITS 0x16
+struct bt_l2cap_le_credits {
+ uint16_t cid;
+ uint16_t credits;
+} __packed;
+
+#define BT_L2CAP_ECRED_CONN_REQ 0x17
+struct bt_l2cap_ecred_conn_req {
+ uint16_t psm;
+ uint16_t mtu;
+ uint16_t mps;
+ uint16_t credits;
+ uint16_t scid[0];
+} __packed;
+
+#define BT_L2CAP_ECRED_CONN_RSP 0x18
+struct bt_l2cap_ecred_conn_rsp {
+ uint16_t mtu;
+ uint16_t mps;
+ uint16_t credits;
+ uint16_t result;
+ uint16_t dcid[0];
+} __packed;
+
+#define BT_L2CAP_ECRED_RECONF_REQ 0x19
+struct bt_l2cap_ecred_reconf_req {
+ uint16_t mtu;
+ uint16_t mps;
+ uint16_t scid[0];
+} __packed;
+
+#define BT_L2CAP_RECONF_SUCCESS 0x0000
+#define BT_L2CAP_RECONF_INVALID_MTU 0x0001
+#define BT_L2CAP_RECONF_INVALID_MPS 0x0002
+
+#define BT_L2CAP_ECRED_RECONF_RSP 0x1a
+struct bt_l2cap_ecred_reconf_rsp {
+ uint16_t result;
+} __packed;