LG デバイスにプログラム (C コード) でマルチタッチ イベントを挿入することができました/dev/input/event0
。しかし、キープレスインジェクションでは成功しません。経由でキーを挿入することはできますが、ファイルadb shell input keyevent
で何も起きていません。/dev/input/event*
それらのどれも何も受け取らないように見えます。キーを挿入する場所にファイルをローカライズする方法を知っている人はいますか? 前もって感謝します。
アップデート:
初期化デバイスコード:
ioctl (obj->m_fd, UI_SET_EVBIT, EV_KEY);
ioctl (obj->m_fd, UI_SET_KEYBIT, BTN_TOUCH);
ioctl (obj->m_fd, UI_SET_KEYBIT, KEY_BACK);
ioctl (obj->m_fd, UI_SET_KEYBIT, KEY_HOMEPAGE);
for (i = KEY_RESERVED; i <= KEY_UNKNOWN; i++)
ioctl(obj->m_fd, UI_SET_KEYBIT, i);
ioctl (obj->m_fd, UI_SET_EVBIT, EV_ABS);
ioctl (obj->m_fd, UI_SET_ABSBIT, ABS_X);
ioctl (obj->m_fd, UI_SET_ABSBIT, ABS_Y);
ioctl (obj->m_fd, UI_SET_ABSBIT, ABS_MT_TOUCH_MAJOR);
ioctl (obj->m_fd, UI_SET_ABSBIT, ABS_MT_POSITION_X);
ioctl (obj->m_fd, UI_SET_ABSBIT, ABS_MT_POSITION_Y);
ioctl (obj->m_fd, UI_SET_ABSBIT, ABS_MT_TRACKING_ID);
ioctl (obj->m_fd, UI_SET_ABSBIT, ABS_MT_PRESSURE);
タッチ イベント コードを挿入する (動作中)
intSendEvent( obj->m_fd, EV_ABS, ABS_MT_TRACKING_ID, 0 );
intSendEvent( obj->m_fd, EV_ABS, ABS_MT_POSITION_X, obj->x );
intSendEvent( obj->m_fd, EV_ABS, ABS_MT_POSITION_Y, obj->y );
intSendEvent( obj->m_fd, EV_ABS, ABS_MT_TOUCH_MAJOR, obj->sq );
intSendEvent( obj->m_fd, EV_ABS, ABS_MT_PRESSURE, obj->pr );
intSendEvent( obj->m_fd, EV_SYN, SYN_MT_REPORT, 0);
intSendEvent( obj->m_fd, EV_SYN, SYN_REPORT, 0);
intSendEvent( obj->m_fd, EV_SYN, SYN_MT_REPORT, 0);
intSendEvent( obj->m_fd, EV_SYN, SYN_REPORT, 0);
キープレスコードをどこに挿入するかKEY_RESERVED <= obj->keyCode <=KEY_UNKNOWN
(動作しない)
intSendEvent(obj->m_fd, EV_KEY, obj->keyCode, 1);
intSendEvent( obj->m_fd, EV_SYN, SYN_REPORT, 0);
intSendEvent(obj->m_fd, EV_KEY, obj->keyCode, 0);
intSendEvent( obj->m_fd, EV_SYN, SYN_REPORT, 0);
イベント送信機能
void intSendEvent(int fd_kb,int type, int code, int value)
{
debug("intSendEvent call (%d,%d,%d,%d)", fd_kb, type, code, value);
struct uinput_event event;
int len;
if (fd_kb <= fileno(stderr))
return;
memset(&event, 0, sizeof(event));
event.type = type;
event.code = code;
event.value = value;
len = write( fd_kb, &event, sizeof(event) );
debug("intSendEvent done:%d",len);
}