...but this USB device is more than a printer!

dan glimp at live.com
Tue Oct 5 15:05:20 UTC 2010


On 10/04/10 00:35, Julian Elischer wrote:
> On 10/3/10 3:34 AM, dan wrote:
>> On 03.10.2010 10:19, Hans Petter Selasky wrote:
>>> On Sunday 03 October 2010 01:19:18 dan wrote:
>>>> Hi all,
>>>>
>>>> I'll go straight to the point.
>>>> Here's the output from "usbconfig dump_device_desc"
>>>>
>>>> #*
>>>> ugen0.3:<Samsung SCX-4100 Series Samsung> at usbus0, cfg=0 md=HOST
>>>> spd=FULL (12Mbps) pwr=ON
>>>>
>>>> bLength = 0x0012
>>>> bDescriptorType = 0x0001
>>>> bcdUSB = 0x0110
>>>> bDeviceClass = 0x0000
>>>> bDeviceSubClass = 0x0000
>>>> bDeviceProtocol = 0x0000
>>>> bMaxPacketSize0 = 0x0008
>>>> idVendor = 0x04e8
>>>> idProduct = 0x3413
>>>> bcdDevice = 0x0100
>>>> iManufacturer = 0x0001<Samsung>
>>>> iProduct = 0x0002<Samsung SCX-4100 Series>
>>>> iSerialNumber = 0x0003<8J21BAKYB28091W.>
>>>> bNumConfigurations = 0x0001
>>>> #*
>>>>
>>>> and here's the output from "usbconfig dump_curr_config_desc"
>>>>
>>>> #*
>>>> ugen0.3:<Samsung SCX-4100 Series Samsung> at usbus0, cfg=0 md=HOST
>>>> spd=FULL (12Mbps) pwr=ON
>>>>
>>>>
>>>> Configuration index 0
>>>>
>>>> bLength = 0x0009
>>>> bDescriptorType = 0x0002
>>>> wTotalLength = 0x0020
>>>> bNumInterfaces = 0x0001
>>>> bConfigurationValue = 0x0001
>>>> iConfiguration = 0x0000<no string>
>>>> bmAttributes = 0x00c0
>>>> bMaxPower = 0x0000
>>>>
>>>> Interface 0
>>>> bLength = 0x0009
>>>> bDescriptorType = 0x0004
>>>> bInterfaceNumber = 0x0000
>>>> bAlternateSetting = 0x0000
>>>> bNumEndpoints = 0x0002
>>>> bInterfaceClass = 0x0007
>>>> bInterfaceSubClass = 0x0001
>>>> bInterfaceProtocol = 0x0002
>>>> iInterface = 0x0000<no string>
>>>>
>>>> Endpoint 0
>>>> bLength = 0x0007
>>>> bDescriptorType = 0x0005
>>>> bEndpointAddress = 0x0003<OUT>
>>>> bmAttributes = 0x0002<BULK>
>>>> wMaxPacketSize = 0x0040
>>>> bInterval = 0x0000
>>>> bRefresh = 0x0000
>>>> bSynchAddress = 0x0000
>>>>
>>>> Endpoint 1
>>>> bLength = 0x0007
>>>> bDescriptorType = 0x0005
>>>> bEndpointAddress = 0x0081<IN>
>>>> bmAttributes = 0x0002<BULK>
>>>> wMaxPacketSize = 0x0040
>>>> bInterval = 0x0000
>>>> bRefresh = 0x0000
>>>> bSynchAddress = 0x0000
>>>> #*
>>>>
>>>> Userland software, such as sane-find-scanner, is currently sure this is
>>>> is just a printer. I would like this device to introduce itself for
>>>> what
>>>> it is ... a printer + a color scanner.
>>>> Is it feasible? Are there any well-established techniques to (try to)
>>>> reach the goal?
>>>>
>>>> Thanks for any link/suggestion
>>>>
>>>
>>> Hi,
>>>
>>> Maybe you have to switch some button on the printer. Only one driver
>>> can use a
>>> set of IN and OUT endpoints at a time in an interface. Maybe the
>>> original
>>> driver has a multiplexer on top?
>>>
>>> --HPS
>>>
>>>
>> Thanks Hans Petter,
>>
>> the device has no physical switch anywhere.
>> Probably multiplexing is involved. It's worth to note then, if I
>> understand it correctly, that this device does not follow this
>> recommendation I read somewhere:
>>
>> "Important: Do not implement multiplexing over a single USB channel.
>> Software multiplexing is fragile, and the native capabilities of USB
>> should be used for communicating with multiple functions."
>
> Well they are not multiplexing on a single endpoint, and are using
> separate endpoints to do this but they are doing it at the wrong level
> in order to keep the entire device under the control of a single (their)
> driver rather than have to risk having a separate driver usurp part of it.

Thank you for the feedback.

Later I inspected pieces of code in SANE and, as I don't have pure 
printers, I let it grab this device as a candidate for scanning.
As any expert would expect (I suppose), I got an I/O error when a SANE 
backend (xerox_mfp*), using libusb, tried to start scanning.


d

* it is reported to work with Samsung SCX-4200, that seems not to differ 
from SCX-4100 at least for printing.


More information about the freebsd-usb mailing list