diff --git a/jni/evdev_reader/evdev_reader.c b/jni/evdev_reader/evdev_reader.c index df2b1352..16586d43 100644 --- a/jni/evdev_reader/evdev_reader.c +++ b/jni/evdev_reader/evdev_reader.c @@ -26,22 +26,35 @@ Java_com_limelight_binding_input_evdev_EvdevReader_ungrab(JNIEnv *env, jobject t return ioctl(fd, EVIOCGRAB, 0) == 0; } -// isMouse() and friends are based on Android's EventHub.cpp +// has*() and friends are based on Android's EventHub.cpp #define test_bit(bit, array) (array[bit/8] & (1<<(bit%8))) JNIEXPORT jboolean JNICALL -Java_com_limelight_binding_input_evdev_EvdevReader_isMouse(JNIEnv *env, jobject this, jint fd) { - unsigned char keyBitmask[(KEY_MAX + 1) / 8]; +Java_com_limelight_binding_input_evdev_EvdevReader_hasRelAxis(JNIEnv *env, jobject this, jint fd, jshort axis) { unsigned char relBitmask[(REL_MAX + 1) / 8]; - ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keyBitmask)), keyBitmask); ioctl(fd, EVIOCGBIT(EV_REL, sizeof(relBitmask)), relBitmask); - // If this device has all required features of a mouse, it's a mouse! - return test_bit(BTN_MOUSE, keyBitmask) && - test_bit(REL_X, relBitmask) && - test_bit(REL_Y, relBitmask); + return test_bit(axis, relBitmask); +} + +JNIEXPORT jboolean JNICALL +Java_com_limelight_binding_input_evdev_EvdevReader_hasAbsAxis(JNIEnv *env, jobject this, jint fd, jshort axis) { + unsigned char absBitmask[(ABS_MAX + 1) / 8]; + + ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(absBitmask)), absBitmask); + + return test_bit(axis, absBitmask); +} + +JNIEXPORT jboolean JNICALL +Java_com_limelight_binding_input_evdev_EvdevReader_hasKey(JNIEnv *env, jobject this, jint fd, jshort key) { + unsigned char keyBitmask[(KEY_MAX + 1) / 8]; + + ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keyBitmask)), keyBitmask); + + return test_bit(key, keyBitmask); } JNIEXPORT jint JNICALL diff --git a/libs/arm64-v8a/libevdev_reader.so b/libs/arm64-v8a/libevdev_reader.so index bd427cf2..669f25f9 100755 Binary files a/libs/arm64-v8a/libevdev_reader.so and b/libs/arm64-v8a/libevdev_reader.so differ diff --git a/libs/armeabi-v7a/libevdev_reader.so b/libs/armeabi-v7a/libevdev_reader.so index 50e4346d..f95ed9b5 100755 Binary files a/libs/armeabi-v7a/libevdev_reader.so and b/libs/armeabi-v7a/libevdev_reader.so differ diff --git a/libs/mips/libevdev_reader.so b/libs/mips/libevdev_reader.so index aeee0210..85604e92 100755 Binary files a/libs/mips/libevdev_reader.so and b/libs/mips/libevdev_reader.so differ diff --git a/libs/x86/libevdev_reader.so b/libs/x86/libevdev_reader.so index 1dfdd72d..f9ac6f6e 100755 Binary files a/libs/x86/libevdev_reader.so and b/libs/x86/libevdev_reader.so differ diff --git a/libs/x86_64/libevdev_reader.so b/libs/x86_64/libevdev_reader.so index fc258059..8051dde0 100755 Binary files a/libs/x86_64/libevdev_reader.so and b/libs/x86_64/libevdev_reader.so differ