2.1. ソフトウェア

irda-utils パッケージで提供されているコマンドは IrDA の接続を行うための基本となるツール群です。その他のツール (e-Squirt、IrNET など) はオプションです。 プログラムにはマニュアルページがまだありませんが、代わりに MobiliX - Software に置かれた私の man ページを使うことができます。

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

2.1.1.1. コンパイル

  • Linux/IrDA プロジェクトの最新の irda-utils のソースを使ってください。 また、glibc ライブラリの使用をすすめます。現在のバージョンは ldd --version で知ることができます。 古い libc5 の使用はコンパイルエラーを引き起こしがちです。

  • tar xvzf irda-utils<VERSION> としてパッケージを展開してください。/usr/src ディレクトリ内でやることをすすめます。

  • make clean を実行してください (最初のコンパイルの際には必要ありません)。

  • make all を実行してバイナリを作成します。

  • make install を行います。 これで全コマンドが所定の位置に置かれ、/etc/irda に設定ファイルがインストールされます。

  • 時として IrDA スタックや各種 IrDA パッケージをコンパイルする際にコンパイラが IRLMP_HINT_MASK_SET や IRDAPROTO_ULTRA が定義されていないと言うエラーを吐く場合があります。 これはディストリビューションでのカーネルヘッダの扱いの不整合によるもので、もし 2.4.x カーネルソースがあるならば修正は簡単です。単に以下のようにしてカーネルの irda.h を include ディレクトリにコピーしてください。

    cp /usr/src/linux/include/linux/irda.h /usr/include/linux

2.1.1.2. コンパイル済みパッケージ

野首 貴嗣さんにより irda-utils の Debian パッケージが提供されています。 これは Debian 2.2 (potato) リリースに収録されています。Mandrake では 6.1 以降、RedHat では 6.1 以降、SuSE では 6.1 以降に irda-utils の RPM パッケージが収録されています。 コンパイル済みパッケージの問題の一部は、カーネルバージョンと使っているパッケージバージョンとの間の非互換性が原因となっているためかもしれません。

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

2.1.1.3.1. irattach

irattach はパラメータにモジュール群を指定します。 これは特定の FIR ドライバ (例えば irattach toshoboe) であることも、ircomm である (このあと "irda0" のエイリアスから /etc/modules.conf 中に記載されたモジュールをロードします) こともあります。

もしあなたがツイていて、FIR チップセットがサポートされている場合、irattach を使う必要はなくなりました。単にドライバを modprobe するだけです。

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.1.3.4. irkbd

Tekram IR-660 赤外線ドッキングステーションで使用されているマウスとキーボードプロトコルをサポートした実装です。

2.1.1.3.5. findchip

あなたのマシンで使っている FIR IrDA チップセットが何であるか調べます。 findchip -v として調べてください。 これ以外のチップセットを検出する方法については以下を参照下さい。

2.1.1.3.6. irsockets

IrDA ソケットを使うプログラムを集めたものです。

2.1.1.3.7. irpsion5

Psion PDA との間でファイルを遣り取りするファイル転送プログラムです。

2.1.1.3.8. /etc/irda

設定ファイルで、SIR ドライバのシリアルポート情報を含みます。 最初の試行の際に SIR IrDA ドライバを設定する必要があるでしょう。

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 ピア間で 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) のどちらもサポートされています。