Nästa Föregående Innehållsförteckning

16. Seriella skrivare under lpd

16.1 Konfigurera i printcap

Lpd tillhandahåller fem attribut vilka du kan sätta i /etc/printcap för att styra inställningarna av den seriella port som skrivaren sitter på. Läs printcap manualsidan och notera betydelsen av br#, fc#, xc#, fs# och xs#. De siste fyra av dessa attribut är bitmaps som indikerar inställningarna för att använda porten. Till exempel br# atrributet är helt enkelt baudtalet t.ex. `br#9600'.

Det är väldigt enkelt att översätta från stty inställningar till printcap argumentinställningar. Om du behöver, titta i manualsidan för stty nu.

Använd stty för att konfigurera skrivarporten så att du kan `cat' en fil till den och den skrivs ut korrekt. Då här ser `stty -a' ut för min skrivarport:

dina:/usr/users/andy/work/lpd/lpd# stty -a < /dev/ttyS2
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr 
-igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 
bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase
-tostop -echoprt -echoctl -echoke
De enda skillnaderna mellan denna och det sätt porten initieras vid systemstarten är -clocal, -crtscts, och ixon. Din port kan vara annorlunda beroende på hur din skrivare gör flödeskontroll.

Du använder faktiskt stty på ett på någotvis udda sätt. Eftersom stty kör mot terminalen som är kopplad till dess standard input, använder du det till manipulera en given serieport genom att använda tecknet `<' enligt ovan.

När du väl fått stty inställningarna rätt, så att `cat fil > /dev/ttyS2' (i mitt fall) sänder filen till skrivaren, tittar du i filen /usr/src/linux/include/asm-i386/termbits.h. Denna innehåller en en hel del #defines och några structs. (Du kanske vill `cat'a denna fil till skrivaren (det funkar ju nu, eller hur?) och använda den som ett kladdpapper) Gå till sektionen som börjar med

/* c_cflag bit meaning */
#define CBAUD   0000017
Denna sektion listar betydelsen av fc# och fs# bitarna. Du kommer att märka att namnen där (efter baudtalen) matchar en av raderna av stty output. Sa jag inte att detta skulle bli enkelt?

Notera vilken av inställningarna som inleds med ett - i din stty output. Summera ihop alla dessa siffror (de är oktala). Detta representerar de bitar som du vill "clear"a, så resultatet är din fc# möjlighet. Naturligvis, kom ihåg att du kommer att sätta dessa bitar direkt efter du har "clear"at, så du kan använda `fc#0177777' (Det gör jag).

Nu gör du detsamma för inställningarna (listade i denna sektion) som inte har ett - före dem i din stty output. I mitt exempel är de viktiga CS8 (0000060), HUPCL (0002000), och CREAD (0000200). Notera också argumenten för ditt baudtal (mitt är 0000015). Lägg ihop dessa, och i mitt exempel får du 0002275. Det skall in i din fs# möjlighet (`fs#02275' funkar bra i mitt exempel).

Gör samma sak med set och clear för nästa sektion av include filen, "c_lflag bits". I mitt fall behövde jag inte "set"a något så jag använde bara `xc#0157777' och `xs#0'.

16.2 Äldre seriella skrivare som tappar tecken

Jon Luckey pekar ut att några äldre seriella skrivare med billiga seriella interface och små buffers verkligen menar stopp när de säger så med flödeskontrollen. Han kom på att stänga av FIFO'n på hans Linuxburks 16550 serieportar med setserial fixade problemet med tappade tecken (du till synes bara specificerar uart typen till 8250 för åstadkomma detta).


Nästa Föregående Innehållsförteckning