跳过 BLE 服务发现

Skipping BLE service discovery

我正在尝试最大程度地减少 BLE 设备的总连接 + 写入时间。 BLE模块是我工作的公司开发的,所以我已经知道设备的所有服务和特性。

至此,连接时间+服务发现时间过长(大概800ms,这里要求500ms top)。我试图跳过服务发现,为此,我在代码中手动创建了特征和服务(使用反射来设置受保护的属性等),并且我可以 "technically" 通过服务发现.

问题是,如果我这样做,第一个数据包大约需要 300 毫秒,而对于服务发现,发现大约需要 280 毫秒,第一个数据包需要 20 毫秒,所以服务发现似乎无论如何都会执行,只是稍后,即使我不直接调用它 - 我的假设正确吗? 如果是这样,有没有办法完全绕过发现?

非常感谢任何帮助,到目前为止我在网上找不到任何有用的信息,而这 300 毫秒是至关重要的。

Android 执行服务发现,即使您没有告诉它。

您有三个选择:

  1. 绑定您的设备。然后android根本不会执行任何服务发现(第一次连接除外)。
  2. 优化您的 GATT 数据库。丢弃不需要的特征和描述符,如果您有自定义服务,请尝试合并尽可能多的特征等。
  3. 优化 link 层,如果你有硬件,这样做是可能的,在同一个连接事件(150 us 以内)中响应每个 GATT 请求的方式,而不是在下一个连接事件中响应.理论上这应该将速度提高 2 倍。 Nordic Semiconductor 的 nrf52 就是一个可能的例子。