summaryrefslogtreecommitdiff
path: root/lib/bt/host/bluedroid/device/include
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2024-03-28 14:32:49 +1100
committerjacqueline <me@jacqueline.id.au>2024-03-28 14:32:49 +1100
commitee29c25b29eaa4fac4e897442634b69ecc8d8125 (patch)
tree8c5f1a140463f20f104316fa3492984e191154e9 /lib/bt/host/bluedroid/device/include
parent239e6d89507a24c849385f4bfa93ac4ad58e5de5 (diff)
downloadtangara-fw-ee29c25b29eaa4fac4e897442634b69ecc8d8125.tar.gz
Fork ESP-IDF's bluetooth component
i want better sbc encoding, and no cla will stop me
Diffstat (limited to 'lib/bt/host/bluedroid/device/include')
-rw-r--r--lib/bt/host/bluedroid/device/include/device/bdaddr.h63
-rw-r--r--lib/bt/host/bluedroid/device/include/device/controller.h96
-rw-r--r--lib/bt/host/bluedroid/device/include/device/device_features.h29
-rw-r--r--lib/bt/host/bluedroid/device/include/device/event_mask.h30
-rw-r--r--lib/bt/host/bluedroid/device/include/device/interop.h45
-rw-r--r--lib/bt/host/bluedroid/device/include/device/interop_database.h50
-rw-r--r--lib/bt/host/bluedroid/device/include/device/version.h31
7 files changed, 344 insertions, 0 deletions
diff --git a/lib/bt/host/bluedroid/device/include/device/bdaddr.h b/lib/bt/host/bluedroid/device/include/device/bdaddr.h
new file mode 100644
index 00000000..611fcf0e
--- /dev/null
+++ b/lib/bt/host/bluedroid/device/include/device/bdaddr.h
@@ -0,0 +1,63 @@
+/******************************************************************************
+ *
+ * Copyright (C) 2014 Google, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#ifndef _BDADDR_H_
+#define _BDADDR_H_
+
+#include <stdbool.h>
+#include <stddef.h>
+
+#include "common/bt_defs.h"
+#include "osi/hash_map.h"
+
+// Note: the string representation of a bdaddr is expected to have the format
+// xx:xx:xx:xx:xx:xx
+// where each 'x' is a hex digit. The API presented in this header will accept
+// both uppercase and lowercase digits but will only ever produce lowercase
+// digits.
+
+// Returns true if |addr| is the empty address (00:00:00:00:00:00).
+// |addr| may not be NULL.
+bool bdaddr_is_empty(const bt_bdaddr_t *addr);
+
+// Returns true if |first| and |second| refer to the same address. Neither
+// may be NULL.
+bool bdaddr_equals(const bt_bdaddr_t *first, const bt_bdaddr_t *second);
+
+// Returns destination bdaddr |dest| after copying |src| to |dest|.
+// |dest| and |src| must not be NULL.
+bt_bdaddr_t *bdaddr_copy(bt_bdaddr_t *dest, const bt_bdaddr_t *src);
+
+// Makes a string representation of |addr| and places it into |string|. |size|
+// refers to the size of |string|'s buffer and must be >= 18. On success, this
+// function returns |string|, otherwise it returns NULL. Neither |addr| nor |string|
+// may be NULL.
+const char *bdaddr_to_string(const bt_bdaddr_t *addr, char *string, size_t size);
+
+// Returns true if |string| represents a Bluetooth address. |string| may not be NULL.
+bool string_is_bdaddr(const char *string);
+
+// Converts |string| to bt_bdaddr_t and places it in |addr|. If |string| does not
+// represent a Bluetooth address, |addr| is not modified and this function returns
+// false. Otherwise, it returns true. Neither |string| nor |addr| may be NULL.
+bool string_to_bdaddr(const char *string, bt_bdaddr_t *addr);
+
+// A hash function tailored for bdaddrs.
+hash_index_t hash_function_bdaddr(const void *key);
+
+#endif
diff --git a/lib/bt/host/bluedroid/device/include/device/controller.h b/lib/bt/host/bluedroid/device/include/device/controller.h
new file mode 100644
index 00000000..6fc766f3
--- /dev/null
+++ b/lib/bt/host/bluedroid/device/include/device/controller.h
@@ -0,0 +1,96 @@
+/******************************************************************************
+ *
+ * Copyright (C) 2014 Google, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#ifndef _CONTROLLER_H_
+#define _CONTROLLER_H_
+
+#include <stdbool.h>
+#include <stdint.h>
+
+#include "common/bt_target.h"
+#include "device/bdaddr.h"
+#include "device/device_features.h"
+#include "hci/hci_layer.h"
+#include "hci/hci_packet_factory.h"
+#include "hci/hci_packet_parser.h"
+
+typedef struct controller_t {
+ void (*start_up)(void);
+ void (*shut_down)(void);
+ bool (*get_is_ready)(void);
+
+ const bt_bdaddr_t *(*get_address)(void);
+ const bt_version_t *(*get_bt_version)(void);
+
+ const bt_device_features_t *(*get_features_classic)(int index);
+
+ uint8_t (*get_last_features_classic_index)(void);
+
+ const bt_device_features_t *(*get_features_ble)(void);
+ const uint8_t *(*get_ble_supported_states)(void);
+
+ bool (*supports_simple_pairing)(void);
+ bool (*supports_secure_connections)(void);
+ bool (*supports_simultaneous_le_bredr)(void);
+ bool (*supports_reading_remote_extended_features)(void);
+ bool (*supports_interlaced_inquiry_scan)(void);
+ bool (*supports_rssi_with_inquiry_results)(void);
+ bool (*supports_extended_inquiry_response)(void);
+ bool (*supports_master_slave_role_switch)(void);
+
+ bool (*supports_ble)(void);
+ bool (*supports_ble_packet_extension)(void);
+ bool (*supports_ble_connection_parameters_request)(void);
+ bool (*supports_ble_privacy)(void);
+
+ // Get the cached acl data sizes for the controller.
+ uint16_t (*get_acl_data_size_classic)(void);
+ uint16_t (*get_acl_data_size_ble)(void);
+
+ // Get the cached acl packet sizes for the controller.
+ // This is a convenience function for the respective
+ // acl data size + size of the acl header.
+ uint16_t (*get_acl_packet_size_classic)(void);
+ uint16_t (*get_acl_packet_size_ble)(void);
+
+ uint16_t (*get_ble_default_data_packet_length)(void);
+ uint16_t (*get_ble_default_data_packet_txtime)(void);
+
+ // Get the number of acl packets the controller can buffer.
+ uint16_t (*get_acl_buffer_count_classic)(void);
+ uint8_t (*get_acl_buffer_count_ble)(void);
+
+ uint8_t (*get_ble_white_list_size)(void);
+
+ uint8_t (*get_ble_resolving_list_max_size)(void);
+ void (*set_ble_resolving_list_max_size)(int resolving_list_max_size);
+
+#if (BLE_50_FEATURE_SUPPORT == TRUE)
+ uint16_t (*ble_get_ext_adv_data_max_len)(void);
+#endif // BLE_50_FEATURE_SUPPORT
+
+#if (BTM_SCO_HCI_INCLUDED == TRUE)
+ // Get the number of sco packets the controller can buffer
+ uint8_t (*get_sco_data_size)(void);
+ uint8_t (*get_sco_buffer_count)(void);
+#endif /* #if (BTM_SCO_HCI_INCLUDED == TRUE) */
+} controller_t;
+
+const controller_t *controller_get_interface(void);
+
+#endif /*_CONTROLLER_H_*/
diff --git a/lib/bt/host/bluedroid/device/include/device/device_features.h b/lib/bt/host/bluedroid/device/include/device/device_features.h
new file mode 100644
index 00000000..360d3768
--- /dev/null
+++ b/lib/bt/host/bluedroid/device/include/device/device_features.h
@@ -0,0 +1,29 @@
+/******************************************************************************
+ *
+ * Copyright (C) 2014 Google, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+#ifndef _DEVICE_FEATURES_H_
+#define _DEVICE_FEATURES_H_
+
+#include <stdint.h>
+
+// Represents a page of device feature enabled/disabled bits returned
+// by the local controller. See the bluetooth spec for bit indexes.
+typedef struct {
+ uint8_t as_array[8];
+} bt_device_features_t;
+
+#endif /*_DEVICE_FEATURES_H_*/
diff --git a/lib/bt/host/bluedroid/device/include/device/event_mask.h b/lib/bt/host/bluedroid/device/include/device/event_mask.h
new file mode 100644
index 00000000..d4d036d5
--- /dev/null
+++ b/lib/bt/host/bluedroid/device/include/device/event_mask.h
@@ -0,0 +1,30 @@
+/******************************************************************************
+ *
+ * Copyright (C) 2014 Google, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+#ifndef _EVENT_MASK_H_
+#define _EVENT_MASK_H_
+
+#include <stdint.h>
+
+// Represents a mask which can be used to tell the controller which
+// HCI events the stack wishes to be informed about. See the bluetooth
+// spec for more information on what each bit means.
+typedef struct {
+ uint8_t as_array[8];
+} bt_event_mask_t;
+
+#endif /*_EVENT_MASK_H_*/
diff --git a/lib/bt/host/bluedroid/device/include/device/interop.h b/lib/bt/host/bluedroid/device/include/device/interop.h
new file mode 100644
index 00000000..64f27adb
--- /dev/null
+++ b/lib/bt/host/bluedroid/device/include/device/interop.h
@@ -0,0 +1,45 @@
+/******************************************************************************
+ *
+ * Copyright (C) 2015 Google, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#ifndef _INTEROP_H_
+#define _INTEROP_H_
+
+#include <stdbool.h>
+#include "common/bt_defs.h"
+#include "common/bt_target.h"
+
+typedef enum {
+ // Disable secure connections
+ // This is for pre BT 4.1/2 devices that do not handle secure mode
+ // very well.
+ INTEROP_DISABLE_LE_SECURE_CONNECTIONS,
+
+ // Some devices have proven problematic during the pairing process, often
+ // requiring multiple retries to complete pairing. To avoid degrading the user
+ // experience for those devices, automatically re-try pairing if page
+ // timeouts are received during pairing.
+ INTEROP_AUTO_RETRY_PAIRING
+} interop_feature_t;
+
+// Check if a given |addr| matches a known interoperability workaround as identified
+// by the |interop_feature_t| enum. This API is used for simple address based lookups
+// where more information is not available. No look-ups or random address resolution
+// is performed on |addr|.
+bool interop_match(const interop_feature_t feature, const bt_bdaddr_t *addr);
+
+#endif /*_INTEROP_H_*/
diff --git a/lib/bt/host/bluedroid/device/include/device/interop_database.h b/lib/bt/host/bluedroid/device/include/device/interop_database.h
new file mode 100644
index 00000000..71224905
--- /dev/null
+++ b/lib/bt/host/bluedroid/device/include/device/interop_database.h
@@ -0,0 +1,50 @@
+/******************************************************************************
+ *
+ * Copyright (C) 2015 Google, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#ifndef _INTEROP_DATABASE_H_
+#define _INTEROP_DATABASE_H_
+
+#include "device/interop.h"
+
+typedef struct {
+ bt_bdaddr_t addr;
+ uint8_t len;
+ interop_feature_t feature;
+} interop_entry_t;
+
+static const interop_entry_t interop_database[] = {
+ // Nexus Remote (Spike)
+ // Note: May affect other Asus brand devices
+ {{{0x08, 0x62, 0x66, 0, 0, 0}}, 3, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
+ {{{0x38, 0x2c, 0x4a, 0xc9, 0, 0}}, 4, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
+ {{{0x38, 0x2c, 0x4a, 0xe6, 0, 0}}, 4, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
+ {{{0x54, 0xa0, 0x50, 0xd9, 0, 0}}, 4, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
+ {{{0xac, 0x9e, 0x17, 0, 0, 0}}, 3, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
+ {{{0xf0, 0x79, 0x59, 0, 0, 0}}, 3, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
+
+ // Motorola Key Link
+ {{{0x1c, 0x96, 0x5a, 0, 0, 0}}, 3, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
+
+ // Flic smart button
+ {{{0x80, 0xe4, 0xda, 0x70, 0, 0}}, 4, INTEROP_DISABLE_LE_SECURE_CONNECTIONS},
+
+ // BMW car kits (Harman/Becker)
+ {{{0x9c, 0xdf, 0x03, 0, 0, 0}}, 3, INTEROP_AUTO_RETRY_PAIRING}
+};
+
+#endif /*_INTEROP_DATABASE_H_*/
diff --git a/lib/bt/host/bluedroid/device/include/device/version.h b/lib/bt/host/bluedroid/device/include/device/version.h
new file mode 100644
index 00000000..c63b03bd
--- /dev/null
+++ b/lib/bt/host/bluedroid/device/include/device/version.h
@@ -0,0 +1,31 @@
+/******************************************************************************
+ *
+ * Copyright (C) 2014 Google, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+#ifndef _VERSION_H_
+#define _VERSION_H_
+
+#include <stdint.h>
+
+typedef struct {
+ uint8_t hci_version;
+ uint16_t hci_revision;
+ uint8_t lmp_version;
+ uint16_t manufacturer;
+ uint16_t lmp_subversion;
+} bt_version_t;
+
+#endif /*_VERSION_H_*/