浏览代码

Fixed 8BitDo Ultimate 2 Wireless controller on macOS

When connected for the first time over Bluetooth on macOS, the first few reads return 0, so retry a few times in that case.
Sam Lantinga 4 月之前
父节点
当前提交
2aa0957081
共有 1 个文件被更改,包括 15 次插入6 次删除
  1. 15 6
      src/joystick/hidapi/SDL_hidapi_8bitdo.c

+ 15 - 6
src/joystick/hidapi/SDL_hidapi_8bitdo.c

@@ -154,12 +154,21 @@ static bool HIDAPI_Driver8BitDo_InitDevice(SDL_HIDAPI_Device *device)
     if (device->product_id == USB_PRODUCT_8BITDO_ULTIMATE2_WIRELESS) {
         // The Ultimate 2 Wireless v1.02 firmware has 12 byte reports, v1.03 firmware has 34 byte reports
         const int ULTIMATE2_WIRELESS_V103_REPORT_SIZE = 34;
-        Uint8 data[USB_PACKET_LENGTH];
-        int size = SDL_hid_read_timeout(device->dev, data, sizeof(data), 80);
-        if (size >= ULTIMATE2_WIRELESS_V103_REPORT_SIZE) {
-            ctx->sensors_supported = true;
-            ctx->rumble_supported = true;
-            ctx->powerstate_supported = true;
+        const int MAX_ATTEMPTS = 3;
+
+        for (int attempt = 0; attempt < MAX_ATTEMPTS; ++attempt) {
+            Uint8 data[USB_PACKET_LENGTH];
+            int size = SDL_hid_read_timeout(device->dev, data, sizeof(data), 80);
+            if (size == 0) {
+                // Try again
+                continue;
+            }
+            if (size >= ULTIMATE2_WIRELESS_V103_REPORT_SIZE) {
+                ctx->sensors_supported = true;
+                ctx->rumble_supported = true;
+                ctx->powerstate_supported = true;
+            }
+            break;
         }
     } else {
         Uint8 data[USB_PACKET_LENGTH];