mirror of
https://github.com/h2zero/esp-nimble-cpp.git
synced 2024-11-22 13:10:55 +01:00
Add option to use resolvable and non-resolvable private address.
Adds the possibility to configure a resolvable or non-resolvable address (BLE privacy).
This commit is contained in:
parent
57ba0e583d
commit
f61bd5c2df
6 changed files with 36 additions and 6 deletions
|
@ -476,12 +476,12 @@ void NimBLEAdvertising::start(uint32_t duration, void (*advCompleteCB)(NimBLEAdv
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL)
|
#if defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL)
|
||||||
rc = ble_gap_adv_start(0, NULL, duration,
|
rc = ble_gap_adv_start(NimBLEDevice::m_own_addr_type, NULL, duration,
|
||||||
&m_advParams,
|
&m_advParams,
|
||||||
(pServer != nullptr) ? NimBLEServer::handleGapEvent : NimBLEAdvertising::handleGapEvent,
|
(pServer != nullptr) ? NimBLEServer::handleGapEvent : NimBLEAdvertising::handleGapEvent,
|
||||||
(pServer != nullptr) ? (void*)pServer : (void*)this);
|
(pServer != nullptr) ? (void*)pServer : (void*)this);
|
||||||
#else
|
#else
|
||||||
rc = ble_gap_adv_start(0, NULL, duration,
|
rc = ble_gap_adv_start(NimBLEDevice::m_own_addr_type, NULL, duration,
|
||||||
&m_advParams, NimBLEAdvertising::handleGapEvent, this);
|
&m_advParams, NimBLEAdvertising::handleGapEvent, this);
|
||||||
#endif
|
#endif
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
|
|
|
@ -208,7 +208,7 @@ bool NimBLEClient::connect(const NimBLEAddress &address, bool deleteAttibutes) {
|
||||||
* Loop on BLE_HS_EBUSY if the scan hasn't stopped yet.
|
* Loop on BLE_HS_EBUSY if the scan hasn't stopped yet.
|
||||||
*/
|
*/
|
||||||
do {
|
do {
|
||||||
rc = ble_gap_connect(BLE_OWN_ADDR_PUBLIC, &peerAddr_t,
|
rc = ble_gap_connect(NimBLEDevice::m_own_addr_type, &peerAddr_t,
|
||||||
m_connectTimeout, &m_pConnParams,
|
m_connectTimeout, &m_pConnParams,
|
||||||
NimBLEClient::handleGapEvent, this);
|
NimBLEClient::handleGapEvent, this);
|
||||||
switch (rc) {
|
switch (rc) {
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include "nimble/nimble_port.h"
|
#include "nimble/nimble_port.h"
|
||||||
#include "nimble/nimble_port_freertos.h"
|
#include "nimble/nimble_port_freertos.h"
|
||||||
#include "host/ble_hs.h"
|
#include "host/ble_hs.h"
|
||||||
|
#include "host/ble_hs_pvcy.h"
|
||||||
#include "host/util/util.h"
|
#include "host/util/util.h"
|
||||||
#include "services/gap/ble_svc_gap.h"
|
#include "services/gap/ble_svc_gap.h"
|
||||||
#include "services/gatt/ble_svc_gatt.h"
|
#include "services/gatt/ble_svc_gatt.h"
|
||||||
|
@ -60,6 +61,7 @@ std::list <NimBLEClient*> NimBLEDevice::m_cList;
|
||||||
#endif
|
#endif
|
||||||
std::list <NimBLEAddress> NimBLEDevice::m_ignoreList;
|
std::list <NimBLEAddress> NimBLEDevice::m_ignoreList;
|
||||||
NimBLESecurityCallbacks* NimBLEDevice::m_securityCallbacks = nullptr;
|
NimBLESecurityCallbacks* NimBLEDevice::m_securityCallbacks = nullptr;
|
||||||
|
uint8_t NimBLEDevice::m_own_addr_type = BLE_OWN_ADDR_PUBLIC;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -698,6 +700,34 @@ void NimBLEDevice::setSecurityCallbacks(NimBLESecurityCallbacks* callbacks) {
|
||||||
} // setSecurityCallbacks
|
} // setSecurityCallbacks
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the own address type.
|
||||||
|
* @param own_addr_type Own Bluetooth Device address type.\n
|
||||||
|
* The available bits are defined as:
|
||||||
|
* * 0x00: BLE_OWN_ADDR_PUBLIC
|
||||||
|
* * 0x01: BLE_OWN_ADDR_RANDOM
|
||||||
|
* * 0x02: BLE_OWN_ADDR_RPA_PUBLIC_DEFAULT
|
||||||
|
* * 0x03: BLE_OWN_ADDR_RPA_RANDOM_DEFAULT
|
||||||
|
*/
|
||||||
|
void NimBLEDevice::setOwnAddrType(uint8_t own_addr_type, bool useNRPA) {
|
||||||
|
m_own_addr_type = own_addr_type;
|
||||||
|
switch (own_addr_type) {
|
||||||
|
case BLE_OWN_ADDR_PUBLIC:
|
||||||
|
ble_hs_pvcy_rpa_config(NIMBLE_HOST_DISABLE_PRIVACY);
|
||||||
|
break;
|
||||||
|
case BLE_OWN_ADDR_RANDOM:
|
||||||
|
setSecurityInitKey(BLE_SM_PAIR_KEY_DIST_ENC | BLE_SM_PAIR_KEY_DIST_ID);
|
||||||
|
ble_hs_pvcy_rpa_config(useNRPA ? NIMBLE_HOST_ENABLE_NRPA : NIMBLE_HOST_ENABLE_RPA);
|
||||||
|
break;
|
||||||
|
case BLE_OWN_ADDR_RPA_PUBLIC_DEFAULT:
|
||||||
|
case BLE_OWN_ADDR_RPA_RANDOM_DEFAULT:
|
||||||
|
setSecurityInitKey(BLE_SM_PAIR_KEY_DIST_ENC | BLE_SM_PAIR_KEY_DIST_ID);
|
||||||
|
ble_hs_pvcy_rpa_config(NIMBLE_HOST_ENABLE_RPA);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} // setOwnAddrType
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Start the connection securing and authorization for this connection.
|
* @brief Start the connection securing and authorization for this connection.
|
||||||
* @param conn_id The connection id of the peer device.
|
* @param conn_id The connection id of the peer device.
|
||||||
|
|
|
@ -116,6 +116,7 @@ public:
|
||||||
static void setSecurityPasskey(uint32_t pin);
|
static void setSecurityPasskey(uint32_t pin);
|
||||||
static uint32_t getSecurityPasskey();
|
static uint32_t getSecurityPasskey();
|
||||||
static void setSecurityCallbacks(NimBLESecurityCallbacks* pCallbacks);
|
static void setSecurityCallbacks(NimBLESecurityCallbacks* pCallbacks);
|
||||||
|
static void setOwnAddrType(uint8_t own_addr_type, bool useNRPA=false);
|
||||||
static int startSecurity(uint16_t conn_id);
|
static int startSecurity(uint16_t conn_id);
|
||||||
static int setMTU(uint16_t mtu);
|
static int setMTU(uint16_t mtu);
|
||||||
static uint16_t getMTU();
|
static uint16_t getMTU();
|
||||||
|
@ -182,6 +183,7 @@ private:
|
||||||
static uint32_t m_passkey;
|
static uint32_t m_passkey;
|
||||||
static ble_gap_event_listener m_listener;
|
static ble_gap_event_listener m_listener;
|
||||||
static gap_event_handler m_customGapHandler;
|
static gap_event_handler m_customGapHandler;
|
||||||
|
static uint8_t m_own_addr_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,6 @@ static const char* LOG_TAG = "NimBLEScan";
|
||||||
* @brief Scan constuctor.
|
* @brief Scan constuctor.
|
||||||
*/
|
*/
|
||||||
NimBLEScan::NimBLEScan() {
|
NimBLEScan::NimBLEScan() {
|
||||||
m_own_addr_type = 0;
|
|
||||||
m_scan_params.filter_policy = BLE_HCI_SCAN_FILT_NO_WL;
|
m_scan_params.filter_policy = BLE_HCI_SCAN_FILT_NO_WL;
|
||||||
m_scan_params.passive = 1; // If set, don’t send scan requests to advertisers (i.e., don’t request additional advertising data).
|
m_scan_params.passive = 1; // If set, don’t send scan requests to advertisers (i.e., don’t request additional advertising data).
|
||||||
m_scan_params.itvl = 0; // This is defined as the time interval from when the Controller started its last LE scan until it begins the subsequent LE scan. (units=0.625 msec)
|
m_scan_params.itvl = 0; // This is defined as the time interval from when the Controller started its last LE scan until it begins the subsequent LE scan. (units=0.625 msec)
|
||||||
|
@ -271,7 +270,7 @@ bool NimBLEScan::start(uint32_t duration, void (*scanCompleteCB)(NimBLEScanResul
|
||||||
m_ignoreResults = true;
|
m_ignoreResults = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rc = ble_gap_disc(m_own_addr_type, duration, &m_scan_params,
|
int rc = ble_gap_disc(NimBLEDevice::m_own_addr_type, duration, &m_scan_params,
|
||||||
NimBLEScan::handleGapEvent, this);
|
NimBLEScan::handleGapEvent, this);
|
||||||
|
|
||||||
switch(rc) {
|
switch(rc) {
|
||||||
|
|
|
@ -88,7 +88,6 @@ private:
|
||||||
NimBLEAdvertisedDeviceCallbacks* m_pAdvertisedDeviceCallbacks = nullptr;
|
NimBLEAdvertisedDeviceCallbacks* m_pAdvertisedDeviceCallbacks = nullptr;
|
||||||
void (*m_scanCompleteCB)(NimBLEScanResults scanResults);
|
void (*m_scanCompleteCB)(NimBLEScanResults scanResults);
|
||||||
ble_gap_disc_params m_scan_params;
|
ble_gap_disc_params m_scan_params;
|
||||||
uint8_t m_own_addr_type;
|
|
||||||
bool m_ignoreResults;
|
bool m_ignoreResults;
|
||||||
bool m_wantDuplicates;
|
bool m_wantDuplicates;
|
||||||
NimBLEScanResults m_scanResults;
|
NimBLEScanResults m_scanResults;
|
||||||
|
|
Loading…
Reference in a new issue