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

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