LP(4)

NOMBRE
lp - dispositivos de impresora.

SINOPSIS
#include <linux/lp.h>

CONFIGURACIÓN
lp[0–2] son dispositivos de carácter para las impresoras de la línea paralela. Tienen el número mayor 6 y el menor 0–2. Los números menores corresponden a las direcciones de base de los puertos de impresora 0x03bc, 0x0378 and 0x0278. Normalmente tienen el modo 220 y su propietario es root.lp. Los puertos de impresora se pueden usar o bien en modo de sondeo o bien en modo de interrupción. Se recomienda usar el modo de interrupciones cuando se espere gran cantidad de trafico (p.ej. con impresoras láser). Para las impresoras de matriz de puntos habituales, el modo de sondeo es suficiente. El modo por omisión es el de sondeo.

DESCRIPCIÓN
Se soportan las siguientes ioctl(2):

int ioctl(int fd, LPTIME, int arg)
    arg es la cantidad de tiempo que el controlador dormira antes de re-comprobar la impresora, cuando el tampón de la impresora se haya llenado. Si se tiene una impresora rápida, redúzcase este número, si se tiene una impresora lenta, auméntese. Se mide en centésimas de segundo, siendo el valor por omisión 2 (0.02 segundos). Sólo tiene influencia en el controlador por sondeo.

int ioctl(int fd, LPCHAR, int arg)
    arg es el número máximo de iteraciones de espera que efecturará el controlador por sondeo, mientras espera que la impresora esté lista para recibir un carácter. Si la impresora es demasiado lenta, hay que aumentar este número. Si el sistema va demasiado lento, hay que disminuir este número. El valor por omisión es 1000. Sólo tiene influencia en el controlador por sondeo.

int ioctl(int fd, LPABORT, int arg)
    Si arg es 0, el controlador reintentará la operación cuando se produzca un error. De lo contrario, abortará. El valor por omisión es 0.

int ioctl(int fd, LPABORTOPEN, int arg)
    Si arg es 0, se abortará open(2) cuando se produzca un error, de lo contrario el error será ignorado. El valor por omisión es ignorarlo.

int ioctl(int fd, LPCAREFUL, int arg)
    Si arg es 0, es necesario que las señales de sin-papel, fuera de línea y error sean falsas en el momento de la escritura, de lo contario se ignoran. El valor por omisión es ignorarlas.

int ioctl(int fd, LPWAIT, int arg)
    arg fija el número de iteraciones de espera a efectuar antes de enviar un pulso a la impresora para que acepte el carácter que se acaba de escribir, y el número de iteraciones a esperar antes de retirar el pulso. La especificación dice que su duración debe ser 0.5 microsegundos, pero la experiencia muestra que el retardo causado por el propio codigo es suficiente. Por esa razón, el valor por omisión es 0. Lo usan tanto el controlador por interrupciones como el controlador por sondeo.

int ioctl(int fd, LPSETIRQ, int arg)
    Esta ioctl() necesita los privilegios del super-usuario. arg especifica la nueva IRQ a usar por el controlador. Como efecto secundario, se re-inicializa la impresora. Si arg es 0, se usará el controlador por sondeo, que es también el valor por omisión.

int ioctl(int fd, LPGETIRQ, int *arg)
    Devuelve en arg la IRQ en uso actualmente.

int ioctl(int fd, LPGETSTATUS, int *arg)
    Devuelve en arg el valor del puerto de estado. La significación de cada bit es la siguiente:

    LP_PBUSY | entrada de "busy" invertida, activa a nivel alto
    LP_PACK | entrada de "acknowledge", activa a nivel bajo.
    LP_POUTPA | entrada de "out-of-paper", activa a nivel alto.
    LP_PSELECD | entrada de "selected", activa a nivel alto.
    LP_PERRORP | entrada de "error", activa a nivel bajo.

    Consultar el manual de la impresora conocer para el significado exacto de las señales. Nótese que también pueden activarse otros bits no documentados, dependiendo de la impresora.

int ioctl(int fd, LPRESET)
    Re-inicializa la impresora. No necesita argumento.

ARCHIVOS
/dev/lp*

AUTORES
El controlador de impresora fue escrito en su origen por Jim Weigand y Linus Torvalds. Fue mejorado por Michael K. Johnson. El código de las interrupciones fue escrito por Nigel Gamble y Alan Cox lo modularizó. LPCAREFUL, LPABORT y LPGETSTATUS fueron añadidos por Chris Metcalf.

VÉASE TAMBIÉN
mknod(1), chown(1), chmod(1), tunelp(8), lpcntl(8)