[lkml]   [2003]   [Jan]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: USB-Printer status flags question
On Monday 13 January 2003 05:30, you wrote:
> Hi Alex,
> On Sun, 12 Jan 2003, Alexander Puchmayr wrote:
> | After looking at cups (1.1.18) backend/usb.c and the kernel's
> | (2.4.19-gentoo-r10) drivers/usb/printer.c I've found some different
> | interpretations of the LP_* flags from linux/lp.h
> |
> | While the kernel seems to use the 8255 status port definitions, which
> | use (amongst others) the flags,
> |
> | #define LP_PSELECD 0x10 /* unchanged input, active high */
> | #define LP_PERRORP 0x08 /* unchanged input, active low */
> |
> | the same bits are defined by POSIX guidelines a few lines above in
> | linux/lp.h:
> |
> | #define LP_OFFL 0x0008
> | #define LP_NOPA 0x0010
> Does anyone know where I can find these POSIX guidelines?
> I tried SUSv3 but didn't see them there.
> I'm not sure if the comment about POSIX guidelines is referring
> only to the LP* and lp* namespace (prefixes) or to the bit
> definitions also.
> Are you saying that there are apps that depend on the POSIX bit
> definitions?
Get cups (I'm using 1.1.18), see backend/usb.c and have a look at the piece
of code

#ifdef __linux
* Show the printer status before we send the file; normally, we'd
* do this while we write data to the printer, however at least some
* Linux kernels have buggy USB drivers which don't like to be
* queried while sending data to the printer...

if (ioctl(fd, LPGETSTATUS, &status) == 0)
fprintf(stderr, "DEBUG: LPGETSTATUS returned a port status of
%02X...\n", status);

if (status & LP_NOPA)
fputs("WARNING: Media tray empty!\n", stderr);
else if (status & LP_ERR)
fputs("WARNING: Printer fault!\n", stderr);
else if (status & LP_OFFL)
fputs("WARNING: Printer off-line.\n", stderr);
#endif /* __linux */

LP_NOPA, LP_ERR and LP_OFFL are from the POSIX-Part.

> | Obviously, this leads the cups usb-backend to incorrectly report an
> | empty media tray when the printer is online, idle and has enough paper.
> |
> | This doesn't seem to be something serious, its just a wrong message in
> | cups log-file.
> The (Linux 2.4.20) kernel drivers/char/lp.c and drivers/usb/printer.c
> modules use the 8255 parallel port definitions to read/test the status
> port. This matches the USB printer spec (I'm looking at the USB
> v1.1 printer spec).
> USB & parport then return that 8-bit value to userspace via an
> ioctl (LPGETSTATUS). Is CUPS using a different ioctl, possibly

See the code piece above - its using LPGETSTATUS

> | PS: Since two different specifications are mixed up, this problem could
> | also be a kernel problem.
> Um, it would have been a good thing if a "standard" interface were used
> for this instead of one that just matches some device's registers,
> as long as the standard interface weren't severe overkill.

I agree.


To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at

 \ /
  Last update: 2005-03-22 13:32    [W:0.040 / U:0.728 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site