ASC(4)

名称
asc - GI1904 ベースのハンドスキャナ用デバイスドライバ

書式
device asc0 at isa? port "IO_ASC1" tty drq 3 irq 10

解説
キャラクタ型デバイスドライバ asc は、現在のところ、 GI1904 ベースのハンドスキャナ (例えば Trust Amiscan Grey など) を扱います。 このデバイスドライバは、DMA と割り込みを使用します。50 ラインまでの スキャン入力データをドライバ中でバッファリングします。

このデバイスは、4 つの異なる解像度 (100, 200, 300, 400 ドット/インチ) で動作させることができます。最上位ビットが左側に来る単純なビットマップ を生成します。このドライバは、別途、単純な ポータブルビットマップファイル形式 pbm(5) を生成させることもできます。 これにより、ほとんどのグラフィックパッケージで、このスキャン結果を 容易に処理することが出来ます。

出力ビットマップの幅は、解像度の値により決まる固定の値です。しかし、 pbm(5) モードの場合、ビットマップの高さを指定する必要があります。これは、 ドライバがいつ「ファイルの終端」に達するかを知っておく必要がある からです。デフォルトでは、正方形のイメージを生成します。つまり、幅と 高さが等しいとされます。この機能により、 cat(1) を用いてスキャナの出力を直接 pbm(5) ファイルにコピーすることができます。 このドライバを raw モードで使用する場合、 dd(1) コマンドを使用することにより、この効果と似た効果を得ることもできます。

IOCTL
asc に適用可能な ioctl(2) コマンドは次のとおりです。 sasc(1) により、ユーザレベルでこれらのコマンドを使用することができます。

ASC_GRES
    (int) 現在の解像度を、ドット/インチ (dpi) 単位で返します。

ASC_GWIDTH
    (int) 現在のビットマップ幅をピクセル単位で返します。

ASC_SHEIGHT
    (int) pbm(5) モードのビットマップの高さを設定します。 実際のところ、これは、最初の読み込み処理以後スキャン可能なラインの累積数 に対する制限です。この制限に到達すると、読み込みは 0 を返します。 しかし、デバイスが動作を停止するのは、オープンされたファイル記述子がすべて クローズされたときに限ります。

ASC_GHEIGHT
    (int) 現在のビットマップの高さを返します。

ASC_SBLEN
    (int) DMA 転送を行なう際に内部的に使用するバッファの長さを指定します。 バッファの長さはビットマップのライン数で指定します。バッファサイズの 制限が (現在のところ) 0x3000 バイトであるため、指定可能なライン最大数は ラインあたりの幅により変わります。 指定した長さがこの制限を越える場合、 ENOMEM エラーが返されます。

ASC_GBLEN
    (int) 現在のバッファの長さをライン数単位で返します。

ASC_SBTIME
    (int) バッファ 1 つへの読み込み完了までのタイムアウトを指定します。 ハンディスキャナは人間とコンピュータ間のインタフェースであるため、 普通は、タイムアウト値はフラットスキャナよりも大きくしておく必要が あります。デフォルトは 15 秒です。タイムアウトに到達すると、読み込み処理は EBUSY エラーで失敗します。 各バッファから読み出されるごとにタイムアウトタイマが新たに開始されます。 よって、タイマ値を減らすことにより、より長いイメージをより速くスキャン できるようになるわけではありません。

ASC_GBTIME
    (int) 現在のバッファタイムアウト値を返します。

ASC_SBTIME を除き、パラメータを変更する ioctl() リクエストのすべては、現在進行中のスキャン処理に影響しません。ユーザは デバイスをクローズし、再びオープンして、新しい設定が効力をあらわすよう にする必要があります。結局のところ、デバイスのオープンクローズにより、 パラメータの設定がリセットされることは ありません。

同様に、値を読み込むリクエストは、現在進行中のスキャン処理で用いられて いる値を返しません。スキャン処理中に必要な値は、スキャン開始時に保存され、 ioctl() リクエストではアクセスできないようになっています。

しかし、 ASC_SBTIME の値は、現在進行中のスキャン処理に即座に影響を及ぼします。これにより、 例えば、ユーザがスキャンを開始するまではタイムアウトに大きな値を設定し、 開始後は小さな値を設定することで、ユーザのスキャン中止に即座に反応する ようにできます。

pbm(5) と raw モードの選択は、マイナ番号により行なわれます。 ioctl() リクエストでは行なえません。raw モードでは、指定されたビットマップの 高さは効果をあらわしません。

関連ファイル
/dev/asc0
    raw 出力用のデバイスノード。
/dev/asc0d
    raw 出力用のデバイスノード。 ASCDEBUG オプションをカーネル設定ファイルで指定した場合、デバッグメッセージが 出力されます。
/dev/asc0p
    pbm(5) ファイル形式出力用のデバイスノード。
/dev/asc0pd
    pbm(5) ファイル形式出力用かつデバッグモードのデバイスノード。

関連項目
sasc(1), pbm(5)

バグ
ioctl のサポートがまだ動作していません。

作者
asc ドライバは、 Luigi Rizzo が書きました。

歴史
asc ドライバが最初に現れたのは FreeBSD 2.1 です。