Browse Source

Fixed PS3 controller initialization over Bluetooth

Now that we have hidapi that knows whether the controller is connected via Bluetooth or USB, this is much easier to fix.
Sam Lantinga 2 years ago
parent
commit
32d015a6a0

+ 2 - 2
src/joystick/hidapi/SDL_hidapi_ps3.c

@@ -144,14 +144,14 @@ static SDL_bool HIDAPI_DriverPS3_InitDevice(SDL_HIDAPI_Device *device)
     device->context = ctx;
     device->context = ctx;
 
 
     /* Set the controller into report mode over Bluetooth */
     /* Set the controller into report mode over Bluetooth */
-    {
+    if (device->is_bluetooth) {
         Uint8 data[] = { 0xf4, 0x42, 0x03, 0x00, 0x00 };
         Uint8 data[] = { 0xf4, 0x42, 0x03, 0x00, 0x00 };
 
 
         SendFeatureReport(device->dev, data, sizeof(data));
         SendFeatureReport(device->dev, data, sizeof(data));
     }
     }
 
 
     /* Set the controller into report mode over USB */
     /* Set the controller into report mode over USB */
-    {
+    if (!device->is_bluetooth) {
         Uint8 data[USB_PACKET_LENGTH];
         Uint8 data[USB_PACKET_LENGTH];
 
 
         int size = ReadFeatureReport(device->dev, 0xf2, data, 17);
         int size = ReadFeatureReport(device->dev, 0xf2, data, 17);

+ 1 - 0
src/joystick/hidapi/SDL_hidapijoystick.c

@@ -866,6 +866,7 @@ static SDL_HIDAPI_Device *HIDAPI_AddDevice(const struct SDL_hid_device_info *inf
     device->interface_protocol = info->interface_protocol;
     device->interface_protocol = info->interface_protocol;
     device->usage_page = info->usage_page;
     device->usage_page = info->usage_page;
     device->usage = info->usage;
     device->usage = info->usage;
+    device->is_bluetooth = (info->bus_type == SDL_HID_API_BUS_BLUETOOTH);
     device->dev_lock = SDL_CreateMutex();
     device->dev_lock = SDL_CreateMutex();
 
 
     /* Need the device name before getting the driver to know whether to ignore this device */
     /* Need the device name before getting the driver to know whether to ignore this device */