Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751927AbdC0Ctf (ORCPT ); Sun, 26 Mar 2017 22:49:35 -0400 Received: from mail-qk0-f196.google.com ([209.85.220.196]:35284 "EHLO mail-qk0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751796AbdC0Ct3 (ORCPT ); Sun, 26 Mar 2017 22:49:29 -0400 Date: Sun, 26 Mar 2017 23:41:05 -0300 From: Marcos Paulo de Souza To: Peter Hutterer Cc: corbet@lwn.net, linux-doc@vger.kernel.org, dmitry.torokhov@gmail.com, linux-input@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3] Documentation: Input: Add uinput documentation Message-ID: <20170327024104.GB3204@xfiles> References: <20170326164821.10928-1-marcos.souza.org@gmail.com> <20170326164821.10928-2-marcos.souza.org@gmail.com> <20170327010611.GA21915@jelly> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170327010611.GA21915@jelly> User-Agent: Mutt/1.8.0 (2017-02-23) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3175 Lines: 98 On Mon, Mar 27, 2017 at 11:06:11AM +1000, Peter Hutterer wrote: > On Sun, Mar 26, 2017 at 01:48:12PM -0300, Marcos Paulo de Souza wrote: > > Signed-off-by: Marcos Paulo de Souza > > --- > > v2 -> v3: > > Changes in libevdev's description (suggested by Peter) > > Added uinput version check when using the old interface (suggested by Peter) > > Removed section numbers from sections, sphinx creates these indexes > > (suggestion by Jon) > > > > v1 -> v2: > > Changes all over the place, including better descriptions (suggested by Peter) > > Added comments about the need of a sleep call (suggested by Peter) > > > > > [...] > > tested mouse/keyboard - works as expected, thanks. I found it slightly > confusing though that the mouse example wasn't wrapped in main() but still had a > return 0 at the bottom. This code will never change once it's in the doc, so > I'm not sure skipping things is really that useful here. True, I'll "complete" the code in the next submission. > > > +uinput old interface > > +-------------------- > > + > > +Before uinput version 5, there wasn't a proper ioctl to setup a virtual device. > > +In this case, the user neesa to fill a different struct and call write o the > > +uinput file descriptor to configure the new uinput device. > > + > > +.. code-block:: c > > + > > + #include > > + > > + /* emit function is identical to of the first example */ > > + > > + struct uinput_user_dev uud; > > + int version; > > + > > + fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK); > > + ioctl(fd, UI_GET_VERSION, &version); > > + > > + if (version < 5) { > > this won't work on all kernels. UI_GET_VERSION was added in version 4, on > kernels before you get rc == -1 and errno EINVAL. You can only check > for >= 4. Please make sure the example compiles and works on an older > kernel, otherwise there's no point shipping it. OK, noting here. > > Cheers, > Peter > > > + /* > > + * the ioctls below enables the to be created device to key > > + * events, in this case the space key > > + */ > > + ioctl(fd, UI_SET_EVBIT, EV_KEY); > > + ioctl(fd, UI_SET_KEYBIT, KEY_SPACE); > > + > > + memset(&uud, 0, sizeof(uud)); > > + snprintf(uud.name, UINPUT_MAX_NAME_SIZE, "uinput old interface"); > > + write(fd, &uud, sizeof(uud)); > > + > > + ioctl(fd, UI_DEV_CREATE); > > + > > + /* > > + * On UI_DEV_CREATE the kernel creates the device nodes for this device. > > + * Insert a pause so that userspace has time to detect, initialize the > > + * new device, and can start to listen to events from this device > > + */ > > + sleep(1); > > + > > + /* key press, report the event, send key release, and report again */ > > + emit(EV_KEY, KEY_SPACE, 1); > > + emit(EV_SYN, SYN_REPORT, 0); > > + emit(EV_KEY, KEY_SPACE, 0); > > + emit(EV_SYN, SYN_REPORT, 0); > > + > > + ioctl(fd, UI_DEV_DESTROY); > > + } > > + > > + close(fd); > > + > > + return 0; > > + > > -- > > 2.9.3 > > -- Thanks, Marcos