[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 していたときと同じ現象が起こります。)
なぜこのような現象が起こるのでしょうか。
以上の問題があるのですが、解決する方法はあるのでしょうか。
赤外線通信そのものが不安定ということはあるのでしょうか。
アドバイスをいただけないでしょうか。
何回も申し訳ないです。どうかよろしくお願い致します。