1.5. プログラマのための注意事項

ドライバはスキャナとの通信のために DMA 転送とIRQを使用します。いずれのチャ ネルもソフトウェアで設定できます。(詳しくは logi32.h をご覧下さい) スキャナは1ラインスキャンする度に割り込み要求を発行するので、有効なデータを 得るために busy-wait 処理をする必要はありません。

ドライバは内部に(ダイナミックアロケートの)バッファをキープします。このバッフ ァのデフォルトのサイズは、50 スキャンライン分 (logi32.h を参照)ですが ioctl コールを通して調整可能です。(下記参照) /dev/scan を 使っているプロセスが現在 実行していてもいなくても、スキャナからのデータ転送はバッファがフルになるまで 有効であることに注意して下さい。これは、プロセスが停止したりスワップアウトし ても、バッファスペースがあるのでデータ抜けは無いということを意味します。

ドライバは、一回の read(2) コールで任意のバイト数を 読み込むことができるよう になっていますが、内部バッファは一回の read(2) コールでバッファにフィットし た以上のバイト数を要求した場合はうまくいかないという点に注意して下さい。 通常、b/w モードでスキャンする場合は一回に1スキャンライン分を読み込み、 ハーフトーンモードの場合はたぶん数スキャンライン分を読み込むでしょう。 read(2) コールがシグナルによって割り込まれると、read(2) は読み込んだバイト数 を返します。私はこれが EINTR の戻りの `標準的な' 振る舞いとは異なることを 知っていますが、スキャナではこの方法が理にかなっているのです。(別の方法では 内部バッファの既存のデータをいくらか失ってしまう) スキャナデバイス上で select(2) をすると、バッファの中に最低でも1スキャンラ インのデータがあれば、デバイスは `ready' として認識されます。しかしこれも 変更できます。(下記参照)

サポートされた ioctl 機能のために、 README.ioctl をお読み下さい。しかし、 ioctl インタフェースはまだ開発中であり、従って変更がありそうです。