スポンサーリンク

ASC(4) FreeBSD/i386 カーネルインタフェースマニュアル 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 です。

FreeBSD January 19, 1995 FreeBSD

スポンサーリンク