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
_______________________________________________ Kernelnewbies mailing list [email protected] http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
