Hi
I found the function
/**@brief Function for decoding the BLE address type.
*
* @param[in] p_addr The BLE address.
*
* @return Address type, or an error if the address type is incorrect, that is it does not match @ref BLE_GAP_ADDR_TYPES.
*
*/
static uint16_t nrf_ble_scan_address_type_decode(uint8_t const * p_addr)
{
uint8_t addr_type = p_addr[0];
// See Bluetooth Core Specification Vol 6, Part B, section 1.3.
addr_type = addr_type >> 6;
addr_type &= 0x03;
// Check address type.
switch (addr_type)
{
case 0:
{
return BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE;
}
case 1:
{
return BLE_GAP_ADDR_TYPE_PUBLIC;
}
case 2:
{
return BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE;
}
case 3:
{
return BLE_GAP_ADDR_TYPE_RANDOM_STATIC;
}
default:
{
return BLE_ERROR_GAP_INVALID_BLE_ADDR;
}
}
}
in nrf_ble_scan.c.
This decoding looks wrong to me since https://devzone.nordicsemi.com/f/nordic-q-a/27012/how-to-distinguish-between-random-and-public-gap-addresses and Bluetooth Core specification Vol. 6 Part B, section 1.3. states that a resolvable private address has the MSB = 0. Though decoder above returns BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE if the MSB is 1 and the next bit = 0 (decimal 2).
Also the spec does not state that a public address has the MSB = 0 and the next bit = 1 (decimal 1).
A more correct version would return BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE for case 1. Also it should not check the MSB for PUBLIC addresses.
Or do I miss something?
Best regards