我正在开发一款使用经典配置文件(HFP、A2DP、AVRCP)的蓝牙立体声耳机,就像人们对 Ina 立体声耳机的期望一样。但是,我想为 iOS 部署一个远程控制应用程序,并同时将其用于其他经典链接,但我在设计中使用的双模芯片组并没有像我预期的那样运行;
耳机设置为外围设备,让 iOS 设备充当中心。因此,外围设备宣传其 BLE 服务(使用我特定的 128 位 UUID)并且一切正常。我可以从任何中心浏览外围设备,但只有当我没有连接到经典配置文件时(例如,当没有流式传输音频时)。
我的设备在连接 HFP 和/或 A2DP 时似乎无法宣传 BLE!然而,我已经看到了作为 BLE 中央设备的同一芯片组的演示,扫描并连接到其他 BLE 外围设备,同时通过 A2DP 传输音频。然而,在该设置中,设备充当连接到 iPhone 的 A2DP 接收器,同时通过 BLE 扫描/连接到充当 BLE 外围设备的第三个单元。因此,不能将经典蓝牙和智能蓝牙点对点连接到同一设备。
在支持/连接到蓝牙经典配置文件时是否存在不能充当外围设备的双模限制?在那种情况下只支持中央模式吗?
仅供引用,我使用的是 CSR 的 8670 芯片组。
更新
添加了新答案。很抱歉直到现在才澄清/清理我以前的回答——时间过得真快!
最佳答案
好吧,在深入研究规范并尝试更清楚地理解事物之后,我找到了我正在寻找的答案,尽管我更喜欢更乐观的答案......;(
尽管如此,让我们开始吧; 4.0 (BLE) 的蓝牙规范说明了这一点;
Dual-mode gadgets cannot act as BLE peripheral and advertise its presence while still being connectable in "Classic" Bluetooth using BR/EDR.
此外,我正在使用的 CSR8670 双模芯片组的 CSR 源代码示例都以相同的方式表现;当连接任何经典 BT 链接时,作为外围设备的 BLE 广告将被禁用。相反,CSR 源代码提倡该设备应充当 BLE 中心,允许其他 BLE 外围设备广播并连接到它,所有这些在流式传输音频时完全可行(充当 A2DP 接收器)。
这根本不适合我的设置;
- BLE centrals 比 BLE peripherals 耗电更多,我的设备需要节能
- 双模式“组合”- 将 BR/EDR 设备与 BLE 外围设备功能相结合的问题刚刚转移到手机上,这不会更好地工作,因为我们不能指望 Apple(或其他任何人)违反BLE 规范。
相反,推荐的方法是让我的立体声耳机完全跳过 BLE,而是使用 GATT 而不是 BR/EDR,也称为通过“ Vanilla ”进行广告,这确实很有意义;我的意思是,我已经在两个设备之间设置了 ACL 链接,为什么我需要启动任何类型的发现机制?
Bluetooth SIG 再次派上用场;
https://developer.bluetooth.org/TechnologyOverview/Pages/GATT.aspx
GATT and ATT are not transport specific and can be used in both BR/EDR and LE. However, GATT and ATT are mandatory to implement in LE since it is used for discovering services
因此,SIG 对使用 BR/EDR 作为 GATT 的传输说"is",但问题却变成了;我如何才能从我的 iOS 应用程序中访问那个连接的 BR/EDR 设备,其中典型的场景是使用 CBCentral 扫描、发现并连接到 CBPeripheral?答案很简单;你不能,因为 iOS 7.0(还?)不支持 BR/EDR 的 GATT;
所以,总结一下;如果你想在两个双模蓝牙设备之间进行点对点设置,同时使用蓝牙经典配置文件和蓝牙智能服务/特性,你应该使用 GATT over BR/EDR,这对苹果设备来说是不行的,但可能会得到 Android 的支持(不知道,最终会将应用程序移植到 Android,但无论如何这对 Android 来说都不是什么大问题,因为最坏的情况将意味着回退到 SPP 和一个简单的字节协议(protocol)来完成这项工作我需要完成)。
就是这样。希望我帮助了某人;) /马库斯
关于iOS蓝牙双模;同时将 BLE (GATT) 连接到已连接的 BR/EDR (A2DP/HFP) 立体声耳机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23056668/