lp - line printer devices
lp are character devices for the parallel line printers;
they have major number 6 and minor number 02. The minor
numbers correspond to the printer port base addresses
0x03bc, 0x0378 and 0x0278. Usually they have mode 220 and
are owned by root and group lp. You can use printer ports
either with polling or with interrupts. Interrupts are
recommended when high traffic is expected, e.g. for laser
printers. For usual dot matrix printers polling will usu-
ally be enough. The default is polling.
The following ioctl(2) calls are supported:
int ioctl(int fd, LPTIME, int arg))
Sets the amount of time that the driver sleeps before
rechecking the printer when the printer's buffer
appears to be filled to arg. If you have a fast
printer, decrease this number; if you have a slow
printer then increase it. This is in hundredths of a
second, the default 2 being 0.02 seconds. It only
influences the polling driver.
int ioctl(int fd, LPCHAR, int arg))
Sets the maximum number of busy-wait iterations which
the polling driver does while waiting for the printer
to get ready for receiving a character to arg. If
printing is too slow, increase this number; if the sys-
tem gets too slow, decrease this number. The default
is 1000. It only influences the polling driver.
int ioctl(int fd, LPABORT, int arg))
If arg is 0, the printer driver will retry on errors,
otherwise it will abort. The default is 0.
int ioctl(int fd, LPABORTOPEN, int arg))
If arg is 0, open(2) will be aborted on error, other-
wise error will be ignored. The default is to ignore
int ioctl(int fd, LPCAREFUL, int arg))
If arg is 0, then the out-of-paper, offline and error
signals are required to be false on all writes, other-
wise they are ignored. The default is to ignore them.
int ioctl(int fd, LPWAIT, int arg))
Sets the number of busy waiting iterations to wait
before strobing the printer to accept a just-written
character, and the number of iterations to wait before
turning the strobe off again, to arg. The specifica-
tion says this time should be 0.5 microseconds, but
experience has shown the delay caused by the code is
already enough. For that reason, the default value is
0. This is used for both the polling and the interrupt
int ioctl(int fd, LPSETIRQ, int arg))
This ioctl() requires superuser privileges. It takes
an int containing the new IRQ as argument. As a side
effect, the printer will be reset. When arg is 0, the
polling driver will be used, which is also default.
int ioctl(int fd, LPGETIRQ, int *arg))
Stores the currently used IRQ in arg.
int ioctl(int fd, LPGETSTATUS, int *arg))
Stores the value of the status port in arg. The bits
have the following meaning:
l l. LP_PBUSY inverted busy input, active high
LP_PACK unchanged acknowledge input, active low
LP_POUTPA unchanged out-of-paper input, active high
LP_PSELECD unchanged selected input, active high
LP_PERRORP unchanged error input, active low
Refer to your printer manual for the meaning of the
signals. Note that undocumented bits may also be set,
depending on your printer.
int ioctl(int fd, LPRESET)
Resets the printer. No argument is used.
The printer driver was originally written by Jim Weigand and
Linus Torvalds. It was further improved by Michael K. John-
son. The interrupt code was written by Nigel Gamble. Alan
Cox modularised it. LPCAREFUL, LPABORT, LPGETSTATUS were
added by Chris Metcalf.
mknod(1), chown(1), chmod(1),