From 7ad1ebd0e81347ea9f4d6258f4d97c4a76513b09 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Thu, 28 Jan 2016 12:07:11 -0500 Subject: [PATCH] Fix Xbox 360 driver --- .../input/driver/UsbDriverService.java | 2 +- .../input/driver/Xbox360Controller.java | 22 +++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/limelight/binding/input/driver/UsbDriverService.java b/app/src/main/java/com/limelight/binding/input/driver/UsbDriverService.java index dc8c071b..264e38a4 100644 --- a/app/src/main/java/com/limelight/binding/input/driver/UsbDriverService.java +++ b/app/src/main/java/com/limelight/binding/input/driver/UsbDriverService.java @@ -102,7 +102,7 @@ public class UsbDriverService extends Service implements UsbDriverListener { private void handleUsbDeviceState(UsbDevice device) { // Are we able to operate it? - if (XboxOneController.canClaimDevice(device)) { + if (XboxOneController.canClaimDevice(device) || Xbox360Controller.canClaimDevice(device)) { // Do we have permission yet? if (!usbManager.hasPermission(device)) { // Let's ask for permission diff --git a/app/src/main/java/com/limelight/binding/input/driver/Xbox360Controller.java b/app/src/main/java/com/limelight/binding/input/driver/Xbox360Controller.java index 4f2ef610..3b098861 100644 --- a/app/src/main/java/com/limelight/binding/input/driver/Xbox360Controller.java +++ b/app/src/main/java/com/limelight/binding/input/driver/Xbox360Controller.java @@ -67,10 +67,24 @@ public class Xbox360Controller extends AbstractXboxController { super(device, connection, deviceId, listener); } + private int unsignByte(byte b) { + if (b < 0) { + return b + 256; + } + else { + return b; + } + } + @Override protected boolean handleRead(ByteBuffer buffer) { - // Skip first byte - buffer.position(buffer.position() + 1); + if (buffer.limit() < 14) { + LimeLog.severe("Read too small: "+buffer.limit()); + return false; + } + + // Skip first short + buffer.position(buffer.position() + 2); // DPAD byte b = buffer.get(); @@ -102,8 +116,8 @@ public class Xbox360Controller extends AbstractXboxController { setButtonFlag(ControllerPacket.SPECIAL_BUTTON_FLAG, b & 0x04); // Triggers - leftTrigger = buffer.get() / 255.0f; - rightTrigger = buffer.get() / 255.0f; + leftTrigger = unsignByte(buffer.get()) / 255.0f; + rightTrigger = unsignByte(buffer.get()) / 255.0f; // Left stick leftStickX = buffer.getShort() / 32767.0f;