Skip to content

Commit

Permalink
Track the last sent controller packet by controller index
Browse files Browse the repository at this point in the history
This avoids stacking batch delay when multiple controller are connected
  • Loading branch information
cgutman committed Oct 17, 2023
1 parent 615b5e2 commit c9e5660
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions src/InputStream.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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();
}

Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit c9e5660

Please sign in to comment.