rawinput-sharp icon indicating copy to clipboard operation
rawinput-sharp copied to clipboard

Cannot open game controller for raw input

Open mat1jaczyyy opened this issue 4 years ago • 2 comments
trafficstars

Hi @mfakane, I'm trying to use your wrapper to receive raw input from game controllers. Here's an example controller I'm trying to read:

image

I've tried to modify SimpleExample to use either HidUsageAndPage.Joystick or HidUsageAndPage.Gamepad, but there is a Win32ErrorException. RegisterRawInputDevices returns false with GetLastError = 87, which is "The parameter is incorrect.".

I also tried to directly access it like this as well:

            try
            {
                // Register the HidUsageAndPage to watch any device.
                RawInputDevice.RegisterDevice(devices[0].UsageAndPage, RawInputDeviceFlags.ExInputSink | RawInputDeviceFlags.NoLegacy, window.Handle);

                Application.Run();
            }
            finally
            {
                RawInputDevice.UnregisterDevice(devices[0].UsageAndPage);
            }

I'm not sure if it's correct, but it returns the same error. What am I supposed to do?

mat1jaczyyy avatar May 09 '21 02:05 mat1jaczyyy

@mfakane Just a reminder, I'd really appreciate if you could find some time to give this a look, please 🙏

mat1jaczyyy avatar May 31 '21 04:05 mat1jaczyyy

Your device has UsageAndPage 1:05, so you should register with:

RawInputDevice.RegisterDevice(HidUsageAndPage.GamePad, RawInputDeviceFlags.InputSink, _window.Handle);

NoLegacy is only relevant for mouse and keyboard devices (see https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-rawinputdevice). InputSink vs ExInputSink depends on your usage.

Is your window (or _window in my example) instance still valid, when you call RegisterDevice? I.e. that it is not out of scope and being garbage collected?

pre-martin avatar Aug 06 '21 07:08 pre-martin