Blame doc/html/group__uinput.html

Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
<html xmlns="http://www.w3.org/1999/xhtml">
Packit Service b8eee4
    <head>
Packit Service b8eee4
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
Packit Service b8eee4
        
Packit Service b8eee4
        <meta name="viewport" content="width=device-width, initial-scale=1">
Packit Service b8eee4
        <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
Packit Service b8eee4
        <meta name="generator" content="Doxygen 1.8.15"/>
Packit Service b8eee4
        <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
Packit Service b8eee4
        <title>libevdev: uinput device creation</title>
Packit Service b8eee4
        
Packit Service b8eee4
        <script type="text/javascript" src="dynsections.js"></script>
Packit Service b8eee4
        <link href="search/search.css" rel="stylesheet" type="text/css"/>
Packit Service b8eee4
<script type="text/javascript" src="search/searchdata.js"></script>
Packit Service b8eee4
<script type="text/javascript" src="search/search.js"></script>
Packit Service b8eee4
        <link href="doxygen.css" rel="stylesheet" type="text/css" />
Packit Service b8eee4
        <link href="bootstrap.css" rel="stylesheet" type="text/css"/>
Packit Service b8eee4
<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
Packit Service b8eee4
<link href="libevdevdoxygen.css" rel="stylesheet" type="text/css"/>
Packit Service b8eee4
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
Packit Service b8eee4
        <script type="text/javascript" src="doxy-boot.js"></script>
Packit Service b8eee4
    </head>
Packit Service b8eee4
    <body>
Packit Service b8eee4
        <nav class="navbar navbar-default" role="navigation">
Packit Service b8eee4
            
Packit Service b8eee4
                
Packit Service b8eee4
                    libevdev 1.8.0
Packit Service b8eee4
                
Packit Service b8eee4
            
Packit Service b8eee4
        </nav>
Packit Service b8eee4
        
Packit Service b8eee4
            
Packit Service b8eee4
                
Packit Service b8eee4
                    
Packit Service b8eee4
                        
Packit Service b8eee4
                            
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
<script type="text/javascript">
Packit Service b8eee4
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
Packit Service b8eee4
var searchBox = new SearchBox("searchBox", "search",false,'Search');
Packit Service b8eee4
/* @license-end */
Packit Service b8eee4
</script>
Packit Service b8eee4
<script type="text/javascript" src="menudata.js"></script>
Packit Service b8eee4
<script type="text/javascript" src="menu.js"></script>
Packit Service b8eee4
<script type="text/javascript">
Packit Service b8eee4
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
Packit Service b8eee4
$(function() {
Packit Service b8eee4
  initMenu('',true,false,'search.php','Search');
Packit Service b8eee4
  $(document).ready(function() { init_search(); });
Packit Service b8eee4
});
Packit Service b8eee4
/* @license-end */</script>
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
     onmouseover="return searchBox.OnSearchSelectShow()"
Packit Service b8eee4
     onmouseout="return searchBox.OnSearchSelectHide()"
Packit Service b8eee4
     onkeydown="return searchBox.OnSearchSelectKey(event)">
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
        name="MSearchResults" id="MSearchResults">
Packit Service b8eee4
</iframe>
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
  
Packit Service b8eee4
Functions  
Packit Service b8eee4
  
Packit Service b8eee4
uinput device creation
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4

Creation of uinput devices based on existing libevdev devices.

Packit Service b8eee4
More...

Packit Service b8eee4
Packit Service b8eee4

Packit Service b8eee4
Functions
Packit Service b8eee4
int libevdev_uinput_create_from_device (const struct libevdev *dev, int uinput_fd, struct libevdev_uinput **uinput_dev)
Packit Service b8eee4
 Create a uinput device based on the given libevdev device.  More...
Packit Service b8eee4
 
Packit Service b8eee4
void libevdev_uinput_destroy (struct libevdev_uinput *uinput_dev)
Packit Service b8eee4
 Destroy a previously created uinput device and free associated memory.  More...
Packit Service b8eee4
 
Packit Service b8eee4
int libevdev_uinput_get_fd (const struct libevdev_uinput *uinput_dev)
Packit Service b8eee4
 Return the file descriptor used to create this uinput device.  More...
