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

Julian Elischer julian at freebsd.org
Sun Oct 3 22:47:04 UTC 2010


  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.


>
> d
> _______________________________________________
> freebsd-usb at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-usb
> To unsubscribe, send any mail to "freebsd-usb-unsubscribe at freebsd.org"
>



More information about the freebsd-usb mailing list