想请教下BLE白名单(idf 5.0)的使用方法
场景:esp32s3(periperal)和华为手机(central)互连,第一次连接配对绑定,后续连接采用过滤广播连接
① esp32s3在没调用esp_ble_gap_config_local_privacy时,显示的手机地址类型是1(random),地址是addr_1
② 调用esp_ble_gap_config_local_privacy(true)后,显示的手机地址类型是2(rpa_public),地址是addr_2
esp_ble_gap_update_whitelist()好像只能支持0,1类型
无论我调用esp_ble_gap_update_whitelist(addr_1, 1) 还是
esp_ble_gap_update_whitelist(addr_2, 1)
白名单功能都不生效
那么手机(rpa_public类型地址)就没法使用esp32s3的白名单功能了吗?
另外白名单好像在esp32重启后会清空,而绑定名单不会,
从绑定名单里读出来的所有设备地址类型都是0,似乎没有正确记录随机地址类型,
那么我如何在系统重启后恢复白名单呢?难道要自己额外记录地址类型
最后再吐槽下,BLE API写的是真差,说明也不到位,再看了下STM32的,真实简单易懂
BLE白名单功能问题
-
- Posts: 41
- Joined: Thu May 04, 2023 3:49 am
Re: BLE白名单功能问题
1-白名单功能都不生效问题
首先考虑 “esp_ble_gap_update_whitelist” 是否成功,查看 log,然后考虑在开启广播时(“esp_ble_gap_start_advertising”)有没有设置“Advertising filter policy”?
2-rpa_public 类型地址问题
“esp_ble_gap_update_whitelist ”支持 “BLE_WL_ADDR_TYPE_PUBLIC” 和“BLE_WL_ADDR_TYPE_RANDOM”类型, 调用 esp_ble_gap_config_local_privacy(true) 后,显示的手机地址类型是2(rpa_public),说明手机的rpa地址已经被解析出来,后面可以使用手机的 public 地址加入白名单,因此,esp_ble_wl_addr_type_t 设置为 “BLE_WL_ADDR_TYPE_PUBLIC”。
3-似乎没有正确记录随机地址类型问题
一般来说手机使用的是 public 地址,从绑定名单里读出来的所有设备地址类型都是 0,说明手机的地址已经被解析出来。
4-如何在系统重启后恢复白名单
绑定列表可以自动保存到 nvc_flash。白名单需要根据需求添加,如果重启后还要使用白名单,需要将白名单预先保存到 nvc_flash,重启后进行恢复。
首先考虑 “esp_ble_gap_update_whitelist” 是否成功,查看 log,然后考虑在开启广播时(“esp_ble_gap_start_advertising”)有没有设置“Advertising filter policy”?
2-rpa_public 类型地址问题
“esp_ble_gap_update_whitelist ”支持 “BLE_WL_ADDR_TYPE_PUBLIC” 和“BLE_WL_ADDR_TYPE_RANDOM”类型, 调用 esp_ble_gap_config_local_privacy(true) 后,显示的手机地址类型是2(rpa_public),说明手机的rpa地址已经被解析出来,后面可以使用手机的 public 地址加入白名单,因此,esp_ble_wl_addr_type_t 设置为 “BLE_WL_ADDR_TYPE_PUBLIC”。
3-似乎没有正确记录随机地址类型问题
一般来说手机使用的是 public 地址,从绑定名单里读出来的所有设备地址类型都是 0,说明手机的地址已经被解析出来。
4-如何在系统重启后恢复白名单
绑定列表可以自动保存到 nvc_flash。白名单需要根据需求添加,如果重启后还要使用白名单,需要将白名单预先保存到 nvc_flash,重启后进行恢复。
Who is online
Users browsing this forum: No registered users and 70 guests