Packit Service b8eee4
 
Packit Service b8eee4
const char * libevdev_uinput_get_syspath (struct libevdev_uinput *uinput_dev)
Packit Service b8eee4
 Return the syspath representing this uinput device.  More...
Packit Service b8eee4
 
Packit Service b8eee4
const char * libevdev_uinput_get_devnode (struct libevdev_uinput *uinput_dev)
Packit Service b8eee4
 Return the device node representing this uinput device.  More...
Packit Service b8eee4
 
Packit Service b8eee4
int libevdev_uinput_write_event (const struct libevdev_uinput *uinput_dev, unsigned int type, unsigned int code, int value)
Packit Service b8eee4
 Post an event through the uinput device.  More...
Packit Service b8eee4
 
Packit Service b8eee4
Packit Service b8eee4

Detailed Description

Packit Service b8eee4

Creation of uinput devices based on existing libevdev devices.

Packit Service b8eee4

These functions help to create uinput devices that emulate libevdev devices. In the simplest form it serves to duplicate an existing device:

Packit Service b8eee4
int err;
int fd, new_fd, uifd;
struct libevdev *dev;
struct libevdev_uinput *uidev;
struct input_event ev[2];
fd = open("/dev/input/event0", O_RDONLY);
if (fd < 0)
return err;
err = libevdev_new_from_fd(fd, &dev);
if (err != 0)
return err;
uifd = open("/dev/uinput", O_RDWR);
if (uifd < 0)
return -errno;
err = libevdev_uinput_create_from_device(dev, uifd, &uidev);
if (err != 0)
return err;
// post a REL_X event
err = libevdev_uinput_write_event(uidev, EV_REL, REL_X, -1);
if (err != 0)
return err;
libevdev_uinput_write_event(uidev, EV_SYN, SYN_REPORT, 0);
if (err != 0)
return err;
close(uifd);
close(fd);

Alternatively, a device can be constructed from scratch:

Packit Service b8eee4
int err;
struct libevdev *dev;
struct libevdev_uinput *uidev;
dev = libevdev_new();
libevdev_set_name(dev, "test device");
libevdev_enable_event_code(dev, EV_REL, REL_X, NULL);
libevdev_enable_event_code(dev, EV_REL, REL_Y, NULL);
libevdev_enable_event_code(dev, EV_KEY, BTN_LEFT, NULL);
libevdev_enable_event_code(dev, EV_KEY, BTN_MIDDLE, NULL);
libevdev_enable_event_code(dev, EV_KEY, BTN_RIGHT, NULL);
&uidev);
if (err != 0)
return err;
// ... do something ...

Function Documentation

Packit Service b8eee4
Packit Service b8eee4

◆ libevdev_uinput_create_from_device()

Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
      
Packit Service b8eee4
        
Packit Service b8eee4
          int libevdev_uinput_create_from_device 
Packit Service b8eee4
          (
Packit Service b8eee4
          const struct libevdev * 
Packit Service b8eee4
          dev, 
Packit Service b8eee4
        
Packit Service b8eee4
        
Packit Service b8eee4
          
Packit Service b8eee4
          
Packit Service b8eee4
          int 
Packit Service b8eee4
          uinput_fd, 
Packit Service b8eee4
        
Packit Service b8eee4
        
Packit Service b8eee4
          
Packit Service b8eee4
          
Packit Service b8eee4
          struct libevdev_uinput ** 
Packit Service b8eee4
          uinput_dev 
Packit Service b8eee4
        
Packit Service b8eee4
        
Packit Service b8eee4
          
Packit Service b8eee4
          )
Packit Service b8eee4
          
Packit Service b8eee4
        
Packit Service b8eee4
      
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4

Create a uinput device based on the given libevdev device.

Packit Service b8eee4

The uinput device will be an exact copy of the libevdev device, minus the bits that uinput doesn't allow to be set.

Packit Service b8eee4

If uinput_fd is LIBEVDEV_UINPUT_OPEN_MANAGED, libevdev_uinput_create_from_device() will open /dev/uinput in read/write mode and manage the file descriptor. Otherwise, uinput_fd must be opened by the caller and opened with the appropriate permissions.

