web-dev-qa-db-ja.com

iOSBluetoothデュアルモード; BLE(GATT)をすでに接続されているBR / EDR(A2DP / HFP)ステレオヘッドセットに同時に接続する

私は、古典的なプロファイル(HFP、A2DP、AVRCP)を使用して、Bluetoothを備えたステレオヘッドセットを開発しています。ただし、iOS用のリモートコントロールアプリを展開し、それを他のクラシックリンクと同時に使用したいのですが、デザインで使用しているデュアルモードチップセットが期待どおりに動作しません。

ヘッドセットは周辺機器としてセットアップされ、iOSデバイスを中央として機能させます。そのため、ペリフェラルはBLEサービス(私の特定の128ビットUUIDを使用)をアドバタイズし、すべてが良好です。どのセントラルからでも周辺機器を閲覧できますが、クラシックプロファイルに接続していない場合(オーディオをストリーミングしていない場合など)に限ります。

HFPやA2DPに接続しているときに、デバイスがBLEをアドバタイズできないようです。ただし、同じチップセットがBLEセントラルとして機能し、スキャンして他のBLE周辺機器に接続し、同時にA2DPを介してオーディオをストリーミングするデモを見てきました。ただし、そのセットアップでは、デバイスはiPhoneに接続されたA2DPシンクとして機能し、BLEを介してBLE周辺機器として機能する3番目のユニットにスキャン/接続していました。したがって、クラシックBluetoothとスマートBluetoothの両方を同じデバイスにポイントツーポイントで接続することはできません。

Bluetooth Classicプロファイルをサポート/接続している間はペリフェラルとして機能できないというデュアルモードの制約はありますか?その場合、セントラルモードのみがサポートされますか?

参考までに、私はCSRの8670チップセットを使用しています。

更新

新しい回答が追加されました。今まで私の前の答えを明確に/クリーンアップしなかったことをお詫びします-時が経ちます!

13

あなたが生きている限りあなたは学ぶと私は思います、そしてこの質問の答えは私が以前に主張したことをサポートしていないということではありません(私が知っていると思ったことに基づいて)。

CSRチップセットでのデュアルモードとヘッドセットの開発に対する簡潔で明確な答えは、それが以前のSDKのCSRBluetoothスタックの制約であったということです。

Bluetooth SIGは、クラシックリンクを介して同じデバイスに接続されている間、ペリフェラルとして機能するデュアルモードをサポートしていません。それどころか、それは明らかに仕様です。そのような相互運用性をどのように実行するか-しかし、それは、そこにあるすべてのBTスタック実装がそのような機能を実行できることを常に意味するわけではありません。

したがって、 CSRの最新のdevtoolsと最新のBluetoothファームウェア/スタックを使用することですべての問題が解決され、デュアルモードは完全に、そして実際には非常にうまく追加でき、CSR8670/75チップセットでサポートされています。

7

さて、仕様を掘り下げて物事をより明確に理解しようとした後、私はもっと楽観的な答えよりも好んだのに、私が探していた答えを見つけました...;(

それでも、それに取り掛かりましょう。 4.0(BLE)のBluetooth仕様は次のように述べています。

デュアルモードガジェットcannot BLEペリフェラルとして機能し、BR/EDRを使用して「クラシック」Bluetoothで接続可能な状態でその存在をアドバタイズします。

さらに、私が使用しているCSR8670デュアルモードチップセットのCSRソースコードの例はすべて同じように動作します。従来のBTリンクが接続されている場合、ペリフェラルとしてのBLEアドバタイズメントは無効になります。代わりに、CSRソースコードは、デバイスが代わりにBLEセントラルとして機能することを促進し、他のBLE周辺機器がアドバタイズして接続できるようにします。すべてオーディオのストリーミング中に完全に実行可能です(A2DPシンクとして機能)。

それ以来、これは私のセットアップにはまったく適していません。

  1. BLEセントラルはBLEペリフェラルよりも多くの電力を消費し、デバイスはエネルギーを節約する必要があります
  2. デュアルモードの「コンボ」-BR/EDRデバイスとBLE周辺機能を組み合わせる問題は、代わりに電話に移されました。これは、Apple(または他の誰か)を期待できないため、これ以上機能しません。 BLE仕様に違反する。

代わりに、推奨されるアプローチは、ステレオヘッドセットでBLEを完全にスキップし、代わりにGATT over BR/EDRを使用することです。これは、「バニラ」を介した広告とも呼ばれ、非常に理にかなっています。つまり、2つのデバイス間にACLリンクがすでに設定されているのに、なぜ何らかの種類のdiscoveryメカニズムをキックする必要があるのでしょうか。

繰り返しになりますが、BluetoothSIGは便利です。

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

GATTとATTは輸送に固有ではなく、BR/EDRとLEの両方で使用できます。ただし、GATTとATTはサービスの検出に使用されるため、LEでの実装は必須です。

したがって、SIGはBR/EDRをGATTの輸送手段として使用することに「はい」と言っていますが、その代わりに問題は次のようになります。次に、iOSアプリ内からthat接続されたBR/EDRデバイスにアクセスするにはどうすればよいですか?典型的なシナリオは、CBCentralを使用してCBPeripheralをスキャン、検出、接続することです。答えは簡単です。 iOS 7.0は(まだ?)BR/EDRのGATTをサポートしていないため、できません。

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

だから、物事を要約すると、 BluetoothClassicプロファイルとBluetoothSmartサービス/特性の両方を使用して、2つのデュアルモードBluetoothデバイス間でピアツーピアセットアップを行う場合は、GATT over BR/EDRを使用する必要があります。これは、Appleデバイスでは使用できません。 、ただしAndroidでサポートされる可能性があります(わかりませんが、最終的にはアプリをAndroidに移植しますが、最悪の場合、Androidにとっては大したことではありません。 -caseは、SPPへのフォールバックと、実行する必要のある作業を実行するための単純なバイトプロトコルを意味します)。

それだけです。私が誰かを助けたことを願っています;)/ Markus

12

CSR8670デバイスも使用しています。それは機能しています。 BLEペリフェラルとオーディオの両方。

CSRによるADK4.0.0を使用する必要があります。

Bluetooth4.1とBluetooth4.0は異なります。 Bluetooth 4.0についてあなたが言ったことは正しいですが、あなたのチップはBluetooth4.1を実行できます。

4.1はそのような接続を許可します。

また、広告パケットに「デュアルモード」フラグを追加しました。

オーディオを台無しにしないように、少なくとも90ミリ秒の接続間隔を強くお勧めするなど、いくつかの条件があります。

幸運を!

4
Paul Rolfe