dwm_mac_addr_get

获取设备使用的 MAC 地址列表. 设备会使用用户指定的地址或默认地址. 每个接口的默认 MAC 地址只能更改一次,方法是调用 dwm_mac_addr_set_once 将其写入 OTP 内存,并成为新的默认 MAC 地址. 用户可通过调用 dwm_mac_addr_set 设置自定义 MAC 地址. 默认 MAC 地址在被用户修改后可通过出厂重置恢复(参见 dwm_factory_reset). 设备使用列表中的 MAC 地址与特定接口的固定映射,如下所示:

  1. UWB

  2. BLE

  3. 以太网

  4. 无线网络

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,小端序

类型0x40表示 状态代码 上一条命令的状态码
类型 0xC1(193 dec) 表示 MAC 地址列表

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 规范.