Packit Service b8eee4

The device's lifetime is tied to the uinput file descriptor, closing it will destroy the uinput device. You should call libevdev_uinput_destroy() before closing the file descriptor to free allocated resources. A file descriptor can only create one uinput device at a time; the second device will fail with -EINVAL.

Packit Service b8eee4

You don't need to keep the file descriptor variable around, libevdev_uinput_get_fd() will return it when needed.

Packit Service b8eee4
Note
Due to limitations in the uinput kernel module, REP_DELAY and REP_PERIOD will default to the kernel defaults, not to the ones set in the source device.
Packit Service b8eee4
Parameters
Packit Service b8eee4
  
Packit Service b8eee4
    devThe device to duplicate 
Packit Service b8eee4
    uinput_fdLIBEVDEV_UINPUT_OPEN_MANAGED or a file descriptor to /dev/uinput, 
Packit Service b8eee4
    [out]uinput_devThe newly created libevdev device.
Packit Service b8eee4
  
Packit Service b8eee4
  
Packit Service b8eee4
Packit Service b8eee4
Returns
0 on success or a negative errno on failure. On failure, the value of uinput_dev is unmodified.
Packit Service b8eee4
See also
libevdev_uinput_destroy
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4

◆ libevdev_uinput_destroy()

Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
      
Packit Service b8eee4
        
Packit Service b8eee4
          void libevdev_uinput_destroy 
Packit Service b8eee4
          (
Packit Service b8eee4
          struct libevdev_uinput * 
Packit Service b8eee4
          uinput_dev)
Packit Service b8eee4
          
Packit Service b8eee4
        
Packit Service b8eee4
      
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4

Destroy a previously created uinput device and free associated memory.

Packit Service b8eee4

If the device was opened with LIBEVDEV_UINPUT_OPEN_MANAGED, libevdev_uinput_destroy() also closes the file descriptor. Otherwise, the fd is left as-is and must be closed by the caller.

Packit Service b8eee4
Parameters
Packit Service b8eee4
  
Packit Service b8eee4
    uinput_devA previously created uinput device. 
Packit Service b8eee4
  
Packit Service b8eee4
  
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4

◆ libevdev_uinput_get_devnode()

Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
      
Packit Service b8eee4
        
Packit Service b8eee4
          const char* libevdev_uinput_get_devnode 
Packit Service b8eee4
          (
Packit Service b8eee4
          struct libevdev_uinput * 
Packit Service b8eee4
          uinput_dev)
Packit Service b8eee4
          
Packit Service b8eee4
        
Packit Service b8eee4
      
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4

Return the device node representing this uinput device.

Packit Service b8eee4

This relies on libevdev_uinput_get_syspath() to provide a valid syspath. See libevdev_uinput_get_syspath() for more details.

Packit Service b8eee4
Note
This function may return NULL. libevdev may have to guess the syspath and the device node. See libevdev_uinput_get_syspath() for details.
Packit Service b8eee4
Parameters
Packit Service b8eee4
  
Packit Service b8eee4
    uinput_devA previously created uinput device. 
Packit Service b8eee4
  
Packit Service b8eee4
  
Packit Service b8eee4
Packit Service b8eee4
Returns
The device node for this device, in the form of /dev/input/eventN
Packit Service b8eee4
See also
libevdev_uinput_get_syspath
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4

◆ libevdev_uinput_get_fd()

Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
      
Packit Service b8eee4
        
Packit Service b8eee4
          int libevdev_uinput_get_fd 
Packit Service b8eee4
          (
Packit Service b8eee4
          const struct libevdev_uinput * 
Packit Service b8eee4
          uinput_dev)
Packit Service b8eee4
          
Packit Service b8eee4
        
Packit Service b8eee4
      
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4

Return the file descriptor used to create this uinput device.

Packit Service b8eee4

This is the fd pointing to /dev/uinput. This file descriptor may be used to write events that are emitted by the uinput device. Closing this file descriptor will destroy the uinput device, you should call libevdev_uinput_destroy() first to free allocated resources.

