From fbbf572c9d11732f4f37832f97d5aab55090d188 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 21 Sep 2013 23:30:12 -0400 Subject: [PATCH] Write each analog stick a short at a time. Fix analog stick value endianness. --- gen/com/limelight/R.java | 4 +- src/com/limelight/Game.java | 24 +++++---- src/com/limelight/nvstream/NvConnection.java | 7 ++- .../nvstream/input/NvController.java | 7 ++- .../nvstream/input/NvInputPacket.java | 51 +++++++++++-------- 5 files changed, 54 insertions(+), 39 deletions(-) diff --git a/gen/com/limelight/R.java b/gen/com/limelight/R.java index a304d9d1..0a28ae4d 100644 --- a/gen/com/limelight/R.java +++ b/gen/com/limelight/R.java @@ -112,7 +112,7 @@ or to a theme attribute in the form "?[package:][type:]na

Must be a reference to another resource, in the form "@[+][package:]type:name" or to a theme attribute in the form "?[package:][type:]name". - @attr name com.limelight:buttonBarButtonStyle + @attr name android:buttonBarButtonStyle */ public static final int ButtonBarContainerTheme_buttonBarButtonStyle = 1; /** @@ -122,7 +122,7 @@ or to a theme attribute in the form "?[package:][type:]na

Must be a reference to another resource, in the form "@[+][package:]type:name" or to a theme attribute in the form "?[package:][type:]name". - @attr name com.limelight:buttonBarStyle + @attr name android:buttonBarStyle */ public static final int ButtonBarContainerTheme_buttonBarStyle = 0; }; diff --git a/src/com/limelight/Game.java b/src/com/limelight/Game.java index 2053f3e5..412a6bb7 100644 --- a/src/com/limelight/Game.java +++ b/src/com/limelight/Game.java @@ -23,10 +23,12 @@ import android.widget.VideoView; public class Game extends Activity { private short inputMap = 0x0000; - private byte leftTrigger = 0x0000; - private byte rightTrigger = 0x0000; - private int rightStick = 0x00000000; - private int leftStick = 0x00000000; + private byte leftTrigger = 0x00; + private byte rightTrigger = 0x00; + private short rightStickX = 0x0000; + private short rightStickY = 0x0000; + private short leftStickX = 0x0000; + private short leftStickY = 0x0000; private NvConnection conn; @@ -191,14 +193,13 @@ public class Game extends Activity { "RS_X: " + RS_X + "\t" + "RS_Y: " + RS_Y + "\t"); - leftStick = ((int)Math.round(LS_X * 0x7FFF) << 16) & 0xFFFF0000; - leftStick |= (int)Math.round(-LS_Y * 0x7FFF) & 0xFFFF; + leftStickX = (short)Math.round(LS_X * 0x7FFF); + leftStickY = (short)Math.round(-LS_Y * 0x7FFF); - rightStick = ((int)Math.round(RS_X * 0x7FFF) << 16) & 0xFFFF0000; - rightStick |= (int)Math.round(-RS_Y * 0x7FFF) & 0xFFFF; + rightStickX = (short)Math.round(RS_X * 0x7FFF); + rightStickY = (short)Math.round(-RS_Y * 0x7FFF); - - System.out.printf("0x%x 0x%x\n", leftStick, rightStick); + System.out.printf("(0x%x 0x%x) (0x%x 0x%x)\n", leftStickX, leftStickY, rightStickX, rightStickY); } float L2 = event.getAxisValue(OuyaController.AXIS_L2); @@ -216,7 +217,8 @@ public class Game extends Activity { private void sendInputPacket() { - conn.sendControllerInput(inputMap, leftTrigger, rightTrigger, leftStick, rightStick); + conn.sendControllerInput(inputMap, leftTrigger, rightTrigger, + leftStickX, leftStickY, rightStickX, rightStickY); } } diff --git a/src/com/limelight/nvstream/NvConnection.java b/src/com/limelight/nvstream/NvConnection.java index 88c53f90..7a07e562 100644 --- a/src/com/limelight/nvstream/NvConnection.java +++ b/src/com/limelight/nvstream/NvConnection.java @@ -62,7 +62,8 @@ public class NvConnection { public void sendControllerInput(final short buttonFlags, final byte leftTrigger, final byte rightTrigger, - final int leftStick, final int rightStick) + final short leftStickX, final short leftStickY, + final short rightStickX, final short rightStickY) { if (inputStream == null) return; @@ -71,7 +72,9 @@ public class NvConnection { @Override public void run() { try { - inputStream.sendControllerInput(buttonFlags, leftTrigger, rightTrigger, leftStick, rightStick); + inputStream.sendControllerInput(buttonFlags, leftTrigger, + rightTrigger, leftStickX, leftStickY, + rightStickX, rightStickY); } catch (IOException e) { e.printStackTrace(); displayToast(e.getMessage()); diff --git a/src/com/limelight/nvstream/input/NvController.java b/src/com/limelight/nvstream/input/NvController.java index 5cb21a72..a8d54f84 100644 --- a/src/com/limelight/nvstream/input/NvController.java +++ b/src/com/limelight/nvstream/input/NvController.java @@ -19,9 +19,12 @@ public class NvController { out = s.getOutputStream(); } - public void sendControllerInput(short buttonFlags, byte leftTrigger, byte rightTrigger, int leftStick, int rightStick) throws IOException + public void sendControllerInput(short buttonFlags, byte leftTrigger, byte rightTrigger, + short leftStickX, short leftStickY, short rightStickX, short rightStickY) throws IOException { - out.write(new NvInputPacket(buttonFlags, leftTrigger, rightTrigger, leftStick, rightStick).toWire()); + out.write(new NvInputPacket(buttonFlags, leftTrigger, + rightTrigger, leftStickX, leftStickY, + rightStickX, rightStickY).toWire()); out.flush(); } } diff --git a/src/com/limelight/nvstream/input/NvInputPacket.java b/src/com/limelight/nvstream/input/NvInputPacket.java index e23c72f9..d1d942de 100644 --- a/src/com/limelight/nvstream/input/NvInputPacket.java +++ b/src/com/limelight/nvstream/input/NvInputPacket.java @@ -28,49 +28,56 @@ public class NvInputPacket { 0x00 }; - public static final short A_FLAG = 0x0010; - public static final short B_FLAG = 0x0020; - public static final short X_FLAG = 0x0040; - public static final short Y_FLAG = 0x0080; - public static final short UP_FLAG = 0x0100; - public static final short DOWN_FLAG = 0x0200; - public static final short LEFT_FLAG = 0x0400; - public static final short RIGHT_FLAG = 0x0800; - public static final short RB_FLAG = 0x0001; - public static final short LB_FLAG = 0x0002; - public static final short LS_CLK_FLAG = 0x0400; - public static final short RS_CLK_FLAG = 0x0800; - public static final short PLAY_FLAG = 0x0100; - public static final short BACK_FLAG = 0x0200; + public static final short A_FLAG = 0x1000; + public static final short B_FLAG = 0x2000; + public static final short X_FLAG = 0x4000; + public static final short Y_FLAG = (short)0x8000; + public static final short UP_FLAG = 0x0001; + public static final short DOWN_FLAG = 0x0002; + public static final short LEFT_FLAG = 0x0004; + public static final short RIGHT_FLAG = 0x0008; + public static final short RB_FLAG = 0x0100; + public static final short LB_FLAG = 0x0200; + public static final short LS_CLK_FLAG = 0x0004; + public static final short RS_CLK_FLAG = 0x0008; + public static final short PLAY_FLAG = 0x0001; + public static final short BACK_FLAG = 0x0002; public static final short PACKET_LENGTH = 28; private short buttonFlags; private byte leftTrigger; private byte rightTrigger; - private int leftStick; - private int rightStick; + private short leftStickX; + private short leftStickY; + private short rightStickX; + private short rightStickY; public NvInputPacket(short buttonFlags, byte leftTrigger, byte rightTrigger, - int leftStick, int rightStick) + short leftStickX, short leftStickY, + short rightStickX, short rightStickY) { this.buttonFlags = buttonFlags; this.leftTrigger = leftTrigger; this.rightTrigger = rightTrigger; - this.leftStick = leftStick; - this.rightStick = rightStick; + this.leftStickX = leftStickX; + this.leftStickY = leftStickY; + this.rightStickX = rightStickX; + this.rightStickY = rightStickY; } public byte[] toWire() { - ByteBuffer bb = ByteBuffer.allocate(PACKET_LENGTH); + ByteBuffer bb = ByteBuffer.allocate(PACKET_LENGTH).order(ByteOrder.LITTLE_ENDIAN); bb.put(HEADER); bb.putShort(buttonFlags); bb.put(leftTrigger); bb.put(rightTrigger); - bb.putInt(leftStick); - bb.putInt(rightStick); + bb.putShort(leftStickX); + bb.putShort(leftStickY); + bb.putShort(rightStickX); + bb.putShort(rightStickY); bb.put(TAIL); return bb.array();