Bug 494705 - XBox Series X game controller inputs not updating in Game Controller Settings app
Summary: XBox Series X game controller inputs not updating in Game Controller Settings...
Status: RESOLVED FIXED
Alias: None
Product: systemsettings
Classification: Applications
Component: kcm_joystick (other bugs)
Version First Reported In: 6.2.0
Platform: Arch Linux Linux
: NOR normal
Target Milestone: ---
Assignee: Plasma Bugs List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-10-13 23:53 UTC by cenon.delrosario
Modified: 2024-12-14 15:54 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed/Implemented In: 6.3.0
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description cenon.delrosario 2024-10-13 23:53:10 UTC
SUMMARY
Game Contoller settings app not updating inputs when I test with an XBox Series X controller.

STEPS TO REPRODUCE
1. Connect an XBox Series X controller
2. Go into System Settings -> Game Controller
3. Press D-Pad Left/Right/Down or Left Trigger

OBSERVED RESULT

The Game Controller settings app will not register the button presses.

EXPECTED RESULT

The button presses should show up in the Game Controller settings app.

SOFTWARE/OS VERSIONS
Linux/KDE Plasma:  6.2.0
KDE Plasma Version: 6.2.0
KDE Frameworks Version: 6.6.0
Qt Version: 6.7.3

ADDITIONAL INFORMATION

I used a third party app (https://controllertest.com/xbox-controller-tester) to check if the button presses actually work and they do so I am 100% it is a problem with the Game Controller settings app.
Comment 1 Joshua Goins 2024-12-14 15:54:33 UTC
Git commit ee38a393959e6172fec5e06a083c14e587cbb132 by Joshua Goins, on behalf of Arthur Kasimov.
Committed on 14/12/2024 at 15:43.
Pushed by redstrate into branch 'master'.

kcms/gamecontroller: Show positions of POV hats under Axes table

On many gamepads D-pad is actually exposed as a joystick POV hat instead
of four regular buttons. Unfortunately, the current implementation
completely ignores POV hats / D-pads and doesn't show them in UI.

This commit adds new class HatModel that provides raw position data from
POV hats. Each POV hat is mapped to a pair of X/Y model rows. Both axes
values and hat positions are now displayed under Axes table using new
class AxesProxyModel.

M  +2    -0    kcms/gamecontroller/CMakeLists.txt
A  +44   -0    kcms/gamecontroller/axesproxymodel.cpp     [License: GPL(v2.0+)]
A  +33   -0    kcms/gamecontroller/axesproxymodel.h     [License: GPL(v2.0+)]
M  +30   -0    kcms/gamecontroller/device.cpp
M  +6    -0    kcms/gamecontroller/device.h
M  +5    -0    kcms/gamecontroller/devicemodel.cpp
A  +91   -0    kcms/gamecontroller/hatmodel.cpp     [License: GPL(v2.0+)]
A  +39   -0    kcms/gamecontroller/hatmodel.h     [License: GPL(v2.0+)]
M  +4    -0    kcms/gamecontroller/kcm.cpp
M  +1    -1    kcms/gamecontroller/ui/main.qml

https://invent.kde.org/plasma/plasma-desktop/-/commit/ee38a393959e6172fec5e06a083c14e587cbb132
Comment 2 Joshua Goins 2024-12-14 15:54:38 UTC
Git commit 9c0c319d635f2758d1d310a2a413b7af335c4005 by Joshua Goins, on behalf of Arthur Kasimov.
Committed on 14/12/2024 at 15:43.
Pushed by redstrate into branch 'master'.

kcms/gamecontroller: Replace SDL Game Controller API with Joystick API

Currently the KCM uses a mix of higher-level SDL "Game Controller" API
and lower-level "Joystick" API. Unfortunately, this results in numerous
bugs. The state of some buttons/axes, such as D-pad or right trigger,
is not displayed properly. This happens due to the mismatch between Game
Controller API and Joystick API that report different number and order
of buttons/axes. Another issue is that some non-standard devices like
racing wheels or handbrakes and not detected at all. The Game Controller
API seems to be limited to standard gamepads only.

This commit introduces new Device class that encapsulates SDL_Joystick
object. Both ButtonModel and AxesModel now use Device object to report
raw values from buttons and axes. DeviceModel now manages Device objects
and shows them in the combo box. This ensures SDL Joystick API is used
consistently across all code and avoids API mismatch issues. This should
also properly detect joysticks, wheels and handbrakes. Unfortunately I
don't have any of these devices and can't really test them.

The Gamepad class encapsulates SDL_GameController object and provides
higher-level access to gamepads. For now it is only used to display the
coordinate of left stick in PositionWidget. In future it can be used to
revamp the UI and show the symbolic view of standard gamepads.
Related: bug 484046, bug 487694, bug 494913

M  +1    -0    kcms/gamecontroller/CMakeLists.txt
M  +33   -14   kcms/gamecontroller/axesmodel.cpp
M  +10   -7    kcms/gamecontroller/axesmodel.h
M  +27   -28   kcms/gamecontroller/buttonmodel.cpp
M  +10   -12   kcms/gamecontroller/buttonmodel.h
A  +90   -0    kcms/gamecontroller/device.cpp     [License: GPL(v2.0+)]
A  +49   -0    kcms/gamecontroller/device.h     [License: GPL(v2.0+)]
M  +71   -30   kcms/gamecontroller/devicemodel.cpp
M  +16   -5    kcms/gamecontroller/devicemodel.h
M  +23   -32   kcms/gamecontroller/gamepad.cpp
M  +7    -20   kcms/gamecontroller/gamepad.h
M  +8    -3    kcms/gamecontroller/ui/main.qml

https://invent.kde.org/plasma/plasma-desktop/-/commit/9c0c319d635f2758d1d310a2a413b7af335c4005