Plumb non-normalized key flag extension for Sunshine

This commit is contained in:
Cameron Gutman
2023-02-20 19:52:33 -06:00
parent 121bef7d2d
commit 91dd7b7049
5 changed files with 29 additions and 9 deletions

View File

@@ -1324,7 +1324,8 @@ public class Game extends Activity implements SurfaceHolder.Callback,
if (KeyboardTranslator.needsShift(event.getKeyCode())) {
modifiers |= KeyboardPacket.MODIFIER_SHIFT;
}
conn.sendKeyboardInput(translated, KeyboardPacket.KEY_DOWN, modifiers);
conn.sendKeyboardInput(translated, KeyboardPacket.KEY_DOWN, modifiers,
keyboardTranslator.hasNormalizedMapping(event.getKeyCode(), event.getDeviceId()) ? 0 : MoonBridge.SS_KBE_FLAG_NON_NORMALIZED);
}
return true;
@@ -1388,7 +1389,8 @@ public class Game extends Activity implements SurfaceHolder.Callback,
if (KeyboardTranslator.needsShift(event.getKeyCode())) {
modifiers |= KeyboardPacket.MODIFIER_SHIFT;
}
conn.sendKeyboardInput(translated, KeyboardPacket.KEY_UP, modifiers);
conn.sendKeyboardInput(translated, KeyboardPacket.KEY_UP, modifiers,
keyboardTranslator.hasNormalizedMapping(event.getKeyCode(), event.getDeviceId()) ? 0 : MoonBridge.SS_KBE_FLAG_NON_NORMALIZED);
}
return true;
@@ -2199,10 +2201,10 @@ public class Game extends Activity implements SurfaceHolder.Callback,
}
if (buttonDown) {
conn.sendKeyboardInput(keyMap, KeyboardPacket.KEY_DOWN, getModifierState());
conn.sendKeyboardInput(keyMap, KeyboardPacket.KEY_DOWN, getModifierState(), (byte)0);
}
else {
conn.sendKeyboardInput(keyMap, KeyboardPacket.KEY_UP, getModifierState());
conn.sendKeyboardInput(keyMap, KeyboardPacket.KEY_UP, getModifierState(), (byte)0);
}
}
}

View File

@@ -118,6 +118,22 @@ public class KeyboardTranslator implements InputManager.InputDeviceListener {
}
}
public boolean hasNormalizedMapping(int keycode, int deviceId) {
if (deviceId >= 0) {
KeyboardMapping mapping = keyboardMappings.get(deviceId);
if (mapping != null) {
// Try to map this device-specific keycode onto a QWERTY layout.
// GFE assumes incoming keycodes are from a QWERTY keyboard.
int qwertyKeyCode = mapping.getQwertyKeyCodeForDeviceKeyCode(keycode);
if (qwertyKeyCode != KeyEvent.KEYCODE_UNKNOWN) {
return true;
}
}
}
return false;
}
/**
* Translates the given keycode and returns the GFE keycode
* @param keycode the code to be translated

View File

@@ -505,9 +505,9 @@ public class NvConnection {
}
}
public void sendKeyboardInput(final short keyMap, final byte keyDirection, final byte modifier) {
public void sendKeyboardInput(final short keyMap, final byte keyDirection, final byte modifier, final byte flags) {
if (!isMonkey) {
MoonBridge.sendKeyboardInput(keyMap, keyDirection, modifier);
MoonBridge.sendKeyboardInput(keyMap, keyDirection, modifier, flags);
}
}

View File

@@ -73,6 +73,8 @@ public class MoonBridge {
public static final int ML_TEST_RESULT_INCONCLUSIVE = 0xFFFFFFFF;
public static final byte SS_KBE_FLAG_NON_NORMALIZED = 0x01;
private static AudioRenderer audioRenderer;
private static VideoDecoderRenderer videoRenderer;
private static NvConnectionListener connectionListener;
@@ -305,9 +307,9 @@ public class MoonBridge {
short leftStickX, short leftStickY,
short rightStickX, short rightStickY);
public static native void sendKeyboardInput(short keyMap, byte keyDirection, byte modifier);
public static native void sendMouseScroll(byte scrollClicks);
public static native void sendKeyboardInput(short keyMap, byte keyDirection, byte modifier, byte flags);
public static native void sendMouseHighResScroll(short scrollAmount);

View File

@@ -47,8 +47,8 @@ Java_com_limelight_nvstream_jni_MoonBridge_sendControllerInput(JNIEnv *env, jcla
}
JNIEXPORT void JNICALL
Java_com_limelight_nvstream_jni_MoonBridge_sendKeyboardInput(JNIEnv *env, jclass clazz, jshort keyCode, jbyte keyAction, jbyte modifiers) {
LiSendKeyboardEvent(keyCode, keyAction, modifiers);
Java_com_limelight_nvstream_jni_MoonBridge_sendKeyboardInput(JNIEnv *env, jclass clazz, jshort keyCode, jbyte keyAction, jbyte modifiers, jbyte flags) {
LiSendKeyboardEvent2(keyCode, keyAction, modifiers, flags);
}
JNIEXPORT void JNICALL