mirror of
https://github.com/moonlight-stream/moonlight-embedded.git
synced 2026-07-23 23:40:36 +00:00
Correct handling of triggers
This commit is contained in:
@@ -13,8 +13,9 @@ public class EvdevAbsolute {
|
|||||||
|
|
||||||
private final static int ABS_OFFSET = 0x40;
|
private final static int ABS_OFFSET = 0x40;
|
||||||
|
|
||||||
|
private int min, max;
|
||||||
private int avg;
|
private int avg;
|
||||||
private int range;
|
private int range, diff;
|
||||||
private int flat;
|
private int flat;
|
||||||
|
|
||||||
private boolean reverse;
|
private boolean reverse;
|
||||||
@@ -27,12 +28,13 @@ public class EvdevAbsolute {
|
|||||||
IO.ioctl(filename, data, request);
|
IO.ioctl(filename, data, request);
|
||||||
|
|
||||||
buffer.getInt(); //Skip current value
|
buffer.getInt(); //Skip current value
|
||||||
int min = buffer.getInt();
|
min = buffer.getInt();
|
||||||
int max = buffer.getInt();
|
max = buffer.getInt();
|
||||||
buffer.getInt(); //Skip fuzz
|
buffer.getInt(); //Skip fuzz
|
||||||
flat = buffer.getInt();
|
flat = buffer.getInt();
|
||||||
avg = (min+max)/2;
|
avg = (min+max)/2;
|
||||||
range = max-avg;
|
range = max-avg;
|
||||||
|
diff = max-min;
|
||||||
|
|
||||||
this.reverse = reverse;
|
this.reverse = reverse;
|
||||||
}
|
}
|
||||||
@@ -45,9 +47,9 @@ public class EvdevAbsolute {
|
|||||||
public short getShort(int value) {
|
public short getShort(int value) {
|
||||||
if (Math.abs(value-avg)<flat)
|
if (Math.abs(value-avg)<flat)
|
||||||
return 0;
|
return 0;
|
||||||
else if (value>avg+range)
|
else if (value>max)
|
||||||
return reverse?Short.MIN_VALUE:Short.MAX_VALUE;
|
return reverse?Short.MIN_VALUE:Short.MAX_VALUE;
|
||||||
else if (value<avg-range)
|
else if (value<min)
|
||||||
return reverse?Short.MAX_VALUE:Short.MIN_VALUE;
|
return reverse?Short.MAX_VALUE:Short.MIN_VALUE;
|
||||||
else {
|
else {
|
||||||
value += value<avg?flat:-flat;
|
value += value<avg?flat:-flat;
|
||||||
@@ -61,15 +63,15 @@ public class EvdevAbsolute {
|
|||||||
* @return input value as byte
|
* @return input value as byte
|
||||||
*/
|
*/
|
||||||
public byte getByte(int value) {
|
public byte getByte(int value) {
|
||||||
if (Math.abs(value-avg)<flat)
|
if (Math.abs(value-min)<flat)
|
||||||
return 0;
|
return 0;
|
||||||
else if (value>avg+range)
|
else if (value>max)
|
||||||
return reverse?Byte.MIN_VALUE:Byte.MAX_VALUE;
|
return reverse?0:(byte) 0xFF;
|
||||||
else if (value<avg-range)
|
else if (value<min)
|
||||||
return reverse?Byte.MAX_VALUE:Byte.MIN_VALUE;
|
return reverse?(byte) 0xFF:0;
|
||||||
else {
|
else {
|
||||||
value += value<avg?flat:-flat;
|
value -= -flat;
|
||||||
return (byte) ((value-avg) * Byte.MAX_VALUE / (reverse?flat-range:range-flat));
|
return (byte) ((value-min) * 0xFF / (reverse?flat-diff:diff-flat));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -162,9 +162,9 @@ public class EvdevHandler extends EvdevReader {
|
|||||||
else if (value==EvdevConstants.KEY_RELEASED)
|
else if (value==EvdevConstants.KEY_RELEASED)
|
||||||
buttonFlags &= ~gamepadButton;
|
buttonFlags &= ~gamepadButton;
|
||||||
} else if (code==mapping.btn_tl2)
|
} else if (code==mapping.btn_tl2)
|
||||||
leftTrigger = (byte) (value==EvdevConstants.KEY_PRESSED ? -1 : 0);
|
leftTrigger = (byte) (value==EvdevConstants.KEY_PRESSED ? 0xFF : 0);
|
||||||
else if (code==mapping.btn_tr2)
|
else if (code==mapping.btn_tr2)
|
||||||
rightTrigger = (byte) (value==EvdevConstants.KEY_PRESSED ? -1 : 0);
|
rightTrigger = (byte) (value==EvdevConstants.KEY_PRESSED ? 0xFF : 0);
|
||||||
else
|
else
|
||||||
gamepadModified = false;
|
gamepadModified = false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user