dwm_mac_addr_get
获取设备使用的 MAC 地址列表. 设备会使用用户指定的地址或默认地址. 每个接口的默认 MAC 地址只能更改一次,方法是调用 dwm_mac_addr_set_once 将其写入 OTP 内存,并成为新的默认 MAC 地址. 用户可通过调用 dwm_mac_addr_set 设置自定义 MAC 地址. 默认 MAC 地址在被用户修改后可通过出厂重置恢复(参见 dwm_factory_reset). 设备使用列表中的 MAC 地址与特定接口的固定映射,如下所示:
UWB
BLE
以太网
无线网络
BLE 地址可以是随机 BLE 地址或公共 BLE 地址. 如果不支持特定接口,列表中相应的 MAC 地址将为空.
-
void dwm_mac_addr_get(dwm_mac_addr_list_t *mac_addr_list)
- 参数
output – 状态代码, type_0, type_1, type_2, type_3, mac_addr_0, mac_addr_1, mac_addr_2, mac_addr_3
type_N – 状态,标志(描述列表中索引 0 的 MAC 地址的类型).
status – 2 bits (* status of the MAC address: MAC_ADDR_EMPTY = 0, MAC_ADDR_DEFAULT = 1, MAC_ADDR_USER_SPECIFIED = 2, MAC_ADDR_MUTABLE_DEFAULT = 3*)
flags – 6 bits(如果地址为 PUBLIC_BLE_ADDR,则设置第 0 位,其余位保留供将来使用).
mac_addr_N – 48 位数值 (小端序)
C代码示例
dwm_mac_addr_list_t mac_addr_list;
rv: dwm_mac_addr_get(&mac_addr_list);
if (rv == DWM_OK) {
printf("UWB MAC 0x%02x%02x%02x%02x%02x%02x status=x%02x\n",
mac_addr_list.mac[0][0],
mac_addr_list.mac[0][1],
mac_addr_list.mac[0][2],
mac_addr_list.mac[0][3],
mac_addr_list.mac[0][4],
mac_addr_list.mac[0][5],
mac_addr_list.type[0].status);
} else {
printf("can't get MAC address list, error %d\n", rv);
}
SPI/UART 示例
TLV 请求 |
|
---|---|
类型 |
长度 |
0x83 |
0x00 |
类型0x83 (131 dec) 表示指令 dwm_mac_addr_get
TLV 响应 |
|||||
---|---|---|---|---|---|
类型 |
长度 |
价值(参见错误代码) |
类型 |
长度 |
价值 |
0x40 |
0x01 |
0x00 |
0xC1 |
0x18 |
(字节 0-4)列表中 MAC 地址的类型
(字节 5-10) MAC 地址 0,小端序
(字节 11-16) MAC 地址 1,小端序
(字节 17-22) MAC 地址 2,小端序
(字节 23-28) MAC 地址 3,小端序
|
… |
MAC地址标志编码
MAC 地址列表的标志 |
||||||||
---|---|---|---|---|---|---|---|---|
字节 0 |
字节1 |
字节2 |
字节3 |
|||||
2-7 位 |
0-1位 |
11-15位 |
10位 |
8-9位 |
18-23位 |
16-17 位 |
26-31位 |
24-25位 |
R |
S_0 |
R |
P_1 |
S_1 |
R |
S_2 |
R |
S_3 |
R 表示保留供将来使用. S_0、S_1、S_2、S_3 表示 MAC 地址状态. 状态可以有以下值:
0 - 空 MAC 地址
1 - OTP 内存中的默认 MAC 地址.
2 - 用户指定的 MAC 地址
3 - 可变的默认 MAC 地址,只能使用 dwm_mac_addr_set_once 重写一次.
如果 BLE 地址是公共 BLE 地址,则设置 P_1. 如果 BLE MAC 地址是随机的,则清除该标志. 有关 BLE 地址类型的更多信息,请参阅 BLE 规范.