On Thu, 8 Mar 2007, Linos wrote:

> lsusb -v shows this for the Epson Printer:
> 
> Bus 002 Device 003: ID 04b8:0202 Seiko Epson Corp. Receipt Printer M129C
...
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        0
>       bAlternateSetting       0
>       bNumEndpoints           2
>       bInterfaceClass       255 Vendor Specific Class
>       bInterfaceSubClass    255 Vendor Specific Subclass
>       bInterfaceProtocol      2 

Those values mean this printer uses a vendor-specific communication
protocol, not the standard USB printer protocol.  As a result, usblp is
unwilling to drive it.

> ----------------------------------------------------------------------
> 
> I have been able to do usblp recognize it changing this more lines in
> usblp.c.
> 
> 
> /* Analyze and pick initial alternate settings and endpoints. */
> protocol = usblp_select_alts(usblp);
> if (protocol < 0) {
>         dbg("incompatible printer-class device 0x%4.4X/0x%4.4X",
>                 le16_to_cpu(dev->descriptor.idVendor),
>                 le16_to_cpu(dev->descriptor.idProduct));
>         goto abort;
> }
> 
> here i change "if (protocol < 0) {" for "if (protocol < -2000) {" 
> 
> ----------------------------------------------------------------------
> 
> /* Setup the selected alternate setting and endpoints. */
> if (usblp_set_protocol(usblp, protocol) < 0)
>        goto abort;
> 
> here i change "(usblp_set_protocol(usblp, protocol) < 0)" for
> "(usblp_set_protocol(usblp, protocol) < -2000)"
> 
> ----------------------------------------------------------------------

No, those are not the right changes to make.

I don't know if usblp will work with that printer at all.  To find out, 
you should remove these two lines near the top of usblp_select_alts():

                if (ifd->desc.bInterfaceClass != 7 || 
ifd->desc.bInterfaceSubClass != 1)
                        continue;

> when i compile the module and install with insmod dmesg gives me this
> output.
> 
> drivers/usb/class/usblp.c: usblp0: USB Unidirectional printer dev 3 if 0
> alt -1 proto 0 vid 0x04B8 pid 0x0202
> usbcore: registered new driver usblp
> drivers/usb/class/usblp.c: v0.13: USB Printer Device Class driver
> 
> 
> and i have the "/dev/usb/lp0" device but when i try to print anything.
> 
> 
> "echo test > /dev/usb/lp0" it fails and gives me this errors in dmesg:
> 
> BUG: unable to handle kernel NULL pointer dereference at virtual address
> 00000000
...
> hehehe i would be better long away from kernel code i think :).

Probably. :-)

Try making the change above and see what happens.

Alan Stern


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to