It takes more than some client-side UI tweaks for full support for the Legion Go controller. You'd need a new kernel driver for it. (Definitely doable if someone speaks C and Linux, but probably not in scope for the Steam client.)
Here are the descriptors:
sudo usbhid-dump -m 17ef:6182
001:004:003:DESCRIPTOR 1700454866.327564
05 01 09 06 A1 01 85 03 05 07 19 E0 29 E7 15 00
25 01 75 01 95 08 81 02 75 08 95 01 81 01 05 07
19 00 2A FF 00 15 00 26 FF 00 75 08 95 06 81 00
05 08 19 01 29 03 25 01 75 01 95 03 91 02 95 05
91 01 C0 05 01 09 02 A1 01 85 09 09 01 A1 00 05
09 19 01 29 05 15 00 25 01 95 05 75 01 81 02 95
01 75 03 81 01 05 01 09 30 09 31 16 01 F8 26 FF
07 75 0C 95 02 81 06 09 38 15 81 25 7F 75 08 95
01 81 06 95 01 81 03 C0 C0
001:004:002:DESCRIPTOR 1700454866.330541
06 A0 FF 09 01 A1 01 09 03 85 04 15 80 25 7F 35
00 45 FF 75 08 95 3F 81 02 09 05 85 05 15 80 25
7F 35 00 45 FF 75 08 95 3F 91 02 C0
001:004:001:DESCRIPTOR 1700454866.333557
05 0D 09 05 A1 01 85 01 09 22 A1 02 15 00 25 01
09 47 09 42 95 02 75 01 81 02 95 01 75 03 25 04
09 51 81 02 81 03 05 01 15 00 26 00 04 75 10 55
0E 65 13 09 30 35 00 46 70 00 95 01 81 02 26 00
04 46 70 00 09 31 81 02 C0 05 0D 09 22 A1 02 15
00 25 01 09 47 09 42 95 02 75 01 81 02 95 01 75
03 25 04 09 51 81 02 81 03 05 01 15 00 26 00 04
75 10 55 0E 65 13 09 30 35 00 46 70 00 95 01 81
02 26 00 04 46 70 00 09 31 81 02 C0 05 0D 09 22
A1 02 15 00 25 01 09 47 09 42 95 02 75 01 81 02
95 01 75 03 25 04 09 51 81 02 81 03 05 01 15 00
26 00 04 75 10 55 0E 65 13 09 30 35 00 46 70 00
95 01 81 02 26 00 04 46 70 00 09 31 81 02 C0 55
0C 66 01 10 47 FF FF 00 00 27 FF FF 00 00 75 10
95 01 05 0D 09 56 81 02 05 0D 09 54 25 7F 95 01
75 08 81 02 05 09 09 01 25 01 75 01 95 01 81 02
95 07 81 03 05 0D 85 02 09 55 09 59 75 04 95 02
25 0F B1 02 06 00 FF 85 03 09 C5 15 00 26 FF 00
75 08 96 00 01 B1 02 C0 05 0D 09 0E A1 01 85 04
09 22 A1 02 09 52 15 00 25 0A 75 08 95 01 B1 02
C0 09 22 A1 00 85 05 09 57 09 58 75 01 95 02 25
01 B1 02 95 06 B1 03 C0 C0
And some sample packets:
001:004:002:STREAM 1700455014.488447
04 19 74 01 00 64 04 64 04 01 01 01 02 02 80 80
80 80 00 00 00 00 00 00 02 80 00 00 00 00 80 80
80 80 00 FF 33 33 0E 04 01 1C 0C 00 00 C4 14 21
00 E4 00 00 00 00 00 00 00 00 00 00 00 00 00 00
001:004:002:STREAM 1700455014.520443
04 19 74 01 00 64 04 64 04 01 01 01 02 02 80 80
80 80 00 00 00 00 00 00 02 80 00 00 00 00 80 80
80 80 00 FF 33 33 0E 04 01 1C 0C 00 00 C4 14 21
00 E4 00 00 00 00 00 00 00 00 00 00 00 00 00 00
001:004:002:STREAM 1700455014.552441
04 19 74 01 00 64 04 64 04 01 01 01 02 02 80 80
80 80 00 00 00 00 00 00 02 80 00 00 00 00 80 80
80 80 00 FF 33 33 0E 04 01 1C 0C 00 00 C4 14 21
00 E4 00 00 00 00 00 00 00 00 00 00 00 00 00 00
The interesting bit is that second line. The first three 00 00 00 are which buttons are being pressed.
dpad r 01 00 00
dpad l 02 00 00
dpad d 04 00 00
dpad u 08 00 00
menu 00 00 01
capture 00 00 02
y 00 10 00
x 00 20 00
b 00 40 00
a 00 80 00
y3 00 00 20
y2 00 00 40
y1 00 00 80
select 80 00 00
start 40 00 00
rt 00 01 00
rb 00 02 00
lt 00 04 00
lb 00 08 00
Then you've got analog values for the triggers. The 80 80 at the end of that line and at the beginning of the next line are for the gyroscope.
Great project if someone wants to learn driver development.
I know we'd all appreciate a Valve contribution here, especially as they talk of bringing SteamOS to other handhelds, but this is outside the scope of the Steam client.
I know we'd all appreciate a Valve contribution here, especially as they talk of bringing SteamOS to other handhelds, but this is outside the scope of the Steam client.
I disagree.
Valve already provides the extended Driver for the XBOX Elite controller.
I bought a Lenovo Legion Go with sole purpose of installing Archlinux on it, and I wrote a few things along the way:
Also I made this graphic to represent the buttons that don't work in X https://0x0.st/HvK6.png
but that was just before I discovered 17ef:6184 device that appears when disconnecting the controllers (adding to the 17ef:6182 and 17ef:6185 ones that I noticed first), so then I played around detaching and switching FPS on/off to figure out all the combinations and whatnot here https://old.reddit.com/r/LegionGo/comments/17u5nz4/linux_usbhiddump_m_17ef6182_e_all_this_shows_that/k9njobw/
but otherwise so far, even though usbhid-dump detects all the buttons, X events are not available yet, but I think the data I jotted down from usbhid-dump should be enough to probably get some X events for all the presses and movements and whatnot, but I don't know enough to know how to do this yet.
Also, back on November 14th, I asked in Libera.net #linux IRC channel
"Is there some place that shows examples of usb hid input devices that I can try to copy and modify to figure out how to get the usbhid-dump values to make the input device function or something like that?"
and someone replied mentioning about one guy that made a tablet driver before an official driver was made and released:
Jotting this here too so I don't forget again, but I haven't had time to look into this too much yet anyway
@jasonkhanlar There is a Project for the Ally that Remaps the Buttons and Gyro into DS4 Controller for steam to use.
I plan to fork that Project on the Weekend and adapt it to Remap everything on the Go to a Virtual Steam Deck for the full Steam Remap Experience.
A lot to figure out, but we need a Solution in the Meantime.
Nothing extracted yet.
Currently, the Community takes care of a lot of the Heavy lifting when it comes to supporting other Handhelds in SteamOS.
People in the Community of Projects like ChimeraOS and Bazzite find a lot of Quirks to get the SteamOS Experience as close to the Deck as you can get.
But one thing we are currently a bit depending on Valve. There is no real way to replicate the Controller Remapping like it is on the Deck.
So I would like to ask with this Issue for your help in getting this officially supported.
I think the main focus should be on the Mainstream ones:
It would be great to see Remapping Support for all the Extra Buttons and support for the use of Gyro on these Devices.