Fix Xbox 360 driver

This commit is contained in:
Cameron Gutman 2016-01-28 12:07:11 -05:00
parent ee01a8b5a0
commit 7ad1ebd0e8
2 changed files with 19 additions and 5 deletions

View File

@ -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

View File

@ -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;