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() 인터페이스는 저속이며, 복수의 조작을 연속해 실시하기 위한 방법이 ( 아직) 없습니다.

유저 어플리케이션으로 필요한 헤더는 표준의 시스템에서는 인스톨 되지 않습니다.