mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
fix(bt/bluedroid): Fix address check when using NRPA as random device address
This commit is contained in:
parent
4a221b0346
commit
52a0a10ef4
@ -1049,17 +1049,28 @@ uint32_t BTM_BleUpdateOwnType(uint8_t *own_bda_type, tBTM_START_ADV_CMPL_CBACK *
|
|||||||
#else
|
#else
|
||||||
uint32_t BTM_BleUpdateOwnType(uint8_t *own_bda_type, tBTM_START_ADV_CMPL_CBACK *cb)
|
uint32_t BTM_BleUpdateOwnType(uint8_t *own_bda_type, tBTM_START_ADV_CMPL_CBACK *cb)
|
||||||
{
|
{
|
||||||
|
tBTM_LE_RANDOM_CB *p_cb = &btm_cb.ble_ctr_cb.addr_mgnt_cb;
|
||||||
|
|
||||||
if((*own_bda_type == BLE_ADDR_RANDOM) || (*own_bda_type == BLE_ADDR_RANDOM_ID)) {
|
if((*own_bda_type == BLE_ADDR_RANDOM) || (*own_bda_type == BLE_ADDR_RANDOM_ID)) {
|
||||||
if((btm_cb.ble_ctr_cb.addr_mgnt_cb.exist_addr_bit & BTM_BLE_GAP_ADDR_BIT_RANDOM) != BTM_BLE_GAP_ADDR_BIT_RANDOM) {
|
if((p_cb->exist_addr_bit & BTM_BLE_GAP_ADDR_BIT_RANDOM) != BTM_BLE_GAP_ADDR_BIT_RANDOM) {
|
||||||
BTM_TRACE_ERROR("No random address yet, please set random address and try\n");
|
BTM_TRACE_ERROR("No random address yet, please set random address and try\n");
|
||||||
if(cb) {
|
if(cb) {
|
||||||
(* cb)(HCI_ERR_ESP_VENDOR_FAIL);
|
(* cb)(HCI_ERR_ESP_VENDOR_FAIL);
|
||||||
}
|
}
|
||||||
return BTM_ILLEGAL_VALUE;
|
return BTM_ILLEGAL_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If a device is using RPA, it shall also have an Identity Address
|
||||||
|
if ((*own_bda_type == BLE_ADDR_RANDOM_ID) && BTM_BLE_IS_NON_RESLVE_BDA(p_cb->static_rand_addr)) {
|
||||||
|
BTM_TRACE_ERROR("No identity address yet, please set static random address and try\n");
|
||||||
|
if (cb) {
|
||||||
|
(* cb)(HCI_ERR_ESP_VENDOR_FAIL);
|
||||||
|
}
|
||||||
|
return BTM_ILLEGAL_VALUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type = *own_bda_type;
|
p_cb->own_addr_type = *own_bda_type;
|
||||||
|
|
||||||
return BTM_SUCCESS;
|
return BTM_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -84,8 +84,10 @@
|
|||||||
typedef UINT8 tBTM_BLE_SEC_REQ_ACT;
|
typedef UINT8 tBTM_BLE_SEC_REQ_ACT;
|
||||||
|
|
||||||
#define BLE_STATIC_PRIVATE_MSB_MASK 0x3f
|
#define BLE_STATIC_PRIVATE_MSB_MASK 0x3f
|
||||||
|
#define BLE_NON_RESOLVE_ADDR_MSB 0x00 /* most significant bit, bit7, bit6 is 00 to be non-resolvable random */
|
||||||
#define BLE_RESOLVE_ADDR_MSB 0x40 /* most significant bit, bit7, bit6 is 01 to be resolvable random */
|
#define BLE_RESOLVE_ADDR_MSB 0x40 /* most significant bit, bit7, bit6 is 01 to be resolvable random */
|
||||||
#define BLE_RESOLVE_ADDR_MASK 0xc0 /* bit 6, and bit7 */
|
#define BLE_RESOLVE_ADDR_MASK 0xc0 /* bit 6, and bit7 */
|
||||||
|
#define BTM_BLE_IS_NON_RESLVE_BDA(x) ((x[0] & BLE_RESOLVE_ADDR_MASK) == BLE_NON_RESOLVE_ADDR_MSB)
|
||||||
#define BTM_BLE_IS_RESOLVE_BDA(x) ((x[0] & BLE_RESOLVE_ADDR_MASK) == BLE_RESOLVE_ADDR_MSB)
|
#define BTM_BLE_IS_RESOLVE_BDA(x) ((x[0] & BLE_RESOLVE_ADDR_MASK) == BLE_RESOLVE_ADDR_MSB)
|
||||||
|
|
||||||
/* LE scan activity bit mask, continue with LE inquiry bits */
|
/* LE scan activity bit mask, continue with LE inquiry bits */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user