8

我知道 iPhone 蓝牙功能在 3.0 之前无法通过 SDK 访问,但需要多长时间才能找到该区域的设备?它是否取决于该区域的设备数量?如果范围内大约有 5 台设备,扫描以发现所有设备需要 <5 秒还是 >30 秒?

我知道有很多未知因素,但我正在尝试确定如果时间很短,我是否可以在启动时进行蓝牙扫描,或者我是否必须告诉用户它即将进行扫描并且可能是一个很长的延迟。由于其他蓝牙设备不可用,我无法在现实世界中对此进行测试,但我试图了解它的设计方式。

4

2 回答 2

20

不确定 API 将允许您做什么,但基于此的蓝牙主机控制器接口 (HCI) 命令是“查询命令”

这将使您可以在固定时间和/或固定数量的响应内查询设备。

我是蓝牙新手,不是专家,但...

从处于低功耗模式的蓝牙设备获得至少 1 个响应需要 1.28 秒,因此查询时间是该周期的倍数,最长可达 61.44 秒(48 个周期),因此时间范围为 1(1.28秒)到 48(61.44 秒)。

不过,可能有多个设备可以在 1.28 秒的时间内做出响应。

您还可以指定将接受的响应数 (1..255) 或 0 表示无限制,例如直到时间用完。

如果您找到了您正在寻找的特定设备,您也可以取消查询。

在我的办公桌上使用带有蓝牙 2.1 + EDR 固件的 CSR 蓝牙芯片在芯片上运行查询并通过芯片 UART 进行调试输出的不科学测试。每个查询运行 10 次,取结果的平均值:

  • 1 个周期查询时间(1.28 秒)平均产生 10 个唯一的蓝牙地址。
  • 5 周期查询时间(6.4 秒)平均产生 23 个唯一蓝牙地址。
  • 10 周期查询时间(12.8 秒)平均产生 29 个唯一的蓝牙地址。

我说“唯一”,实际上结果一遍又一遍地重复了很多相同的地址,但这可能取决于实现,Apple API 可能只返回唯一地址。

然而,这并不代表“现实世界”,因为这里(我的办公室)周围的大多数蓝牙设备都没有处于低功耗模式。我想,我可以按设备类别过滤掉 PC、笔记本电脑和测试套件。那将获得可发现的手机,耳机等...

查询也可以与 RSSI 结合来获得信号最强的设备,但它们不一定是最近的。

对于您的方案,您可能希望根据时间和设备数量进行查询,例如 4 * 1.28 秒或 10 个设备。

总结一下:您可以进行查询的最短时间是 1.28 秒,这可能是 10+/-?区域中的设备(如果它们醒着且在附近)。

如果您有一个饱和的蓝牙环境或(微波炉在同一个房间里),则可能需要更长的时间才能找到范围内的所有设备。

于 2009-05-08T14:29:05.463 回答
4

我知道这是一个老问题,但我想我可能会为以后发现这个问题的任何人添加一些东西。

正如Simon Peverett提到的,设备发现是由蓝牙主机控制器接口执行的底层“查询命令”执行的。在蓝牙规范 V4.0,第 2 卷,E 部分,第 6.1.4 节中,规范说:

当蓝牙设备发起一般查询时,查询状态应持续 TGAP(100) 或更长时间,除非查询器收集到足够的响应并决定提前中止查询状态。

在其他地方,TGAP(100) 被解释为 10.24 秒,并被描述为蓝牙设备执行设备发现的时间跨度的推荐值。

换句话说,执行查询的最短时间的良好基准是 10.24 秒,或查询命令测量时间的 1.28 秒周期中的 8 个。

于 2014-04-26T21:53:27.300 回答