Hi Michael, and thanks for your very detailed bugreport, it's greatly
appreciated.
Without much insight into your specific problem, would the (quite invasive)
attached patch solve your problem ? It's the backport of latest upstream
CUPS libusb backend over 1.5.3-2.3 .
Le samedi, 20 octobre 2012 01.03:40, Michael Biebl a écrit :
On a different note: I don't quite understand, by you modprobe the usblp
module on upgrades, but not in the init script
If the module is needed, shouldn't you also load it when you reboot?
If it's not needed, why the modprobe?
Well... As far as I understand it (and I'm a young cups bird), the module
should either be loaded by default or on-demand. It has been blacklisted for a
while so the postinst ensures that a non-rebooted system upgraded through
these versions would get a loaded module. I think (but might be wrong), that
the module would otherwise be loaded.
Looking forward for the results of the attached patch!
Cheers,
OdyX
--- a/backend/usb-libusb.c
+++ b/backend/usb-libusb.c
@@ -70,7 +70,7 @@
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 @@
#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 */
@@ -141,15 +143,41 @@
{ 0x0409, 0xf1be, USBLP_QUIRK_BIDIR }, /* NEC Picty800 (HP OEM) */
{ 0x0482, 0x0010, USBLP_QUIRK_BIDIR }, /* Kyocera Mita FS 820,
by zut ker...@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 */
+ { 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 */
{ 0x04f9, 0x000d, USBLP_QUIRK_BIDIR |
USBLP_QUIRK_NO_REATTACH }, /* Brother Industries, Ltd
- 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 */
{ 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 },
/* Prolific Technology, Inc. PL2305 Parallel Port
- (USB - Parallel adapter) */
+ (USB - Parallel adapter), https://bugs.launchpad.net/bugs/987485 */
+ { 0x04e8, 0x, USBLP_QUIRK_RESET }, /* All Samsung devices,
+ https://bugs.launchpad.net/bugs/1032456 */
+ { 0x0a5f, 0x, USBLP_QUIRK_BIDIR }, /* All Zebra devices,
+ https://bugs.launchpad.net/bugs/1001028 */
{ 0, 0 }
};
@@ -256,7 +284,12 @@
}
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
@@ -772,7 +805,7 @@
* 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,
@@ -1288,7 +1321,7 @@
}
printer-usblp_attached = 0;
- printer-opened_for_job = 0;
+ printer-reset_after_job = 0;
if (verbose)
fputs(STATE: +connecting-to-device\n, stderr);
@@ -1586,7 +1619,8 @@
for (i = 0; quirk_printers[i].vendorId; i++)
{
if (vendor == quirk_printers[i].vendorId
-