forked from JacKeTUs/hid-logitech-hidpp
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathoversteer-rs50-support.patch
More file actions
109 lines (104 loc) · 4.85 KB
/
oversteer-rs50-support.patch
File metadata and controls
109 lines (104 loc) · 4.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
diff --git a/data/udev/99-logitech-wheel-perms.rules b/data/udev/99-logitech-wheel-perms.rules
index 9207c2f..acea14d 100644
--- a/data/udev/99-logitech-wheel-perms.rules
+++ b/data/udev/99-logitech-wheel-perms.rules
@@ -24,6 +24,9 @@ ATTRS{idProduct}=="c26e", RUN+="/bin/sh -c 'cd %S%p; chmod 666 range leds/*/brig
# Logitech G920 Driving Force Racing Wheel
ATTRS{idProduct}=="c262", RUN+="/bin/sh -c 'cd %S%p; chmod 666 range'"
+# Logitech RS50 Base for PlayStation/PC
+ATTRS{idProduct}=="c276", RUN+="/bin/sh -c 'cd %S%p; chmod 666 range gain autocenter combine_pedals damper_level'"
+
GOTO="end"
LABEL="logitech-driver"
diff --git a/oversteer/device.py b/oversteer/device.py
index 039990f..31cf1f6 100644
--- a/oversteer/device.py
+++ b/oversteer/device.py
@@ -58,7 +58,31 @@ class Device:
return self.id
def device_file(self, filename):
- return os.path.join(self.dev_path, filename)
+ # Primary path - same interface as input device
+ path = os.path.join(self.dev_path, filename)
+ if os.path.exists(path):
+ return path
+ # Check sibling USB interfaces (for devices like RS50 where HID++ attributes
+ # are on a different interface than the joystick input)
+ # Structure: .../1-5.2:1.0/0003:046D:C276.0004/ (dev_path)
+ # .../1-5.2:1.1/0003:046D:C276.0005/ (sibling with attributes)
+ try:
+ # Go up to USB interface level (parent of HID device dir)
+ hid_parent = os.path.dirname(self.dev_path) # 1-5.2:1.0
+ usb_parent = os.path.dirname(hid_parent) # 1-5.2
+ if usb_parent:
+ for iface in os.listdir(usb_parent):
+ iface_path = os.path.join(usb_parent, iface)
+ if os.path.isdir(iface_path) and iface.startswith(os.path.basename(usb_parent)):
+ # Look for HID devices under this interface
+ for hid_dev in os.listdir(iface_path):
+ if hid_dev.startswith('0003:'):
+ sibling_path = os.path.join(iface_path, hid_dev, filename)
+ if os.path.exists(sibling_path):
+ return sibling_path
+ except (OSError, IOError):
+ pass
+ return path # Return original path even if not found (for error handling)
def checked_device_file(self, filename):
path = self.device_file(filename)
@@ -442,7 +466,7 @@ class Device:
event.code = ecodes.ABS_RZ
elif self.vendor_id == wid.VENDOR_FANATEC and event.code in [ecodes.ABS_Y, ecodes.ABS_Z, ecodes.ABS_RZ]:
event.value = int(event.value + 32768 / 257)
- elif self.usb_id in [wid.LG_GPRO_PS, wid.LG_GPRO_XBOX]:
+ elif self.usb_id in [wid.LG_GPRO_PS, wid.LG_GPRO_XBOX, wid.LG_RS50]:
if event.code in [ecodes.ABS_RX, ecodes.ABS_RY, ecodes.ABS_RZ]:
event.value = int(255 - event.value / 257)
if event.code == ecodes.ABS_RX:
diff --git a/oversteer/device_manager.py b/oversteer/device_manager.py
index f30a4f8..53acf09 100644
--- a/oversteer/device_manager.py
+++ b/oversteer/device_manager.py
@@ -28,6 +28,7 @@ class DeviceManager:
wid.LG_G923X: 900,
wid.LG_GPRO_PS: 1080,
wid.LG_GPRO_XBOX: 1080,
+ wid.LG_RS50: 2700,
wid.LG_MOMO2: 270,
wid.LG_MOMO: 270,
wid.LG_SFW: 270,
diff --git a/oversteer/gtk_ui.py b/oversteer/gtk_ui.py
index 8cd63b5..1eea1f7 100644
--- a/oversteer/gtk_ui.py
+++ b/oversteer/gtk_ui.py
@@ -721,3 +721,7 @@ class GtkUi:
self.wheel_range.add_mark(90, Gtk.PositionType.BOTTOM, '900')
if max_range >= 1080:
self.wheel_range.add_mark(108, Gtk.PositionType.BOTTOM, '1080')
+ if max_range >= 1800:
+ self.wheel_range.add_mark(180, Gtk.PositionType.BOTTOM, '1800')
+ if max_range >= 2700:
+ self.wheel_range.add_mark(270, Gtk.PositionType.BOTTOM, '2700')
diff --git a/oversteer/gui.py b/oversteer/gui.py
index 77e604a..b654d4e 100644
--- a/oversteer/gui.py
+++ b/oversteer/gui.py
@@ -439,7 +439,7 @@ class Gui:
button = event.code - 288
if event.code >= 304 and event.code <= 316:
button = event.code - 304
- if event.code >= 704 and event.code <= 715:
+ if event.code >= 704 and event.code <= 719:
button = event.code - 688
if button is not None:
diff --git a/oversteer/wheel_ids.py b/oversteer/wheel_ids.py
index 0fa5852..4debda5 100644
--- a/oversteer/wheel_ids.py
+++ b/oversteer/wheel_ids.py
@@ -22,6 +22,7 @@ LG_G923P = '046d:c266'
LG_G923X = '046d:c26e'
LG_GPRO_PS = '046d:c268'
LG_GPRO_XBOX = '046d:c272'
+LG_RS50 = '046d:c276'
LG_MOMO = '046d:c295'
LG_MOMO2 = '046d:ca03'
LG_SFW = '046d:c29c'