.\" Copyright (c) 1997 .\" Michael Smith .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer as .\" the first lines of this file unmodified. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' .\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE .\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" .\" %Id: ppi.4,v 1.1 1998/01/02 09:31:18 msmith Exp % .\" $FreeBSD$ .\" .Dd January 2, 1998 .Dt PPI 4 .Os FreeBSD .Sh 名称 .Nm ppi .Nd ppbus パラレル 'geek' ポートへのユーザ空間インタフェース .Sh 書式 .Cd "device ppi0 at ppbus?" .sp マイナ番号: ユニット番号は ppbus 番号に直接対応する。 .Sh 解説 .Nm デバイスドライバはユーザアプリケーションが パラレルポートの状態を操作するための便利な手段を提供し、 .Pa /dev/io インタフェースを使うことに起因するセキュリティ問題を生じることなく、 容易に低速 I/O 操作ができるようにします。 .Sh プログラミングインタフェース .Pp .Fd #include .Fd #include .Pp .Nm インタフェースでのすべての I/O は .Fn ioctl 呼び出しを使うことによって行います。 各々のコマンドは 1 つの .Ty u_int8_t 引数をとり、1 バイトのデータを転送します。 以下のコマンドを使うことができます。 .Bl -tag -width 10 .It PPIGDATA, PPISDATA データレジスタの内容の読み出しと書き込みを行います。 .It PPIGSTATUS, PPISSTATUS ステータスレジスタの内容の読み出しと書き込みを行います。 .It PPIGCTRL, PPISCTRL 制御レジスタの内容の読み出しと書き込みを行います。 以下ではこのレジスタのビットに対応した定義を行っています。 制御レジスタのビットをセットすることは相当する出力を low にすることになります。 .Bl -tag -width 10 -compact .It STROBE .It AUTOFEED .It nINIT .It SELECTIN .It PCD .El .It PPIGEPP, PPISEPP EPP 制御レジスタの内容の読み出しと書き込みを行います。 .It PPIGECR, PPISECR ECP 制御レジスタの内容の読み出しと書き込みを行います。 .It PPIGFIFO, PPISFIFO ECP FIFO の読み書きをおこないます (8 ビット操作のみ)。 .El .Sh 使用例 データポートに値 0x5a を出力するために、 STROBE を low にした後 high に戻します。 次のコードを使うことができます。 .Bd -literal -compact 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); .Ed .Sh バグ 出力信号がレジスタ値と逆になっているのは混乱を招きかねません。 .Pp .Fn ioctl インタフェースは低速であり、 複数の操作を連続して行うための方法が (まだ) ありません。 .Pp ユーザアプリケーションで必要なヘッダは 標準のシステムではインストールされません。