Jelajahi Sumber

Fixed DualSense controllers not being picked up by the HIDAPI driver

The hidraw device may take additional time to get the correct permissions for us to open it. In my tests on Steam Deck hardware, this ranges between 5-8ms.
Sam Lantinga 3 tahun lalu
induk
melakukan
c6ee9780df
1 mengubah file dengan 11 tambahan dan 1 penghapusan
  1. 11 1
      src/hidapi/linux/hid.c

+ 11 - 1
src/hidapi/linux/hid.c

@@ -1096,7 +1096,17 @@ hid_device * HID_API_EXPORT hid_open_path(const char *path)
 		return NULL;
 	}
 
-	dev->device_handle = open(path, O_RDWR | O_CLOEXEC);
+    const int MAX_ATTEMPTS = 10;
+    int attempt;
+    for (attempt = 1; attempt <= MAX_ATTEMPTS; ++attempt) {
+        dev->device_handle = open(path, O_RDWR | O_CLOEXEC);
+        if (dev->device_handle < 0 && errno == EACCES) {
+            /* udev might be setting up permissions, wait a bit and try again */
+            usleep(1 * 1000);
+            continue;
+        }
+        break;
+    }
 
 	if (dev->device_handle >= 0) {
 		int res, desc_size = 0;