Browse Source

Throttle tickle reports to PS4/PS5 controllers

UpdateDevice() can be called at an arbitrary rate, so we need to
pace ourselves to avoid filling up the rumble queue with these.
Cameron Gutman 10 months ago
parent
commit
6ec8b1a173
2 changed files with 2 additions and 0 deletions
  1. 1 0
      src/joystick/hidapi/SDL_hidapi_ps4.c
  2. 1 0
      src/joystick/hidapi/SDL_hidapi_ps5.c

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

@@ -1307,6 +1307,7 @@ static bool HIDAPI_DriverPS4_UpdateDevice(SDL_HIDAPI_Device *device)
             if (now >= (ctx->last_packet + BLUETOOTH_DISCONNECT_TIMEOUT_MS)) {
             if (now >= (ctx->last_packet + BLUETOOTH_DISCONNECT_TIMEOUT_MS)) {
                 // Send an empty output report to tickle the Bluetooth stack
                 // Send an empty output report to tickle the Bluetooth stack
                 HIDAPI_DriverPS4_TickleBluetooth(device);
                 HIDAPI_DriverPS4_TickleBluetooth(device);
+                ctx->last_packet = now;
             }
             }
         } else {
         } else {
             // Reconnect the Bluetooth device once the USB device is gone
             // Reconnect the Bluetooth device once the USB device is gone

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

@@ -1553,6 +1553,7 @@ static bool HIDAPI_DriverPS5_UpdateDevice(SDL_HIDAPI_Device *device)
             if (now >= (ctx->last_packet + BLUETOOTH_DISCONNECT_TIMEOUT_MS)) {
             if (now >= (ctx->last_packet + BLUETOOTH_DISCONNECT_TIMEOUT_MS)) {
                 // Send an empty output report to tickle the Bluetooth stack
                 // Send an empty output report to tickle the Bluetooth stack
                 HIDAPI_DriverPS5_TickleBluetooth(device);
                 HIDAPI_DriverPS5_TickleBluetooth(device);
+                ctx->last_packet = now;
             }
             }
         } else {
         } else {
             // Reconnect the Bluetooth device once the USB device is gone
             // Reconnect the Bluetooth device once the USB device is gone