Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

【自習メモ】rfcommは結局何者なのかという話

以前、RaspberryPiとWindowsPCをBluetooth越しに通信させる際に登場した、"/dev/rfcomm0"という輩。
ttyUSB等々、デバイスと通信するための口なのは察しが付くものの、うごきがよく分からんので調べなおしてみました。

実際のところ

"/dev/rfcomm*"について

予想通り、仮想シリアルポートとしてBluetoothとシリアルで通信できる仕組み。
”Radio Frequency Communication”いうのだから他の無線でもできるのかと思ったら、
Bluetoothのスタックに乗っかったモンらしく、そういう動きはしない模様。
いや、なんかBluetoothを偽装すればできるのかも知れんけど……。

で、そのBluetoothではOSI参照モデルでいう第二層(データリンク層)であるL2CAPの上で動いているそうで、
他に同じ層で働いてる仲間はデバイスの発見に使う「Service Discovery Protocol」、マウスやキーボードなんかで使う「hid-control」、イヤホンの音なんかを飛ばす「AVDTP」、イヤホンなら音量変更など制御につかう「AVDTP」などいるそう。

根性入れれば、PICのような石にすらRFCOMMの口を実装することは可能らしい。
秋月とかで売ってるBluetoothシリアル変換機なんかは、多分そういうように実装されてるのでは?
ノルディック社の石みたいに最初からBluetooth対応してるやつは、その辺り抽象化してそうだし。
余程コストカットをせまられない限り、やる必要は無さそう……。

rfcommコマンドについて

RFCOMMをちゃんと実行するための(RaspberryPiなら)Debian側のコマンド。
通信可能なデバイスのサーチだとか、接続済み装置のリスト化などを行う。

蛇足

赤外線通信版のIrCOMMなんて子もいるらしい。
IrCOMM ‐ 通信用語の基礎知識