CoreBluetooth扫描检测时间在MacOS上不可靠

问题描述 投票:1回答:1

在MacOS上扫描BluetoothLE制造商广告时,发现回调的频率远低于iOS。对于10 Hz的广播发射器,iOS每秒可获得近10次发现回调。在MacOS上,通常每秒看到1-3个回调,但有时回调之间可能会有很多秒 - 有几次我在检测之间测量超过90秒!下面的图表显示了大约两小时的测试运行中发现之间的秒数。

与iOS相比,为什么MacOS上的发现时间如此难以预测?有没有办法让回调更可靠?

我在MacBook Pro(Retina,15英寸,2014年中)上将这些数据记录在macOS Sierra 10.12.6上,但我听到同事们抱怨新款MacBook上存在类似的不可靠性。

centralManager = CBCentralManager(delegate: self, 
                                  queue: DispatchQueue.global(qos: .default))
centralManager.scanForPeripherals(withServices: nil, 
                                  options: [CBCentralManagerScanOptionAllowDuplicatesKey: true])

...

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
            let secsSinceDetection = Date().timeIntervalSince(self.lastDetectionTime)
            lastDetectionTime = Date()
            NSLog("LDT: \(secsSinceDetection))")
}

enter image description here

macos core-bluetooth
1个回答
1
投票

我在MacBook Pro(15英寸,2017年)上看到与macOS High Sierra 10.13.3相同的问题。即使是Apple的蓝牙资源管理器应用程序(硬件IO工具的一部分)也显示出同样的问题。

有些外围设备受到的影响比其他设备更多Apple TV似乎总是很快出现,而其他外围设备速度较慢或完全没有出现。

看到相关问题在这里得到解答:CoreBluetooth advertising detection time显然CoreBluetooth没有连续收听,并与Wi-Fi和常规蓝牙共享天线和资源。我原本以为关闭两个Wi-Fi并且“切换”提高了看广告的能力以及缩短连接时间。通过取消选中“允许在此Mac和您的iCloud设备之间切换”,Apple中的“切换” - 系统偏好设置 - 常规已关闭,但这可能不是真的。

请注意,问题并未出现在iOS中,可能是由于更好的BT和Wi-Fi共存支持以及Handoff(Airdrop)和常规BLE使用之间的关系。该问题似乎只是扫描和连接期间BLE收听时间的一部分。建立连接后,似乎没有那么多干扰。在某种程度上,这是因为在一次连接之后,存在自动低级别BLE重试和固定时间连接间隔之间的跳频。在扫描和建立连接(两者都依赖于看到广告包)期间,在每个scanInterval上顺序地旋转通过3个BLE广告信道。从技术上讲,广告渠道与Wi-Fi不重叠(参见http://www.argenox.com/a-ble-advertising-primer/)。

[EDITED FOR NEWER INFO]经过更广泛的测试后,看来macOS的问题可能不会受到Wi-Fi或Handoff的干扰,而是使scanWindow和scanInterval设置的行为更像iOS在后台的工作方式。因为对于某些外围设备,它有时需要长达1.5分钟,30/300比率,1秒广告和高达10毫秒随机移位(因此数字5毫秒作为平均移位)可能需要(300-30)/ 5如果外围设备没有遵循Apple故意远离300毫秒倍数的广告间隔指南并且在随机转换上运气不佳可能会稍微长一点,这将被检测到= 54间隔(秒),这大概就是看来。不幸的是,我还没有找到一种方法来强制macOS使用类似于iOS前景的更高的scanWindow / scanInterval比率。

[第二次编辑附加信息]如果一个苹果在外围设备上播放1022.5毫秒的广告时间,那么即使使用iOS背景或使用macOS 30毫秒scanWindow和300毫秒scanInterval,中间时间大约是5秒,而最大值是大约19秒所以0-10毫秒随机移位的运气非常糟糕,可能会更长一些。

© www.soinside.com 2019 - 2024. All rights reserved.