GSC(4) FreeBSD/i386 カーネルインタフェースマニュアル GSC(4)
名称
gsc − ハンディスキャナ用デバイスドライバ |
書式
#include <machine/gsc.h> |
マイナ番号ビット: uu d g p ... |
uu
ユニット gsc0 .. gsc3 解説 |
gsc キャラクタデバイスドライバは、今のところ Genius GS-4500 ハンディス キャナのみを扱っています。このドライバはハードウェアが irq を使用して動作 可能であっても、完全に dma 方式で制御を行ないます。私には割り込み駆動型の デバイスドライバを書くのに十分なドキュメントも経験もありません。 デバイスは、次の 4 つの異なった 解像度で動作可能です: 100, 200, 300, 400dpi。デバイスは最上位のビットが左にくるシンプルなビットマップを生成し ます。ドライバは Jef Poskanzer による、よく知られていて適度にシンプルな ポータブルビットマップファイル形式 pbm(5) で出力することもできます。した がってスキャンの結果はその辺にあるどのようなグラフィックパッケージ (一部 の名前を挙げるなら xpaint(1), xv(1), xli(1) など) で簡単に処理することが できます。 raw モードでは、スキャナは白い紙の上の黒い点を検出するため、 セットされたビットは黒いピクセルを意味します。逆に、pnm フォーマットはビ デオ画面の電子ビームの光度を記述するため、 pbm モードにおいては、セットさ れたビットは白いピクセルを意味します。 出力されたビットマップの 幅は与えられた解像度値によって固定されます。しか しながら pnm モードでは、ドライバはいつ ’ファイルの終わり’ が検出されたか を知っているはずなので、ビットマップの 高さは自動で設定されます。この機能 により、 cat を用いてスキャナ出力を pbm ファイルに直接コピーすることがで きます。もちろんドライバを raw モードで使用し dd(1) を用いて似た効果を得 ることはできます。 グレーマップ出力モードはまだドライバに実装されていません。外部プログラム がこの作業をよりうまくできるかどうかは怪しいですが、その結果カーネルの大 きさが減るかどうかは疑問に思っています。ただたとえそうであったとしても、 中間調ビットマップからグレーマップを生成するツールを私は知りません。 gsc が処理する ioctl リクエストは以下に列挙されています。 sgsc(1) と呼ば れるユーティリティを使うと、シェルからこれらのリクエストにアクセスできま す。 |
GSC_SRES int
解像度の値を設定します。デバイスへの最初の読み込みアクセスの後 に、この呼び出しを行なった場合は、デバイスをクローズして再びオー プンしない限り効果を持ちません。 GSC_GRES int GSC_SRESSSW void GSC_SWIDTH int 上の表に書かれていない値は ioctl 呼び出しに失敗し、 errno(2) には EINVAL が入ります。 見たとおり、1696 よりも大きな幅の値があります。しかし、このことは スキャナの幅よりも長いラインをスキャンできたり、もっと高い解像度 でスキャンできたりすることを意味するわけではありません。実際、解 像度はハードウェアスイッチのみによって選択されます。実際の解像度 で定義されている以上の長さのラインで、標準のラインの長さを越えた 右部分は定義されていません (通常は白になります)。 GSC_GWIDTH int GSC_SHEIGHT int GSC_GHEIGHT int GSC_SBLEN int GSC_GBLEN int GSC_SBTIME int GSC_GBTIME int パラメータを変更する GSC_SBTIME 以外のすべての ioctl リクエストは、現在進 行中のスキャンプロセスには影響しません。すなわち最初の読み込みリクエスト 時の設定がデバイスのオープン中は続きます。影響を及ぼすにはデバイスをク ローズしてオープンし直す必要があります。したがって、設定はデバイスをク ローズするかオープンするまでリセットされません。 同様に、設定値を読むリクエストは現在進行中のスキャンプロセスで使われてい る値を報告しません。スキャンプロセスが必要とする値は開始時に保存されてい るので、ioctl リクエストではアクセスできません。 しかし BTIME 値は現在進行中のスキャンにすぐに反映されます。したがってタイ ムアウト時間は、例えばユーザがスキャンを開始するまでの長い時間に設定する ことができます。またユーザが停止したら (ほぼ) すぐに反応できるような短い 時間に設定することもできます。ユーザが慌てることなく一つのバッファを埋め られるだけの時間は、最低でも残す必要があることに注意してください。 pbm と raw のモード選択は、ioctl リクエストではなく、マイナ番号によって行 なわれることに注意してください。 raw モードでは、選択されたビットマップの 高さはなんの効果も持ちません。 関連ファイル |
/dev/gsc0
raw 出力のためのデバイスノードで、マイナ番号は 0 です。 /dev/gsc0d /dev/gsc0p /dev/gsc0pd 使用例 |
dd if=/dev/gsc0 of=rawfile bs=(width/8) count=(height) cat /dev/gsc0p > pbmfile |
診断
GSCDEBUG
カーネル設定でこの名称を ‘option’ として定義すると、デバッ グビット (すなわち 7 ビット中のビット 5) がセットされたマイ ナ番号でドライバにアクセスした場合デバッグ出力を得ることが できます。 関連項目 |
cat(1), dd(1), pbmtopgm(1), pnm(1), sgsc(1), close(2), intro(2), ioctl(2), open(2), read(2), termios(4), pbm(5) |
作者
Gunther Schadow 〈gusw@fub46.zedat.fu-berlin.de〉 |
バグ
たとえスキャナデバイスに、4 つの解像度のうち 1 つを選択できるようになって いる小さなスイッチがあったとしても、私にはまだその状態を知る方法がわかっ ていません。この問題が解決されない限り、ハードウェアで選択した解像度と一 致する保証のない ioctl(2) で渡した値にドライバは依存します。 FreeBSD January 9, 1995 FreeBSD |