2.1. ソフトウェア

irda-utils パッケージで提供されているコマンドは IrDA の接続を行うための基本となるツール群です。その他のツール (e-Squirt、IrNET など) はオプションです。 バージョン 0.9.15 からマニュアルページが収録されるようになっていますが、 TuxMobil - Software に置かれた私の man ページが最新版です。

2.1.1. IrDA ユーティリティ (irda-utils)

2.1.1.3. Linux/IrDA-Utils の各プログラム

2.1.1.3.2. irdadump

赤外線通信で送受された全フレームを表示するためのプログラムです。

IrDA デバイスドライバをネットワークデバイスドライバとして実装することの利点の一つには、デバイス (あるいはパケットタイプ) に対してプロトコル解析ツール (sniffer) を接続できることがあげられます。 このおかげで、 tcpdump 相当の irdadump のような実に手軽なユーティリティが使えるようになり、 デバッグが断然容易になります。 Linux-2.2 では BPF (Berkeley Packet Filter) が実装されているので、見たいフレームだけをフィルタすることができます。

注意: irdadump コマンドを使う際には、通常 root になっている必要があります。CONFIG_PACKET をカーネルで有効にしておく必要もあります。 モジュールとしてコンパイルしている場合、モジュールを手動でロードする必要があるかもしれません。 irdadump はライブラリ化もされており、 GUI アプリケーションから使うこともできます。

以下に Linux と Palm III との間の短いセッションの出力例を示します。 このログではローカルの irobex レイヤが応答しないため、Palm III が disc フレームを送っています。

dagbnb /home/dagb/linux/irda-utils/irdadump/ # ./irdadump

20:18:15.305711 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=0
20:18:15.385597 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=1
20:18:15.465568 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=2
20:18:15.545953 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=3
20:18:15.625574 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=4
20:18:15.705575 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=5
20:18:15.785601 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=255,info=Linux
20:18:18.075526 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=0
20:18:18.225498 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=1
20:18:18.375495 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=2
20:18:18.526355 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=3
20:18:18.675614 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=4
20:18:18.676364 xid:rsp:saddr=0x05c589 > daddr=0xb50c14b,S=6,s=4
20:18:18.765506 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=5
20:18:18.927221 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=255,info=Palm III
20:18:18.975796 snrm:cmd,ca=0xfe,pf=1
20:18:18.976534 ua:rsp,ca=0x58,pf=1
20:18:18.977145 ua:rsp,ca=0x58,pf=1
20:18:19.585627 rr:rsp,ca=0x58,nr=0,pf=1
20:18:19.585810 rr:rsp,ca=0x58,nr=0,pf=1
20:18:19.606413 i:cmd,ca=0x58,nr=0,ns=0,pf=1
20:18:19.606582 rr:rsp,ca=0x58,nr=1,pf=1
20:18:19.627708 rr:cmd,ca=0x58,nr=0,pf=1
20:18:19.627871 i:rsp,ca=0x58,nr=1,ns=0,pf=1
20:18:19.650571 disc:cmd,ca=0x58,pf=1
20:18:19.650736 ua:rsp,ca=0x58,pf=1
20:18:21.165524 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=0
20:18:21.315608 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=1
20:18:21.315793 xid:rsp:saddr=0x05c589 > daddr=0xb50c14b,S=6,s=1
20:18:21.395499 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=2
20:18:21.545516 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=3
20:18:21.695500 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=4
20:18:21.845840 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=5
20:18:22.007222 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=255,info=Palm
III
20:18:22.056143 snrm:cmd,ca=0xfe,pf=1
20:18:22.056310 ua:rsp,ca=0xc8,pf=1
20:18:22.056381 ua:rsp,ca=0xc8,pf=1

37 pacckets received by filter

2.1.1.3.3. irdaping

IrDA テストフレームを用いてリモートデバイスに ping を試みることができます。 すべてのデバイスがテストフレームをサポートしているわけではありません。 これは ping (8) と同様のプログラムです。 このプログラムは、IrDA テストフレーム (およびフレーム番号とフレームを送った時間を含むユーザデータを加えています) を送ります。 -s オプションを用いてフレームのサイズを変更することもできます。 引数として IP アドレスではなく、IrDA デバイスアドレスを指定する必要があります。 このアドレスを得るには、irdadump を使う必要があります。

以下に出力例を示します (ACTiSYS IR-100M へ ping しています)。

dagbnb /home/dagb/linux/irda-utils/irdaping/ # ./irdaping 0xf7be8388
IrDA ping (0xf7be8388): 32 bytes
32 bytes from 0xf7be8388: irda_seq=0 time=102.466003 ms.
32 bytes from 0xf7be8388: irda_seq=1 time=102.202003 ms.
32 bytes from 0xf7be8388: irda_seq=2 time=102.170998 ms.
32 bytes from 0xf7be8388: irda_seq=3 time=101.633003 ms.

4 packets received by filter

Christian Gennerat さんのメールから: 私は、パラメータを使っていない以下の alias を $HOME/.bashrc 中に定義して使っています。 alias irping="irdaping \`grep daddr /proc/net/irda/discovery|sed s/.*daddr://\`" これはクライアントが一つだけ見つかる場合には良好に動作します。

2.1.2. openobex

OpenOBEX プロジェクトで最終的に実現しようとしているのは、Object Exchange (OBEX) プロトコルのオープンソースの実装です。OBEX はセッションプロトコルで、バイナリの HTTP プロトコルとでも言うべきものです。 典型的なアプリケーションとして、PalmOS の Beam 機能が挙げられます。

2.1.3. e-squirt

e-Squirt は IrDA メディア上で URL を送るための単純なプロトコルです。 これにより CoolTown が有効なデバイスとの間でやりとりができます。

2.1.4. Linux-IrDA 用 IrNET

IrNET は 2 つの IrDA ピア間での TCP/IP 通信を効率よく行なえるようにするプロトコルです。 これは IrTTP ソケットで PPP パケットを受け渡しする軽いレイヤです。 効率を上げるため PPP を同期モードで利用しており、柔軟性に富み様々な機能を提供しています。 IrNET の主部はカーネル 2.4.x に含まれており、これと組み合わせて通信を行うユーザスペースデーモンは web ページから提供されています。

2.1.5. Java - IrDA インターフェース

この Java Infrared Socket API は Java を使って Linux マシンと赤外線デバイスとの通信を行う手段を提供します。 これを用いることで Java のアプリケーション開発者は、赤外線通信を用いたアプリケーションをより容易に開発できます。 API は java.net.Socket API によく似たもので、Linux IrDA スタックを用いて実装されています。 コネクション指向ストリーム (IrSocket と IrServerSocket) と、 コネクションレスストリーム (UltraSocket と UltraPacket) の両方がサポートされています。