iOS蓝牙双模;同时将 BLE (GATT) 连接到已连接的 BR/EDR (A2DP/HFP) 立体声耳机

标签 ios bluetooth bluetooth-lowenergy core-bluetooth gatt

我正在开发一款使用经典配置文件(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 接收器)。

这根本不适合我的设置;

  1. BLE centrals 比 BLE peripherals 耗电更多,我的设备需要节能
  2. 双模式“组合”- 将 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;

https://www.bluetooth.org/tpg/showDeclaration.cfm?3A000A5A005C5344535D5414403B0C0D0E2405022413010E57503F202A5A72

所以,总结一下;如果你想在两个双模蓝牙设备之间进行点对点设置,同时使用蓝牙经典配置文件和蓝牙智能服务/特性,你应该使用 GATT over BR/EDR,这对苹果设备来说是不行的,但可能会得到 Android 的支持(不知道,最终会将应用程序移植到 Android,但无论如何这对 Android 来说都不是什么大问题,因为最坏的情况将意味着回退到 SPP 和一个简单的字节协议(protocol)来完成这项工作我需要完成)。

就是这样。希望我帮助了某人;) /马库斯

关于iOS蓝牙双模;同时将 BLE (GATT) 连接到已连接的 BR/EDR (A2DP/HFP) 立体声耳机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23056668/

相关文章:

iphone - iOS RGB 颜色不正确?

ios - 如何让新的 iOS 8 键盘显示在我的应用程序上

Android:直接在应用程序中使用 HID over GATT(Gadget=HID → 控制应用程序)

蓝牙扩展查询响应

android - 蓝牙信号死通知

android - 如何在android中使用已知的mac地址初始化BluetoothDevice对象?

ios - 在 `UISearchbar` 中搜索姓名或号码

ios - 如何刷新/重新加载 UITableView

python - 通过蓝牙将 Arduino 连接到 Python

bluetooth-lowenergy - 蓝牙 LE 的最大数据包长度?