Windows radial controller feature reports
This topic details the HID feature reports that are used for radial controller haptic feedback support in Windows 10, version 1607 and later operating systems.
Haptic feedback collection (optional)
If a Windows radial controller device supports haptic feedback, it can allow the system and applications to take advantage of it by including a haptic feedback collection (Page 0x0E, usage 0x01) within the Windows radial controller TLC. For more information on how the HID specification supports haptic feedback, please consult the Haptics page ratification to the HID specification.
The host uses the following usages (through the haptic feedback collection) to communicate the haptic feedback waveform support and allow the host to configure the haptic feedback on the Windows radial controller device. If a device chooses to expose a haptic feedback collection, some usages are mandatory to allow automatic haptic feedback configuration to be supported.
Member | Description | Page | ID | Mandatory/Optional |
---|---|---|---|---|
Waveform List | Ordered list of haptic waveforms supported by the device | 0x0E | 0x10 | Mandatory |
Duration List | Ordered list of durations for waveforms in the Waveform List | 0x0E | 0x11 | Mandatory |
Auto Trigger | Waveform to fire automatically at device’s discretion | 0x0E | 0x20 | Mandatory |
Auto Trigger Associated Control | HID usage of the control associated with haptic feedback | 0x0E | 0x22 | Mandatory |
Intensity | Output – Intensity of Manual Trigger waveform as a percentage | 0x0E | 0x23 | Optional |
Repeat Count | Output – Number of times to play Manual Trigger waveform after initial play | 0x0E | 0x24 | Optional |
Retrigger Period | Output – Duration of time to wait before retriggering Manual Trigger when repeating | 0x0E | 0x25 | Optional |
Waveform Cutoff Time | Max time a Manual Trigger waveform can play before being cut off | 0x0E | 0x28 | Optional |
Waveform List
Waveform List usage represents a collection of the HID usages of supported waveforms, ordered using ordinals. The pre-defined haptics waveforms are defined in the HID specification. Windows supports implementing the following waveforms for a haptic feedback enabled device:
Waveform | Description | Page | ID | Mandatory/Optional |
---|---|---|---|---|
WAVEFORM_NONE | No-op. Should not impact the play state of ongoing waveforms. | 0x0E | 0x1001 | Mandatory |
WAVEFORM_STOP | Stops the playback of ongoing waveforms. | 0x0E | 0x1002 | Mandatory |
WAVEFORM_CLICK | Creates a short “click” feedback | 0x0E | 0x1003 | Mandatory |
WAVEFORM_BUZZ_CONTINUOUS | Buzzes the device for an extended duration of time | 0x0E | 0x1004 | Optional |
Both WAVEFORM_NONE and WAVEFORM_STOP are required for all HID-compliant haptics devices. Ordinals 1 and 2 are implicitly set to WAVEFORM_NONE and WAVEFORM_STOP. They do not need to be declared in the Waveform List or Duration List. The Waveform List declares supported waveforms by the physical minimum and maximum of each ordinal in the list.
Duration List
Duration List usage represents a collection of the durations for the supported waveforms in the Waveform list, ordered using ordinals. The unit for waveform duration is milliseconds, and duration must be a positive non-zero value for any non-continuous waveform. If a waveform is continuous (will play until stopped by the host or the Waveform Cutoff Time is exceeded), then its duration is defined as zero.
WAVEFORM_NONE and WAVEFORM_STOP are assumed to have a duration of zero. They do not need to be declared in the Duration List.
Auto Trigger
The Auto Trigger usage represents a supported waveform usage from the Waveform List which will be triggered automatically by the device as needed based on user interactions. This allows lower-latency response to common user interactions like rotation and clicking. This may need to be modified or disabled by the host, and can be set via a feature report. The Auto Trigger waveform can be disabled by being set to zero by the host.
Auto Trigger Associated Control
The Auto Trigger Associated Control specifies the extended HID usage of the physical control associated with automatic haptic feedback on the device. For a radial controller device, this control should be defined as the Dial usage specified within the same top level collection.
Intensity
The Intensity usage represents the percentage of maximum intensity to apply to a waveform. This value should vary between 0 and 100 percent. 100 percent indicates waveforms will be triggered by the device at their maximum strength, and 0 percent indicates the haptic transducer is not enabled.
If defined in a feature report, it sets the default intensity for all Auto Trigger and Manual Trigger waveforms for the device.
Repeat Count
The Repeat Count usage represents the number of times to repeat a waveform. A Repeat Count of zero indicates the Manual Trigger waveform should only be played a single time (no repeat). If the Waveform Cutoff Time has been exceeded, it is expected that any incomplete repeats will be ignored.
If defined in a feature report, it sets the default repeat count for all Auto Trigger and Manual Trigger waveforms for the device.
Retrigger Period
The Retrigger Period usage represents the amount of time for the device to wait before repeating a Manual Trigger waveform in an output report, per the value specified by Repeat Count. The units for this value are milliseconds. If the Retrigger Period is smaller than the duration of the waveform being played, the waveform should be stopped and restarted at the time period indicated by the retrigger period.
If defined in a feature report, it sets the default retrigger period for all Auto Trigger and Manual Trigger waveforms for the device.
Waveform Cutoff Time
The Waveform Cutoff Time usage represents the maximum amount of time the device will allow a Manual Trigger waveform to be repeated before ending playback. This is a constant value for the device and includes both continuous waveforms without set durations, and waveforms with discrete durations which are set to repeat many times. The units for this value are milliseconds.