lp - urządzenia drukarek wierszowych
#include <linux/lp.h>
Pliki
lp[0–2] są urządzeniami znakowymi
obsługującymi drukarki dołączone do portów
równoległych; numer główny tych
urządzeń jest równy 6, numer podrzędny 0–2.
Numery podrzędne odpowiadają adresom bazowym portu drukarki:
0x03bc, 0x0378 i 0x0278. Zwykle prawa dostępu do plików tych
urządzeń wynoszą 220, a ich właścicielem
jest użytkownik
root i grupa
lp. Porty drukarki
mogą być obsługiwane zarówno przy wykorzystaniu
próbkowania, jak i przerwań. Stosowanie przerwań jest
zalecane, gdy spodziewamy się dużego ruchu, np.
wynikającego z używania drukarki laserowej. W przypadku
zwykłych drukarek mozaikowych wystarczające jest
próbkowanie. Domyślnym trybem obsługi portu jest
próbkowanie.
Obsługiwane są następujące wywołania funkcji
ioctl(2):
-
int ioctl(int fd, LPTIME, int
arg)
- Ustawia okres, przez jaki sterownik jest uśpiony,
zanim powtórnie sprawdzi stan drukarki w sytuacji, gdy bufor
drukarki zdaje się być wypełnionym do arg.
Jeśli drukarka jest szybka, można zmniejszyć ten
parametr. Jeśli drukarka jest wolna, należy
zwiększyć ten parametr. Jest to liczba
określająca czas w setnych częściach sekundy,
wartość domyślna wynosi 2, co oznacza 0,02 sekundy.
Parametr ten wpływa jedynie na tryb próbkowania.
-
int ioctl(int fd, LPCHAR, int
arg)
- Ustawia na argv maksymalną liczbę
iteracji aktywnego oczekiwania (busy-wait), jakie wykonuje sterownik
próbkujący czekając, aż drukarka będzie
gotowa na otrzymywanie znaków. Jeśli drukowanie odbywa
się zbyt wolno należy zwiększyć tę
liczbę; jeśli system za bardzo zwalnia —
należy ją zmniejszyć. Domyślną
wartością tego parametru jest 1000. Parametr ma wpływ
na sterownik jedynie w trybie próbkowania.
-
int ioctl(int fd, LPABORT, int
arg)
- Jeśli parametr arg jest równy 0, wtedy
sterownik drukarki będzie powtarzał operację po
wystąpieniu błędu; w przeciwnym wypadku przerwie
działanie. Standardową wartością tego
parametru jest 0.
-
int ioctl(int fd, LPABORTOPEN, int
arg)
- Jeśli arg jest równy 0, funkcja
open(2) zostanie przerwana po wystąpieniu
błędu; w przeciwnym wypadku błąd zostanie
zignorowany. Standardowe zachowanie polega na ignorowaniu
błędów.
-
int ioctl(int fd, LPCAREFUL, int
arg)
- Jeśli arg jest równy 0, wtedy wymaga
się, aby sygnały "out-of-paper",
"offline" oraz sygnały błędów
były puste (false) we wszystkich operacjach zapisu, w przeciwnym
wypadku są ignorowane. Domyślnie są ignorowane.
-
int ioctl(int fd, LPWAIT, int
arg)
- Ustawia na arg liczbę iteracji aktywnego
oczekiwania (busy-wait) przed spróbkowaniem, czy drukarka
zaakceptowała właśnie zapisany znak, oraz
liczbę iteracji, które należy przeczekać przed
kolejnym próbkowaniem. Specyfikacje określają ten
czas jako 0.5 mikrosekundy, lecz doświadczenie wykazało,
że opóźnienie spowodowane wykonaniem kodu jest
już wystarczające. Z tego powodu wartością
domyślną dla tego ustawienia jest 0. Jest ono wykorzystywane
w sterowniku zarówno w trybie próbkowania, jak i w trybie
przerwań.
-
int ioctl(int fd, LPSETIRQ, int
arg)
- To wywołanie funkcji ioctl(2) wymaga
uprawnień administratora. Funkcja pobiera argument typu int
zawierający nowe przerwanie IRQ. Skutkiem ubocznym jest inicjacja
drukarki. Gdy arg jest zerem, to stosowany będzie sterownik
z próbkowaniem; jest to równocześnie zachowanie
domyślne.
-
int ioctl(int fd, LPGETIRQ, int
*arg)
- Zachowuje w parametrze arg aktualnie stosowane
przerwanie IRQ.
-
int ioctl(int fd, LPGETSTATUS, int
*arg)
- Zachowuje wartość stanu portu w zmiennej
arg. Poszczególne bity mają następujące
znaczenie:
LP_PBUSY |
odwrócony sygnał zajętości |
LP_PACK |
niezmienione potwierdzenie wejścia |
LP_POUTPA |
niezmieniony sygnał braku papieru |
LP_PSELECD |
niezmieniony sygnał wyboru |
LP_PERRORP |
niezmieniony sygnał błędu |
- Znaczenia sygnałów należy
szukać w dokumentacji drukarki. Należy
pamiętać, że dla niektórych drukarek ustawiane
mogą być też nieudokumentowane tu bity.
-
int ioctl(int fd, LPRESET)
- Inicjuje drukarkę. Nie stosuje się
żadnych parametrów.
/dev/lp*
chmod(1),
chown(1),
mknod(1),
lpcntl(8),
tunelp(8)
Autorami polskiego tłumaczenia niniejszej strony podręcznika
są: Piotr Pogorzelski <
[email protected]> i
Michał Kułach <
[email protected]>
Niniejsze tłumaczenie jest wolną dokumentacją.
Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z
GNU
General Public License w wersji 3 lub nowszej. Nie przyjmuje się
ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy
zgłaszać na adres listy dyskusyjnej
[email protected]