Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,17 @@ the contract is "it works on RS50 and G Pro as listed here".

## Unreleased

**Assetto Corsa Rally takes the SDK route.** The registry listed it as plain
force feedback with nothing to do, and on a G PRO that gave nothing: with
raw HID off the game did not see the wheel, and with it on by hand the stock
Logitech library took the wheel and returned only its own damping
([#105](../../issues/105)). On a G923 Xbox edition with Logitech's files in
the prefix and raw HID on, its force feedback and TrueForce were confirmed
working ([#83](../../issues/83)). The game now gets the same route as
Assetto Corsa EVO: `logi-launch` turns raw HID on, stages the proxy that
answers the SDK's rotation question and resets the wheel first, and the
app's Setup page offers the shim install for it.

**Inertia no longer renders the encoder's grain, and the per-class levels
reach past 100.** `FF_INERTIA` was fed the per-tick velocity difference,
which on a quantised encoder is an impulse train: a rim turning smoothly
Expand Down
6 changes: 3 additions & 3 deletions docs/GAME_SETUP.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ instead of wrapping it.
| Assetto Corsa (original) | Proton | Native FFB | Turn on simulated TrueForce | Turn on simulated TrueForce |
| Assetto Corsa Competizione | Proton | TrueForce shim | Install the shim<br>`logi-launch %command%` | Turn on simulated TrueForce<br>and leave `PROTON_ENABLE_HIDRAW` unset |
| Assetto Corsa EVO (early access) | Proton | TrueForce shim | Install the shim<br>`logi-launch %command%` | Turn on simulated TrueForce<br>and leave `PROTON_ENABLE_HIDRAW` unset |
| Assetto Corsa Rally (early access) * | Proton | Native FFB | Nothing to do | Nothing to do |
| Assetto Corsa Rally (early access) * | Proton | TrueForce shim | Install the shim<br>`logi-launch %command%` | Plain force feedback<br>leave `PROTON_ENABLE_HIDRAW` unset |
| Automobilista 2 | Proton | Native FFB | Turn on simulated TrueForce | Turn on simulated TrueForce |
| BeamNG.drive * | Native Linux | Native FFB | Turn on simulated TrueForce | Turn on simulated TrueForce |
| CarX Drift Racing Online | Proton | Native FFB | Nothing to do | Nothing to do |
Expand Down Expand Up @@ -144,5 +144,5 @@ app's Setup page afterwards.

- **verified** (4 titles): confirmed end to end by this project
- **documented** (16 titles): documented by the vendor or a reliable community source
- **expected** (6 titles): expected to work, not confirmed
- **unknown** (4 titles): genuinely unknown
- **expected** (7 titles): expected to work, not confirmed
- **unknown** (3 titles): genuinely unknown
2 changes: 1 addition & 1 deletion tools/setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ TF_PFX_DIR_REL="drive_c/Program Files/Logi/Trueforce"
# their force feedback, so the copy is guarded rather than trusted.
#
# Sims that load Logitech's TrueForce SDK: ACC, AC EVO.
SDK_SIM_APPIDS="805550 3058630"
SDK_SIM_APPIDS="805550 3058630 3917090"
# Sims driven through DirectInput, i.e. logi-ffb: rFactor 2, Le Mans Ultimate,
# iRacing, RaceRoom. PROTON_ENABLE_HIDRAW must NOT be set for these.
DINPUT_SIM_APPIDS="365960 2399420 266410 211500"
Expand Down
31 changes: 26 additions & 5 deletions userspace/logi-wheel/crates/logi-wheel-core/src/games.rs
Original file line number Diff line number Diff line change
Expand Up @@ -494,7 +494,19 @@ impl GameCompat {
if self.linux == Linux::Unsupported {
return self.setup;
}
if self.ffb == Ffb::TrueForceShim && !caps.sdk_trueforce {
if self.ffb == Ffb::TrueForceShim
&& !caps.sdk_trueforce
&& self.simulated_tf.live_id().is_none()
{
// An SDK title with no telemetry: the simulated route below
// has nothing to synthesise from, so it must not be offered.
"Leave PROTON_ENABLE_HIDRAW unset: on this wheel it costs you \
force feedback, and this game publishes no telemetry yet, so \
there is no simulated TrueForce to turn on either. Installing \
the shim WITH --proxy carries the game's own TrueForce to the \
wheel instead (tools/install-tf-shim.sh --proxy). Steam Input \
off."
} else if self.ffb == Ffb::TrueForceShim && !caps.sdk_trueforce {
// Worded as "not available on this wheel" rather than "this
// wheel has no SDK TrueForce", because it also covers the
// unidentified wheel, about which we know only that we cannot
Expand Down Expand Up @@ -826,11 +838,20 @@ logi-tf-sim.",
GameCompat {
name: "Assetto Corsa Rally (early access)",
linux: Linux::Proton,
ffb: Ffb::NativeEvdev,
native_trueforce: Support::No,
// The same SDK route as Assetto Corsa EVO. Listed as plain force
// feedback until 2026-09: with raw HID left off, the game did not
// see a G PRO at all, and with it on by hand, the stock library
// took the wheel and gave back only its own damping (#105). On a
// G923 Xbox edition with Logitech's files in the prefix and raw
// HID on, its force feedback and TrueForce were confirmed working
// (#83), which is what this route arranges.
ffb: Ffb::TrueForceShim,
native_trueforce: Support::Yes,
simulated_tf: SimTf::No,
setup: "Plain force feedback; watch for telemetry as it matures.",
confidence: Confidence::Unknown,
setup: "Install the TrueForce shim once, from the app's Setup page; launch options `logi-launch %command%` (it turns raw HID on, stages the proxy that answers the SDK's rotation question, and resets the wheel first, the same recipe as Assetto Corsa EVO); turn Steam Input off. No telemetry yet, so nothing to feed the lights.",
// Confirmed on a G923 Xbox edition (#83); a direct-drive wheel has
// not yet been reported on this route.
confidence: Confidence::Expected,
},
GameCompat {
name: "Euro Truck Simulator 2",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,16 @@ fn recipe_cell(g: &GameCompat, caps: WheelCaps) -> String {
// having seen the other column say to set a variable, and needs telling
// that doing so on their wheel is not merely pointless.
if g.ffb == Ffb::TrueForceShim && !caps.sdk_trueforce {
return "Turn on simulated TrueForce<br>and leave \
`PROTON_ENABLE_HIDRAW` unset"
.to_string();
// Simulated TrueForce is only on offer where the game publishes
// telemetry to synthesise it from; a title without any has plain
// force feedback on this wheel and nothing to add to it.
return if g.simulated_tf.live_id().is_some() {
"Turn on simulated TrueForce<br>and leave \
`PROTON_ENABLE_HIDRAW` unset"
} else {
"Plain force feedback<br>leave `PROTON_ENABLE_HIDRAW` unset"
}
.to_string();
}
let action = match g.setup_action(caps) {
SetupAction::InstallShim => "Install the shim",
Expand Down
Loading