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.
This commit is contained in:
Sam Lantinga
2025-05-08 10:46:53 -07:00
parent ad55597715
commit 2aa0957081

View File

@@ -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];