[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:28417] Re: 赤外線通信について



お世話になっております。村川です。
野首さん、度々お返事いただき、有難うございます。

>   む、/dev/ttyS0 を使っているのですか? ちょっと説明が足りなかったかも
> しれません。
>
>   IrCOMM という protocol によって、仮想的な serial interface が提供さ
> れるのですが、その device 名が Linux では /dev/ircommnew0 になります。
> いいかげんに図示すると、以下のような感じです。
>
> ドングル -> /dev/ttyS0 -> [Linux IrDA driver] -> /dev/ircommnew0
>
> >> irattach が動いているときに、/dev/ttyS0 をオープン
> >> することは、ドングルをオープンしていることには
> >> ならないのでしょうか。
>
>   なります。/dev/ttyS0 は IrDA driver が protocol を解釈するのに使って
> いるので、これを直接利用してはいけません。/dev/ircommnew0 を使うように
> して下さい。

有難うございます。
/dev/ircommnew0 をオープンすることにより、無事受信することが
できました。
しかし、いろいろ動作テストしたのですが不安定なようです。
以下4つの問題点があります。

1.受信が不安定
 現在、pocket PC から 3 バイト送り、
 Linux 側で受信した 3 バイトを画面に出力するようにしています。
 それで、
 例えば pocket PC から Linux に "G01" という 3バイトを
 送信すると、
 1度目の送信では何も表示されず(受信していない?)、
 2度目の送信で Linuxが"1G0" を受信し(ずれている?)、
 3度目以降の送信で "G01" を受信します(正常)。
 1度目、2度目の送信では、うまく受信できていないようです。
 何度やっても同じ結果になります。
 pocket PC、Linux どちらも通信速度は38400です。
 オープン後同期を取るなどの処理が必要なのでしょうか。

2.送信できていない?
 Linuxがデータを受信した後、今度はLinux側から
 pocket PC にデータを送信しているのですが、送信できて
 いないようです。
 /dev/ircommnew0 を普通に open して、write するだけでOK
 なのでしょうか?同期が取れていないのでしょうか。
 (これはpocket PC 側の受信方法がおかしいのかもしれませんが)

3.1度プログラムを動かして終了後、2度目の実行では通信することができない。
 送受信用プログラムを実行し、一旦強制終了し再度実行して
 赤外線通信を行おうとすると、通信することができなくなります。
 (この時、irdadump は反応します。)
 ircomm 、ircomm-tty の2つのモジュールを1度 rmmod で削除して
 再度送受信プログラムを実行すると、通信可能となります。
 プログラム終了時に何か適切な処理が必要なのでしょうか。

4.read で待つことができなくなる。
 通信中に、pocketPC側のアプリケーションを終了すると
 なぜか Linux側のプログラムが、readで待っていることができ
 なくなります。
 (最初/dev/ttyS0を open していたときと同じ現象が起こります。)
 なぜこのような現象が起こるのでしょうか。

以上の問題があるのですが、解決する方法はあるのでしょうか。
赤外線通信そのものが不安定ということはあるのでしょうか。
アドバイスをいただけないでしょうか。
何回も申し訳ないです。どうかよろしくお願い致します。