Skip to content

Commit

Permalink
Merge changes Idd3b6166,Iad0e7888 into main
Browse files Browse the repository at this point in the history
* changes:
  uinput: set device version IDs from evemu files
  uinput: report evemu parsing errors
  • Loading branch information
HarryCutts authored and Android (Google) Code Review committed Nov 23, 2023
2 parents 9c3cac2 + d950584 commit 69f1c8e
Show file tree
Hide file tree
Showing 8 changed files with 196 additions and 96 deletions.
23 changes: 12 additions & 11 deletions cmds/uinput/jni/com_android_commands_uinput_Device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,9 @@ JNIEnv* DeviceCallback::getJNIEnv() {
return env;
}

std::unique_ptr<UinputDevice> UinputDevice::open(int32_t id, const char* name, int32_t vid,
int32_t pid, uint16_t bus, uint32_t ffEffectsMax,
const char* port,
std::unique_ptr<UinputDevice> UinputDevice::open(int32_t id, const char* name, int32_t vendorId,
int32_t productId, int32_t versionId, uint16_t bus,
uint32_t ffEffectsMax, const char* port,
std::unique_ptr<DeviceCallback> callback) {
android::base::unique_fd fd(::open(UINPUT_PATH, O_RDWR | O_NONBLOCK | O_CLOEXEC));
if (!fd.ok()) {
Expand All @@ -118,8 +118,9 @@ std::unique_ptr<UinputDevice> UinputDevice::open(int32_t id, const char* name, i
strlcpy(setupDescriptor.name, name, UINPUT_MAX_NAME_SIZE);
setupDescriptor.id.version = 1;
setupDescriptor.id.bustype = bus;
setupDescriptor.id.vendor = vid;
setupDescriptor.id.product = pid;
setupDescriptor.id.vendor = vendorId;
setupDescriptor.id.product = productId;
setupDescriptor.id.version = versionId;
setupDescriptor.ff_effects_max = ffEffectsMax;

// Request device configuration.
Expand Down Expand Up @@ -242,9 +243,9 @@ std::vector<int32_t> toVector(JNIEnv* env, jintArray javaArray) {
return data;
}

static jlong openUinputDevice(JNIEnv* env, jclass /* clazz */, jstring rawName, jint id, jint vid,
jint pid, jint bus, jint ffEffectsMax, jstring rawPort,
jobject callback) {
static jlong openUinputDevice(JNIEnv* env, jclass /* clazz */, jstring rawName, jint id,
jint vendorId, jint productId, jint versionId, jint bus,
jint ffEffectsMax, jstring rawPort, jobject callback) {
ScopedUtfChars name(env, rawName);
if (name.c_str() == nullptr) {
return 0;
Expand All @@ -255,8 +256,8 @@ static jlong openUinputDevice(JNIEnv* env, jclass /* clazz */, jstring rawName,
std::make_unique<uinput::DeviceCallback>(env, callback);

std::unique_ptr<uinput::UinputDevice> d =
uinput::UinputDevice::open(id, name.c_str(), vid, pid, bus, ffEffectsMax, port.c_str(),
std::move(cb));
uinput::UinputDevice::open(id, name.c_str(), vendorId, productId, versionId, bus,
ffEffectsMax, port.c_str(), std::move(cb));
return reinterpret_cast<jlong>(d.release());
}

Expand Down Expand Up @@ -326,7 +327,7 @@ static jint getEvdevInputPropByLabel(JNIEnv* env, jclass /* clazz */, jstring ra

static JNINativeMethod sMethods[] = {
{"nativeOpenUinputDevice",
"(Ljava/lang/String;IIIIILjava/lang/String;"
"(Ljava/lang/String;IIIIIILjava/lang/String;"
"Lcom/android/commands/uinput/Device$DeviceCallback;)J",
reinterpret_cast<void*>(openUinputDevice)},
{"nativeInjectEvent", "(JIII)V", reinterpret_cast<void*>(injectEvent)},
Expand Down
6 changes: 3 additions & 3 deletions cmds/uinput/jni/com_android_commands_uinput_Device.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,9 @@ class DeviceCallback {

class UinputDevice {
public:
static std::unique_ptr<UinputDevice> open(int32_t id, const char* name, int32_t vid,
int32_t pid, uint16_t bus, uint32_t ff_effects_max,
const char* port,
static std::unique_ptr<UinputDevice> open(int32_t id, const char* name, int32_t vendorId,
int32_t productId, int32_t versionId, uint16_t bus,
uint32_t ff_effects_max, const char* port,
std::unique_ptr<DeviceCallback> callback);

virtual ~UinputDevice();
Expand Down
26 changes: 15 additions & 11 deletions cmds/uinput/src/com/android/commands/uinput/Device.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,9 @@ public class Device {
System.loadLibrary("uinputcommand_jni");
}

private static native long nativeOpenUinputDevice(String name, int id, int vid, int pid,
int bus, int ffEffectsMax, String port, DeviceCallback callback);
private static native long nativeOpenUinputDevice(String name, int id, int vendorId,
int productId, int versionId, int bus, int ffEffectsMax, String port,
DeviceCallback callback);
private static native void nativeCloseUinputDevice(long ptr);
private static native void nativeInjectEvent(long ptr, int type, int code, int value);
private static native void nativeConfigure(int handle, int code, int[] configs);
Expand All @@ -71,7 +72,7 @@ private static native long nativeOpenUinputDevice(String name, int id, int vid,
private static native int nativeGetEvdevEventCodeByLabel(int type, String label);
private static native int nativeGetEvdevInputPropByLabel(String label);

public Device(int id, String name, int vid, int pid, int bus,
public Device(int id, String name, int vendorId, int productId, int versionId, int bus,
SparseArray<int[]> configuration, int ffEffectsMax,
SparseArray<InputAbsInfo> absInfo, String port) {
mId = id;
Expand All @@ -83,19 +84,20 @@ public Device(int id, String name, int vid, int pid, int bus,
mOutputStream = System.out;
SomeArgs args = SomeArgs.obtain();
args.argi1 = id;
args.argi2 = vid;
args.argi3 = pid;
args.argi4 = bus;
args.argi5 = ffEffectsMax;
args.argi2 = vendorId;
args.argi3 = productId;
args.argi4 = versionId;
args.argi5 = bus;
args.argi6 = ffEffectsMax;
if (name != null) {
args.arg1 = name;
} else {
args.arg1 = id + ":" + vid + ":" + pid;
args.arg1 = id + ":" + vendorId + ":" + productId;
}
if (port != null) {
args.arg2 = port;
} else {
args.arg2 = "uinput:" + id + ":" + vid + ":" + pid;
args.arg2 = "uinput:" + id + ":" + vendorId + ":" + productId;
}

mHandler.obtainMessage(MSG_OPEN_UINPUT_DEVICE, args).sendToTarget();
Expand Down Expand Up @@ -161,8 +163,10 @@ public void handleMessage(Message msg) {
case MSG_OPEN_UINPUT_DEVICE:
SomeArgs args = (SomeArgs) msg.obj;
String name = (String) args.arg1;
mPtr = nativeOpenUinputDevice(name, args.argi1, args.argi2,
args.argi3, args.argi4, args.argi5, (String) args.arg2,
mPtr = nativeOpenUinputDevice(name, args.argi1 /* id */,
args.argi2 /* vendorId */, args.argi3 /* productId */,
args.argi4 /* versionId */, args.argi5 /* bus */,
args.argi6 /* ffEffectsMax */, (String) args.arg2 /* port */,
new DeviceCallback());
if (mPtr == 0) {
RuntimeException ex = new RuntimeException(
Expand Down
Loading

0 comments on commit 69f1c8e

Please sign in to comment.