10#ifndef ZEPHYR_INCLUDE_BLUETOOTH_ADDR_H_
11#define ZEPHYR_INCLUDE_BLUETOOTH_ADDR_H_
31#define BT_ADDR_LE_PUBLIC 0x00
32#define BT_ADDR_LE_RANDOM 0x01
33#define BT_ADDR_LE_PUBLIC_ID 0x02
34#define BT_ADDR_LE_RANDOM_ID 0x03
35#define BT_ADDR_LE_UNRESOLVED 0xFE
38#define BT_ADDR_LE_ANONYMOUS 0xFF
52#define BT_ADDR_LE_SIZE 7
67#define BT_ADDR_ANY (&bt_addr_any)
69#define BT_ADDR_NONE (&bt_addr_none)
71#define BT_ADDR_LE_ANY (&bt_addr_le_any)
73#define BT_ADDR_LE_NONE (&bt_addr_le_none)
84 return memcmp(a, b,
sizeof(*a));
108 return memcmp(a, b,
sizeof(*a));
131 memcpy(dst, src,
sizeof(*dst));
141 memcpy(dst, src,
sizeof(*dst));
157#define BT_ADDR_IS_RPA(a) (((a)->val[5] & 0xc0) == 0x40)
160#define BT_ADDR_IS_NRPA(a) (((a)->val[5] & 0xc0) == 0x00)
162#define BT_ADDR_IS_STATIC(a) (((a)->val[5] & 0xc0) == 0xc0)
165#define BT_ADDR_SET_RPA(a) ((a)->val[5] = (((a)->val[5] & 0x3f) | 0x40))
167#define BT_ADDR_SET_NRPA(a) ((a)->val[5] &= 0x3f)
169#define BT_ADDR_SET_STATIC(a) ((a)->val[5] |= 0xc0)
218#define BT_ADDR_STR_LEN 18
227#define BT_ADDR_LE_STR_LEN 30
241 return snprintk(str, len,
"%02X:%02X:%02X:%02X:%02X:%02X",
242 addr->
val[5], addr->
val[4], addr->
val[3],
243 addr->
val[2], addr->
val[1], addr->
val[0]);
261 switch (addr->
type) {
269 strcpy(type,
"public-id");
272 strcpy(type,
"random-id");
279 return snprintk(str, len,
"%02X:%02X:%02X:%02X:%02X:%02X (%s)",
285struct bt_addr_tmp_str {
289struct bt_addr_tmp_str bt_addr_tmp_str(const
bt_addr_t *addr);
291struct bt_addr_le_tmp_str {
295struct bt_addr_le_tmp_str bt_addr_le_tmp_str(const
bt_addr_le_t *addr);
308#define bt_addr_str(_addr) bt_addr_tmp_str(_addr).str
320#define bt_addr_le_str(_addr) bt_addr_le_tmp_str(_addr).str
const bt_addr_t bt_addr_none
#define BT_ADDR_IS_STATIC(a)
Check if a Bluetooth LE random address is a static address.
Definition addr.h:158
static int bt_addr_to_str(const bt_addr_t *addr, char *str, size_t len)
Converts binary Bluetooth address to string.
Definition addr.h:235
#define BT_ADDR_LE_PUBLIC
Definition addr.h:31
#define BT_ADDR_LE_PUBLIC_ID
Definition addr.h:33
int bt_addr_le_from_str(const char *str, const char *type, bt_addr_le_t *addr)
Convert LE Bluetooth address from string to binary.
int bt_addr_le_rpa_resolve(uint8_t id, const bt_addr_le_t *addr, bt_addr_le_t *resolved_addr)
Resolve a Bluetooth LE Resolvable Private Address (RPA) to its identity address.
#define BT_ADDR_IS_RPA(a)
Check if a Bluetooth LE random address is resolvable private address.
Definition addr.h:153
const bt_addr_le_t bt_addr_le_any
static int bt_addr_cmp(const bt_addr_t *a, const bt_addr_t *b)
Compare Bluetooth device addresses.
Definition addr.h:78
static bool bt_addr_le_is_rpa(const bt_addr_le_t *addr)
Check if a Bluetooth LE address is a random private resolvable address.
Definition addr.h:180
static int bt_addr_le_cmp(const bt_addr_le_t *a, const bt_addr_le_t *b)
Compare Bluetooth LE device addresses.
Definition addr.h:102
static void bt_addr_copy(bt_addr_t *dst, const bt_addr_t *src)
Copy Bluetooth device address.
Definition addr.h:125
#define BT_ADDR_SIZE
Length in bytes of a standard Bluetooth address.
Definition addr.h:39
#define BT_ADDR_LE_RANDOM
Definition addr.h:32
static int bt_addr_le_to_str(const bt_addr_le_t *addr, char *str, size_t len)
Converts binary LE Bluetooth address to string.
Definition addr.h:252
static void bt_addr_le_copy_addr(bt_addr_le_t *dst, const bt_addr_t *src, uint8_t src_type)
Copy Bluetooth LE device address from Bluetooth device address and type.
Definition addr.h:146
static bool bt_addr_le_is_identity(const bt_addr_le_t *addr)
Check if a Bluetooth LE address is valid identity address.
Definition addr.h:198
#define BT_ADDR_STR_LEN
Recommended length of user string buffer for Bluetooth address.
Definition addr.h:214
static bool bt_addr_le_eq(const bt_addr_le_t *a, const bt_addr_le_t *b)
Determine equality of two Bluetooth LE device addresses.
Definition addr.h:115
static void bt_addr_le_copy(bt_addr_le_t *dst, const bt_addr_le_t *src)
Copy Bluetooth LE device address.
Definition addr.h:135
int bt_addr_le_create_static(bt_addr_le_t *addr)
Create a Bluetooth LE random static address.
int bt_addr_from_str(const char *str, bt_addr_t *addr)
Convert Bluetooth address from string to binary.
const bt_addr_t bt_addr_any
static bool bt_addr_eq(const bt_addr_t *a, const bt_addr_t *b)
Determine equality of two Bluetooth device addresses.
Definition addr.h:88
#define BT_ADDR_LE_STR_LEN
Recommended length of user string buffer for Bluetooth LE address.
Definition addr.h:223
const bt_addr_le_t bt_addr_le_none
int bt_addr_le_create_nrpa(bt_addr_le_t *addr)
Create a Bluetooth LE random non-resolvable private address.
#define BT_ADDR_LE_RANDOM_ID
Definition addr.h:34
int snprintk(char *str, size_t size, const char *fmt,...)
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
char * strcpy(char *ZRESTRICT d, const char *ZRESTRICT s)
int memcmp(const void *m1, const void *m2, size_t n)
void * memcpy(void *ZRESTRICT d, const void *ZRESTRICT s, size_t n)
Bluetooth LE Device Address.
Definition addr.h:51
uint8_t type
Definition addr.h:52
bt_addr_t a
Definition addr.h:53
Bluetooth Device Address.
Definition addr.h:42
uint8_t val[6]
Definition addr.h:43