wolf2:
when will this find its way into the official builds?
There needs to be some cleanup, especially for the second line (UDCON |= (1 << RMWKUP)) which should not be necessary in a normal suspend/wakeup scenario.
The USB state machine must conform to the USB standard and to my understanding this second line violates the USB standard because it send a wakeup even when the bus is not in idle state or at least the Arduino USB state machine doesn't know the bus is in idle state.
I mean the following sentence in chapter 7.1.7.7. "Resume" of the USB 2.0 spec:
"A device with remote wakeup capability may not generate resume signaling unless the bus has been continuously in the Idle state for 5 ms (TWTRSM)."
And chapter 9.1.1.6 "Suspended":
"If a USB device is capable of remote wakeup signaling, the device must support the ability of the host to enable and disable this capability. When the device is reset, remote wakeup signaling must be disabled."
And chapter 9.4.5 "Get Status":
"The Remote Wakeup field indicates whether the device is currently enabled to request remote wakeup. The default mode for devices that support remote wakeup is disabled."
Unfortunately I don't have much time at the moment for this clarification. Anybody else with some USB know-how?
Michael