Elite Controller 2 paddles under Windows

Hi
I don’t know another location to ask about SDL(3)
I have an XBox Elite Controller 2 with the paddles in the back. I try to get the paddle state. But i did not manage to do so. My application uses VS2022 and C# under Windows.

But still VS2022 and the SDL-testcontroller-app will not recognize the paddles.

Is SDL capable to get these paddles under Windows? What am i doing wrong? It must be possible since Steam and ReWASD can read the paddles.

greets Megapit

1 Like

There are events for these buttons, so it should work.

    SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1,   /* Upper or primary paddle, under your right hand (e.g. Xbox Elite paddle P1) */
    SDL_GAMEPAD_BUTTON_LEFT_PADDLE1,    /* Upper or primary paddle, under your left hand (e.g. Xbox Elite paddle P3) */
    SDL_GAMEPAD_BUTTON_RIGHT_PADDLE2,   /* Lower or secondary paddle, under your right hand (e.g. Xbox Elite paddle P2) */
    SDL_GAMEPAD_BUTTON_LEFT_PADDLE2,    /* Lower or secondary paddle, under your left hand (e.g. Xbox Elite paddle P4) */

@ AntTheAlchemist

I agree with you. Everywhere in the sourcecode i find the paddles. But even with the testcontroller.app in sdl code i don’t receive paddle events.
Somewhere i read, that he paddles require HIDApi. But in Windows this is disabled and only Rawinput is used. But i didn’t find any confirmations for that. Somehow it must work!

Next i try to do is to search for steam-code and look if i find something in there.

SDL_HINT_JOYSTICK_HIDAPI is on by default, so HIDAPI should be active in Windows. It might require input from the gamepad before it kicks in though. You could try disabling SDL_HINT_JOYSTICK_WGI & SDL_HINT_JOYSTICK_RAWINPUT.

Can you look for SDL_EVENT_JOYSTICK_BUTTON_DOWN events to see if they’re coming through as unmapped scancodes?

tested what you wrote.
Disabled WGI and Rawinput. No effect. Than disabled XInput. The testcontroller.app did not show any controllers than. Hidapi was all the time 1
So, it look like HidApi not work under Windows with this controller.

One other thing I just remembered. Is the Steam Client running when you test SDL? Steam really messes things up for SDL if it’s running.

^ If that doesn’t solve it, then this sounds like a problem with SDL? Because it works in Steam…

I’m curious if perhaps steam has custom default mappings,
@AntTheAlchemist: since yours is working, are you able to print the mapping string from SDL_GetGamepadMapping of your controller?
It might be interesting to compare the two.

Also, @Megapit: have you tried using the file from mdqinc/SDL_GameControllerDB to expand your supported list of controllers? It’s not from the official SDL githubs, but it is commonly in use and supports a wide range of controllers.

Steam and ReWASD use a custom driver to read the paddles on Windows. They’re hidden from applications when using the normal Windows APIs.

They’re hidden from applications when using the normal Windows APIs.

that is what im afraid of. I guess there is no way to do it without an special driver using the regular Windows APIs.

But it seams to work under Linux. I guess the controller is sending the needed USB packages regardless of the operation system and SDL is parsing them in Linux using HidApi.

Is there any way to use HidApi under Windows? Or is HidApi completly blocked by Windows?

1 Like

Windows fakes HIDAPI interfaces for Xbox controllers. In this case the triggers are joined into a single axis and the paddles are still not exposed. You’re better off using the other APIs in that case.

1 Like