The "Windows joystick utility" does not refresh fast enough to show the behavior visually. Sometimes it doesn't even light up when I change a single tick.
I've created a test C# console app that confirms the behavior. First the output with some added annotations which you can recognize with a # (comment) mark at the beginning.
Found controller HID=6414, PID=10571
# Initial state
237646561962 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,False,False,False
# Trim wheel one tick down
237652766090 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,False,True,False
237652777049 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,False,False,False
237652789046 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,False,True,False
237652800047 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,False,False,False
237652811044 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,False,True,False
237652823083 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,False,False,False
237652834043 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,False,True,False
237652846084 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,False,False,False
# Trim wheel one tick up
237657814141 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,True,False,False
237657825118 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,False,False,False
237657837125 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,True,False,False
237657848120 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,False,False,False
237657859120 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,True,False,False
237657871121 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,False,False,False
237657882133 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,True,False,False
237657894157 - buttons: False,False,False,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,False,False,FalseAs you can see, every "tick" is 8 state changes. You'll see the "True/False/True/False/True/False/True/False", hence the 4-pulse behavior.
The same when the wheel is moved one tick up.
Here's the C# code if you wish to reproduce:
var first = Windows.Gaming.Input.RawGameController.RawGameControllers.First();
Console.WriteLine($"Found controller HID={first.HardwareProductId}, PID={first.HardwareVendorId}");
var buttonArray = new bool[first.ButtonCount];
var switchArray = new Windows.Gaming.Input.GameControllerSwitchPosition[first.SwitchCount];
var axisArray = new double[first.AxisCount];
ulong previousTimestamp = 0;
while (true)
{
var timestamp = first.GetCurrentReading(buttonArray, switchArray, axisArray);
if (timestamp != previousTimestamp)
{
previousTimestamp = timestamp;
Console.WriteLine($"{timestamp} - buttons: {string.Join(",", buttonArray)}");
}
}Hope this helps.
By
netripper ·