Below is an excerpt from an Atmel app note about the Remote Wake feature:
http://www.atmel.com/Images/doc7604.pdfThe Arduino USB code may not have this feature and may need to be added.
It doesn't look like it would be difficult to add.
6.3 How to manage the Remote Wake Up feature
The Remote Wake Up is an optional feature specified by the USB to allow the device to wake
the host up from a stand by mode (refer to the USB specification for further details). This request
is the only request which can be initiated by the device, but it has to be allowed by the host. The
host sends a Set Feature request to enable the Remote Wake Up feature just before sending
the suspend request. If the host did not send the Set Feature (RemoteWakeUpEnable), the
device is not allowed to perform this feature.
A USB device reports its ability to support remote wakeup in its configuration descriptor (refer
below to see how it is done with Atmel library). If a device supports remote wakeup, it must also
be allowed the capability to be enabled and disabled using the standard USB requests.
The configuration descriptor is defined in the usb_descriptors.h file as below:
// HID Mouse CONFIGURATION
#define NB_INTERFACE 1
#define CONF_NB 1
#define CONF_INDEX 0
#define CONF_ATTRIBUTES USB_CONFIG_BUSPOWERED
#define MAX_POWER 50 // 100 mA
To setup the Remote Wake Up feature, you have to modify the CONF_ATTRIBUTES as below:
#define CONF_ATTRIBUTES (USB_CONFIG_BUSPOWERED|USB_CONFIG_REMOTEWAKEUP)
If the device supports the Remote Wake Up feature, the user has to manage the
Set_Feature(DEVICE_REMOTE_WAKEUP) request using the void usb_set_feature(void).
Once the Set_Feature(DEVICE_REMOTE_WAKEUP) is well managed, you can use any button
(must be used in external interrupt/pin change mode) for example to wake up the host. To do
this, you have to take care of the following details:
• First, the USB controller must have detected the “suspend” state of the line: the remote
• wake-up can only be sent when a SUSPI flag is set.
• The firmware has then the ability to set RMWKUP to send the “upstream resume” stream.
• This will automatically be done by the controller after 5ms of inactivity on the USB line.
• When the controller starts to send the “upstream resume”, the UPRSMI interrupt is triggered
• (if enabled). SUSPI is cleared by hardware.
• RMWKUP is cleared by hardware at the end of the “upstream resume”.
• If the controller detects a good “End Of Resume” signal from the host, an EORSMI interrupt
is triggered (if enabled).