Skip to content
Open
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
2 changes: 1 addition & 1 deletion data/udev/99-thrustmaster-wheel-perms.rules
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ GOTO="end"
LABEL="t150"

# Thrustmaster T150 Racing Wheel (USB)
ATTRS{idProduct}=="b677", RUN+="/bin/sh -c 'cd %S%p; chmod 666 range gain autocenter'"
ATTRS{idProduct}=="b677", RUN+="/bin/sh -c 'cd %S%p; chmod 666 range gain autocenter enable_autocenter'"

# Thrustmaster TMX Racing Wheel (USB)
ATTRS{idProduct}=="b67f", RUN+="/bin/sh -c 'cd %S%p; chmod 666 range gain autocenter'"
Expand Down
26 changes: 24 additions & 2 deletions oversteer/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@ def get_autocenter(self):
with open(path, "r") as file:
data = file.read()
autocenter = data.strip()

return int(round((int(autocenter) * 100) / 65535))

def set_autocenter(self, autocenter):
Expand All @@ -205,7 +206,8 @@ def set_autocenter(self, autocenter):
file.write(autocenter)
else:
input_device = self.get_input_device()
input_device.write(ecodes.EV_FF, ecodes.FF_AUTOCENTER, int(autocenter))
if input_device:
input_device.write(ecodes.EV_FF, ecodes.FF_AUTOCENTER, int(autocenter))
return True

def get_ff_gain(self):
Expand Down Expand Up @@ -334,6 +336,24 @@ def center_wheel(self):
time.sleep(1)
self.set_autocenter(0)

def get_autocenter_controlled_by_wheel(self):
if self.usb_id in [wid.TM_T150]:
path = self.checked_device_file("enable_autocenter")
if not path:
return False
with open(path, "r") as file:
data = file.read()
value = data.strip()
return value == 'y'

def set_autocenter_controlled_by_wheel(self, value):
if self.usb_id in [wid.TM_T150]:
path = self.checked_device_file("enable_autocenter")
if not path:
return False
with open(path, "w") as file:
file.write('y' if value else 'n')

def check_permissions(self):
logging.debug("check_permissions: %s", self.dev_path)
if not os.access(self.dev_path, os.F_OK | os.R_OK | os.X_OK):
Expand All @@ -348,6 +368,8 @@ def check_permissions(self):
return False
if not self.check_file_permissions('autocenter'):
return False
if not self.check_file_permissions('enable_autocenter'):
return False
if not self.check_file_permissions('spring_level'):
return False
if not self.check_file_permissions('damper_level'):
Expand All @@ -365,7 +387,7 @@ def get_last_axis_value(self, axis):

def get_input_device(self):
if self.input_device is None or self.input_device.fd == -1:
if os.access(self.dev_name, os.R_OK):
if self.dev_name and os.access(self.dev_name, os.R_OK):
self.input_device = InputDevice(self.dev_name)
return self.input_device

Expand Down
3 changes: 3 additions & 0 deletions oversteer/gtk_handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@ def on_autocenter_value_changed(self, widget):
autocenter = int(widget.get_value())
self.model.set_autocenter(autocenter)

def on_autocenter_controlled_by_wheel_set(self, widget, state):
self.model.set_autocenter_controlled_by_wheel(state)

def on_check_permissions_state_set(self, widget, state):
self.controller.set_check_permissions(state)

Expand Down
9 changes: 9 additions & 0 deletions oversteer/gtk_ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,13 @@ def set_autocenter(self, autocenter):
self.autocenter.set_sensitive(True)
self.autocenter.set_value(int(autocenter))

def set_autocenter_controlled_by_wheel(self, value):
if value is None:
self.autocenter_controlled_by_wheel.set_sensitive(False)
else:
self.autocenter_controlled_by_wheel.set_sensitive(True)
self.autocenter_controlled_by_wheel.set_state(value)

def set_ff_gain(self, ff_gain):
if ff_gain is None:
self.ff_gain.set_sensitive(False)
Expand Down Expand Up @@ -590,6 +597,8 @@ def _set_builder_objects(self):
self.combine_brakes = self.builder.get_object('combine_brakes')
self.combine_clutch = self.builder.get_object('combine_clutch')
self.autocenter = self.builder.get_object('autocenter')
self.autocenter_controlled_by_wheel = self.builder.get_object('autocenter_controlled_by_wheel')
self.autocenter_controlled_by_wheel_row = self.builder.get_object('autocenter_controlled_by_wheel_row')
self.ff_gain = self.builder.get_object('ff_gain')
self.ff_spring_level = self.builder.get_object('ff_spring_level')
self.ff_damper_level = self.builder.get_object('ff_damper_level')
Expand Down
43 changes: 43 additions & 0 deletions oversteer/main.ui
Original file line number Diff line number Diff line change
Expand Up @@ -2166,6 +2166,49 @@
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="autocenter_controlled_by_wheel_row">
<property name="height-request">70</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="activatable">False</property>
<property name="selectable">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes">Enable autocenter controlled by wheel.</property>
<property name="valign">center</property>
<property name="spacing">64</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Autocenter controller by wheel</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="autocenter_controlled_by_wheel">
<property name="visible">True</property>
<property name="can-focus">True</property>
<signal name="state-set" handler="on_autocenter_controlled_by_wheel_set" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<style>
<class name="list"/>
</style>
Expand Down
11 changes: 11 additions & 0 deletions oversteer/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class Model:
'range': None,
'ff_gain': None,
'autocenter': None,
'enable_autocenter': None,
'combine_pedals': None,
'spring_level': None,
'damper_level': None,
Expand All @@ -28,6 +29,7 @@ class Model:
'range': 'integer',
'ff_gain': 'integer',
'autocenter': 'integer',
'enable_autocenter': 'boolean',
'combine_pedals': 'integer',
'spring_level': 'integer',
'damper_level': 'integer',
Expand Down Expand Up @@ -75,6 +77,7 @@ def read_device_settings(self):
'range': self.device.get_range(),
'ff_gain': self.device.get_ff_gain(),
'autocenter': self.device.get_autocenter(),
'enable_autocenter': self.device.get_autocenter_controlled_by_wheel(),
'combine_pedals': self.device.get_combine_pedals(),
'spring_level': self.device.get_spring_level(),
'damper_level': self.device.get_damper_level(),
Expand Down Expand Up @@ -193,6 +196,13 @@ def set_autocenter(self, value):
def get_autocenter(self):
return self.data['autocenter']

def set_autocenter_controlled_by_wheel(self, value):
if self.set_if_changed('enable_autocenter', value):
self.device.set_autocenter_controlled_by_wheel(value)

def get_autocenter_controlled_by_wheel(selfe):
return self.data['enable_autocenter']

def set_combine_pedals(self, value):
value = int(value)
if self.set_if_changed('combine_pedals', value):
Expand Down Expand Up @@ -294,6 +304,7 @@ def flush_ui(self, data = None):
self.ui.set_range(data['range'])
self.ui.set_ff_gain(data['ff_gain'])
self.ui.set_autocenter(data['autocenter'])
self.ui.set_autocenter_controlled_by_wheel(data['enable_autocenter'])
self.ui.set_combine_pedals(data['combine_pedals'])
self.ui.set_spring_level(data['spring_level'])
self.ui.set_damper_level(data['damper_level'])
Expand Down