From: gaober <gao...@16...> - 2013-05-07 12:46:03
|
Hi! i implement touch screen driver in os\src\input\ft5406,and can get the coordinate x, y,then i use: _ev_queue.add(Input::Event(Input::Event::MOTION, 0, _abs_x, _abs_y, 0, 0)); _ev_queue.add(Input::Event(Input::Event::PRESS, Input::BTN_TOUCH, _abs_x, _abs_y, 0, 0)); _ev_queue.add(Input::Event(Input::Event::RELEASE, Input::BTN_TOUCH, _abs_x, _abs_y, 0, 0)); to add the event to the event queue. now the question is how can i pass the events to linux. the bot modules are: set boot_modules { core init timer omap4_gpio_drv omap4_i2c_drv omap4_fb_drv input_ft5406_drv sd_card_drv usb_drv nic_bridge nitpicker nit_fb part_blk terminal terminal_log l4android root-ginger.gz } thank you very much!!! |
From: <gao...@16...> - 2013-05-07 14:27:47
|
Hi! i implement touch screen driver in os\src\input\ft5406,and can get the coordinate x, y,then i use: _ev_queue.add(Input::Event(Input::Event::MOTION, 0, _abs_x, _abs_y, 0, 0)); _ev_queue.add(Input::Event(Input::Event::PRESS, Input::BTN_TOUCH, _abs_x, _abs_y, 0, 0)); _ev_queue.add(Input::Event(Input::Event::RELEASE, Input::BTN_TOUCH, _abs_x, _abs_y, 0, 0)); to add the event to the event queue. now the question is how can i pass the events to linux. the bot modules are: set boot_modules { core init timer omap4_gpio_drv omap4_i2c_drv omap4_fb_drv input_ft5406_drv sd_card_drv usb_drv nic_bridge nitpicker nit_fb part_blk terminal terminal_log l4android root-ginger.gz } thank you very much!!! |
From: Stefan K. <ste...@ge...> - 2013-05-08 09:47:35
|
Hi, On 05/07/2013 04:27 PM, gao...@16... wrote: > Hi! > i implement touch screen driver in os\src\input\ft5406,and can get the coordinate x, y,then i use: > _ev_queue.add(Input::Event(Input::Event::MOTION, 0, _abs_x, _abs_y, 0, 0)); > _ev_queue.add(Input::Event(Input::Event::PRESS, Input::BTN_TOUCH, _abs_x, _abs_y, 0, 0)); > _ev_queue.add(Input::Event(Input::Event::RELEASE, Input::BTN_TOUCH, _abs_x, _abs_y, 0, 0)); > to add the event to the event queue. > now the question is how can i pass the events to linux. normally, you don't have to care about that. It should work out of the box. The virtual input driver in L4Linux takes all input events it gets as a client of either nit_fb, or the input driver itself. Which input service L4Linux is using depends on your configuration, and the routing you've set within it. Regards Stefan > the bot modules are: > set boot_modules { > core > init > timer > omap4_gpio_drv > omap4_i2c_drv > omap4_fb_drv > input_ft5406_drv > sd_card_drv > usb_drv > nic_bridge > nitpicker > nit_fb > part_blk > terminal > terminal_log > l4android > root-ginger.gz > } > thank you very much!!! -- Stefan Kalkowski Genode Labs http://www.genode-labs.com/ · http://genode.org/ |
From: Stefan K. <ste...@ge...> - 2013-05-08 10:09:11
|
Hi, On 05/08/2013 11:47 AM, Stefan Kalkowski wrote: > Hi, > > On 05/07/2013 04:27 PM, gao...@16... wrote: >> Hi! >> i implement touch screen driver in os\src\input\ft5406,and can get the coordinate x, y,then i use: >> _ev_queue.add(Input::Event(Input::Event::MOTION, 0, _abs_x, _abs_y, 0, 0)); >> _ev_queue.add(Input::Event(Input::Event::PRESS, Input::BTN_TOUCH, _abs_x, _abs_y, 0, 0)); >> _ev_queue.add(Input::Event(Input::Event::RELEASE, Input::BTN_TOUCH, _abs_x, _abs_y, 0, 0)); >> to add the event to the event queue. >> now the question is how can i pass the events to linux. > > normally, you don't have to care about that. It should work out of the > box. The virtual input driver in L4Linux takes all input events it gets > as a client of either nit_fb, or the input driver itself. Which input > service L4Linux is using depends on your configuration, and the routing > you've set within it. I forgot to add: In fact, Genode's virtual input driver for L4Linux consists of two devices a mouse and a keyboard device, which are registered at the Linux kernel. BTN_TOUCH events are delegated to the mouse device, as long as you've enabled CONFIG_ANDROID in your Linux Kernel configuration. Have a look at file 'ports-foc/src/drivers/genode_fb.c:332'. Do you get any touch events in Linux? You might poll the appropriate '/dev/input/eventX' file. You can search in '/sys/class/input/*' for the appropriate event file that represents the Genode mouse. Regards Stefan > > Regards > Stefan > >> the bot modules are: >> set boot_modules { >> core >> init >> timer >> omap4_gpio_drv >> omap4_i2c_drv >> omap4_fb_drv >> input_ft5406_drv >> sd_card_drv >> usb_drv >> nic_bridge >> nitpicker >> nit_fb >> part_blk >> terminal >> terminal_log >> l4android >> root-ginger.gz >> } >> thank you very much!!! > -- Stefan Kalkowski Genode Labs http://www.genode-labs.com/ · http://genode.org/ |
From: Norman F. <nor...@ge...> - 2013-05-08 10:03:02
|
Hello, I guess that you are using the 'l4android.run' script as basis? This run script starts the nitpicker GUI server by default, which gets connected directly to the input driver (i.e., your driver). Do you see the mouse cursor moving according to your touch input? If yes, then you are almost there. ;-) > _ev_queue.add(Input::Event(Input::Event::MOTION, 0, _abs_x, _abs_y, 0, 0)); > _ev_queue.add(Input::Event(Input::Event::PRESS, Input::BTN_TOUCH, > _abs_x, _abs_y, 0, 0)); > _ev_queue.add(Input::Event(Input::Event::RELEASE, Input::BTN_TOUCH, > _abs_x, _abs_y, 0, 0)); Those events are passed to the nitpicker GUI server, which, in turn, routes them to one of its clients. The particular client that you are interested in is the instance of 'nit_fb' that is used for displaying Android. If you see the mouse cursor moving but the events are not coming through to Android, they are getting stuck somewhere in this chain. In general, you could instrument those components (nitpicker, nit_fb) to print a message once they receive an input event. I guess the problem lies in the nitpicker GUI server, which normally responds to mouse-button events, in particular the left mouse button. It interprets those events by setting the input-routing policy according to where the user clicked with the mouse. However, you are merely submitting 'BTN_TOUCH' events. So nitpicker won't interpret those. The easiest fix would be to let the driver generate 'BTN_LEFT' events instead of 'BTN_TOUCH' events. This way, nitpicker would see the kind of events it is expecting. Alternatively, we could change nitpicker to also respond to 'BTN_TOUCH' events. Cheers Norman -- Dr.-Ing. Norman Feske Genode Labs http://www.genode-labs.com · http://genode.org Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth |
From: Matthias L. <ml...@se...> - 2013-05-08 10:43:25
|
Hi, On Wed, May 08, 2013 at 12:02:52PM +0200, Norman Feske wrote: > I guess the problem lies in the nitpicker GUI server, which normally > responds to mouse-button events, in particular the left mouse button. It > interprets those events by setting the input-routing policy according to > where the user clicked with the mouse. However, you are merely > submitting 'BTN_TOUCH' events. So nitpicker won't interpret those. The > easiest fix would be to let the driver generate 'BTN_LEFT' events > instead of 'BTN_TOUCH' events. This way, nitpicker would see the kind of > events it is expecting. Alternatively, we could change nitpicker to also > respond to 'BTN_TOUCH' events. In order for the Android input system to correctly work you should report BTN_TOUCH events to Android. On L4Re the L4Linux fb driver has the option l4fb.touchscreen which results in the fb driver implicitly converting BTN_LEFT events into BTN_TOUCH. However, the best way is, if the (native) input driver conforms to Linux's multitouch protocol. Best, Matthias. -- Dipl.-Inf. Matthias Lange <ml...@se...> Security in Telecommunications TU Berlin / Telekom Innovation Laboratories Ernst-Reuter-Platz 7, 10587 Berlin Phone: +49 - 30 - 8353 58 553 Mobile: +49 - 160 - 587 28 07 Web: http://www.t-labs.tu-berlin.de/sect |