RawInput plugin: HID Report not being parsed correctly

I have a USB input device (3DConnexion SpaceMouse Module- USB) that is generating Raw Axis data. It does not require any drivers, it just reports itself as a 6DOF joystick with 2 buttons (note that the actual hardware in hand does not have any physical buttons, the logic is just there to support the retail version, which does).

The Vendor ID is 0x256F, the Product ID is 0xC641. The device docs claim

"The SpaceMouse® Module USB is recognized by the operating system as a standard joystick.
The USB protocol follows the HID spec rev. 1.11, so no additional driver is needed."

I have mapped the axis using the RawInput plugin. When I move the axes, I get an error “LogRawInputWindows:Warning: Failed to value 0. c011000a:HIDStatusIncompatibleReportID” for each axis (so “Failed to value 0”, “Failed to value 1” etc.).

I’ve used a couple different USB debugging tools (Device Monitoring Studio, and USBlyzer) and the device is sending the data expected, and the HID report header looks valid. Here I’ve selected a URB packet that is the X,Y and Z array (the XYZ array is a 7 byte array that has an 01 in the first byte; the rX, rY and rZ packets have an 02 in that array).

I’ve exported the device data as by USBlyzer (the full data as seen in the left hand column of the above screenshot): [HID Dump][3].

Device Monitoring Studio, though, does complain about not being able to parse the HID descriptor, so it’s not just UE4.15:

I’ve provided more details at Raw Input Plugin error - Blueprint - Epic Developer Community Forums

Hey MDCCLXXVI-

Can you provide a screenshot of the current settings for your Raw Input setup? Also, how are you printing the Axis values to screen? Can you provide your setup for this as well? Additionally, can you try creating a new Vehicle / Advanced Vehicle template project? The Vendor ID and Product ID should auto-populate if the SpaceMouse is plugged in when you create the project. Let me know if these do not auto-populate and/or if the mouse has any input in either of these templates when you try to play in the editor.

Hi ,

I created a new vehicle project with the spacemouse and a Logitech Force 3D Pro joystick plugged in. The project was created with the config for what I believe is a Logitech racing wheel (0x046D/0xC262), but neither the joystick (0x046D/0xC286) or the spacemouse: (0x256F/0xC641):

However, even if I remove the existing config, before I even add the spacemouse, moving the device kicks a stream of errors off in the output log:

Setting the ID’s doesn’t fix the issue.

I’ve left the input settings at default:

I’m not getting anything working with the Logitech Pro joystick either. Setting up the IDs and mapping them, the output from the device is never captured by the engine.

We can try troubleshooting that, if you think it would be simpler, but I was concentrating on the spacemouse because it’s the device we want to use, and it was actually showing something in the editor.

As for how I tried displaying the values on screen, I was just looking at the axis value on every tick in the Level Blueprint:

While scanning through the source code for the plug-in, I found the terminal switch to enable on-screen debugging. I switched it on and tried moving the spacemouse while the game was running. I continued to get the HIDP_STATUS_INCOMPATIBLE_REPORT_ID error in the output window, but I did see the expected debugging values!

So the data is getting there. I haven’t had sucess yet getting it linked correctly, and I’m still seeing a stream of errors, but it’s encouraging.

Note that it’s clear from the data (numbers range from 0-0,6 or so, AND 93.0 to 93.6ish) that the wrong floating point conversion is happening.

After fiddling with the mappings, I was able to move the car with the spacemouse, albeit badly (due to the issue with the miscalculated floating point conversion). I might be able to hack together a blueprint or some code to massage it into the right shape, if I can figure out how it’s currently being .

Hey MDCCLXXVI-

I’m glad to hear you’ve got it at least responding somewhat at this point. You may want to try adjusting the “Inverted” and “Offset” values for the different axes. Using the steering wheel as an example, the acceleration pedal provides an output of 1 when at rest and 0 when pressed. The easiest way to account for this, is to turn on inverted, which alters it so that it is -1 at rest and 0 when pressed. Providing an offset of 1.0 then gives a final output of 0 (-1+1) when at rest and 1 (0+1) when pressed. Let me know if this information is helpful in configuring your setup.

Right; so, there’s no combination of scale, inversion and offset that works, as -1=93.6, -0=93.1, +0=0. +1=0.5 (assuming a correct mapping of -1 to 1).
I think I can work around it, I’m working on that now.

I’d like to fix the HIDStatusIncompatibleReportID report in the editor, or see it fixed, but reading everything I can find, I’m not sure it’s something I understand.

Hey MDCCLXXVI-

After speaking with other developers we are still unable to pinpoint why your device is showing these results. In theory the plugin should be able to support most devices that come through the raw input API, however the difference in devices/drivers makes it difficult to identify problems in specific devices. Unfortunately we’re unable to take any further action on this issue at this time.

Cheers

So, I’m not sure how to IM you, but it’s possible I could send you the device for testing, if it would help (if you think you’ll be revisiting the issue in the near future). Obviously I’d need it back, but we can probably work something out.

Your call. I was able to hack together a solution, but it’s very ugly. I’ll probably just buy the DirectInput plugin from the marketplace and move on with my life.

Hey, I am trying something similar to you, but I am also getting errors in the way the values are being mapped. Could you share some details on how you managed to get the debugging on screen?

Hi,

I don’t have time this morning to look, but if you look at the source (on github) for the plug in, you’ll find where there are some command line switches declared. One of them is the command to show debugging on screen. It might have been taken out, you may have to go back to when this thread was originally posted in time to see the commands, I’m not sure. I can try to look later if you don’t find it.

Try “ShowDebug RawInput”