-
Notifications
You must be signed in to change notification settings - Fork 25
Support for G923 (PS4/PC version only) #50
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
Great! I'll merge it as soon as possible after testing. I guess mode switching should work very similar to a G29. Could you test it? Some games don't even recognize the G29. That's what the compatilibity modes are good for. AFAIK, TruForce consists of two rumble motors in the wheel rim. It might be treated like another effect type, (maybe FORCE_TYPE 0x0f?) with two possible arguments: strong force and weak force. |
|
On 6/22/21, Bernat ***@***.***> wrote:
AFAIK, TruForce consists of two rumble motors in the wheel rim. It might be
treated like another effect type, (maybe FORCE_TYPE 0x0f?) with two possible
arguments: strong force and weak force.
Could you give links to some source of this information?
Logitech explained in the past that this new rumble effects, related
to engine revving(game sends engine soundwave to logitech drivers) are
possible to new electronics and 1000Hz.
I've tried now to google about your news, and cannot find anything
about additional rumble motors in wheel rim. Maybe you've disassembled
wheel yourself, (or knows someone that did that) and can confirm it's
the case?
|
|
@JacKeTUs Have you tried without the usb_modeswitch? According to the document it should be required on the G29 too, but it works without it. I've tried doing the mode switch on my G29 and the wheel is unusable after that. |
My sources are the reviewers' descriptions. I haven't found anyone who's disassembled the rim but almost everyone describes it in the same way, a rumbling under their palms. I could be wrong though. Maybe it's just a gimmick using the main motors. I don't really know. |
Hello!
I tried to send various switch commands, but wheel doesn't reconnect with target PIDs. May be I just don't understand how compatibility modes supposed to work.
Tried 0x0f, wheel does not respond. According to the docs FORCE_TYPE 0x0a, 'square wave', or 'vibration' exists. Tried that, but I also got no reaction. |
hid-lg4ff.c
Outdated
| @@ -248,6 +253,9 @@ static const struct lg4ff_multimode_wheel lg4ff_multimode_wheels[] = { | |||
| {USB_DEVICE_ID_LOGITECH_G29_WHEEL, | |||
| LG4FF_MODE_NATIVE | LG4FF_MODE_G29 | LG4FF_MODE_G27 | LG4FF_MODE_G25 | LG4FF_MODE_DFGT | LG4FF_MODE_DFP | LG4FF_MODE_DFEX, | |||
| LG4FF_G29_TAG, LG4FF_G29_NAME}, | |||
| {USB_DEVICE_ID_LOGITECH_G923_WHEEL, | |||
| LG4FF_MODE_NATIVE | LG4FF_MODE_G923 | LG4FF_MODE_G29, | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here you should add the other modes supported by the G29.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added in new commit
| @@ -303,10 +312,26 @@ static const struct lg4ff_wheel_ident_info lg4ff_g29_ident_info2 = { | |||
| USB_DEVICE_ID_LOGITECH_G29_WHEEL | |||
| }; | |||
|
|
|||
| static const struct lg4ff_wheel_ident_info lg4ff_g923_ident_info = { | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The second and third values are the mask and result. Since we're using the same values as the G29 there won't be any match. Appendix A.2 of the Logitech document explains the process to identify the wheel but doesn't cover all models. I'd use the same masks as the G29 but adjust the bcdDevice values to your wheel. These values can be taken from lsusb output. Here, use the bcdDevice value when connecting the wheel for the first time without the module switching to native mode.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, the others modes should be added for the wheel to work correctly in multi-mode.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Modes added, bcdDevice changed to real. Unfortunately, wheel does not changing modes with commands...
hid-lg4ff.c
Outdated
| USB_DEVICE_ID_LOGITECH_G923_WHEEL | ||
| }; | ||
|
|
||
| static const struct lg4ff_wheel_ident_info lg4ff_g923_ident_info2 = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here but the third value should be the bcdDevice value after the wheel has switched to native mode.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
info2 deleted, because bcdDevice value does not change, stays 0x3800
The file is "alternate_modes". I've added some comments to your changes, I think there's an error and some omissions. Please, try those changes, it might work.
I've found some more information. No, it doesn't use any additional motors. It seems to be just another effect on top of the normal ones. They've just used a different controller and circuitry so that the rumbling is modulated by the electronics. Still I don't think your wheel has an audio processor implemented inside, that will be done in software. Links:
The square wave type should have worked. How are you sending the commands? Personally, I don't find that feature interesting, we could just ignore it, but in case you'd like to try to include it we can keep trying. |
|
Hello! bcdDevice does not change between PC and PS modes... It stays 0x3800. Wheel disconnects and reconnects after switching commands, but appears again as the 'PC' PID - 0xc266. After changes file TrueForce settings from G Hub (Windows machine) does not send any commands to the wheel, so we need to sniff USB traffic with a real game... May be driver/GHub connects to the games that supports TF, and sends some additional commands related to what it sees from the game? |
It's the change between compatible mode and native mode that needs to be observed. The wheel starts in compatibility mode as a DFGT and the driver changes it to native mode on initialization. All this happens after the usb_modeswitch command. So you need the bcdDevice value after the modeswitch but before the module loads, and also the value after the module loads. Have you tested the compatibility modes?
I have no idea, but the games that support it might be using it through the Logitech SDK. The G Hub settings will be stored in the driver since that's where almost everything happens. The driver won't send commands to the wheel until the game sends TruForce data. |
|
It looks like starting and initializing sequence for the g923 is different from g29. G29 connects with DFGT productID first. Driver probes it, sees that and checks bcdDevice mask (appendix a.2 in Logitech docs). After that driver sends "switch to g29 mode" command, and wheel reconnects with real g29 productID, and finally probes with driver. G923 connects with 0xc267 productID, not DFGT's, and "switching to native mode" command is different. bcdDevice stays the same (0x3800) before modeswitch, after modeswitch and before and after module (new-lg4ff) loads.
About compatibility modes: in "Classic" mode after sending any command with any other mode (g29, g25 etc) wheel reconnects with the same productID as it was before (0xc266), and nothing changed. May be compatibility commands are not the same with g923... I will try to implement different initializing sequence, like with DFGT -> Native, but "PSFFB -> Classic". Then usb_modeswitch will become obsolete. |
|
Any news on this? |
|
@JacKeTUs, @ZRtmWrJqXcjbqBLIMBYMCeUw, can someone help with this? I think we would need to do something similar to what it's done here: https://patchwork.kernel.org/project/linux-input/patch/20210527134104.217865-3-rickytaylor26@gmail.com/ |
G923 needs 0x30 as report id (first byte in HID data). Added function to send commands with custom report id Added function to detect G923 PS mode PID and sending switch command with custom id Added PS mode PID into hid_device_id[]
|
Hello! I implemented switch from G923 PS to Classic mode. Now Sadly, it did not help with other compatibility modes (G29, G27/G25, etc). May be G923 is not a multimode wheel and can not change modes at all? |
|
@berarma This patch here: https://patchwork.kernel.org/project/linux-input/patch/1447345535-2912-2-git-send-email-simon@mungewell.org/ discusses adding HID-mode switching for the G920, where the final conclusion is that it will not be added to the kernel. This may or may not be a problem, since the method used for the G920 and the G923 (PS4 version) are very different, but I thought I would bring it up anyway. Note that the method mentioned is identical to that implemented in the patch you linked. I will try testing the latest code later to make sure it works as expected, though I have no doubt it will. Thanks @JacKeTUs! |
|
@JacKeTUs, don't worry, life's always first, this could wait. Thanks for your work! @ZRtmWrJqXcjbqBLIMBYMCeUw, it would be nice having someone else test it before merging since I can't test it myself. I've looked at that thread and the reasons to reject the G920 patch don't apply here at all. The issue isn't in the method itself but in the way it was implemented. Thanks for linking the thread though, it's interesting info. |
@JacKeTUs, I have G923 PS version and would like to help you guys with testing. However, I've never built these drivers before, so would appreciate any instructions on how to do so. |
Hello! Thanks for your help!
In the end you could plug wheel to PC and see if it works :) Also you could check out https://github.com/berarma/oversteer project, it supports G923 since couple weeks ago. For tests in games you could use ETS2 (native) as it support g923 out of the box (with disabled Steam Input), or something like Assetto Corsa (remapping needed), or Assetto Corsa Competizione (supports g923 out of the box with disabled Steam Input) |
|
So yeah, I've built and inserted the module. When I plugged the USB in, the wheel jerked ~45° to the right from neutral position, LEDs blinked and turned off, and then it froze for like a minute. After that it started the wheel calibration thing. During the froze period |
|
Aside of that all buttons, levers, pedals and controls are now detected by the system 🎉 (KDE's Input Devices widget in settings). Wheel axis is also detected correctly. Haven't tried in game yet. |
|
@berarma, big thanks for possible solution! |
Ah, yes, it looks like it is. Don't forget to set it for both device modes. Thanks for fixing my mistakes. |
|
@ZRtmWrJqXcjbqBLIMBYMCeUw, @ydallilar, @0x7CFE Please, try the following and test for delays after mode-switching. Write a file After that you will need to update initramfs for your distro. For Debian-based it is Now wheel will stop probing without a driver (new-lg4ff in our case) and will not probe by |
|
Logs are same with no quirk. |
Did you rebuild the initramfs? |
|
Yes, I did. |
|
What should we do now? Do I merge it even if it isn't completely fine for everyone or wait until a solution is found? |
|
I will be off the grid for a while. If you merge we may be able to get more feedback on the issue. faeb74f + udev rule work great for me to recover old functionality. No errors whatsoever. One can put this to FAQ as a workaround for the time being. |
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
|
Is it still planned to merge this? My G923 is recognized by |
Absolutely, but I don't have the wheel and I need someone to test the changes. Could you try this branch and report your results? |
|
I have installed the patched version now.
|
| - Logitech MOMO Racing | ||
| - Logitech Speed Force Wireless Wheel for Wii | ||
|
|
||
| This module is not compatible with the Logitech G920 Driving Force that already | ||
| has full effects support implemented by firmware and uses the HID++ driver. | ||
| This module is not compatible with the Logitech G920 Driving Force and Logitech G923 for XBOX and PC (046d:c26d, 046d:c26e), that already has full effects support implemented by firmware and uses the HID++ driver. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is not the case (at least not for me). I have the G923 XBOX and PC version, and it is not even recognized as an input device. As far as I can tell, only the G920 XBOX and PC version is supported.
This driver won't work for your wheel. You need an updated version of the logitec-hidpp module. |
I have this wheel (G923 PS4/PC) and the patch works for me. Anything in particular you want me to test? |
Thanks. I've merged it, please, update to master and report any issue. |
|
I have G923 Xbox version, and would likes ti help you guys whit testing. But im not a kernel writer so, i need ant instruction on how to do. :) |
This is already in the latest release. Follow the instructions in the README to install. |
oh, great. Then the README should be updated because it is still written that the Xbox version of the g923 is not supported. Thank you for the job. One last question, but is it also compatible with the https://github.com/gamingdoom/beamng-shifting-leds.git tool for the operation of the gear leds on BeamNG? |
That's true, the XBox version isn't supported.
I don't know. |
|
One question, is the G923 XBOX supported by Oversteer? |
It is but it just means Oversteer will recognize the wheel, it doesn't add support for any hardware features on this or any other wheel. Anyway, this PR is for new-lg4ff. |
|
I know it, but I made this question to know if this user could help to give support to this wheel on Oversteer in case it did not work. That would be my next message |
|
@Ghido03, @leillo1975 Sorry, I had mistakenly read it was a PS version. This module won't work for your wheel. Sorry again. |
Added support for Logitech G923 Racing Wheel for Playstation 4 and PC (0x046d:0xc267, 0x046d:0xc266)
What works:
What not works (or not fully tested):
./share/inputdevices.jsonrelative to game folderTo switch from PS to PC mode you will need tool
usb_modeswitchand udev rule:To reload udev rules:
udevadm control --reload-rulesAfter connecting, wheel will reconnect with 0x046d:0xc266, and will be probed by new-lg4ff.
UPD (2021-11-18): Now switching from PS mode to Classic implemented in driver, so no more need to manually call
usb_modeswitchor create udev rules.Similar to G29, wheel only could work with 1st interface. Attempts to initialize all interfaces all ends up in kernel panics.
In PR: Added copies of lines with G29, because they are similar wheels. Added command for switch to the G923 mode if anyone in the future will try to implement switching modes.
Should close #44