svn commit: r186730 - in head: lib/libusb20
sys/dev/usb2/controller sys/dev/usb2/core
sys/dev/usb2/ethernet sys/dev/usb2/image sys/dev/usb2/include
sys/dev/usb2/serial sys/dev/usb2/sound sys/dev/us...
Hans Petter Selasky
hselasky at c2i.net
Tue Jan 6 08:49:13 PST 2009
On Tuesday 06 January 2009, Stanislav Sedov wrote:
> On Tue, 6 Jan 2009 16:13:32 +0100
>
> Hans Petter Selasky <hselasky at c2i.net> mentioned:
> > Try:
> >
> > usbconfig -u 0 -a 2 set_config 1
>
> This helps. Now ubsa attaches to the device. But I can't communicate
> with it (no echo even). I see the following messages in the log:
> ubsa_cfg_request:395: device request failed, err=USB_ERR_STALLED (ignored)
> ubsa_cfg_request:395: device request failed, err=USB_ERR_STALLED (ignored)
> ubsa_cfg_request:395: device request failed, err=USB_ERR_STALLED (ignored)
>
> > You can for example add a quirk for this, see "usbconfig -h | grep -i
> > quirk". I know this is not so easy, but if you can make a general rule
> > for when selecting another configuration, I will add it.
>
> Why not let the driver to set the config?
Because:
1) it clashes with USB device side mode, where the config index is received
from Host
2) Different device drivers might want different configurations.
3) The driver for the active configuration might not be loaded.
>
> > Could you dump me the descriptors of your USB device?
> >
> > usbconfig -u 0 -a 2 dump_curr_config_desc dump_device_desc
>
> Sure:
>
> ugen0.2: <AnyDATA CDMA Products AnyDATA Corporation> at usbus0, cfg=1
> md=HOST spd=FULL (12Mbps) pwr=ON
>
> bLength = 0x0012
> bDescriptorType = 0x0001
> bcdUSB = 0x0110
> bDeviceClass = 0x0000
> bDeviceSubClass = 0x0000
> bDeviceProtocol = 0x0000
> bMaxPacketSize0 = 0x0040
> idVendor = 0x16d5
> idProduct = 0x6501
> bcdDevice = 0x0000
> iManufacturer = 0x0001 <retrieving string failed>
> iProduct = 0x0002 <retrieving string failed>
> iSerialNumber = 0x0000 <no string>
This is interesting:
> bNumConfigurations = 0x0001
The device says it only has one configuration! So setting index 1 should not
be allowed.
Could you try to change the check in the ubsa2.c probe routine to check for
config index 0 instead?
Mostly config index 0 is used in USB devices.
%cat *[ch] | grep -i "config.*Index"
#define U3G_CONFIG_INDEX 0
if (uaa->info.bConfigIndex != U3G_CONFIG_INDEX) {
#define UARK_CONFIG_INDEX 0
if (uaa->info.bConfigIndex != 0) {
#define UBSA_CONFIG_INDEX 1
if (uaa->info.bConfigIndex != UBSA_CONFIG_INDEX) {
#define UCHCOM_CONFIG_INDEX 0
if (uaa->info.bConfigIndex != UCHCOM_CONFIG_INDEX) {
if (uaa->info.bConfigIndex != 0) {
#define UFTDI_CONFIG_INDEX 0
if (uaa->info.bConfigIndex != UFTDI_CONFIG_INDEX) {
#define UGENSA_CONFIG_INDEX 0
if (uaa->info.bConfigIndex != UGENSA_CONFIG_INDEX) {
#define UIPAQ_CONFIG_INDEX 0 /* config number 1 */
if (uaa->info.bConfigIndex != UIPAQ_CONFIG_INDEX) {
"config number: %d\n", alt_index);
#define UMCT_CONFIG_INDEX 1
if (uaa->info.bConfigIndex != UMCT_CONFIG_INDEX) {
#define UMOSCOM_CONFIG_INDEX 0
if (uaa->info.bConfigIndex != UMOSCOM_CONFIG_INDEX) {
#define UPLCOM_CONFIG_INDEX 0
if (uaa->info.bConfigIndex != UPLCOM_CONFIG_INDEX) {
#define UVISOR_CONFIG_INDEX 0
if (uaa->info.bConfigIndex != UVISOR_CONFIG_INDEX) {
#define UVSCOM_CONFIG_INDEX 0
if (uaa->info.bConfigIndex != UVSCOM_CONFIG_INDEX) {
Try changing "UBSA_CONFIG_INDEX" to zero.
If it works I will commit a patch for this.
>
> Configuration index 1
>
> bLength = 0x0009
> bDescriptorType = 0x0002
> wTotalLength = 0x003e
> bNumInterfaces = 0x0002
> bConfigurationValue = 0x0001
> iConfiguration = 0x0000 <no string>
> bmAttributes = 0x00a0
> bMaxPower = 0x00fa
>
> Interface 0
> bLength = 0x0009
> bDescriptorType = 0x0004
> bInterfaceNumber = 0x0000
> bAlternateSetting = 0x0000
> bNumEndpoints = 0x0003
> bInterfaceClass = 0x00ff
> bInterfaceSubClass = 0x00ff
> bInterfaceProtocol = 0x00ff
> iInterface = 0x0003 <retrieving string failed>
When you cannot retrive the strings, I think your device is gone! (Crashed)
--HPS
More information about the svn-src-all
mailing list