shsuga
2021年9月10日 16時14分
以下の構成でシステムを構成しています。
・armadillo440
・USBでプリンタに接続
・usblp を使用してプリンタに印刷
印刷ポートにUSB経由でプリンタに送信していますが、デバイスレベルで相手のプリンタにデータが送信完了したことを検知したい。
理由)印刷ポートに書き込みを完了後に確実に相手プリンタにデータが届いたこと知りたい。
以上、よろしくお願いいたします。
コメント
shsuga
at_shinya.koga
アットマークテクノの古賀です。
shsugaさん(2021年9月21日 22時23分):
>usblpのソースコードまでご確認頂きまして、ありがとうございます。
>usblpが転送完了を待っているとの事で安心しましたが、アプリでは、/dev/lp0 に書き込んでいるので、
>write しても、パイプに書き込んだ時点でwrite関数から戻って来るのではないでしょうか?
入江(2021年9月21日 9時46分):
>linux-3.14-at/drivers/usb/class/usblp.cを見ると、
>
static ssize_t usblp_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos) { :snip /* * Step 2: Wait for transfer to end, collect results. */ rv = usblp_wwait(usblp, !!(file->f_flags&O_NONBLOCK));
>
>となっており、元々usblpのwrite時に転送完了を待っているようですが、こち
>らでは不十分でしょうか。
上記 usblp_write() は、/dev/lpx の write() ハンドラ関数です。
https://github.com/atmark-techno/linux-3.14-at/blob/0bbb482ec32a14812b2…
この関数が、上記の通り、渡されたデータを送出する while ループの中で、USB パイプへの書込みと書込み完了待ちを行っていますので、/dev/lpx への write() が終わった時点で、USB パイプからデータ送出が全て終わっていると思います。
https://github.com/atmark-techno/linux-3.14-at/blob/master/drivers/usb/…
shsuga
at_akihito.irie
2021年9月21日 9時46分
入江です。
> 印刷ポートにUSB経由でプリンタに送信していますが、デバイスレベルで相手のプリンタにデータが送信完了したことを検知したい。
> 理由)印刷ポートに書き込みを完了後に確実に相手プリンタにデータが届いたこと知りたい。
linux-3.14-at/drivers/usb/class/usblp.cを見ると、
となっており、元々usblpのwrite時に転送完了を待っているようですが、こち
らでは不十分でしょうか。