低レベルドライバには、SIR、ドングルと FIR の三つのカテゴリがあります。 正しいドライバが選択されているなら、以降の各節で記載されているメッセージが出力されます。
どのシリアルポートを IR デバイスで使っているかを調べてください。これには dmesg の出力を見てみるのも一案です。 シリアルサポートがモジュール化されている場合、まず modprobe serial を実行してください。 そして以下のようなエントリを探します。
Serial driver version 4.25 with no serial options enabled ttyS00 at 0x03f8 (irq = 4) is a 16550A #first serial port /dev/ttyS0 ttyS01 at 0x3000 (irq = 10) is a 16550A #e.g. infrared port ttyS02 at 0x0300 (irq = 3) is a 16550A #e.g. PCMCIA modem port |
こうならないようならば、BIOS で赤外線サポートが有効になっていないか、カーネルがあなたの赤外線デバイスの SIR モードを検出できていません。 現時点で二機種のラップトップでこの現象が起きるのが分かっています。 HP の OmniBook 800 と東芝の Libretto モデルです。 私は PnP サポートが IR ポートの検出に影響するかどうかは知りません。 上手くいかないのはこのあたりが怪しいという場合は、試してみて結果を私まで連絡お願いします。 また SIR が動かなくとも FIR が使えるかもしれません。
場合によっては、 setserial /dev/ttyS<0-2> port 0xNNNN irq M として赤外線シリアルポートの値を設定する必要があるかもしれません。 特に、赤外線ポートが独立したシリアルポートの場合、これが必要になるケースが多いようです。 通常この値を変更する必要はないでしょう。これ以上の情報は、以下の FAQ の項を参考にしてください。
kerneld や kmod を使っていない場合、modprobe irda を使って irda モジュールを読み込んでください。
lsmod を実行してください。irda と irtty モジュールが表示されるはずです。
/var/log/messages にはこの時点で "Serial connection established" のメッセージが出力されているはずです。
irattach を実行して、他の IR デバイスを検出するため少々 (例えば7秒ほど) 待ってください。 その後、/var/log/messages に書き出されたメッセージを見てみてください。 以下のような出力が得られているはずです (Linux/IrDA に無関係な行を多少削除しています)。
Jan 2 12:57:26 japh kernel: ttyS00 at 0x03f8 (irq = 4) is a 16550A Jan 2 12:57:26 japh kernel: ttyS02 at 0x03e8 (irq = 4) is a 16550A Jan 2 12:57:26 japh kernel: Linux Support for the IrDA (tm) protocols (Dag Bra ttli) Jan 2 12:59:09 japh syslog: executing: 'echo 1 > /proc/sys/net/irda/discovery' Jan 2 12:59:09 japh syslog: Setting discovery to 1 exited with status 1 Jan 2 12:59:09 japh syslog: + 0.1 Fri Jul 25 11:45:26 1997 Dag Brattli Jan 2 12:59:09 japh syslog: + 0.1 Fri Jul 25 11:45:26 1997 Dag Brattli Jan 2 12:59:09 japh syslog: Serial connection established. Jan 2 12:59:09 japh kernel: IrDA irda_device irda0 registered. Jan 2 13:01:22 japh syslog: executing: './drivers start ' Jan 2 13:01:22 japh syslog: Serial connection established. Jan 2 13:01:42 japh syslogd: Printing partial message Jan 2 13:01:42 japh 0.1 Fri Jul 25 11:45:26 1997 Dag Brattli Jan 2 13:02:49 japh kernel: IrDA Discovered: japh Jan 2 13:02:49 japh kernel: Services: Computer |
更に詳しい情報は cat /proc/net/irda/discovery で得られます。
現在サポートされているドングルは、Extended Systems 社の ESI-9680 JetEye、Tekram 社の IRmate 210B、ACTiSYS 社の IR220L and 220L+、 Greenwich 社の GIrBIL ドングルです。
Dag Brattli さんによると (原注: 私が多少修正していますが)
「ドングルを使うには以下のようにしてください。
modprobe tekram # or esi or actisys irattach -d tekram # or -d esi or -d actisys |
modprobe は /etc/modules.conf が正しければ必要ありません。ご覧のとおり、irattach には -d オプションを付けなければいけません。 これは同時に2つのシリアルポートに別々のドングルがついている場合があり、そのような場合には tty でバインドしたいドングルがどちらなのかを知らせなければならないためです。 もし2つのシリアルポートで2つのドングルを使っているなら、以下のようにしてみて下さい。
modprobe tekram modprobe esi irattach /dev/ttyS0 -d esi & irattach /dev/ttyS1 -d tekram & |
追記: 以下の二つのドングルを切り変えて使おうとしたことがないので、 その場合スタックがどういう風に振る舞うか実のところは分かりません :-) …… また、現在のところ ACTiSYS 社の新ドングル 220L+ を持っていないので、テストもできないのです。 新ドングルは、通信速度として 38400bps を追加でサポートしていますので、 irattach を使ってカーネルに使っているドングルの違い (と使用できる QoS) を指定してやる必要があります。
irattach /dev/ttyS0 -d actisys # for the 220L dongle irattach /dev/ttyS0 -d actisys+ # for the 220L+ dongle |
現在のドングルサポートの実装では、内部に個々のドングルに対応した状態を持ってはいないので、ACTiSYS のいずれのドングル (220L と 220L+) も二個を同時に (2つのシリアルポートに接続して) 使うことはできません。そうする必要がある方がおられるなら私 (Dag Brattli) まで連絡下さい。この件を再考してみますので」
注記: 赤外線モデム (Swissmod 56Ki。Telelink AG 製) をラップトップ (Window$ 95 でしか動作しないような、標準でない IrDA ハードウェア付きのもの) に接続して使う際には、動作させるために BIOS から赤外線サポートを削除する必要がありました。
Dag Brattli さんによると「現在 irtty に代えて irport が使えます。また、irtty コマンドからドングル関係の処理を全部 irda_device へ移しましたので、irport にドングルを接続できるようになっています。 但し、小さなユーザ空間ユーティリティ dongle_attach を使って特定のドライバのハードウェアとして指定する必要があります。 また、irattach は以前と同じように動作しますので、 irtty にドングルを接続する際に新旧の違いに気がつくことはないでしょう (ドングルへの ioctl は irda_device に転送するようにしました)。irport はソフトウェア割り込みレベルを一段省略できること、それと強制的に半二重動作になるため、エコーキャンセレーション機能のないドングル (HP-4000 の girbil ドングルなど) でエコーに煩わされることがないこと、の2つの利点があるため役に立つかもしれません。 irport を使うためには modprobe で modprobe irport io=0x3f8 irq=4 (値はあなたの環境に合わせてください) 等としてパラメータを与えてやる必要があります。 このパラメータは /etc/conf.modules に options irport io=0x3f8 irq=4 のように書くことで明示的に与えることもできますが、その場合 depmod -a を忘れずに実行して、単に modprobe ではなく modprobe irport を実行してください」
Alvin Loh さんによると「ESI 9680C のユーザは parallax と ESI の各信号処理方式のどちらも使うことができます。 つまり ESI 9680C を動かすのに Parallax のドライバを使うことができます」
ACTiSYS IR2000 ドングルのサポートは pc87108 サポート中に組み込まれていますので、カーネルに組み込むか modprobe pc87108 としてモジュールを組み込むか、/etc/irda/drivers に modprobe pc87108 を追加して組み込むかです (だと思います)。
James さんからハードウェア設定に関する説明を受け取りました。 「二種類のハードウェアがあります。5pin の一列のヘッダを使ったものと、18pin 二列ヘッダの端を使った 6pin 二列のヘッダで IrDA に接続するものです。 基本的にはどの IrDA 互換なトランシーバも動作します (製造中止になった古い IRM3001 を一山持っています) が、5V と 0V 間にコンデンサ (1uF 位のタンタルを使ってください [1]) を接続して、その他の信号 (RX->RX、TX->TX、5V->5V および 0V-0V) を接続してください。 ハンダ付けをしたくないということなら、ケースの穴にあう 5pin の コネクタつきの IR モジュールを売っているメーカはたくさんあります」
IrDA 標準では、三種類の転送速度が定義されています。
SIR = 標準 IrDA, 115kbps までの速度の IrDA です
MIR = 中速 IrDA,
FIR = 高速 IrDA (4Mbps),
VFIR = 超高速 IrDA(16Mbps) 次の標準になると思います
115,200bps (SIR) までは、多くの (多分すべての) 赤外線コントローラは、シリアルポートとして (カーネルからは) 動作し、RZI (Return to zero になるよう反転する) 変調を用いています。 すべての赤外線コントローラが 4Mbps(FIR) をサポートしているわけではありませんが、4Mbps までは 4PPM (4 パルス符号化) 変調方式を用いています。 現在二種類の FIR チップがサポートされています。ナショナルセミコンダクター社の NS PC87108 チップ (IBM Thinkpad 560X で使用) と、Winbond 社の W83977AF (IR) FIR チップ (Corel の Netwinder PC で使用) です。 対応するモジュールを読み込むことで FIR サービスをスタートすることができます。 Linux/IrDA はモジュール読み込みの時点でハードウェアを調べます。 他にもドライバの開発が行われています。
というわけで、どの速度で使いたいのかはっきりさせる必要があります。 SIR を使った場合、大体 10 kByte/s 程度の速度が得られます。FIR (4Mbps) なら、運が良ければ 300 Kbyte/s 以上まで出せます。
[1] | 訳注: 2002 年現在ではむしろ 1uF 程度の積層セラミックのほうが、大きさ、入手、安全性のどれをとっても断然お勧めです。 |