Armadilloフォーラム

USB接続の機器へのデータ送信で送信完了を知る方法

shsuga

2021年9月10日 16時14分

以下の構成でシステムを構成しています。
・armadillo440
・USBでプリンタに接続
・usblp を使用してプリンタに印刷
印刷ポートにUSB経由でプリンタに送信していますが、デバイスレベルで相手のプリンタにデータが送信完了したことを検知したい。
理由)印刷ポートに書き込みを完了後に確実に相手プリンタにデータが届いたこと知りたい。

以上、よろしくお願いいたします。

コメント

at_akihito.irie

2021年9月21日 9時46分

入江です。

> 印刷ポートにUSB経由でプリンタに送信していますが、デバイスレベルで相手のプリンタにデータが送信完了したことを検知したい。
> 理由)印刷ポートに書き込みを完了後に確実に相手プリンタにデータが届いたこと知りたい。

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時に転送完了を待っているようですが、こち
らでは不十分でしょうか。

shsuga

2021年9月21日 22時23分

usblpのソースコードまでご確認頂きまして、ありがとうございます。
usblpが転送完了を待っているとの事で安心しましたが、アプリでは、/dev/lp0 に書き込んでいるので、
write しても、パイプに書き込んだ時点でwrite関数から戻って来るのではないでしょうか?