poll or select for ppi?

M. Warner Losh imp at bsdimp.com
Tue Mar 15 14:43:26 PST 2005

In message: <5e52cc0005031419056fdf10c6 at mail.gmail.com>
            Matt Kory <uber.caulker at gmail.com> writes:
: Is it possible to use poll or select to detect a change in the status
: bits of the parallel port?  I tried something like this, and took bits
: 5 and 6 of the status register low and nothing seemed to happen.  Is
: what I am trying to do even possible, or I am supposed to take a
: certain bit low to cause a read event?  Any help is appreciated.
: int ppi_fd;
: char port[] = "/dev/ppi0";
: ppi_fd = open(port, O_RDWR);
: fd_set rfds;
: struct timeval tv;
: tv.tv_sec = 0;
: tv.tv_usec = 100000;
: while(1) {
: FD_ZERO( &rfds );
: FD_SET( ppi_fd, &rfds );
: if ( select(1, &rfds, NULL, NULL, &tv) ) {
:  printf("hi\n");
:  }
: }

With the driver, as written: No.  You can't poll(2).  You can ask the
device often if something has changed yet.

However, it would be relatively simple to add a read channel and poll
support.  I've written several custom drivers that do things based on
parallel port interrupts...  Such drivers aren't that hard.


More information about the freebsd-hackers mailing list