-
-
Notifications
You must be signed in to change notification settings - Fork 7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
use IAD Descriptor for device descriptor to follow the specification #5495
use IAD Descriptor for device descriptor to follow the specification #5495
Conversation
….0 ECN Interface Association Descriptor" and "USB Interface Association Descriptor Device Class Code and Use Model"
I think I've also noticed this at the time I helped working at the pluggable USB. This always sounded wrong but I never knew why this was implemented. I think arduino should correct this now. |
I think it was implemented as a workaround since at that time the standard specification hadn't define the IAD related usage. |
I'm ok with this one, will merge after a complete test of both CDC and CDC+HID functionality on
If anyone is interested in taking part in one of these tests and owns a Micro/Leonardo (or clones), apply here and we'll set up a (common) reduced test suite 😄 |
I have a MSDN subscription so I can easily spin up any flavor of WinXP needed but I'll just need a few days to order a Micro... Let me know. |
@facchinm is there any plan for arduino to create one automation test environment to do the on target test? and some regression test suite on the target board can be integrated in the CI. |
@cuitoldfish we already have a test suite but the OS "flavour" choice is not so broad (mainly because most tests are platforms independent). I'll keep you posted as soon as the reduced version is available 🙂 |
@facchinm I have a Micro on order from Adafruit, should have it in my hands tomorrow. Can you send me a test case to run? I'll spin up Win XP Pro 32-bit with no service packs and with SP3 unless you have different or more flavors you'd like tested. |
@facchinm it seems there is no stop bits transmitted by the Serial library? No body use Serial::stopbits_ |
Just to save you guys a little time testing, CDC+HID was first supported on XP by SP3 and on Vista by SP1. On Macintosh, 10.7 (Lion) was the first to support it. CDC+HID definitely will not work on XP SP2 and Mac OSX 10.6. |
@PaulStoffregen , that was one of the points 😄 The tests should check that "advertising" as IAD does not confuse older OS while keeping CDC serial working |
I tried running IDE 1.6.12 on WinXP without any service service packs and it will not launch... Runs fine on SP3. |
@dlabun that's interesting; can you paste here the output of ./tester_linux -idepath /home/martino/arduino-1.6.12/
./tester_osx -idepath ~/Downloads/Arduino.app/Contents/Java/
./tester.exe -idepath "C:\Program Files (x86)\Arduino\" Copy and paste the output here for validation |
XP users without SPE3 can use an older version of the library. Seriously, that make absolutely no sense to write wrong outdated code for unsupported microsoft OS. Those people will possibly use IDE 1.0.5 anyways. |
Many years ago I tried to do this. |
Can you expand on this 🙂 ? Is it difficult/impossible/useless? Do you think we should adopt the IAD descriptor and drop the "GENERIC" one (as per PR request)? |
Output on Linux 4.7.6
|
I never found a way to make CDC+HID backwards comparability work on both Mac and Windows. On each, I discovered incorrect descriptors that allowed it to work, but the solution for XP SP2 didn't work at all on Macs, and the solution for OSX 10.5 & 10.6 wasn't recognized by any version of Windows. Both required horrible hacks that violate the standards. Not recommended. |
The WinXP issue appears to be related to Java being incompatible without SP3 being install. Java itself is throwing an error of "The procedure entry point DecodePointer could not be located in dynamic link library KERNEL32.dll". |
@facchinm How long did it take your computer to run the test case? The test case "locked up" on my Win7 machine... This is all I got for information after waiting for 5 minutes:
|
Also, No success at all on WinXP SP3... The test case won't execute as it dies while linking.
|
Oh, the first one looks like a problem with the board not being recognized early enough for the following test to start... You are not on a VM right? I'm modifying the go executable to make the timeout longer (and attaching it here of course). |
I was on my physical Win7 PC when the test case wouldn't finish executing... Glad you warned me about the mouse jumping because I freaked me out for a moment. |
@facchinm , what's the current progress for this verification? |
Hi @cuitoldfish , verification is ongoing (slowly) and no problem has been found yet, I believe we can merge it before next AVR core release |
issue description
My host device based on Nucleus usb stack failed to enumerate Arduino in below step:
specification
per "USB 2.0 ECN Interface Association Descriptor" and "USB Interface Association Descriptor Device Class Code and Use Model", if one device use IAD, then it must use class type 0xEF, subclass type 0x02, protocol type 0x01
conclusion
Currently Arduino doesn't follow the specification strictly. I guess it might had been implemented before the specification was published, at that time, the host may have own different behavior for IAD. But now, as the specification has been accepted and published, Arduino should update this.
I have tested in Win7 system, and Nucleus, this update works.