
Hi Heiko,
Hello Lukasz,
In the dfu spez [1] chapter 4.2.1 the following fields are specified:
bDeviceClass = 00h (Description: „see interface“), currently set in U-Boot to 2.
bDeviceSubClass = 00h (Description: „see interface“), currently set in U-Boot to 2.
bcdUSB = xxxxh (Description: USB specification release number in binary coded decimal -> 0110h) Currently set to 0x200
If I look in ./drivers/usb/gadget/f_dfu.c:
static const struct usb_qualifier_descriptor dev_qualifier = { .bLength = sizeof dev_qualifier, .bDescriptorType = USB_DT_DEVICE_QUALIFIER, .bcdUSB = __constant_cpu_to_le16(0x0200), .bDeviceClass = USB_CLASS_VENDOR_SPEC, .bNumConfigurations = 1, };
bDeviceClass = USB_CLASS_VENDOR_SPEC = 0xff ?
Hmm... why states the doc this should be set to 0 = USB_CLASS_PER_INTERFACE? 2 is USB_CLASS_COMM ... which seems more appropriate ...
The bDeviceClass seems to be set to wrong value. I think that it should have values as they are specified by the standard.
bDeviceSubClass is not defined ... bcdUSB = 0x0200 which should be 0x0110 ... oh, as [1] is the dfu 1.1 specification it should be 0x0110 but the spec [1] says 0100 ... is the spec here buggy? is there a dfu 2.0 specification availiable?
The 2.0 value is a reminiscent of the original DFU code (once prepared for Linux) and was wrongly set to indicate USB 2.0.
I think that we should have 0x0110, which indicates supported DFU version 1.1.
Has this differences to the spec some reason? Or can we change them to the values specified in the spec?
I think that values which you have pointed out are wrong and should be changed to the one from spec.
Thanks!
bye, Heiko