#include "hci/hci_packets.h"
+#include "stack/btm/neighbor_inquiry.h"
#include "stack/include/btm_api_types.h"
#include "types/raw_address.h"
#pragma once
#include "stack/btm/btm_sec.h"
+#include "stack/btm/neighbor_inquiry.h"
#include "stack/include/acl_api_types.h"
#include "stack/include/btm_api_types.h"
#include "stack/include/btm_ble_api_types.h"
#define BTM_BLE_INT_TYPES_H
#include "osi/include/alarm.h"
+#include "stack/btm/neighbor_inquiry.h"
#include "stack/include/btm_ble_api_types.h"
/* scanning enable status */
#include "stack/acl/acl.h"
#include "stack/btm/btm_ble_int_types.h"
#include "stack/btm/btm_sco.h"
+#include "stack/btm/neighbor_inquiry.h"
#include "stack/btm/security_device_record.h"
#include "stack/include/btm_ble_api_types.h"
/* Define a structure to hold all the BTM data
*/
-typedef struct {
- uint32_t inq_count; /* Used for determining if a response has already been */
- /* received for the current inquiry operation. (We do not */
- /* want to flood the caller with multiple responses from */
- /* the same device. */
- RawAddress bd_addr;
-} tINQ_BDADDR;
-
-typedef struct {
- tBTM_CMPL_CB* p_remname_cmpl_cb;
-
-#define BTM_EXT_RMT_NAME_TIMEOUT_MS (40 * 1000) /* 40 seconds */
-
- alarm_t* remote_name_timer;
-
- uint16_t discoverable_mode;
- uint16_t connectable_mode;
- uint16_t page_scan_window;
- uint16_t page_scan_period;
- uint16_t inq_scan_window;
- uint16_t inq_scan_period;
- uint16_t inq_scan_type;
- uint16_t page_scan_type; /* current page scan type */
-
- RawAddress remname_bda; /* Name of bd addr for active remote name request */
-#define BTM_RMT_NAME_EXT 0x1 /* Initiated through API */
- bool remname_active; /* State of a remote name request by external API */
-
- tBTM_CMPL_CB* p_inq_cmpl_cb;
- tBTM_INQ_RESULTS_CB* p_inq_results_cb;
- uint32_t inq_counter; /* Counter incremented each time an inquiry completes */
- /* Used for determining whether or not duplicate devices */
- /* have responded to the same inquiry */
- tINQ_BDADDR* p_bd_db; /* Pointer to memory that holds bdaddrs */
- uint16_t num_bd_entries; /* Number of entries in database */
- uint16_t max_bd_entries; /* Maximum number of entries that can be stored */
- tINQ_DB_ENT inq_db[BTM_INQ_DB_SIZE];
- tBTM_INQ_PARMS inqparms; /* Contains the parameters for the current inquiry */
- tBTM_INQUIRY_CMPL
- inq_cmpl_info; /* Status and number of responses from the last inquiry */
-
- uint16_t per_min_delay; /* Current periodic minimum delay */
- uint16_t per_max_delay; /* Current periodic maximum delay */
- /* inquiry that has been cancelled*/
- uint8_t inqfilt_type; /* Contains the inquiry filter type (BD ADDR, COD, or
- Clear) */
-
-#define BTM_INQ_INACTIVE_STATE 0
-#define BTM_INQ_ACTIVE_STATE \
- 3 /* Actual inquiry or periodic inquiry is in progress */
-
- uint8_t state; /* Current state that the inquiry process is in */
- uint8_t inq_active; /* Bit Mask indicating type of inquiry is active */
- bool no_inc_ssp; /* true, to stop inquiry on incoming SSP */
-} tBTM_INQUIRY_VAR_ST;
-
#define BTM_STATE_BUFFER_SIZE 5 /* size of state buffer */
/* Define the Device Management control structure
--- /dev/null
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include <cstdint>
+
+#include "osi/include/alarm.h"
+#include "stack/include/btm_api_types.h"
+
+/* Discoverable modes */
+#define BTM_NON_DISCOVERABLE 0
+#define BTM_LIMITED_DISCOVERABLE 1
+#define BTM_GENERAL_DISCOVERABLE 2
+#define BTM_DISCOVERABLE_MASK \
+ (BTM_LIMITED_DISCOVERABLE | BTM_GENERAL_DISCOVERABLE)
+#define BTM_MAX_DISCOVERABLE BTM_GENERAL_DISCOVERABLE
+/* high byte for BLE Discoverable modes */
+#define BTM_BLE_NON_DISCOVERABLE 0x0000
+#define BTM_BLE_LIMITED_DISCOVERABLE 0x0100
+#define BTM_BLE_GENERAL_DISCOVERABLE 0x0200
+#define BTM_BLE_MAX_DISCOVERABLE BTM_BLE_GENERAL_DISCOVERABLE
+#define BTM_BLE_DISCOVERABLE_MASK \
+ (BTM_BLE_NON_DISCOVERABLE | BTM_BLE_LIMITED_DISCOVERABLE | \
+ BTM_BLE_GENERAL_DISCOVERABLE)
+
+/* Connectable modes */
+#define BTM_NON_CONNECTABLE 0
+#define BTM_CONNECTABLE 1
+#define BTM_CONNECTABLE_MASK (BTM_NON_CONNECTABLE | BTM_CONNECTABLE)
+/* high byte for BLE Connectable modes */
+#define BTM_BLE_NON_CONNECTABLE 0x0000
+#define BTM_BLE_CONNECTABLE 0x0100
+#define BTM_BLE_MAX_CONNECTABLE BTM_BLE_CONNECTABLE
+#define BTM_BLE_CONNECTABLE_MASK (BTM_BLE_NON_CONNECTABLE | BTM_BLE_CONNECTABLE)
+
+/* Inquiry modes
+ * Note: These modes are associated with the inquiry active values (BTM_*ACTIVE)
+ */
+#define BTM_INQUIRY_NONE 0
+#define BTM_GENERAL_INQUIRY 0x01
+#define BTM_BR_INQUIRY_MASK (BTM_GENERAL_INQUIRY)
+
+/* high byte of inquiry mode for BLE inquiry mode */
+#define BTM_BLE_INQUIRY_NONE 0x00
+#define BTM_BLE_GENERAL_INQUIRY 0x10
+#define BTM_BLE_INQUIRY_MASK (BTM_BLE_GENERAL_INQUIRY)
+
+/* BTM_IsInquiryActive return values (Bit Mask)
+ * Note: These bit masks are associated with the inquiry modes (BTM_*_INQUIRY)
+ */
+/* no inquiry in progress */
+#define BTM_INQUIRY_INACTIVE 0x0
+/* a general inquiry is in progress */
+#define BTM_GENERAL_INQUIRY_ACTIVE BTM_GENERAL_INQUIRY
+/* SSP is active, so inquiry is disallowed (work around for FW bug) */
+#define BTM_SSP_INQUIRY_ACTIVE 0x4
+/* a general inquiry is in progress */
+#define BTM_LE_GENERAL_INQUIRY_ACTIVE BTM_BLE_GENERAL_INQUIRY
+
+/* inquiry activity mask */
+/* BR/EDR inquiry activity mask */
+#define BTM_BR_INQ_ACTIVE_MASK (BTM_GENERAL_INQUIRY_ACTIVE)
+/* LE scan activity mask */
+#define BTM_BLE_SCAN_ACTIVE_MASK 0xF0
+/* LE inquiry activity mask*/
+#define BTM_BLE_INQ_ACTIVE_MASK (BTM_LE_GENERAL_INQUIRY_ACTIVE)
+/* inquiry activity mask */
+#define BTM_INQUIRY_ACTIVE_MASK \
+ (BTM_BR_INQ_ACTIVE_MASK | BTM_BLE_INQ_ACTIVE_MASK)
+
+/* Define scan types */
+#define BTM_SCAN_TYPE_STANDARD 0
+#define BTM_SCAN_TYPE_INTERLACED 1 /* 1.2 devices only */
+
+/* Define inquiry results mode */
+#define BTM_INQ_RESULT_STANDARD 0
+#define BTM_INQ_RESULT_WITH_RSSI 1
+#define BTM_INQ_RESULT_EXTENDED 2
+/* RSSI value not supplied (ignore it) */
+#define BTM_INQ_RES_IGNORE_RSSI 0x7f
+
+/* Inquiry Filter Condition types (see tBTM_INQ_PARMS) */
+/* Inquiry Filtering is turned off */
+#define BTM_CLR_INQUIRY_FILTER 0
+
+/* These are the fields returned in each device's response to the inquiry. It
+ * is returned in the results callback if registered.
+ */
+typedef struct {
+ uint16_t clock_offset;
+ RawAddress remote_bd_addr;
+ DEV_CLASS dev_class;
+ uint8_t page_scan_rep_mode;
+ uint8_t page_scan_per_mode;
+ uint8_t page_scan_mode;
+ int8_t rssi; /* Set to BTM_INQ_RES_IGNORE_RSSI if not valid */
+ uint32_t eir_uuid[BTM_EIR_SERVICE_ARRAY_SIZE];
+ bool eir_complete_list;
+ tBT_DEVICE_TYPE device_type;
+ uint8_t inq_result_type;
+ tBLE_ADDR_TYPE ble_addr_type;
+ uint16_t ble_evt_type;
+ uint8_t ble_primary_phy;
+ uint8_t ble_secondary_phy;
+ uint8_t ble_advertising_sid;
+ int8_t ble_tx_power;
+ uint16_t ble_periodic_adv_int;
+ uint8_t flag;
+} tBTM_INQ_RESULTS;
+
+/****************************************
+ * Device Discovery Callback Functions
+ ****************************************/
+/* Callback function for notifications when the BTM gets inquiry response.
+ * First param is inquiry results database, second is pointer of EIR.
+ */
+typedef void(tBTM_INQ_RESULTS_CB)(tBTM_INQ_RESULTS* p_inq_results,
+ uint8_t* p_eir, uint16_t eir_len);
+
+typedef struct {
+ uint32_t inq_count; /* Used for determining if a response has already been */
+ /* received for the current inquiry operation. (We do not */
+ /* want to flood the caller with multiple responses from */
+ /* the same device. */
+ RawAddress bd_addr;
+} tINQ_BDADDR;
+
+/* This is the inquiry response information held in its database by BTM, and
+ * available to applications via BTM_InqDbRead, BTM_InqDbFirst, and
+ * BTM_InqDbNext.
+ */
+typedef struct {
+ tBTM_INQ_RESULTS results;
+
+ bool appl_knows_rem_name; /* set by application if it knows the remote name of
+ the peer device.
+ This is later used by application to determine if
+ remote name request is
+ required to be done. Having the flag here avoid
+ duplicate store of inquiry results */
+ uint16_t remote_name_len;
+ tBTM_BD_NAME remote_name;
+ uint8_t remote_name_state;
+ uint8_t remote_name_type;
+
+} tBTM_INQ_INFO;
+
+typedef struct {
+ uint64_t time_of_resp;
+ uint32_t
+ inq_count; /* "timestamps" the entry with a particular inquiry count */
+ /* Used for determining if a response has already been */
+ /* received for the current inquiry operation. (We do not */
+ /* want to flood the caller with multiple responses from */
+ /* the same device. */
+ tBTM_INQ_INFO inq_info;
+ bool in_use;
+ bool scan_rsp;
+} tINQ_DB_ENT;
+
+typedef struct /* contains the parameters passed to the inquiry functions */
+{
+ uint8_t mode; /* general or limited */
+ uint8_t duration; /* duration of the inquiry (1.28 sec increments) */
+} tBTM_INQ_PARMS;
+
+/* Structure returned with inquiry complete callback */
+typedef struct {
+ tBTM_STATUS status;
+ uint8_t num_resp; /* Number of results from the current inquiry */
+} tBTM_INQUIRY_CMPL;
+
+typedef struct {
+ tBTM_CMPL_CB* p_remname_cmpl_cb;
+
+#define BTM_EXT_RMT_NAME_TIMEOUT_MS (40 * 1000) /* 40 seconds */
+
+ alarm_t* remote_name_timer;
+
+ uint16_t discoverable_mode;
+ uint16_t connectable_mode;
+ uint16_t page_scan_window;
+ uint16_t page_scan_period;
+ uint16_t inq_scan_window;
+ uint16_t inq_scan_period;
+ uint16_t inq_scan_type;
+ uint16_t page_scan_type; /* current page scan type */
+
+ RawAddress remname_bda; /* Name of bd addr for active remote name request */
+#define BTM_RMT_NAME_EXT 0x1 /* Initiated through API */
+ bool remname_active; /* State of a remote name request by external API */
+
+ tBTM_CMPL_CB* p_inq_cmpl_cb;
+ tBTM_INQ_RESULTS_CB* p_inq_results_cb;
+ uint32_t inq_counter; /* Counter incremented each time an inquiry completes */
+ /* Used for determining whether or not duplicate devices */
+ /* have responded to the same inquiry */
+ tINQ_BDADDR* p_bd_db; /* Pointer to memory that holds bdaddrs */
+ uint16_t num_bd_entries; /* Number of entries in database */
+ uint16_t max_bd_entries; /* Maximum number of entries that can be stored */
+ tINQ_DB_ENT inq_db[BTM_INQ_DB_SIZE];
+ tBTM_INQ_PARMS inqparms; /* Contains the parameters for the current inquiry */
+ tBTM_INQUIRY_CMPL
+ inq_cmpl_info; /* Status and number of responses from the last inquiry */
+
+ uint16_t per_min_delay; /* Current periodic minimum delay */
+ uint16_t per_max_delay; /* Current periodic maximum delay */
+ /* inquiry that has been cancelled*/
+ uint8_t inqfilt_type; /* Contains the inquiry filter type (BD ADDR, COD, or
+ Clear) */
+
+#define BTM_INQ_INACTIVE_STATE 0
+#define BTM_INQ_ACTIVE_STATE \
+ 3 /* Actual inquiry or periodic inquiry is in progress */
+
+ uint8_t state; /* Current state that the inquiry process is in */
+ uint8_t inq_active; /* Bit Mask indicating type of inquiry is active */
+ bool no_inc_ssp; /* true, to stop inquiry on incoming SSP */
+} tBTM_INQUIRY_VAR_ST;
+
+/* Structure returned with remote name request */
+typedef struct {
+ uint16_t status;
+ RawAddress bd_addr;
+ uint16_t length;
+ BD_NAME remote_bd_name;
+} tBTM_REMOTE_DEV_NAME;
+
+typedef union /* contains the inquiry filter condition */
+{
+ RawAddress bdaddr_cond;
+ tBTM_COD_COND cod_cond;
+} tBTM_INQ_FILT_COND;
+
+#define BTM_INQ_RESULT_BR 0x01
+#define BTM_INQ_RESULT_BLE 0x02
} tBTM_LE_CONN_PRAMS;
-typedef struct {
- uint64_t time_of_resp;
- uint32_t
- inq_count; /* "timestamps" the entry with a particular inquiry count */
- /* Used for determining if a response has already been */
- /* received for the current inquiry operation. (We do not */
- /* want to flood the caller with multiple responses from */
- /* the same device. */
- tBTM_INQ_INFO inq_info;
- bool in_use;
- bool scan_rsp;
-} tINQ_DB_ENT;
-
/* The MSB of the clock offset field indicates whether the offset is valid. */
#define BTM_CLOCK_OFFSET_VALID 0x8000
#include <cstdint>
+#include "stack/btm/neighbor_inquiry.h"
#include "stack/include/btm_api_types.h"
#include "stack/include/btm_status.h"
#include "stack/include/sdp_api.h"
/*******************************
* Device Discovery Constants
*******************************/
-/* Discoverable modes */
-#define BTM_NON_DISCOVERABLE 0
-#define BTM_LIMITED_DISCOVERABLE 1
-#define BTM_GENERAL_DISCOVERABLE 2
-#define BTM_DISCOVERABLE_MASK \
- (BTM_LIMITED_DISCOVERABLE | BTM_GENERAL_DISCOVERABLE)
-#define BTM_MAX_DISCOVERABLE BTM_GENERAL_DISCOVERABLE
-/* high byte for BLE Discoverable modes */
-#define BTM_BLE_NON_DISCOVERABLE 0x0000
-#define BTM_BLE_LIMITED_DISCOVERABLE 0x0100
-#define BTM_BLE_GENERAL_DISCOVERABLE 0x0200
-#define BTM_BLE_MAX_DISCOVERABLE BTM_BLE_GENERAL_DISCOVERABLE
-#define BTM_BLE_DISCOVERABLE_MASK \
- (BTM_BLE_NON_DISCOVERABLE | BTM_BLE_LIMITED_DISCOVERABLE | \
- BTM_BLE_GENERAL_DISCOVERABLE)
-
-/* Connectable modes */
-#define BTM_NON_CONNECTABLE 0
-#define BTM_CONNECTABLE 1
-#define BTM_CONNECTABLE_MASK (BTM_NON_CONNECTABLE | BTM_CONNECTABLE)
-/* high byte for BLE Connectable modes */
-#define BTM_BLE_NON_CONNECTABLE 0x0000
-#define BTM_BLE_CONNECTABLE 0x0100
-#define BTM_BLE_MAX_CONNECTABLE BTM_BLE_CONNECTABLE
-#define BTM_BLE_CONNECTABLE_MASK (BTM_BLE_NON_CONNECTABLE | BTM_BLE_CONNECTABLE)
-
-/* Inquiry modes
- * Note: These modes are associated with the inquiry active values (BTM_*ACTIVE)
- */
-#define BTM_INQUIRY_NONE 0
-#define BTM_GENERAL_INQUIRY 0x01
-#define BTM_BR_INQUIRY_MASK (BTM_GENERAL_INQUIRY)
-
-/* high byte of inquiry mode for BLE inquiry mode */
-#define BTM_BLE_INQUIRY_NONE 0x00
-#define BTM_BLE_GENERAL_INQUIRY 0x10
-#define BTM_BLE_INQUIRY_MASK (BTM_BLE_GENERAL_INQUIRY)
-
-/* BTM_IsInquiryActive return values (Bit Mask)
- * Note: These bit masks are associated with the inquiry modes (BTM_*_INQUIRY)
- */
-/* no inquiry in progress */
-#define BTM_INQUIRY_INACTIVE 0x0
-/* a general inquiry is in progress */
-#define BTM_GENERAL_INQUIRY_ACTIVE BTM_GENERAL_INQUIRY
-/* SSP is active, so inquiry is disallowed (work around for FW bug) */
-#define BTM_SSP_INQUIRY_ACTIVE 0x4
-/* a general inquiry is in progress */
-#define BTM_LE_GENERAL_INQUIRY_ACTIVE BTM_BLE_GENERAL_INQUIRY
-
-/* inquiry activity mask */
-/* BR/EDR inquiry activity mask */
-#define BTM_BR_INQ_ACTIVE_MASK (BTM_GENERAL_INQUIRY_ACTIVE)
-/* LE scan activity mask */
-#define BTM_BLE_SCAN_ACTIVE_MASK 0xF0
-/* LE inquiry activity mask*/
-#define BTM_BLE_INQ_ACTIVE_MASK (BTM_LE_GENERAL_INQUIRY_ACTIVE)
-/* inquiry activity mask */
-#define BTM_INQUIRY_ACTIVE_MASK \
- (BTM_BR_INQ_ACTIVE_MASK | BTM_BLE_INQ_ACTIVE_MASK)
-
-/* Define scan types */
-#define BTM_SCAN_TYPE_STANDARD 0
-#define BTM_SCAN_TYPE_INTERLACED 1 /* 1.2 devices only */
-
-/* Define inquiry results mode */
-#define BTM_INQ_RESULT_STANDARD 0
-#define BTM_INQ_RESULT_WITH_RSSI 1
-#define BTM_INQ_RESULT_EXTENDED 2
-/* RSSI value not supplied (ignore it) */
-#define BTM_INQ_RES_IGNORE_RSSI 0x7f
-
-/* Inquiry Filter Condition types (see tBTM_INQ_PARMS) */
-/* Inquiry Filtering is turned off */
-#define BTM_CLR_INQUIRY_FILTER 0
-
/****************************
* minor device class field
****************************/
DEV_CLASS dev_class_mask;
} tBTM_COD_COND;
-typedef union /* contains the inquiry filter condition */
-{
- RawAddress bdaddr_cond;
- tBTM_COD_COND cod_cond;
-} tBTM_INQ_FILT_COND;
-
-typedef struct /* contains the parameters passed to the inquiry functions */
-{
- uint8_t mode; /* general or limited */
- uint8_t duration; /* duration of the inquiry (1.28 sec increments) */
-} tBTM_INQ_PARMS;
-
-#define BTM_INQ_RESULT_BR 0x01
-#define BTM_INQ_RESULT_BLE 0x02
-
constexpr uint8_t BLE_EVT_CONNECTABLE_BIT = 0;
constexpr uint8_t BLE_EVT_SCANNABLE_BIT = 1;
constexpr uint8_t BLE_EVT_DIRECTED_BIT = 2;
constexpr uint8_t NO_ADI_PRESENT = 0xFF;
constexpr uint8_t TX_POWER_NOT_PRESENT = 0x7F;
-/* These are the fields returned in each device's response to the inquiry. It
- * is returned in the results callback if registered.
-*/
-typedef struct {
- uint16_t clock_offset;
- RawAddress remote_bd_addr;
- DEV_CLASS dev_class;
- uint8_t page_scan_rep_mode;
- uint8_t page_scan_per_mode;
- uint8_t page_scan_mode;
- int8_t rssi; /* Set to BTM_INQ_RES_IGNORE_RSSI if not valid */
- uint32_t eir_uuid[BTM_EIR_SERVICE_ARRAY_SIZE];
- bool eir_complete_list;
- tBT_DEVICE_TYPE device_type;
- uint8_t inq_result_type;
- tBLE_ADDR_TYPE ble_addr_type;
- uint16_t ble_evt_type;
- uint8_t ble_primary_phy;
- uint8_t ble_secondary_phy;
- uint8_t ble_advertising_sid;
- int8_t ble_tx_power;
- uint16_t ble_periodic_adv_int;
- uint8_t flag;
-} tBTM_INQ_RESULTS;
-
-/* This is the inquiry response information held in its database by BTM, and
- * available to applications via BTM_InqDbRead, BTM_InqDbFirst, and
- * BTM_InqDbNext.
-*/
-typedef struct {
- tBTM_INQ_RESULTS results;
-
- bool appl_knows_rem_name; /* set by application if it knows the remote name of
- the peer device.
- This is later used by application to determine if
- remote name request is
- required to be done. Having the flag here avoid
- duplicate store of inquiry results */
- uint16_t remote_name_len;
- tBTM_BD_NAME remote_name;
- uint8_t remote_name_state;
- uint8_t remote_name_type;
-
-} tBTM_INQ_INFO;
-
-/* Structure returned with inquiry complete callback */
-typedef struct {
- tBTM_STATUS status;
- uint8_t num_resp; /* Number of results from the current inquiry */
-} tBTM_INQUIRY_CMPL;
-
-/* Structure returned with remote name request */
-typedef struct {
- uint16_t status;
- RawAddress bd_addr;
- uint16_t length;
- BD_NAME remote_bd_name;
-} tBTM_REMOTE_DEV_NAME;
-
typedef struct {
uint8_t pcm_intf_rate; /* PCM interface rate: 0: 128kbps, 1: 256 kbps;
2:512 bps; 3: 1024kbps; 4: 2048kbps */
} tBTM_SCO_PCM_PARAM;
-/****************************************
- * Device Discovery Callback Functions
- ****************************************/
-/* Callback function for notifications when the BTM gets inquiry response.
- * First param is inquiry results database, second is pointer of EIR.
-*/
-typedef void(tBTM_INQ_RESULTS_CB)(tBTM_INQ_RESULTS* p_inq_results,
- uint8_t* p_eir, uint16_t eir_len);
-
/*****************************************************************************
* ACL CHANNEL MANAGEMENT
****************************************************************************/
#include "btm_api.h"
#include "btm_ble_api_types.h"
#include "osi/include/alarm.h"
+#include "stack/btm/neighbor_inquiry.h"
#include "types/bt_transport.h"
/*****************************************************************************