From c9e5660b8ccc50acf9c9b137f4891b58a6cf9c81 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 16 Oct 2023 22:02:55 -0500 Subject: [PATCH] Track the last sent controller packet by controller index This avoids stacking batch delay when multiple controller are connected --- src/InputStream.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/InputStream.c b/src/InputStream.c index 86d31a90..1cedccaf 100644 --- a/src/InputStream.c +++ b/src/InputStream.c @@ -336,7 +336,7 @@ static void inputSendThreadProc(void* context) { relMouseMagicLE = LE32(MOUSE_MOVE_REL_MAGIC); } - uint64_t lastControllerPacketTime = 0; + uint64_t lastControllerPacketTime[MAX_GAMEPADS] = { 0 }; uint64_t lastMousePacketTime = 0; uint64_t lastPenPacketTime = 0; uint64_t lastMotionPacketTime = 0; @@ -351,12 +351,13 @@ static void inputSendThreadProc(void* context) { if (holder->packet.header.magic == multiControllerMagicLE) { PPACKET_HOLDER controllerBatchHolder; PNV_MULTI_CONTROLLER_PACKET origPkt; + short controllerNumber = LE16(holder->packet.multiController.controllerNumber); uint64_t now = PltGetMillis(); // Delay for batching if required - if (now < lastControllerPacketTime + CONTROLLER_BATCHING_INTERVAL_MS) { + if (now < lastControllerPacketTime[controllerNumber] + CONTROLLER_BATCHING_INTERVAL_MS) { flushInputOnControlStream(); - PltSleepMs((int)(lastControllerPacketTime + CONTROLLER_BATCHING_INTERVAL_MS - now)); + PltSleepMs((int)(lastControllerPacketTime[controllerNumber] + CONTROLLER_BATCHING_INTERVAL_MS - now)); now = PltGetMillis(); } @@ -405,7 +406,7 @@ static void inputSendThreadProc(void* context) { freePacketHolder(controllerBatchHolder); } - lastControllerPacketTime = now; + lastControllerPacketTime[controllerNumber] = now; } // If it's a relative mouse move packet, we can also do batching else if (holder->packet.header.magic == relMouseMagicLE) {