Packit Service b8eee4
Parameters
Packit Service b8eee4
  
Packit Service b8eee4
    uinput_devA previously created uinput device.
Packit Service b8eee4
  
Packit Service b8eee4
  
Packit Service b8eee4
Packit Service b8eee4
Returns
The file descriptor used to create this device
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4

◆ libevdev_uinput_get_syspath()

Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
      
Packit Service b8eee4
        
Packit Service b8eee4
          const char* libevdev_uinput_get_syspath 
Packit Service b8eee4
          (
Packit Service b8eee4
          struct libevdev_uinput * 
Packit Service b8eee4
          uinput_dev)
Packit Service b8eee4
          
Packit Service b8eee4
        
Packit Service b8eee4
      
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4

Return the syspath representing this uinput device.

Packit Service b8eee4

If the UI_GET_SYSNAME ioctl not available, libevdev makes an educated guess. The UI_GET_SYSNAME ioctl is available since Linux 3.15.

Packit Service b8eee4

The syspath returned is the one of the input node itself (e.g. /sys/devices/virtual/input/input123), not the syspath of the device node returned with libevdev_uinput_get_devnode().

Packit Service b8eee4
Note
This function may return NULL if UI_GET_SYSNAME is not available. In that case, libevdev uses ctime and the device name to guess devices. To avoid false positives, wait at least wait at least 1.5s between creating devices that have the same name.
Packit Service b8eee4
Parameters
Packit Service b8eee4
  
Packit Service b8eee4
    uinput_devA previously created uinput device. 
Packit Service b8eee4
  
Packit Service b8eee4
  
Packit Service b8eee4
Packit Service b8eee4
Returns
The syspath for this device, including the preceding /sys
Packit Service b8eee4
See also
libevdev_uinput_get_devnode
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4

◆ libevdev_uinput_write_event()

Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
      
Packit Service b8eee4
        
Packit Service b8eee4
          int libevdev_uinput_write_event 
Packit Service b8eee4
          (
Packit Service b8eee4
          const struct libevdev_uinput * 
Packit Service b8eee4
          uinput_dev, 
Packit Service b8eee4
        
Packit Service b8eee4
        
Packit Service b8eee4
          
Packit Service b8eee4
          
Packit Service b8eee4
          unsigned int 
Packit Service b8eee4
          type, 
Packit Service b8eee4
        
Packit Service b8eee4
        
Packit Service b8eee4
          
Packit Service b8eee4
          
Packit Service b8eee4
          unsigned int 
Packit Service b8eee4
          code, 
Packit Service b8eee4
        
Packit Service b8eee4
        
Packit Service b8eee4
          
Packit Service b8eee4
          
Packit Service b8eee4
          int 
Packit Service b8eee4
          value 
Packit Service b8eee4
        
Packit Service b8eee4
        
Packit Service b8eee4
          
Packit Service b8eee4
          )
Packit Service b8eee4
          
Packit Service b8eee4
        
Packit Service b8eee4
      
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4

Post an event through the uinput device.

Packit Service b8eee4

It is the caller's responsibility that any event sequence is terminated with an EV_SYN/SYN_REPORT/0 event. Otherwise, listeners on the device node will not see the events until the next EV_SYN event is posted.

Packit Service b8eee4
Parameters
Packit Service b8eee4
  
Packit Service b8eee4
    uinput_devA previously created uinput device. 
Packit Service b8eee4
    typeEvent type (EV_ABS, EV_REL, etc.) 
Packit Service b8eee4
    codeEvent code (ABS_X, REL_Y, etc.) 
Packit Service b8eee4
    valueThe event value 
Packit Service b8eee4
  
Packit Service b8eee4
  
Packit Service b8eee4
Packit Service b8eee4
Returns
0 on success or a negative errno on error
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4
Packit Service b8eee4

<address class="footer"><small>
Packit Service b8eee4
Generated by  
Packit Service b8eee4
doxygen
Packit Service b8eee4
 1.8.15
Packit Service b8eee4
</small></address>
Packit Service b8eee4
</body>
Packit Service b8eee4
</html>