What is the difference between evdev_event and input_inject_event?
Tom Xue
faninlinux at gmail.com
Thu Sep 20 03:45:47 EDT 2012
Hi,
I did a trial on my Beagle Board which installed with Android
GingerBread2.3.4. That is to sendevent from console and trigger the "mouse
click" action.
Firstly I check what I will receive if I make some *real* mouse click
action.
If I click the right-bottom corner of the screen:
# getevent
/dev/input/event2: 0004 0004 00090001
/dev/input/event2: 0001 0110 00000001
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0004 0004 00090001
/dev/input/event2: 0001 0110 00000000
/dev/input/event2: 0000 0000 00000000
That means if I use "sendevent" with the same data and sequence, the "mouse
click" action shoule be triggered.
But the trial failed. Nothing happened.
Then someone gave a solution. Check this link:
http://e2e.ti.com/support/embedded/android/f/509/p/207113/737993.aspx#737993
And I modified the kernel drivers/input/evdev.c file as below.
--- evdev.c 2012-09-19 21:33:08.239665514 +0800
+++ evdev_modified.c 2012-09-19 21:32:56.307334229 +0800
@@ -352,6 +352,8 @@
while (retval < count) {
if (input_event_from_user(buffer + retval, &event)) {
retval = -EFAULT;
goto out;
}
input_inject_event(&evdev->handle,
event.type, event.code, event.value);
retval += input_event_size();
}
+ evdev_event(&evdev->handle,event.type, event.code, event.value);
+
out:
mutex_unlock(&evdev->mutex);
return retval;
And then recompile the kernel image and put it on the SD card, booting...
and did the trial again. This time I succeeded.
But why?
evdev_event() has the totally same args as input_inject_event(), and I
found that input_inject_event() was implemented by adding printk().
That shows when applying sendevent, the input_inject_event() will pass the
event to handlers as well (my printk gives INPUT_PASS_TO_HANDLERS for 6
times, due to 6 data were sent).
Could anyone please help to clarify what the difference is between them?
And why only evdev_event() helps in this case?
BTW, I have a HTC Sensation XE phone which installed with Android 4.0.3.
And I checked its kernel source code, it is almost same to above code
(without evdev_event()). But this phone can work when I sendevent to it, no
need to add evdev_event().
Thanks!
BR,
Tom
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20120920/ecb045ab/attachment.html
More information about the Kernelnewbies
mailing list