スポンサーリンク

PPI(4) FreeBSD カーネルインタフェースマニュアル PPI(4)

名称

ppi − ppbus パラレル ’geek’ ポートへのユーザ空間インタフェース

書式

device ppi0 at ppbus?

マイナー番号: ユニット番号は ppbus 番号に直接対応する。

解説

ppi デバイスドライバはユーザアプリケーションがパラレルポートの状態を操作 するための便利な手段を提供し、 /dev/io インタフェースを使うことに起因する セキュリティ問題を生じることなく、容易に低速 I/O 操作ができるようにしま す。

プログラミングインタフェース

#include </sys/dev/ppbus/ppi.h>
#include </sys/dev/ppbus/ppbconf.h>

ppi インタフェースでのすべての I/O は ioctl() 呼び出しを使うことによって 行います。各々のコマンドは 1 つの引数をとり、1 バイトのデータを転送しま す。以下のコマンドを使うことができます。

       PPIGDATA, PPISDATA

データレジスタの内容の読み出しと書き込みを行います。

PPIGSTATUS, PPISSTATUS
ステータスレジスタの内容の読み出しと書き込みを行います。

PPIGCTRL, PPISCTRL
制御レジスタの内容の読み出しと書き込みを行います。以下ではこのレジス タのビットに対応した定義を行っています。制御レジスタのビットをセット することは相当する出力を low にすることになります。
STROBE
AUTOFEED
nINIT
SELECTIN
PCD

PPIGEPP, PPISEPP
EPP 制御レジスタの内容の読み出しと書き込みを行います。

PPIGECR, PPISECR
ECP 制御レジスタの内容の読み出しと書き込みを行います。

PPIGFIFO, PPISFIFO
ECP FIFO の読み書きをおこないます (8 ビット操作のみ)。

使用例

データポートに値 0x5a を出力するために、 STROBE を low にした後 high に戻 します。次のコードを使うことができます。

        int             fd;

u_int8_t

val;

val = 0x5a;

ioctl(fd, PPISDATA, &val);

ioctl(fd, PPIGCTRL, &val);

val |= STROBE;

ioctl(fd, PPISCTRL, &val);

val &= ~STROBE;

ioctl(fd, PPISCTRL, &val);

バグ

出力信号がレジスタ値と逆になっているのは混乱を招きかねません。

ioctl() インタフェースは低速であり、複数の操作を連続して行うための方法が (まだ) ありません。

ユーザアプリケーションで必要なヘッダは標準のシステムではインストールされ ません。

FreeBSD January 2, 1998 FreeBSD

スポンサーリンク