Hi,<br><br>I did a trial on my Beagle Board which installed with Android GingerBread2.3.4. That is to sendevent from console and trigger the &quot;mouse click&quot; action.<br><br>Firstly I check what I will receive if I make some *real* mouse click action.<br>
If I click the right-bottom corner of the screen:<br># getevent<br>/dev/input/event2: 0004 0004 00090001<br>/dev/input/event2: 0001 0110 00000001<br>/dev/input/event2: 0000 0000 00000000<br>/dev/input/event2: 0004 0004 00090001<br>
/dev/input/event2: 0001 0110 00000000<br>/dev/input/event2: 0000 0000 00000000<br><br>That means if I use &quot;sendevent&quot; with the same data and sequence, the &quot;mouse click&quot; action shoule be triggered.<br>But the trial failed. Nothing happened.<br>
<br>Then someone gave a solution.  Check this link: <a href="http://e2e.ti.com/support/embedded/android/f/509/p/207113/737993.aspx#737993">http://e2e.ti.com/support/embedded/android/f/509/p/207113/737993.aspx#737993</a><br>
And I modified the kernel drivers/input/evdev.c file as below.<br>--- evdev.c    2012-09-19 21:33:08.239665514 +0800<br>+++ evdev_modified.c    2012-09-19 21:32:56.307334229 +0800<br>@@ -352,6 +352,8 @@<br>    while (retval &lt; count) {<br>
<br>        if (input_event_from_user(buffer + retval, &amp;event)) {<br>            retval = -EFAULT;<br>            goto out;<br>        }<br><br>        input_inject_event(&amp;evdev-&gt;handle,<br>                   event.type, event.code, event.value);<br>
         retval += input_event_size();<br>     }<br> <br>+    evdev_event(&amp;evdev-&gt;handle,event.type, event.code, event.value);<br>+<br>  out:<br>     mutex_unlock(&amp;evdev-&gt;mutex);<br>     return retval;<br><br>
And then recompile the kernel image and put it on the SD card, booting... and did the trial again. This time I succeeded.<br><br>But why?<br>evdev_event() has the totally same args as input_inject_event(), and I found that input_inject_event() was implemented by adding printk().<br>
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).<br>Could anyone please help to clarify what the difference is between them? And why only evdev_event() helps in this case?<br>
<br><br>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().<br>
<br>Thanks!<br><br>BR,<br>Tom<br>