2012-08-23 11:45:22 +00:00
|
|
|
diff -up cups-1.5.4/backend/usb-libusb.c.usblp-quirks cups-1.5.4/backend/usb-libusb.c
|
|
|
|
--- cups-1.5.4/backend/usb-libusb.c.usblp-quirks 2012-07-16 19:16:46.000000000 +0200
|
2012-10-22 08:26:23 +00:00
|
|
|
+++ cups-1.5.4/backend/usb-libusb.c 2012-10-17 16:30:58.571793169 +0200
|
2012-08-23 11:45:22 +00:00
|
|
|
@@ -70,7 +70,7 @@ typedef struct usb_printer_s /**** USB
|
|
|
|
read_endp, /* Read endpoint */
|
|
|
|
protocol, /* Protocol: 1 = Uni-di, 2 = Bi-di. */
|
|
|
|
usblp_attached, /* "usblp" kernel module attached? */
|
|
|
|
- opened_for_job; /* Set to 1 by print_device() */
|
|
|
|
+ reset_after_job; /* Set to 1 by print_device() */
|
|
|
|
unsigned int quirks; /* Quirks flags */
|
|
|
|
struct libusb_device_handle *handle; /* Open handle to device */
|
|
|
|
} usb_printer_t;
|
|
|
|
@@ -122,6 +122,8 @@ struct quirk_printer_struct {
|
|
|
|
#define USBLP_QUIRK_USB_INIT 0x2 /* needs vendor USB init string */
|
|
|
|
#define USBLP_QUIRK_BAD_CLASS 0x4 /* descriptor uses vendor-specific
|
|
|
|
Class or SubClass */
|
|
|
|
+#define USBLP_QUIRK_RESET 0x4000 /* After printing do a reset
|
|
|
|
+ for clean-up */
|
|
|
|
#define USBLP_QUIRK_NO_REATTACH 0x8000 /* After printing we cannot re-attach
|
|
|
|
the usblp kernel module */
|
|
|
|
|
2012-10-22 08:26:23 +00:00
|
|
|
@@ -141,15 +143,43 @@ static const struct quirk_printer_struct
|
2012-08-23 11:45:22 +00:00
|
|
|
{ 0x0409, 0xf1be, USBLP_QUIRK_BIDIR }, /* NEC Picty800 (HP OEM) */
|
|
|
|
{ 0x0482, 0x0010, USBLP_QUIRK_BIDIR }, /* Kyocera Mita FS 820,
|
|
|
|
by zut <kernel@zut.de> */
|
|
|
|
+ { 0x04a9, 0x10a2, USBLP_QUIRK_BIDIR }, /* Canon, Inc. PIXMA iP4200
|
|
|
|
+ Printer, http://www.cups.org/str.php?L4155 */
|
|
|
|
+ { 0x04a9, 0x10b6, USBLP_QUIRK_BIDIR }, /* Canon, Inc. PIXMA iP4300
|
|
|
|
+ Printer, https://bugs.launchpad.net/bugs/1032385 */
|
2012-10-01 10:28:11 +00:00
|
|
|
+ { 0x04a9, 0x170c, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP500
|
|
|
|
+ Printer, https://bugs.launchpad.net/bugs/1032456 */
|
|
|
|
+ { 0x04a9, 0x1717, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP510
|
|
|
|
+ Printer, https://bugs.launchpad.net/bugs/1050009 */
|
|
|
|
+ { 0x04a9, 0x173d, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP550
|
|
|
|
+ Printer, http://www.cups.org/str.php?L4155 */
|
|
|
|
+ { 0x04a9, 0x173e, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP560
|
|
|
|
+ Printer, http://www.cups.org/str.php?L4155 */
|
|
|
|
+ { 0x04f9, 0x001a, USBLP_QUIRK_NO_REATTACH }, /* Brother Industries, Ltd
|
|
|
|
+ HL-1430 Laser Printer,
|
|
|
|
+ https://bugs.launchpad.net/bugs/1038695 */
|
2012-08-23 11:45:22 +00:00
|
|
|
{ 0x04f9, 0x000d, USBLP_QUIRK_BIDIR |
|
|
|
|
USBLP_QUIRK_NO_REATTACH }, /* Brother Industries, Ltd
|
2012-10-01 10:28:11 +00:00
|
|
|
- HL-1440 Laser Printer */
|
|
|
|
+ HL-1440 Laser Printer,
|
|
|
|
+ https://bugs.launchpad.net/bugs/1000253 */
|
|
|
|
+ { 0x06bc, 0x000b, USBLP_QUIRK_NO_REATTACH }, /* Oki Data Corp.
|
|
|
|
+ Okipage 14ex Printer,
|
|
|
|
+ https://bugs.launchpad.net/bugs/872483 */
|
|
|
|
+ { 0x06bc, 0x01c7, USBLP_QUIRK_NO_REATTACH }, /* Oki Data Corp. B410d,
|
|
|
|
+ https://bugs.launchpad.net/bugs/872483 */
|
2012-08-23 11:45:22 +00:00
|
|
|
{ 0x04b8, 0x0202, USBLP_QUIRK_BAD_CLASS }, /* Seiko Epson Receipt
|
|
|
|
Printer M129C */
|
|
|
|
{ 0x067b, 0x2305, USBLP_QUIRK_BIDIR |
|
|
|
|
- USBLP_QUIRK_NO_REATTACH },
|
|
|
|
+ USBLP_QUIRK_NO_REATTACH |
|
|
|
|
+ USBLP_QUIRK_RESET },
|
2012-10-22 08:26:23 +00:00
|
|
|
+ { 0x0924, 0x3ce9, USBLP_QUIRK_NO_REATTACH }, /* Xerox Phaser 3124
|
|
|
|
+ https://bugzilla.redhat.com/show_bug.cgi?id=867392 */
|
2012-08-23 11:45:22 +00:00
|
|
|
/* Prolific Technology, Inc. PL2305 Parallel Port
|
2012-10-01 10:28:11 +00:00
|
|
|
- (USB -> Parallel adapter) */
|
|
|
|
+ (USB -> Parallel adapter), https://bugs.launchpad.net/bugs/987485 */
|
|
|
|
+ { 0x04e8, 0x0000, USBLP_QUIRK_RESET }, /* All Samsung devices,
|
|
|
|
+ https://bugs.launchpad.net/bugs/1032456 */
|
|
|
|
+ { 0x0a5f, 0x0000, USBLP_QUIRK_BIDIR }, /* All Zebra devices,
|
|
|
|
+ https://bugs.launchpad.net/bugs/1001028 */
|
2012-08-23 11:45:22 +00:00
|
|
|
{ 0, 0 }
|
|
|
|
};
|
|
|
|
|
2012-10-22 08:26:23 +00:00
|
|
|
@@ -256,7 +286,12 @@ print_device(const char *uri, /* I - De
|
2012-08-23 11:45:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
g.print_fd = print_fd;
|
|
|
|
- g.printer->opened_for_job = 1;
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Some devices need a reset after finishing a job, these devices are
|
|
|
|
+ * marked with the USBLP_QUIRK_RESET quirk.
|
|
|
|
+ */
|
|
|
|
+ g.printer->reset_after_job = (g.printer->quirks & USBLP_QUIRK_RESET ? 1 : 0);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* If we are printing data from a print driver on stdin, ignore SIGTERM
|
2012-10-22 08:26:23 +00:00
|
|
|
@@ -772,7 +807,7 @@ close_device(usb_printer_t *printer) /*
|
2012-08-23 11:45:22 +00:00
|
|
|
* Reset the device to clean up after the job
|
|
|
|
*/
|
|
|
|
|
|
|
|
- if (printer->opened_for_job == 1)
|
|
|
|
+ if (printer->reset_after_job == 1)
|
|
|
|
{
|
|
|
|
if ((errcode = libusb_reset_device(printer->handle)) < 0)
|
|
|
|
fprintf(stderr,
|
2012-10-22 08:26:23 +00:00
|
|
|
@@ -1288,7 +1323,7 @@ open_device(usb_printer_t *printer, /* I
|
2012-08-23 11:45:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
printer->usblp_attached = 0;
|
|
|
|
- printer->opened_for_job = 0;
|
|
|
|
+ printer->reset_after_job = 0;
|
|
|
|
|
|
|
|
if (verbose)
|
|
|
|
fputs("STATE: +connecting-to-device\n", stderr);
|
2012-10-22 08:26:23 +00:00
|
|
|
@@ -1586,7 +1621,8 @@ static unsigned int quirks(int vendor, i
|
2012-08-23 11:45:22 +00:00
|
|
|
for (i = 0; quirk_printers[i].vendorId; i++)
|
|
|
|
{
|
|
|
|
if (vendor == quirk_printers[i].vendorId &&
|
|
|
|
- product == quirk_printers[i].productId)
|
|
|
|
+ (quirk_printers[i].productId == 0x0000 ||
|
|
|
|
+ product == quirk_printers[i].productId))
|
|
|
|
return quirk_printers[i].quirks;
|
|
|
|
}
|
|
|
|
return 0;
|