From fe59b844a64970db5ad4793e862db42b2eaf9860 Mon Sep 17 00:00:00 2001 From: Otto Strassen Date: Sat, 22 Nov 2025 15:41:07 +0100 Subject: [PATCH 1/2] Fanatec rotation range increase. Make some Fanatec wheel bases support 2520 degrees rotation. --- oversteer/device_manager.py | 6 +++--- oversteer/gtk_ui.py | 12 ++++++++---- oversteer/main.ui | 6 +++--- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/oversteer/device_manager.py b/oversteer/device_manager.py index f30a4f8..c47213f 100644 --- a/oversteer/device_manager.py +++ b/oversteer/device_manager.py @@ -10,9 +10,9 @@ class DeviceManager: def __init__(self): self.supported_wheels = { wid.CM_C5: 1080, - wid.FT_CSL_DD: 1080, - wid.FT_CSL_ELITE: 1080, - wid.FT_CSL_ELITE_PS4: 1080, + wid.FT_CSL_DD: 2520, + wid.FT_CSL_ELITE: 2520, + wid.FT_CSL_ELITE_PS4: 2520, wid.FT_CSV25: 900, wid.FT_CSV2: 900, wid.FT_PDD1: 1080, diff --git a/oversteer/gtk_ui.py b/oversteer/gtk_ui.py index 8cd63b5..56c86dd 100644 --- a/oversteer/gtk_ui.py +++ b/oversteer/gtk_ui.py @@ -707,12 +707,8 @@ def _set_range_markers(self, max_range): self.wheel_range.clear_marks() if max_range >= 180: self.wheel_range.add_mark(18, Gtk.PositionType.BOTTOM, '180') - if max_range >= 270: - self.wheel_range.add_mark(27, Gtk.PositionType.BOTTOM, '270') if max_range >= 360: self.wheel_range.add_mark(36, Gtk.PositionType.BOTTOM, '360') - if max_range >= 450: - self.wheel_range.add_mark(45, Gtk.PositionType.BOTTOM, '450') if max_range >= 540: self.wheel_range.add_mark(54, Gtk.PositionType.BOTTOM, '540') if max_range >= 720: @@ -721,3 +717,11 @@ def _set_range_markers(self, max_range): 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 >= 1440: + self.wheel_range.add_mark(144, Gtk.PositionType.BOTTOM, '1440') + if max_range >= 1800: + self.wheel_range.add_mark(180, Gtk.PositionType.BOTTOM, '1800') + if max_range >= 2160: + self.wheel_range.add_mark(216, Gtk.PositionType.BOTTOM, '2160') + if max_range >= 2520: + self.wheel_range.add_mark(252, Gtk.PositionType.BOTTOM, '2520') diff --git a/oversteer/main.ui b/oversteer/main.ui index b5ad218..e9842e8 100644 --- a/oversteer/main.ui +++ b/oversteer/main.ui @@ -297,8 +297,8 @@ - 4 - 108 + 9 + 252 90 1 3 @@ -574,7 +574,7 @@ True center wheel_range_setup - 108 + 252 0 0 From 019d4bde55078a6a6c175d70c2fb654531da027a Mon Sep 17 00:00:00 2001 From: Otto Strassen Date: Sat, 6 Dec 2025 18:57:05 +0100 Subject: [PATCH 2/2] Implements #243 As there are significant differences in wheel rotation, the approach now has been to create a set of markers for {low, normal, high} range wheels which allows all of them to be adapted independently. All ranges start at 90, which is the lowest value, so the Scale will always have a leftmost value. Tested with all current values in device_manager.py. --- oversteer/device_manager.py | 2 +- oversteer/gtk_ui.py | 50 ++++++++++++++++++++++--------------- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/oversteer/device_manager.py b/oversteer/device_manager.py index c47213f..a4d1108 100644 --- a/oversteer/device_manager.py +++ b/oversteer/device_manager.py @@ -50,7 +50,7 @@ def __init__(self): wid.TS_PC: 1080, wid.TM_TX: 900, wid.XX_FFBOARD: 1080, - wid.FF_FLASHFIRE_900R: 900, + wid.FF_FLASHFIRE_900R: 900, } self.devices = {} self.changed = True diff --git a/oversteer/gtk_ui.py b/oversteer/gtk_ui.py index 56c86dd..7465d79 100644 --- a/oversteer/gtk_ui.py +++ b/oversteer/gtk_ui.py @@ -704,24 +704,34 @@ def _set_markers(self): self.ff_friction_level.add_mark(100, Gtk.PositionType.BOTTOM, '100') def _set_range_markers(self, max_range): + # set the markers for different wheel rotation ranges + markers_low = (9, 18, 24, 27) + markers_normal = (9, 18, 27, 36, 45, 54, 72, 90, 108) + markers_high = (9, 36, 72, 108, 144, 180, 216, 252) + + # mapping max_range to the number of markers we create + limit_map = { + 90: 0, + 180: 1, + 240: 2, + 270: 3, + # the upper values are for markers_low + # ther lower values are for markers_normal + 900: 7, + 1080: 8, + } + limit = limit_map.get(max_range, -1) + + if max_range <= 270: + markers = markers_low + elif max_range <= 1080: + markers = markers_normal + else: + markers = markers_high + self.wheel_range.clear_marks() - if max_range >= 180: - self.wheel_range.add_mark(18, Gtk.PositionType.BOTTOM, '180') - if max_range >= 360: - self.wheel_range.add_mark(36, Gtk.PositionType.BOTTOM, '360') - if max_range >= 540: - self.wheel_range.add_mark(54, Gtk.PositionType.BOTTOM, '540') - if max_range >= 720: - self.wheel_range.add_mark(72, Gtk.PositionType.BOTTOM, '720') - if max_range >= 900: - 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 >= 1440: - self.wheel_range.add_mark(144, Gtk.PositionType.BOTTOM, '1440') - if max_range >= 1800: - self.wheel_range.add_mark(180, Gtk.PositionType.BOTTOM, '1800') - if max_range >= 2160: - self.wheel_range.add_mark(216, Gtk.PositionType.BOTTOM, '2160') - if max_range >= 2520: - self.wheel_range.add_mark(252, Gtk.PositionType.BOTTOM, '2520') + self.wheel_range.get_adjustment().set_upper(markers[limit]) + for i, m in enumerate(markers): + self.wheel_range.add_mark(m, Gtk.PositionType.BOTTOM, str(m) + '0') + if i == limit: + break