I'm trying to create a WinUSB device using a SAM3X microcontroller and the ASF (it's an Arduino Due but I ported it to mBed using ASF since Arduino's software is shit). A WinUSB device has a special USB string descriptor at 0xEE that contains information about the device. According to Microsoft's documentation, when you plug in a USB device Windows (8 and later) automatically queries the 0xEE string, and if present and correct it will automatically load the WinUSB driver. It basically makes custom devices plug-and-play on Windows.
Unfortunately, the code I'm using never seems to get to the point where 0xEE is queried. Has anyone ever done anything like this? Or have any experience of debugging it? Is there a way I can manually query USB string descriptors in Windows?
Also, there are actually two methods for configuring WinUSB devices - the second uses USB's Binary Object Store (BOS) instead of the 0xEE string because apparently it is more reliable. Unfortunately the documentation for it is much worse so I haven't used that method.
Anyway, here is my code. I added an infinite blinking light loop to see if 0xEE is ever queried but the code doesn't get that far. Anyone have any ideas?
// In usb_conf.h: Add extra string descriptors to make this a WinUSB device, so the driver is installed automatically!
#define UDC_GET_EXTRA_STRING msos_extra_string
// Allow sending extra string descriptors to make this a WinUSB device. See
// This returns the "OS String" which says how to retrieve the descriptor...
// And this returnst the actual descriptor.
// And then in WinUSB_Device.cpp:
led = !led; // It never gets to here :(