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

时间:2014-04-14 09:34:44

标签: 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外围设备的第三个单元。因此,不要将经典和智能蓝牙与同一设备进行点对点。

是否存在双模式约束,在支持/连接Bluetooth Classic配置文件时,无法充当外设?那种情况下只支持中央模式吗?

仅供参考,我正在使用CSR的8670芯片组。

更新

新答案补充道。我很抱歉直到现在还没有澄清/清理我以前的答案 - 时光飞逝!

3 个答案:

答案 0 :(得分:12)

好吧,在深入研究规格并试图更清楚地理解事物之后,我找到了我想要的答案,尽管我更喜欢更乐观的答案......;(

尽管如此,让我们来看看;蓝牙规范4.0(BLE)说明了这一点;

  

双模小工具无法充当BLE外设并宣传其广告   在使用“经典”蓝牙时仍然可以连接的存在   BR / EDR。

此外,我使用的CSR8670双模芯片组的CSR源代码示例表现相同;当连接任何经典BT链路时,禁用作为外围设备的BLE广告。相反,CSR源代码促使设备应该充当BLE中心,允许其他BLE外围设备通告并连接到它,所有这些都可以在流式传输音频时充当(充当A2DP接收器)。

这完全不符合我的设置;

  1. BLE中心比BLE外设消耗更多功率,而我的设备需要节省能源
  2. 将BR / EDR设备与BLE外设功能相结合的双模“组合”问题恰好转移到了手机上,由于我们不能指望Apple(或其他任何人)违反BLE spec。
  3. 相反,推荐的方法是让我的立体声耳机完全跳过BLE并使用GATT而不是BR / EDR,也称为“香草”广告,这真的很有意义;我的意思是,我已经在两个设备之间设置了ACL链接,为什么我需要启动任何类型的发现机制?

    再一次,蓝牙SIG可以派上用场;

    https://developer.bluetooth.org/TechnologyOverview/Pages/GATT.aspx

      

    GATT和ATT不是特定于运输的,可用于BR / EDR   和LE。但是,GATT和ATT在LE中必须实施   它用于发现服务

    因此,SIG说使用BR / EDR作为GATT的传输是“是”,但问题却变成了;那么我怎样才能从我的iOS应用程序中访问 连接的BR / EDR设备,其典型情况是使用CBCentral扫描,发现并连接到CBPeripheral?答案很简单;你不能,因为iOS 7.0没有(但是?)支持GATT for BR / EDR;

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

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

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

答案 1 :(得分:7)

我想,只要你活着就会学到,而这个问题的答案并不是我之前所声称的不支持(基于我认为我所知道的)。

对CSR芯片组进行双模式和耳机开发的简短而简洁的答案就是它在早期SDK上的CSR蓝牙堆栈中受到限制。

Bluetooth SIG从未通过经典链接连接到同一设备时,从不支持双模充当外设。相反,它明确规范。如何实现这种互操作性 - 但这并不意味着所有BT-stack实现都具备这种功能。

因此;使用最新的devtools和CSR的最新蓝牙固件/堆栈已经解决了所有问题,双模现在已经完全实现,实际上我可能会很好地添加,支持CSR8670 / 75芯片组。

答案 2 :(得分:4)

我也在使用CSR8670设备。 它有效。 BLE外设和音频。

您需要使用CSR的ADK 4.0.0。

蓝牙4.1和蓝牙4.0不同。对于你所说的蓝牙4.0是正确的,但你的芯片可以做蓝牙4.1。

4.1允许此类连接。

我还在广告包中添加了“双模式”标志。

有一些条件,例如强烈推荐至少90毫秒的连接间隔,所以你不要乱用音频。

祝你好运!