From c6ee9780df4286f66c38f3fa9732daa9afe0a8a3 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Sun, 18 Jun 2023 12:19:54 -0700
Subject: [PATCH] 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.
---
src/hidapi/linux/hid.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/hidapi/linux/hid.c b/src/hidapi/linux/hid.c
index 89d6ae16f656..95f12ccd4f90 100644
--- a/src/hidapi/linux/hid.c
+++ b/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;