From ff7c2688f8fbe15236a34d5c07c814693fb72d1b Mon Sep 17 00:00:00 2001 From: Luke Horwell <code@horwell.me> Date: Sat, 28 Nov 2020 12:18:54 +0000 Subject: [PATCH] daemon: Persist DPI values for 'nagahex' method Includes DeathAdder 2013. Fixes #1350. --- daemon/openrazer_daemon/daemon.py | 2 +- .../dbus_services/dbus_methods/nagahex.py | 27 +++++++++++++------ .../openrazer_daemon/hardware/device_base.py | 2 +- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/daemon/openrazer_daemon/daemon.py b/daemon/openrazer_daemon/daemon.py index e67974fa..a0bbbac7 100644 --- a/daemon/openrazer_daemon/daemon.py +++ b/daemon/openrazer_daemon/daemon.py @@ -318,7 +318,7 @@ class RazerDaemon(DBusService): for device in self._razer_devices: self._persistence[device.dbus.storage_name] = {} - if 'set_dpi_xy' in device.dbus.METHODS: + if 'set_dpi_xy' in device.dbus.METHODS or 'set_dpi_xy_byte' in device.dbus.METHODS: self._persistence[device.dbus.storage_name]['dpi_x'] = str(device.dbus.dpi[0]) self._persistence[device.dbus.storage_name]['dpi_y'] = str(device.dbus.dpi[1]) diff --git a/daemon/openrazer_daemon/dbus_services/dbus_methods/nagahex.py b/daemon/openrazer_daemon/dbus_services/dbus_methods/nagahex.py index 456a0614..6a9221d1 100644 --- a/daemon/openrazer_daemon/dbus_services/dbus_methods/nagahex.py +++ b/daemon/openrazer_daemon/dbus_services/dbus_methods/nagahex.py @@ -15,7 +15,7 @@ def set_dpi_xy_byte(self, dpi_x, dpi_y): :param dpi_y: Y DPI :type dpi_x: int """ - self.logger.debug("DBus call set_dpi_both") + self.logger.debug("DBus call set_dpi_xy_byte") driver_path = self.get_driver_path('dpi') @@ -31,6 +31,12 @@ def set_dpi_xy_byte(self, dpi_x, dpi_y): dpi_x_scaled = int(round(dpi_x / 6750 * 255, 2)) dpi_y_scaled = int(round(dpi_y / 6750 * 255, 2)) + self.dpi[0] = dpi_x + self.dpi[1] = dpi_y + + self.set_persistence(None, "dpi_x", dpi_x_scaled) + self.set_persistence(None, "dpi_y", dpi_y_scaled) + if self._testing: with open(driver_path, 'w') as driver_file: driver_file.write("{}:{}".format(dpi_x_scaled, dpi_y_scaled)) @@ -50,15 +56,20 @@ def get_dpi_xy_byte(self): :return: List of X, Y DPI :rtype: list of int """ - self.logger.debug("DBus call get_dpi_both") + self.logger.debug("DBus call get_dpi_xy_byte") driver_path = self.get_driver_path('dpi') - with open(driver_path, 'r') as driver_file: - result = driver_file.read() - dpi_x, dpi_y = [int(dpi) for dpi in result.strip().split(':')] - - dpi_x = int(round(dpi_x / 255 * 6750, 2)) - dpi_y = int(round(dpi_y / 255 * 6750, 2)) + # try retrieving DPI from the hardware. + # if we can't (e.g. because the mouse has been disconnected) + # return the value in local storage. + try: + with open(driver_path, 'r') as driver_file: + result = driver_file.read() + dpi_x, dpi_y = [int(dpi) for dpi in result.strip().split(':')] + dpi_x = int(round(dpi_x / 255 * 6750, 2)) + dpi_y = int(round(dpi_y / 255 * 6750, 2)) + except FileNotFoundError: + dpi_x, dpi_y = self.dpi return [dpi_x, dpi_y] diff --git a/daemon/openrazer_daemon/hardware/device_base.py b/daemon/openrazer_daemon/hardware/device_base.py index 988e41f1..3c37154f 100644 --- a/daemon/openrazer_daemon/hardware/device_base.py +++ b/daemon/openrazer_daemon/hardware/device_base.py @@ -200,7 +200,7 @@ class RazerDevice(DBusService): # load last DPI/poll rate state if self.persistence.has_section(self.storage_name): - if 'set_dpi_xy' in self.METHODS: + if 'set_dpi_xy' in self.METHODS or 'set_dpi_xy_byte' in self.METHODS: try: self.dpi[0] = int(self.persistence[self.storage_name]['dpi_x']) self.dpi[1] = int(self.persistence[self.storage_name]['dpi_y']) -- GitLab