Closed hybridherbst closed 3 years ago
Thank you very much for the detailed bug report. Another such layout mismatch has been found and I suspect there might be more. Can you please help me out further with screenshots of the HID Descriptor ?
With my driver package uninstalled and the input system package installed.
I'll add a layout for the SpacePilot Pro, though I am still figuring out how to apply multiple layouts. (see this forum thread)
For future use, I attached a zip file for "write all attached HID device descriptors to json files" InputDeviceHelper.zip Just add that to a project, run Devices/Save all HID descriptors to files.
Here's the full descriptor:
{
"vendorId": 1133,
"productId": 50729,
"usage": 8,
"usagePage": 1,
"inputReportSize": 7,
"outputReportSize": 2,
"featureReportSize": 29,
"elements": [
{
"usage": 1,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 8,
"flags": 2
},
{
"usage": 2,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 9,
"flags": 2
},
{
"usage": 3,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 10,
"flags": 2
},
{
"usage": 4,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 11,
"flags": 2
},
{
"usage": 5,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 12,
"flags": 2
},
{
"usage": 6,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 13,
"flags": 2
},
{
"usage": 7,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 14,
"flags": 2
},
{
"usage": 8,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 15,
"flags": 2
},
{
"usage": 9,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 16,
"flags": 2
},
{
"usage": 10,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 17,
"flags": 2
},
{
"usage": 11,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 18,
"flags": 2
},
{
"usage": 12,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 19,
"flags": 2
},
{
"usage": 13,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 20,
"flags": 2
},
{
"usage": 14,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 21,
"flags": 2
},
{
"usage": 15,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 22,
"flags": 2
},
{
"usage": 16,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 23,
"flags": 2
},
{
"usage": 17,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 24,
"flags": 2
},
{
"usage": 18,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 25,
"flags": 2
},
{
"usage": 19,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 26,
"flags": 2
},
{
"usage": 20,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 27,
"flags": 2
},
{
"usage": 21,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 28,
"flags": 2
},
{
"usage": 22,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 29,
"flags": 2
},
{
"usage": 23,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 30,
"flags": 2
},
{
"usage": 24,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 31,
"flags": 2
},
{
"usage": 25,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 32,
"flags": 2
},
{
"usage": 26,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 33,
"flags": 2
},
{
"usage": 27,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 34,
"flags": 2
},
{
"usage": 28,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 35,
"flags": 2
},
{
"usage": 29,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 36,
"flags": 2
},
{
"usage": 30,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 37,
"flags": 2
},
{
"usage": 31,
"usagePage": 9,
"unit": 0,
"unitExponent": 0,
"logicalMin": 0,
"logicalMax": 0,
"physicalMin": 0,
"physicalMax": 0,
"reportType": 1,
"collectionIndex": 0,
"reportId": 3,
"reportSizeInBits": 1,
"reportOffsetInBits": 38,
"flags": 2
},
{
"usage": 50,
"usagePage": 1,
"unit": 0,
"unitExponent": 0,
"logicalMin": -500,
"logicalMax": 500,
"physicalMin": -32768,
"physicalMax": 32767,
"reportType": 1,
"collectionIndex": 0,
"reportId": 1,
"reportSizeInBits": 16,
"reportOffsetInBits": 40,
"flags": 2
},
{
"usage": 49,
"usagePage": 1,
"unit": 0,
"unitExponent": 0,
"logicalMin": -500,
"logicalMax": 500,
"physicalMin": -32768,
"physicalMax": 32767,
"reportType": 1,
"collectionIndex": 0,
"reportId": 1,
"reportSizeInBits": 16,
"reportOffsetInBits": 24,
"flags": 2
},
{
"usage": 48,
"usagePage": 1,
"unit": 0,
"unitExponent": 0,
"logicalMin": -500,
"logicalMax": 500,
"physicalMin": -32768,
"physicalMax": 32767,
"reportType": 1,
"collectionIndex": 0,
"reportId": 1,
"reportSizeInBits": 16,
"reportOffsetInBits": 8,
"flags": 2
},
{
"usage": 53,
"usagePage": 1,
"unit": 0,
"unitExponent": 0,
"logicalMin": -500,
"logicalMax": 500,
"physicalMin": -32768,
"physicalMax": 32767,
"reportType": 1,
"collectionIndex": 0,
"reportId": 2,
"reportSizeInBits": 16,
"reportOffsetInBits": 40,
"flags": 2
},
{
"usage": 52,
"usagePage": 1,
"unit": 0,
"unitExponent": 0,
"logicalMin": -500,
"logicalMax": 500,
"physicalMin": -32768,
"physicalMax": 32767,
"reportType": 1,
"collectionIndex": 0,
"reportId": 2,
"reportSizeInBits": 16,
"reportOffsetInBits": 24,
"flags": 2
},
{
"usage": 51,
"usagePage": 1,
"unit": 0,
"unitExponent": 0,
"logicalMin": -500,
"logicalMax": 500,
"physicalMin": -32768,
"physicalMax": 32767,
"reportType": 1,
"collectionIndex": 0,
"reportId": 2,
"reportSizeInBits": 16,
"reportOffsetInBits": 8,
"flags": 2
}
],
"collections": []
}
You Sir, are a gentleman and a scolar.
Thanks very much, I'll see if I can add the input helper as a sample to the package, in case more situations like this pop up.
Input Device Helper was added to the package's samples in beta 5
Describe the bug I'm on the development branch, trying out the HID implementation. Seems that the layout that SpaceNavigatorHIDState is matching for does not really match the device layout reported from the navigator:
What it's looking for
The actual layout
![image](https://user-images.githubusercontent.com/2693840/112989272-04039480-9165-11eb-940e-6ce3842db9b5.png)
To Reproduce Steps to reproduce the behavior:
Expected behavior Space Navigator works
Actual behavior Nullref, no editor navigation, layout isn't matched
Desktop: