testsAndMisc/linux_configuration/fixes/systemd/g29-shifter-bpf.service
Krzysztof kuhy Rudnicki 7e2d78c7db Add the G29 shifter HID-BPF fix (1st/3rd engage reliably)
Live on this host since 2026-09-11 but never committed. The wheel firmware
decodes the shifter's hall sensor itself and this unit's top row rests at
Y 180-193, below the ~195 engage threshold, so 1st/3rd often did not
register. g29_shifter.bpf.c re-decodes those two gates from the raw X/Y
bytes with hysteresis (engage >= 160, release <= 140) and ORs the bit in
before hid-logitech parses the report; it never clears a bit, so the
firmware's working gates cannot regress. fix_g29_shifter.sh builds,
attaches and installs it persistently (udev-hid-bpf rule + a systemd
safety-net unit pulled in on every re-enumeration); g29_shifter_capture.py
records and grades raw captures per gate.

Two files were over the 250-line cap: the test file is split at the
record/CLI boundary with the report builders moved into a conftest fixture
(the naming hook allows only test_*.py in tests/), and the grader's
docstrings are tightened. No behaviour change to the installed fix.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SS8M5wk88nJTXxDWz61KKk
2026-09-14 22:12:31 +02:00

16 lines
510 B
Desktop File

[Unit]
# Safety net for the G29 shifter HID-BPF fix (see docs/DOCS-g29-shifter.md).
# udev-hid-bpf's own rule attaches the program on "add"; this unit re-checks
# after boot and on every hotplug, and re-attaches if that rule ever misses.
# Installed by fixes/fix_g29_shifter.sh; __SCRIPT__ is substituted there.
Description=Ensure the G29 shifter HID-BPF fix is attached
After=systemd-udevd.service
[Service]
Type=oneshot
RemainAfterExit=no
ExecStart=__SCRIPT__ --ensure
[Install]
WantedBy=multi-user.target