80,351
社区成员
发帖
与我相关
我的任务
分享
fd = jniClick.intCreate("/dev/input/event0", 1);
/*
* Class: com_hs_leozheng_ndkeumclick_jniClick
* Method: intCreate
* Signature: (Ljava/lang/String;I)I
*/
JNIEXPORT jint JNICALL Java_com_hs_leozheng_ndkeumclick_jniClick_intCreate(
JNIEnv *env, jclass thiz, jstring inputdev, jint mouse)
{
jboolean iscopy;
char szDev[255] = "";
const char *pszDev = (*env)->GetStringUTFChars(env, inputdev, &iscopy);
if (pszDev) strncpy(szDev, pszDev, 255);
(*env)->ReleaseStringUTFChars(env, inputdev, pszDev);
debug("intCreate call (%s)", szDev);
struct uinput_dev dev;
int fd_kb, aux;
fd_kb = open(szDev, O_RDWR);
if (fd_kb < 0) {
debug("Can't open input device:%s(%d)", szDev,fd_kb);
// Leo: Can't open input device:/dev/input/event0(-1)
return -1;
}
memset(&dev, 0, sizeof(dev));
strcpy(dev.name, "AndroidKeyInjector Input");
dev.id.bustype = 0x0003; // BUS_USB;
dev.id.vendor = 0x0000;
dev.id.product = 0x0000;
dev.id.version = 0x0000;
if (write(fd_kb, &dev, sizeof(dev)) < 0) {
debug("Can't write device information");
close(fd_kb);
return -1;
}
if (mouse) {
ioctl(fd_kb, UI_SET_EVBIT, EV_REL);
for (aux = REL_X; aux <= REL_MISC; aux++)
ioctl(fd_kb, UI_SET_RELBIT, aux);
}
if (mouse) {
ioctl(fd_kb, UI_SET_EVBIT, EV_KEY);
for (aux = BTN_LEFT; aux <= BTN_BACK; aux++)
ioctl(fd_kb, UI_SET_KEYBIT, aux);
}
ioctl(fd_kb, UI_DEV_CREATE);
debug("intCreate success: %d", fd_kb);
return fd_kb;
}