From 15f7dbe49f96d8151482b4219710897f66838d48 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 4 Feb 2017 20:41:28 -0800 Subject: [PATCH] Update to new common-c to show the correct number of controllers on the host PC --- gamepad.cpp | 37 +++++++++++++++++++++++++++++++++++-- moonlight-common-c | 2 +- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/gamepad.cpp b/gamepad.cpp index 32a06c5..c70eb23 100644 --- a/gamepad.cpp +++ b/gamepad.cpp @@ -18,12 +18,44 @@ static const unsigned int k_StandardGamepadTriggerButtonIndexes[] = { 6, 7 }; +static short GetActiveGamepadMask(PP_GamepadsSampleData& gamepadData) { + short controllerIndex = 0; + short activeGamepadMask = 0; + + for (unsigned int p = 0; p < gamepadData.length; p++) { + PP_GamepadSampleData& padData = gamepadData.items[p]; + + if (!padData.connected) { + // Not connected + continue; + } + + if (padData.timestamp == 0) { + // On some platforms, Chrome returns "connected" pads that + // really aren't, so timestamp stays at zero. To work around this, + // we'll only count gamepads that have a non-zero timestamp in our + // controller index. + continue; + } + + activeGamepadMask |= (1 << controllerIndex); + controllerIndex++; + } + + return activeGamepadMask; +} + void MoonlightInstance::PollGamepads() { PP_GamepadsSampleData gamepadData; short controllerIndex = 0; + short activeGamepadMask; m_GamepadApi->Sample(pp_instance(), &gamepadData); - + + // We must determine which gamepads are connected before reporting + // any events. + activeGamepadMask = GetActiveGamepadMask(gamepadData); + for (unsigned int p = 0; p < gamepadData.length; p++) { PP_GamepadSampleData& padData = gamepadData.items[p]; @@ -86,7 +118,8 @@ void MoonlightInstance::PollGamepads() { rightStickY = -padData.axes[3] * 0x7FFF; } - LiSendMultiControllerEvent(controllerIndex, buttonFlags, leftTrigger, rightTrigger, + LiSendMultiControllerEvent(controllerIndex, activeGamepadMask, + buttonFlags, leftTrigger, rightTrigger, leftStickX, leftStickY, rightStickX, rightStickY); controllerIndex++; } diff --git a/moonlight-common-c b/moonlight-common-c index f1adbc1..8d2dccf 160000 --- a/moonlight-common-c +++ b/moonlight-common-c @@ -1 +1 @@ -Subproject commit f1adbc1e6bd68f8abf6855308e176d2bfc906693 +Subproject commit 8d2dccf4ca5614814adcee49f68d87325036f3e2