diff --git a/moonlight-common/src/com/limelight/nvstream/NvConnection.java b/moonlight-common/src/com/limelight/nvstream/NvConnection.java index 3982202d..580f2510 100644 --- a/moonlight-common/src/com/limelight/nvstream/NvConnection.java +++ b/moonlight-common/src/com/limelight/nvstream/NvConnection.java @@ -422,7 +422,7 @@ public class NvConnection { } public void sendControllerInput(final short controllerNumber, - final short buttonFlags, + final short activeGamepadMask, final short buttonFlags, final byte leftTrigger, final byte rightTrigger, final short leftStickX, final short leftStickY, final short rightStickX, final short rightStickY) @@ -430,7 +430,8 @@ public class NvConnection { if (inputStream == null) return; - inputStream.sendControllerInput(controllerNumber, buttonFlags, leftTrigger, + inputStream.sendControllerInput(controllerNumber, activeGamepadMask, + buttonFlags, leftTrigger, rightTrigger, leftStickX, leftStickY, rightStickX, rightStickY); } diff --git a/moonlight-common/src/com/limelight/nvstream/input/ControllerBatchingBlock.java b/moonlight-common/src/com/limelight/nvstream/input/ControllerBatchingBlock.java index 64aeb4a1..2e53040c 100644 --- a/moonlight-common/src/com/limelight/nvstream/input/ControllerBatchingBlock.java +++ b/moonlight-common/src/com/limelight/nvstream/input/ControllerBatchingBlock.java @@ -12,9 +12,11 @@ public class ControllerBatchingBlock { private short rightStickX; private short rightStickY; private short controllerNumber; + private short activeGamepadMask; public ControllerBatchingBlock(MultiControllerPacket initialPacket) { this.controllerNumber = initialPacket.controllerNumber; + this.activeGamepadMask = initialPacket.activeGamepadMask; this.buttonFlags = initialPacket.buttonFlags; this.leftTrigger = initialPacket.leftTrigger; this.rightTrigger = initialPacket.rightTrigger; @@ -59,6 +61,7 @@ public class ControllerBatchingBlock { public boolean submitNewPacket(MultiControllerPacket packet) { if (buttonFlags != packet.buttonFlags || controllerNumber != packet.controllerNumber || + activeGamepadMask != packet.activeGamepadMask || !checkDirs(leftTrigger, packet.leftTrigger, 0) || !checkDirs(rightTrigger, packet.rightTrigger, 1) || !checkDirs(leftStickX, packet.leftStickX, 2) || @@ -70,6 +73,7 @@ public class ControllerBatchingBlock { } this.controllerNumber = packet.controllerNumber; + this.activeGamepadMask = packet.activeGamepadMask; this.leftTrigger = packet.leftTrigger; this.rightTrigger = packet.rightTrigger; this.leftStickX = packet.leftStickX; @@ -81,6 +85,7 @@ public class ControllerBatchingBlock { public void reinitializePacket(MultiControllerPacket packet) { packet.controllerNumber = controllerNumber; + packet.activeGamepadMask = activeGamepadMask; packet.buttonFlags = buttonFlags; packet.leftTrigger = leftTrigger; packet.rightTrigger = rightTrigger; diff --git a/moonlight-common/src/com/limelight/nvstream/input/ControllerPacket.java b/moonlight-common/src/com/limelight/nvstream/input/ControllerPacket.java index aed7c3b8..e784d791 100644 --- a/moonlight-common/src/com/limelight/nvstream/input/ControllerPacket.java +++ b/moonlight-common/src/com/limelight/nvstream/input/ControllerPacket.java @@ -50,7 +50,7 @@ public class ControllerPacket extends MultiControllerPacket { short leftStickX, short leftStickY, short rightStickX, short rightStickY) { - super(PACKET_TYPE, (short) 0, buttonFlags, leftTrigger, rightTrigger, leftStickX, + super(PACKET_TYPE, (short) 0, (short) 0, buttonFlags, leftTrigger, rightTrigger, leftStickX, leftStickY, rightStickX, rightStickY); this.buttonFlags = buttonFlags; diff --git a/moonlight-common/src/com/limelight/nvstream/input/ControllerStream.java b/moonlight-common/src/com/limelight/nvstream/input/ControllerStream.java index 88a19afa..fb4b6a39 100644 --- a/moonlight-common/src/com/limelight/nvstream/input/ControllerStream.java +++ b/moonlight-common/src/com/limelight/nvstream/input/ControllerStream.java @@ -274,13 +274,16 @@ public class ControllerStream { } else { // Use multi-controller packets for generation 4 and above - queuePacket(new MultiControllerPacket(context, (short) 0, buttonFlags, leftTrigger, + queuePacket(new MultiControllerPacket(context, + (short) 0, (short) 0x1, + buttonFlags, leftTrigger, rightTrigger, leftStickX, leftStickY, rightStickX, rightStickY)); } } - public void sendControllerInput(short controllerNumber, short buttonFlags, byte leftTrigger, byte rightTrigger, + public void sendControllerInput(short controllerNumber, short activeGamepadMask, + short buttonFlags, byte leftTrigger, byte rightTrigger, short leftStickX, short leftStickY, short rightStickX, short rightStickY) { if (context.serverGeneration == ConnectionContext.SERVER_GENERATION_3) { @@ -291,7 +294,9 @@ public class ControllerStream { } else { // Use multi-controller packets for generation 4 and above - queuePacket(new MultiControllerPacket(context, controllerNumber, buttonFlags, leftTrigger, + queuePacket(new MultiControllerPacket(context, + controllerNumber, activeGamepadMask, + buttonFlags, leftTrigger, rightTrigger, leftStickX, leftStickY, rightStickX, rightStickY)); } diff --git a/moonlight-common/src/com/limelight/nvstream/input/MultiControllerPacket.java b/moonlight-common/src/com/limelight/nvstream/input/MultiControllerPacket.java index 8d21d832..e4ebce5b 100644 --- a/moonlight-common/src/com/limelight/nvstream/input/MultiControllerPacket.java +++ b/moonlight-common/src/com/limelight/nvstream/input/MultiControllerPacket.java @@ -24,6 +24,7 @@ public class MultiControllerPacket extends InputPacket { InputPacket.HEADER_LENGTH; short controllerNumber; + short activeGamepadMask; short buttonFlags; byte leftTrigger; byte rightTrigger; @@ -35,7 +36,8 @@ public class MultiControllerPacket extends InputPacket { private int headerCode; public MultiControllerPacket(ConnectionContext context, - short controllerNumber, short buttonFlags, byte leftTrigger, byte rightTrigger, + short controllerNumber, short activeGamepadMask, + short buttonFlags, byte leftTrigger, byte rightTrigger, short leftStickX, short leftStickY, short rightStickX, short rightStickY) { @@ -49,6 +51,7 @@ public class MultiControllerPacket extends InputPacket { } this.controllerNumber = controllerNumber; + this.activeGamepadMask = activeGamepadMask; this.buttonFlags = buttonFlags; this.leftTrigger = leftTrigger; @@ -62,7 +65,8 @@ public class MultiControllerPacket extends InputPacket { } public MultiControllerPacket(int packetType, - short controllerNumber, short buttonFlags, + short controllerNumber, short activeGamepadMask, + short buttonFlags, byte leftTrigger, byte rightTrigger, short leftStickX, short leftStickY, short rightStickX, short rightStickY) @@ -70,6 +74,7 @@ public class MultiControllerPacket extends InputPacket { super(packetType); this.controllerNumber = controllerNumber; + this.activeGamepadMask = activeGamepadMask; this.buttonFlags = buttonFlags; this.leftTrigger = leftTrigger; @@ -88,7 +93,7 @@ public class MultiControllerPacket extends InputPacket { bb.putInt(headerCode); bb.putShort((short) 0x1a); bb.putShort(controllerNumber); - bb.putShort((short) 0x0f); // Active controller flags + bb.putShort(activeGamepadMask); bb.putShort((short) 0x14); bb.putShort(buttonFlags); bb.put(leftTrigger);