BlueNRG-MS 只允许已知设备连接

BlueNRG-MS only allow known device to connect

我有一个带有 STM BlueNRG-MS 芯片的 BLE 外围设备。我用的是bluenrg API。 外围设备通常应该是可发现的,但应该只允许连接已知设备。

我想我可以通过在 EVT_LE_CONN_COMPLETE 回调中检查中央设备的 bdaddr 来实现这一点,并根据地址是否已知,我将允许连接。此外,我会有一个配对模式,我接受所有传入的连接请求,并将新的中央设备添加到已知设备列表中。

  case EVT_LE_CONN_COMPLETE:
    {
      evt_le_connection_complete *cc = (void *)evt->data;
      /*TODO: check if peer address is listed or if HMI accepts new pairing
       * If in pairing mode, add device to the list and accept connection, otherwise
       * go through list and if not found, refuse connection.*/
      if(acceptNewPairing){
          LOG("CR from %d:%d:%d:%d:%d:%d", cc->peer_bdaddr[0], cc->peer_bdaddr[1], cc->peer_bdaddr[2], cc->peer_bdaddr[3], cc->peer_bdaddr[4], cc->peer_bdaddr[5]);
          GAP_ConnectionComplete_CB(cc->peer_bdaddr, cc->handle);         
      }
  }
  break;

我的问题是 bdaddr 不是恒定的,而是在一定时间后会发生变化,所以我没有重新定位中央设备。我怎样才能克服这个问题?实现大多数已知蓝牙设备提供的此功能的正确方法是什么?

更新:
似乎可以使用函数

来实现该行为
hci_le_add_device_to_white_list(uint8_t bdaddr_type, tBDAddr bdaddr);

之后,即使我将可发现性设置为 WHITE_LIST_FOR_ALL,设备也可以被发现。我现在的问题是白名单似乎不是永久性的,如果我重新启动设备,我必须再次进入配对模式才能看到它。有人知道如何保存白名单吗?

aci_gap_configure_whitelist() 是做什么的?因为如果我调用这个函数,我的白名单似乎就被清除了。

更新2:
在 STM 文档 PM0257(第 3.10.1 节)中,我找到了对我正在寻找的过程的参考。所以我认为这是向前迈出的一步。问题是引用的函数 aci_gap_add_device_to_resolving_list 在我的 bluenrg API 中不存在。知道我应该改用什么吗?

问题已通过对 aci_gap_set_discoverable() 功能使用 WHITE_LIST_FOR_ONLY_SCAN 属性 解决,但只有绑定的设备才能连接。