Bluezで非推奨になったrfcommバイナリの代替


10

bluez 5.44以降、bluez-utils(hcitoolなど)に含まれているrfcommバイナリは非推奨と見なされ、AURが提供するbluez-utils-compatパッケージにのみ含まれるようになりました。

rfcommカーネルモジュールを使用してBluetoothデバイスをシリアルポートにバインドするための同様のコマンドラインアプリケーションはありますか、または今後はPyBluezまたは同様のライブラリを使用する必要がありますか?

後者に該当する場合、どのPython 3ライブラリを推奨しますか?

そして誰かが知っているなら、なぜ多くのbluez-utilsが突然廃止されたと考えられるのか教えてください。それについては何も見つかりませんでした。

ArchWikiは、新しい使用してRFCOMM機能を実装することをお勧めしますD-バスプロファイル1 APIを

回答:


2

私は最近、Bluezの現在のD-Bus APIを使用して失われた機能を実装することを目的としたbluez-toolsプロジェクトを見つけました。

Bluez-toolsは、コミュニティリポジトリからArchLinuxで利用できます。私はこれをテストしていませんが、githubページにはまだベータ版であると記載されています。しかし、ドキュメントによると、bt-serialは古いbluez rfcommを置き換えることができ、bt-adapter + bt-agent + bt-deviceはhcitoolの機能を備えているはずです。

編集:問題リストと最後のコミットを見ると、bluez-toolsはアクティブに維持されていないようです。


1

別の可能な解決策を見つけました。私は誰かのgitハブリポジトリを掘り下げてこれを見つけました。これは、ソケットモジュールに組み込まれたpython3を使用します。

前提条件:

  1. <アダプタアドレス>のアドレスに動作中のアダプタがあります。
  2. <device address>にターゲットBluetoothデバイスがあります。
  3. デバイスは固定されています。

つまり、rfcommと同じポイントを使用できます。


$python3
>>> import socket
>>> sock = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
>>> adapter = '00:11:22:33:44:55' #<adapter address>
>>> device = '55:44:33:22:11:00' #<device address>
>>> sock.bind((adapter, 1))
>>> sock.connect((device, 1))
## If not pinned it will ask you. You can use/adapt the bluez simple-agent for headless pinning
>>> sock.send(b'hello\n')
>>> sock.recv(100)
>>> sock.close()

PythonがBluetoothシリアル通信をネイティブでサポートしていることを知っておくと便利です。この比較的古い質問に答えてくれてありがとう。
eike 2018

0

この問題について注意したい:

  1. その本githubのプロジェクトは、 RFCOMMの機能の一部が含まれています。(bluezテストファイルに基づく)。
  2. bluezプロジェクト自体にはまだrfcomm.cファイルが含まれており、次のコマンドで簡単にコンパイルできます。

    gcc -lbluetooth rfcomm.c -orfcomm -DVERSION = xyz

... 1つのファイルだけで、bluezプロジェクト全体をコンパイルする必要はありません。ここで、xyzはダウンロードしたbluez tar.xzソースコードのバージョンです(5.46は現在)。ダウンロードする前に、まず自分自身bluetoothd -vを確認し、一致するソースをダウンロードする必要があります。bluez-libsはコンパイルが成功するための唯一の依存関係です。

armv7(raspberry 2)にはrfcommが必要でしたが、rfcomm用のaurパッケージはありません。これは唯一の方法でしたが、うまく機能します。

それでも、rfcommが非推奨になり、適切な代替手段がないため、なぜシリアルポートであったためBluetoothと通信するのかが不明です。あなたもpythonエキスパートとDBUSエキスパートであるため...(上記のプロジェクトの所有者はおそらくそうです)...このように提供されたのはfifoだけで、/ dev /の実際のキャラクターデバイスではありません...他のすべてのプログラム(arduinoなど) )表示して操作できます。


2
1.プロジェクトページには、「これらのツールを使用する古いコードの再実装を避けるために」と記載されています。これは、新しいプロジェクトにbluezを使用する際に別のアプローチに従うことを推奨することを意味します。2. rfcommを自分でコンパイルする方法はたくさんあります。私が探しているのは、その廃止の理由とサポートされている代替方法です。
eike
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.