web-dev-qa-db-ja.com

Androidと他のデバイス、UUIDとPIN質問間のBluetooth SPP

Androidアプリケーションを実装して医療機器からデータを受信しようとしていますが、発見プロセスを完了できず、電話とペアリングまたは相互接続されたデバイス

医療機器の説明:デバイスはService Discovery Protocol(SDP)とSerial Port Profile(SPP)を使用しています。 CODフィルターとサービス名が一致する周囲のアクセスポイント(最大10個)を検出するための照会手順を開始します。次に、PINをチェックして、アクセスポイントとの接続を(ページプロシージャを使用して)順次確立します。 PIN=が一致すると、データがアップロードされます。データをアップロードすると、デバイスは確認応答を待ちます。デバイスはマスターであり、通信を開始します。

私は医療機器を制御できません。私ができることは、それを開始し、上記の手順(測定後)を待つことだけです。

Android application:私は Bluetoothチャットの例 から始めましたこれまでのところ、SPDを使用してサービス名を適切な名前に設定するために、UUIDを_00001101-0000-1000-8000-00805f9b34fb_に置き換えました。これは、コンピューターからサービスを検査することで正しいように見えます。医療機器私のサービスがBluetoothServerSocketaccept()メソッドを使用して通信を照会および開始する通信です。

  1. 開発者ページで、通信を試みるアプリケーション間でUUIDが一致する必要があることを読みました。医療機器にUUIDを設定できないので、これが問題になるのか、または医療機器がSPプロファイルを使用しているだけで十分なのか?

  2. サービス名とUUIDが正しく、医療機器が実際に接続をリッスンしているBluetoothサービスに接続しようとすると、AndroidシステムはPINデバイスをペアリングできるように手動で(医療デバイスには事前設定されたPINがあるため)?

  3. Android SDK APIで何も見つかりません。これにより、BluetoothサービスにPINを設定できます(これが失敗した場合))。これは可能ですか?

通常、PINは現在システムによって生成されており、必要なのはユーザーの確認のみです。デバイスが少し古いので、私のシステムではそうではないと思います。

私が上記で説明したことに関連する何かの知識、ヒント、推測を共有したい場合は、私は素晴らしいと思います!

よろしくお願いします、Fredrik


編集:

これで、デバイスがbluegigaボックスとペアになり、正しく通信します。今、私は血圧デバイスが私の電話に接続するために満たす基準を探しています。 Linuxコンピューター(端末では_sdptool search SP_)からbluegigaによって提供されるBluetoothサービスを検査し、これをAndroidで提供するBluetoothサービスと比較できます。これらの値は私が得るものです:

〜$ sdptool search SP

お問い合わせ...

SP on 8C:71:F8:E5:XX:XX。。。

サービス名:1808130054

サービスRecHandle:0x10003

サービスクラスIDリスト:

UUID 128:00001101-0000-1000-8000-00805f9b34fb

プロトコル記述子リスト:

「L2CAP」(0x0100)

「RFCOMM」(0x0003)

チャンネル:13

´

SPの検索:00:07:80:88:XX:XX。。。

サービス名:1808130054

サービスの説明:1808130054

サービスRecHandle:0x10005

サービスクラスIDリスト:

「シリアルポート」(0x1101)

プロトコル記述子リスト:

「L2CAP」(0x0100)

「RFCOMM」(0x0003)

チャンネル:12

言語ベース属性リスト:

code_ISO639:0x656e

enconding:0x6a

base_offset:0x100

最初に見つかったデバイスは電話(mac = 8C:71 ... Google Nexus S)で、2番目のデバイス(mac = 00:07 ...)はbluegigaです。 Androidデバイスにサービスの説明がないことに気づきました。最も重要な違いはサービスクラスIDリストにあると思います。AndroidのUUID 128しかし、bluegigaでこれを記述する完全に異なる形式です。

  1. AndroidでUUID以外の形式のサービスクラスIDを使用して実装することはできますか?

  2. サービス発見DBに登録されているサービスレコードを操作できますか?

  3. ネイティブ開発のc/c ++を使用して、なんとかしてBlueZに直接実装することは可能でしょうか?

/ Fredrik

20
Fredricus

医療機器への名前/リンクを提供できる場合(それが商用機器の場合)、何が起こっているのかについてより多くを推測するためにそのガイドを読むのに役立つかもしれません。ここにいくつかの提案があります:

  1. シリアルポートUUIDに加えて、SPP上の各サービスはカスタム固有のUUIDを持つことができます。たとえば、医療機器は、このカスタム固有のUUIDを使用して、互換性のあるサービスを探すことができます。
    医療機器が現在PCまたは他のアクセスポイントに正常に接続してデータを転送している場合、その機器のSDPレコードを読み取って、SPP UUIDに加えてどの特定のUUIDが使用されているかを確認できます。どれでも、アプリケーションでも同じように使用できます。

  2. 医療機器があなたの電話/アプリケーションを見つけることができない場合、それは発見できないためである可能性があります。 Androidデフォルトでは、デバイスはサーバーであっても検出できません。接続可能であり、検出できません。プログラムで、または設定を介して検出可能にして、医療機器かどうかを確認できますあなたのデバイスを見つけることができます。ここを参照してください- Androidでの検出機能の有効化

  3. PINペアリングの場合、ペアリングされていないデバイスが接続しようとすると、Androidデバイスはペアリングプロセスを開始する必要があります。推奨事項を確認した後で、デバイスを試すことができます。 (1)と(2)、PINデバイスのいずれかがBluetooth 2.1より前の場合、ペアリングが使用されます。新しいデバイスでも、ユーザーの介入/確認が必要な6桁のパスキーが使用されます。ペアリングを可能にするために電話で必要です(これは、ユーザーの介入なしにこれが自動的に行われないようにするための優れたセキュリティポリシーです)、うまくいけば、ペアリングは最初に接続が行われたときにのみ必要となり、後でユーザーを必要としませんその後の接続のための介入。

6
Dennis Mathews