libevdev.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Copyright © 2013 Red Hat, Inc.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a copy
6  * of this software and associated documentation files (the "Software"), to
7  * deal in the Software without restriction, including without limitation the
8  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
9  * sell copies of the Software, and to permit persons to whom the Software is
10  * furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22  * IN THE SOFTWARE.
23  *
24  */
25 
26 #ifndef LIBEVDEV_H
27 #define LIBEVDEV_H
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 #include <linux/input.h>
34 #include <stdarg.h>
35 
36 #define LIBEVDEV_ATTRIBUTE_PRINTF(_format, _args) __attribute__ ((format (printf, _format, _args)))
37 
759 struct libevdev;
760 
770 };
771 
786 struct libevdev* libevdev_new(void);
787 
810 int libevdev_new_from_fd(int fd, struct libevdev **dev);
811 
825 void libevdev_free(struct libevdev *dev);
826 
834 };
835 
852 typedef void (*libevdev_log_func_t)(enum libevdev_log_priority priority,
853  void *data,
854  const char *file, int line,
855  const char *func,
856  const char *format, va_list args)
858 
877 void libevdev_set_log_function(libevdev_log_func_t logfunc, void *data);
878 
892 
905 
925 typedef void (*libevdev_device_log_func_t)(const struct libevdev *dev,
926  enum libevdev_log_priority priority,
927  void *data,
928  const char *file, int line,
929  const char *func,
930  const char *format, va_list args)
932 
954 void libevdev_set_device_log_function(struct libevdev *dev,
956  enum libevdev_log_priority priority,
957  void *data);
958 
965 };
966 
989 int libevdev_grab(struct libevdev *dev, enum libevdev_grab_mode grab);
990 
1023 int libevdev_set_fd(struct libevdev* dev, int fd);
1024 
1063 int libevdev_change_fd(struct libevdev* dev, int fd);
1064 
1073 int libevdev_get_fd(const struct libevdev* dev);
1074 
1087 int libevdev_upload_ff_effect(struct libevdev *dev, struct ff_effect *effect);
1088 
1099 int libevdev_remove_ff_effect(struct libevdev *dev, short effect_id);
1100 
1121 };
1122 
1173 int libevdev_next_event(struct libevdev *dev, unsigned int flags, struct input_event *ev);
1174 
1197 int libevdev_has_event_pending(struct libevdev *dev);
1198 
1213 const char* libevdev_get_name(const struct libevdev *dev);
1214 
1228 void libevdev_set_name(struct libevdev *dev, const char *name);
1229 
1245 const char * libevdev_get_phys(const struct libevdev *dev);
1246 
1260 void libevdev_set_phys(struct libevdev *dev, const char *phys);
1261 
1275 const char * libevdev_get_uniq(const struct libevdev *dev);
1276 
1290 void libevdev_set_uniq(struct libevdev *dev, const char *uniq);
1291 
1301 int libevdev_get_id_product(const struct libevdev *dev);
1302 
1314 void libevdev_set_id_product(struct libevdev *dev, int product_id);
1315 
1325 int libevdev_get_id_vendor(const struct libevdev *dev);
1326 
1338 void libevdev_set_id_vendor(struct libevdev *dev, int vendor_id);
1339 
1349 int libevdev_get_id_bustype(const struct libevdev *dev);
1350 
1362 void libevdev_set_id_bustype(struct libevdev *dev, int bustype);
1363 
1373 int libevdev_get_id_version(const struct libevdev *dev);
1374 
1386 void libevdev_set_id_version(struct libevdev *dev, int version);
1387 
1397 int libevdev_get_driver_version(const struct libevdev *dev);
1398 
1409 int libevdev_has_property(const struct libevdev *dev, unsigned int prop);
1410 
1422 int libevdev_enable_property(struct libevdev *dev, unsigned int prop);
1423 
1432 int libevdev_disable_property(struct libevdev *dev, unsigned int prop);
1433 
1444 int libevdev_has_event_type(const struct libevdev *dev, unsigned int type);
1445 
1457 int libevdev_has_event_code(const struct libevdev *dev, unsigned int type, unsigned int code);
1458 
1471 int libevdev_get_abs_minimum(const struct libevdev *dev, unsigned int code);
1472 
1485 int libevdev_get_abs_maximum(const struct libevdev *dev, unsigned int code);
1486 
1499 int libevdev_get_abs_fuzz(const struct libevdev *dev, unsigned int code);
1500 
1513 int libevdev_get_abs_flat(const struct libevdev *dev, unsigned int code);
1514 
1527 int libevdev_get_abs_resolution(const struct libevdev *dev, unsigned int code);
1528 
1542 const struct input_absinfo* libevdev_get_abs_info(const struct libevdev *dev, unsigned int code);
1543 
1565 int libevdev_get_event_value(const struct libevdev *dev, unsigned int type, unsigned int code);
1566 
1600 int libevdev_set_event_value(struct libevdev *dev, unsigned int type, unsigned int code, int value);
1601 
1627 int libevdev_fetch_event_value(const struct libevdev *dev, unsigned int type, unsigned int code, int *value);
1628 
1649 int libevdev_get_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code);
1650 
1679 int libevdev_set_slot_value(struct libevdev *dev, unsigned int slot, unsigned int code, int value);
1680 
1706 int libevdev_fetch_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code, int *value);
1707 
1721 int libevdev_get_num_slots(const struct libevdev *dev);
1722 
1738 int libevdev_get_current_slot(const struct libevdev *dev);
1739 
1751 void libevdev_set_abs_minimum(struct libevdev *dev, unsigned int code, int val);
1752 
1764 void libevdev_set_abs_maximum(struct libevdev *dev, unsigned int code, int val);
1765 
1777 void libevdev_set_abs_fuzz(struct libevdev *dev, unsigned int code, int val);
1778 
1790 void libevdev_set_abs_flat(struct libevdev *dev, unsigned int code, int val);
1791 
1803 void libevdev_set_abs_resolution(struct libevdev *dev, unsigned int code, int val);
1804 
1816 void libevdev_set_abs_info(struct libevdev *dev, unsigned int code, const struct input_absinfo *abs);
1817 
1835 int libevdev_enable_event_type(struct libevdev *dev, unsigned int type);
1836 
1863 int libevdev_disable_event_type(struct libevdev *dev, unsigned int type);
1864 
1898 int libevdev_enable_event_code(struct libevdev *dev, unsigned int type, unsigned int code, const void *data);
1899 
1927 int libevdev_disable_event_code(struct libevdev *dev, unsigned int type, unsigned int code);
1928 
1943 int libevdev_kernel_set_abs_info(struct libevdev *dev, unsigned int code, const struct input_absinfo *abs);
1944 
1951 };
1952 
1966 int libevdev_kernel_set_led_value(struct libevdev *dev, unsigned int code, enum libevdev_led_value value);
1967 
1991 int libevdev_kernel_set_led_values(struct libevdev *dev, ...);
1992 
2007 int libevdev_set_clock_id(struct libevdev *dev, int clockid);
2008 
2030 int libevdev_event_is_type(const struct input_event *ev, unsigned int type);
2031 
2055 int libevdev_event_is_code(const struct input_event *ev, unsigned int type, unsigned int code);
2056 
2068 const char * libevdev_event_type_get_name(unsigned int type);
2081 const char * libevdev_event_code_get_name(unsigned int type, unsigned int code);
2082 
2103 const char * libevdev_event_value_get_name(unsigned int type,
2104  unsigned int code,
2105  int value);
2119 const char* libevdev_property_get_name(unsigned int prop);
2120 
2133 int libevdev_event_type_get_max(unsigned int type);
2134 
2149 int libevdev_event_type_from_name(const char *name);
2150 
2167 int libevdev_event_type_from_name_n(const char *name, size_t len);
2168 
2188 int libevdev_event_code_from_name(unsigned int type, const char *name);
2189 
2211 int libevdev_event_code_from_name_n(unsigned int type, const char *name,
2212  size_t len);
2213 
2235 int libevdev_event_value_from_name(unsigned int type, unsigned int code,
2236  const char *name);
2237 
2254 int
2255 libevdev_event_type_from_code_name(const char *name);
2256 
2275 int
2276 libevdev_event_type_from_code_name_n(const char *name, size_t len);
2277 
2294 int
2295 libevdev_event_code_from_code_name(const char *name);
2296 
2315 int
2316 libevdev_event_code_from_code_name_n(const char *name, size_t len);
2317 
2341 int libevdev_event_value_from_name_n(unsigned int type, unsigned int code,
2342  const char *name, size_t len);
2343 
2356 int libevdev_property_from_name(const char *name);
2357 
2372 int libevdev_property_from_name_n(const char *name, size_t len);
2373 
2391 int libevdev_get_repeat(const struct libevdev *dev, int *delay, int *period);
2392 
2393 /********* DEPRECATED SECTION *********/
2394 #if defined(__GNUC__) && __GNUC__ >= 4
2395 #define LIBEVDEV_DEPRECATED __attribute__ ((deprecated))
2396 #else
2397 #define LIBEVDEV_DEPRECATED
2398 #endif
2399 
2400 #ifdef __cplusplus
2401 }
2402 #endif
2403 
2404 #endif /* LIBEVDEV_H */
libevdev_read_status
Definition: libevdev.h:1104
int libevdev_get_abs_resolution(const struct libevdev *dev, unsigned int code)
Get the axis resolution for the given axis, as advertised by the kernel.
int libevdev_has_event_pending(struct libevdev *dev)
Check if there are events waiting for us.
void(* libevdev_device_log_func_t)(const struct libevdev *dev, enum libevdev_log_priority priority, void *data, const char *file, int line, const char *func, const char *format, va_list args)
Logging function called by library-internal logging for a specific libevdev context.
Definition: libevdev.h:925
int libevdev_event_type_from_name_n(const char *name, size_t len)
Look up an event-type by its name.
int libevdev_has_property(const struct libevdev *dev, unsigned int prop)
int libevdev_change_fd(struct libevdev *dev, int fd)
Change the fd for this device, without re-reading the actual device.
informational messages
Definition: libevdev.h:832
int libevdev_enable_property(struct libevdev *dev, unsigned int prop)
const char * libevdev_event_type_get_name(unsigned int type)
int libevdev_has_event_code(const struct libevdev *dev, unsigned int type, unsigned int code)
const struct input_absinfo * libevdev_get_abs_info(const struct libevdev *dev, unsigned int code)
Get the axis info for the given axis, as advertised by the kernel.
critical errors and application bugs
Definition: libevdev.h:831
Process data in sync mode.
Definition: libevdev.h:765
int libevdev_get_fd(const struct libevdev *dev)
int libevdev_event_type_from_code_name(const char *name)
Look up an event type for a event code name.
int libevdev_remove_ff_effect(struct libevdev *dev, short effect_id)
Removes the force feedback effect from the given device.
libevdev_led_value
Definition: libevdev.h:1948
void libevdev_set_uniq(struct libevdev *dev, const char *uniq)
Change the device's unique identifier as returned by libevdev_get_uniq().
debug information
Definition: libevdev.h:833
const char * libevdev_event_code_get_name(unsigned int type, unsigned int code)
int libevdev_get_repeat(const struct libevdev *dev, int *delay, int *period)
Get the repeat delay and repeat period values for this device.
The fd is not in O_NONBLOCK and a read may block.
Definition: libevdev.h:769
enum libevdev_log_priority libevdev_get_log_priority(void)
Return the current log priority level.
int libevdev_event_code_from_code_name(const char *name)
Look up an event code by its name.
void libevdev_set_log_function(libevdev_log_func_t logfunc, void *data)
Set a printf-style logging handler for library-internal logging.
int libevdev_has_event_type(const struct libevdev *dev, unsigned int type)
int libevdev_event_code_from_name(unsigned int type, const char *name)
Look up an event code by its type and name.
int libevdev_disable_property(struct libevdev *dev, unsigned int prop)
Turn the LED off.
Definition: libevdev.h:1950
Pretend the next event is a SYN_DROPPED and require the caller to sync.
Definition: libevdev.h:767
int libevdev_get_abs_fuzz(const struct libevdev *dev, unsigned int code)
Get the axis fuzz for the given axis, as advertised by the kernel.
int libevdev_set_slot_value(struct libevdev *dev, unsigned int slot, unsigned int code, int value)
Set the value for a given code for the given slot.
int libevdev_event_code_from_name_n(unsigned int type, const char *name, size_t len)
Look up an event code by its type and name.
void libevdev_set_id_vendor(struct libevdev *dev, int vendor_id)
int libevdev_get_abs_minimum(const struct libevdev *dev, unsigned int code)
Get the minimum axis value for the given axis, as advertised by the kernel.
int libevdev_grab(struct libevdev *dev, enum libevdev_grab_mode grab)
Grab or ungrab the device through a kernel EVIOCGRAB.
Turn the LED on.
Definition: libevdev.h:1949
int libevdev_get_id_bustype(const struct libevdev *dev)
int libevdev_event_type_get_max(unsigned int type)
int libevdev_upload_ff_effect(struct libevdev *dev, struct ff_effect *effect)
Uploads a force feedback effect to the given device.
int libevdev_event_type_from_name(const char *name)
Look up an event-type by its name.
int libevdev_disable_event_code(struct libevdev *dev, unsigned int type, unsigned int code)
Forcibly disable an event code on this device, even if the underlying device provides it...
const char * libevdev_event_value_get_name(unsigned int type, unsigned int code, int value)
This function resolves the event value for a code.
int libevdev_get_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code)
Return the current value of the code for the given slot.
int libevdev_get_event_value(const struct libevdev *dev, unsigned int type, unsigned int code)
Behaviour of this function is undefined if the device does not provide the event. ...
const char * libevdev_get_name(const struct libevdev *dev)
Retrieve the device's name, either as set by the caller or as read from the kernel.
int libevdev_get_driver_version(const struct libevdev *dev)
int libevdev_get_id_version(const struct libevdev *dev)
int libevdev_get_abs_flat(const struct libevdev *dev, unsigned int code)
Get the axis flat for the given axis, as advertised by the kernel.
int libevdev_next_event(struct libevdev *dev, unsigned int flags, struct input_event *ev)
Get the next event from the device.
const char * libevdev_get_uniq(const struct libevdev *dev)
Retrieve the device's unique identifier, either as set by the caller or as read from the kernel...
void libevdev_set_abs_maximum(struct libevdev *dev, unsigned int code, int val)
Change the maximum for the given EV_ABS event code, if the code exists.
Depending on the libevdev_next_event() read flag:
Definition: libevdev.h:1120
int libevdev_property_from_name_n(const char *name, size_t len)
Look up an input property by its name.
void(* libevdev_log_func_t)(enum libevdev_log_priority priority, void *data, const char *file, int line, const char *func, const char *format, va_list args)
Logging function called by library-internal logging.
Definition: libevdev.h:852
int libevdev_new_from_fd(int fd, struct libevdev **dev)
Initialize a new libevdev device from the given fd.
int libevdev_fetch_event_value(const struct libevdev *dev, unsigned int type, unsigned int code, int *value)
Fetch the current value of the event type.
int libevdev_set_event_value(struct libevdev *dev, unsigned int type, unsigned int code, int value)
Set the value for a given event type and code.
int libevdev_kernel_set_abs_info(struct libevdev *dev, unsigned int code, const struct input_absinfo *abs)
Set the device's EV_ABS axis to the value defined in the abs parameter.
int libevdev_fetch_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code, int *value)
Fetch the current value of the code for the given slot.
int libevdev_get_abs_maximum(const struct libevdev *dev, unsigned int code)
Get the maximum axis value for the given axis, as advertised by the kernel.
void libevdev_set_id_bustype(struct libevdev *dev, int bustype)
int libevdev_get_current_slot(const struct libevdev *dev)
Get the currently active slot.
int libevdev_event_is_code(const struct input_event *ev, unsigned int type, unsigned int code)
Helper function to check if an event is of a specific type and code.
int libevdev_event_is_type(const struct input_event *ev, unsigned int type)
Helper function to check if an event is of a specific type.
void libevdev_set_id_version(struct libevdev *dev, int version)
const char * libevdev_property_get_name(unsigned int prop)
int libevdev_event_type_from_code_name_n(const char *name, size_t len)
Look up an event type for a event code name.
void libevdev_set_abs_resolution(struct libevdev *dev, unsigned int code, int val)
Change the resolution for the given EV_ABS event code, if the code exists.
#define LIBEVDEV_ATTRIBUTE_PRINTF(_format, _args)
Definition: libevdev.h:36
int libevdev_get_id_product(const struct libevdev *dev)
const char * libevdev_get_phys(const struct libevdev *dev)
Retrieve the device's physical location, either as set by the caller or as read from the kernel...
void libevdev_set_device_log_function(struct libevdev *dev, libevdev_device_log_func_t logfunc, enum libevdev_log_priority priority, void *data)
Set a printf-style logging handler for library-internal logging for this device context.
int libevdev_enable_event_type(struct libevdev *dev, unsigned int type)
Forcibly enable an event type on this device, even if the underlying device does not support it...
int libevdev_kernel_set_led_value(struct libevdev *dev, unsigned int code, enum libevdev_led_value value)
Turn an LED on or off.
int libevdev_set_clock_id(struct libevdev *dev, int clockid)
Set the clock ID to be used for timestamps.
int libevdev_get_num_slots(const struct libevdev *dev)
Get the number of slots supported by this device.
int libevdev_property_from_name(const char *name)
Look up an input property by its name.
void libevdev_set_log_priority(enum libevdev_log_priority priority)
Define the minimum level to be printed to the log handler.
libevdev_next_event() has finished without an error and an event is available for processing...
Definition: libevdev.h:1111
int libevdev_enable_event_code(struct libevdev *dev, unsigned int type, unsigned int code, const void *data)
Forcibly enable an event code on this device, even if the underlying device does not support it...
libevdev_read_flag
Definition: libevdev.h:764
int libevdev_set_fd(struct libevdev *dev, int fd)
Set the fd for this struct and initialize internal data.
int libevdev_kernel_set_led_values(struct libevdev *dev,...)
Turn multiple LEDs on or off simultaneously.
void libevdev_set_abs_flat(struct libevdev *dev, unsigned int code, int val)
Change the flat for the given EV_ABS event code, if the code exists.
int libevdev_event_value_from_name(unsigned int type, unsigned int code, const char *name)
Look up an event value by its type, code and name.
int libevdev_event_value_from_name_n(unsigned int type, unsigned int code, const char *name, size_t len)
Look up an event value by its type, code and name.
void libevdev_set_phys(struct libevdev *dev, const char *phys)
Change the device's physical location as returned by libevdev_get_phys().
int libevdev_disable_event_type(struct libevdev *dev, unsigned int type)
Forcibly disable an event type on this device, even if the underlying device provides it...
void libevdev_set_abs_info(struct libevdev *dev, unsigned int code, const struct input_absinfo *abs)
Change the abs info for the given EV_ABS event code, if the code exists.
Grab the device if not currently grabbed.
Definition: libevdev.h:963
void libevdev_set_name(struct libevdev *dev, const char *name)
Change the device's name as returned by libevdev_get_name().
void libevdev_free(struct libevdev *dev)
Clean up and free the libevdev struct.
int libevdev_get_id_vendor(const struct libevdev *dev)
int libevdev_event_code_from_code_name_n(const char *name, size_t len)
Look up an event code by its name.
Process data in normal mode.
Definition: libevdev.h:766
void libevdev_set_abs_fuzz(struct libevdev *dev, unsigned int code, int val)
Change the fuzz for the given EV_ABS event code, if the code exists.
libevdev_grab_mode
Definition: libevdev.h:962
libevdev_log_priority
Definition: libevdev.h:830
void libevdev_set_id_product(struct libevdev *dev, int product_id)
struct libevdev * libevdev_new(void)
Initialize a new libevdev device.
void libevdev_set_abs_minimum(struct libevdev *dev, unsigned int code, int val)
Change the minimum for the given EV_ABS event code, if the code exists.
Ungrab the device if currently grabbed.
Definition: libevdev.h:964