serial port on DS5000 not responding fast enough to CNTRL/S?
Michael C. B. Ashley
mcba at newt.phys.unsw.OZ.AU
Thu Oct 25 15:53:02 AEST 1990
In article <900 at usage.csd.unsw.oz.au>, I wrote:
> I have a LaserJet III connected to one of the serial ports on a
> DECstation 5000. My problem is that when I send long files to the
> printer, it loses about 30 bytes every time the LaserJet's input buffer
> fills up.
I have now examined this problem quite carefully using an RS-232
analyser, and have reached the following conclusions:
(1) The DS5000 will output anything from 10 to 256 characters from
its serial port (at 9600 baud) AFTER receiving a control-S. The
number of characters sent depends on the :fs and :fc options in
the /etc/printcap file (cooked mode gives you between 10 and 50
characters over-run, cbreak gives about 50, and raw (if you
do the handshaking yourself) gives you up to 256 characters).
(2) After receiving a control-S, and after the DS5000 eventually
stops sending characters, it may then send a control-S to the
printer (if the DS5000 input buffer is filled and if TANDEM mode
is selected), and when it does so it SENDS A FEW ADDITIONAL
CHARACTERS. I only observed this once, but it is a serious bug.
(3) The LaserJet III will only accept about 30 characters after it
has sent a control-S to the DECstation. Any more than 30
characters will result in an IO CONFIG ERR, and characters will
be lost. This is hopeless. Incidentally, I am using the HP with
the HP PostScript cartridge.
So, in summary, both devices are at fault: the DS5000 for not responding
to a control-S within a reasonable time, and the LaserJet for not being
able to buffer a reasonable number of characters after receiving a
control-S.
Is there some easy solution to this problem that I have missed? As I
mentioned in my earlier posting I have tried writing my own printer
filter and doing the I/O a byte at a time, but when I ask the kernel if
there are any characters for me to read from the printer (by using a
ioctl(1,FIONREAD,&bytes_to_read);) it replies "no there aren't" even if
some have been seen by the hardware and are filtering their way up
through the operating system. Also, I'm not convinced that the call
write(1,char,1) is returning after the character is physically emitted
from the serial port, rather than after the character has vanished far
enough into the kernel that it is guaranteed to be printed (note that I
am using fcntl(1,F_SETFL,FSYNCRON)).
I would rather be doing astronomy than messing with this annoying
problem :-)
Thanks for any advice.
Michael Ashley / Dept. Astrophysics / Uni. of NSW / Australia
mcba at usage.csd.unsw.oz.au
More information about the Comp.unix.ultrix
mailing list