我知道在3.0之前无法通过SDK访问iPhone蓝牙功能,但需要多长时间才能找到该区域的设备?是否取决于该地区的设备数量?如果范围内有大约5个设备,扫描发现所有设备的时间是<5秒还是> 30秒?
我知道有很多未知因素,但我正在尝试确定如果时间很短,我是否可以在启动时进行蓝牙扫描,或者我是否必须告诉用户它即将进行扫描而且可能会有很长的延迟。我无法在现实世界中测试这个,因为其他蓝牙设备不可用,但我试图了解它是如何设计的。
答案 0 :(得分:19)
不确定API会让您做什么,但基于此的蓝牙主机控制器接口(HCI)命令是“查询命令”
这将让您在固定时间和/或固定数量的响应中查询设备。
我是蓝牙新手,不是专家,但是......
要从处于低功耗模式的蓝牙设备获得至少1个响应需要1.28秒,因此查询时间是该时段的倍数,最多为61.44秒(48个周期),因此时间范围是1(1.28秒)到48(61.44秒)。
可能有几个设备可以在一个1.28秒的时间内响应。
您还可以指定您接受的响应数(1..255)或0表示无限制,例如直到时间用完。
如果您找到了正在寻找的特定设备,也可以取消查询。
我的办公桌使用CSR蓝牙芯片进行了不科学的测试,蓝牙2.1 + EDR固件在芯片上运行查询,并通过芯片UART调试输出。每次调查10次并取平均结果:
我说'独特',实际上结果反复重复了很多相同的地址,但这可能是依赖于实现的,Apple API可能只返回唯一的地址。
然而,这并不代表“现实世界”,因为这里的大多数蓝牙设备(我的办公室)都没有处于低功耗模式。我想,我可以通过Class of Device过滤掉PC,笔记本电脑和测试套件。这将获得移动电话,可被发现的耳机等......
查询也可以与RSSI结合使用,以获得信号最强的设备,但它们可能不一定是最接近的设备。
对于您的场景,您可能希望根据设备的时间和数量进行查询,例如4 * 1.28秒或10台设备。
总结一下: 您可以进行查询的最短时间是1.28秒,可以得到10 +/-?该区域内的设备如果它们处于清醒状态并且靠近它们。
如果你有一个饱和的蓝牙环境或(微波炉进入同一个房间),可能需要更长的时间才能找到范围内的所有设备。
答案 1 :(得分:2)
我知道这是一个老问题,但我想我可能会为后来发现这个问题的人添加一些内容。
如Simon Peverett所述,设备发现由蓝牙主机控制器接口执行的基础“查询命令”执行。在蓝牙规范V4.0第2卷第E部分第6.1.4节中,规范说:
当蓝牙设备启动一般查询时,查询状态 除非询问者收集到足够的答复,否则应持续TGAP(100)或更长时间 并确定提前中止查询状态。
在其他地方,TGAP(100)被解释为10.24秒,并被描述为蓝牙设备执行设备发现的时间跨度的推荐值。
换句话说,执行查询的最短时间的良好基线是10.24秒,或查询命令测量时间的1.28秒周期中的8个。