| | |
lp - Imprimantes parallèles.
#include
<linux/lp.h>
lp[0en2] sont des périphériques caractères pour
les imprimantes à liaison parallèle. Ils ont un numéro majeur 6 et un numéro
mineur 0en2. Le numéro mineur correspond aux ports d'imprimantes d'adresse
de base 0x03bc, 0x0378 et 0x0278. Habituellement ils ont un mode d'accès
220 et un propriétaire root.lp.
On peut utiliser les ports parallèles soit
en scrutation (polling) soit en interruption. L'utilisation en interruption
est surtout recommandée avec un haut trafic (ex : imprimante laser). Pour
les imprimantes matricielles classiques, la scrutation suffira. Par défaut
le système utilise la scrutation.
Les appels systèmes ioctl(2)
suivants sont supportés :
- int ioctl(int fd, LPTIME, int arg)
- fixe la durée
pendant laquelle le driver s'endort avant de revérifier l'état de l'imprimante
après que le buffer ait été rempli. Avec une imprimante rapide on peut
diminuer ce délai, avec une imprimante lente on peut l'augmenter. La durée
est indiquée dans arg, en centièmes de secondes. La valeur par défaut est
2 (soit 0,02 seconde). Cela n'influe que sur le driver en scrutation.
- int
ioctl(int fd, LPCHAR, int arg)
- indique le nombre maximum d'itérations d'attente
active que le driver en scrutation effectue alors qu'il attend que l'imprimante
soit prête. Si l'impression est trop lente, augmenter cette valeur, si le
système ralentit trop, la diminuer. Le nombre est indiqué dans arg, la valeur
par défaut est 1000. Cela n'influe que sur le diver en scrutation.
- int ioctl(int
fd, LPABORT, int arg)
- Si arg vaut 0, le driver réessaiera en cas d'erreur
d'impression, sinon il abandonnera. La valeur par défaut est 0.
- int ioctl(int
fd, LPABORTOPEN, int arg)
- Si arg vaut 0, open(2)
sera annulé en cas d'erreur,
sinon l'erreur sera ignorée. Par défaut elle est ignorée.
- int ioctl(int fd,
LPCAREFUL, int arg)
- Si arg vaut 0, on bloquera l'écriture sur le port parallèle
au cas où les broches erreur, plus-de-papier, ou imprimante-hors-ligne sont
validées. Sinon ces signaux seront ignorés. Par défaut ils sont ignorés.
- int ioctl(int fd, LPWAIT, int arg)
- Indique le nombre d'itérations d'attente
active à effectuer avant d'activer la broche STROBE pour que l'imprimante
accepte le caractère écrit, et le nombre d'itérations à effectuer avant
d'éteindre à nouveau la broche STROBE. Les spécifications indique que ce
délai devrait être de 0,5 micro-secondes, mais l'experience a montré que
le délai induit par le code du driver est suffisant. La valeur est indiquée
dans arg, elle vaut 0 par défaut. Ceci concerne autant le gestionnaire en
interruption que celui en scrutation.
- int ioctl(int fd, LPSETIRQ, int arg)
- Cet
ioctl() nécessite des privilèges Super-User. Son argument est une nouvelle
IRQ pour l'imprimante. Comme effet de bords, l'imprimante est réinitialisée.
Si arg vaut 0, le gestionnaire en scrutation sera utilisé, ce qui est le
comportement par défaut.
- int ioctl(int fd, LPGETIRQ, int *arg)
- Stocke la
valeur actuelle d'IRQ dans arg.
- int ioctl(int fd, LPGETSTATUS, int *arg)
- Stocke
le statut actuel du port dans arg. Les bits ont les significations suivantes
:
| LP_PBUSY | Entrée OCCUPéE inversée, active à 1 |
| LP_PACK | Entrée ACQUITTEMENT,
active à 0 |
| LP_POUTPA | Entrée PLUS-DE-PAPIER, active à 1 |
| LP_PSELECD | Entrée SELECT,
active à 1 |
| LP_PERRORP | Entrée ERREUR, active à 0 |
Référez vous au manuel de
votre imprimante pour la signification de ces signaux. Des bits non documentés
peuvent également être présents, suivant le type d'imprimante.
- int ioctl(int
fd, LPRESET)
- Réinitialise l'imprimante. Pas d'argument.
/dev/lp*
Le
driver d'imprimante a été écrit à l'origine par Jim Weigand et Linus Torvalds.
Il fut ensuite amélioré par Michael K. Johnson. Le code d'interruption a
été écrit par by Nigel Gamble. Alan Cox l'a modularisé. LPCAREFUL, LPABORT,
LPGETSTATUS ont été ajoutés par Chris Metcalf.
mknod(1)
, chown(1)
,
chmod(1)
, tunelp(8)
, lpcntl(8)
Christophe Blaess, 1997.
Table des matières
© 1996-2000 Adaptation française "Christophe Blaess"
| |