[PATCH evemu 1/7] Add wrappers around some libevdev utility functions

Benjamin Tissoires benjamin.tissoires at gmail.com
Fri Aug 15 10:54:30 PDT 2014


On Thu, Aug 14, 2014 at 11:29 PM, Peter Hutterer
<peter.hutterer at who-t.net> wrote:
> On Thu, Aug 14, 2014 at 02:00:39PM -0400, Benjamin Tissoires wrote:
>> Mostly for the python binding so we can get rid of the generated mapping
>> tables.
>
> I've been staring at this and for one reason or another it doesn't feel
> right but I can't quite put the finger on it. So two questions come up here:
> * since we need this for the python bindings and internally only, should we
>   just wrap libevdev directly for these?

I don't think we want to do that. I don't want to have what should be
a thin wrapper around one C-lib depend on an other C-lib (even that is
used internally). I do not see it coming in the future, but this
allows to change libevdev to another lib or another implementation if
we want.

I think the problem comes from the fact that evemu-event (in tools)
directly makes use of libevdev, instead of using evemu. That is IMO a
problem for the very same reason (patch to follow).

evemu is now a convenient library which hides most of the services
given by libevdev, and I do not want to expose those to the users
(either in tools/ or python/)

> * should we add python bindings to libevdev and use them.

Again, this would be IMO even uglier, and the same reasons as above apply.

Cheers,
Benjamin

>
> The patch itself is fine, I just don't know if that's really what we want to
> do.
>
> Cheers,
>    Peter
>
>> We export here accessors around type/code/property.
>>
>> Signed-off-by: Benjamin Tissoires <benjamin.tissoires at gmail.com>
>> ---
>>  python/evemu/base.py | 25 ++++++++++++++++++++
>>  src/evemu.c          | 25 ++++++++++++++++++++
>>  src/evemu.h          | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>>  src/libevemu.ver     |  9 +++++++
>>  4 files changed, 125 insertions(+)
>>
>> diff --git a/python/evemu/base.py b/python/evemu/base.py
>> index 8d8b3de..53758dd 100644
>> --- a/python/evemu/base.py
>> +++ b/python/evemu/base.py
>> @@ -405,6 +405,31 @@ class LibEvemu(LibraryWrapper):
>>              "argtypes": (c_void_p,),
>>              "restype": None
>>              },
>> +        #const char *evemu_event_type_get_name(unsigned int type);
>> +        "evemu_event_type_get_name": {
>> +            "argtypes": (c_uint,),
>> +            "restype": c_char_p
>> +            },
>> +        #int evemu_event_type_from_name(const char *name);
>> +        "evemu_event_type_from_name": {
>> +            "argtypes": (c_char_p,),
>> +            "restype": c_int
>> +            },
>> +        #const char *evemu_event_code_get_name(unsigned int type, unsigned int code);
>> +        "evemu_event_code_get_name": {
>> +            "argtypes": (c_uint, c_uint,),
>> +            "restype": c_char_p
>> +            },
>> +        #int evemu_event_code_from_name(unsigned int type, const char *name);
>> +        "evemu_event_code_from_name": {
>> +            "argtypes": (c_uint, c_char_p,),
>> +            "restype": c_int
>> +            },
>> +        #const char *evemu_property_get_name(unsigned int prop);
>> +        "evemu_property_get_name": {
>> +            "argtypes": (c_uint,),
>> +            "restype": c_char_p
>> +            },
>>          }
>>
>>  class InputEvent(ctypes.Structure):
>> diff --git a/src/evemu.c b/src/evemu.c
>> index aae1913..1821f40 100644
>> --- a/src/evemu.c
>> +++ b/src/evemu.c
>> @@ -802,3 +802,28 @@ void evemu_destroy(struct evemu_device *dev)
>>               dev->uidev = NULL;
>>       }
>>  }
>> +
>> +const char *evemu_event_type_get_name(unsigned int type)
>> +{
>> +     return libevdev_event_type_get_name(type);
>> +}
>> +
>> +const char *evemu_event_code_get_name(unsigned int type, unsigned int code)
>> +{
>> +     return libevdev_event_code_get_name(type, code);
>> +}
>> +
>> +const char *evemu_property_get_name(unsigned int prop)
>> +{
>> +     return libevdev_property_get_name(prop);
>> +}
>> +
>> +int evemu_event_type_from_name(const char *name)
>> +{
>> +     return libevdev_event_type_from_name(name);
>> +}
>> +
>> +int evemu_event_code_from_name(unsigned int type, const char *name)
>> +{
>> +     return libevdev_event_code_from_name(type, name);
>> +}
>> diff --git a/src/evemu.h b/src/evemu.h
>> index ae3f7d3..c2af364 100644
>> --- a/src/evemu.h
>> +++ b/src/evemu.h
>> @@ -165,6 +165,72 @@ unsigned int evemu_get_id_version(const struct evemu_device *dev);
>>  void evemu_set_id_version(struct evemu_device *dev, unsigned int version);
>>
>>  /**
>> + * evemu_event_type_get_name() - get the name of an event type
>> + *
>> + * @type: The event type to return the name for.
>> + *
>> + * Returns he name of the given event type (e.g. EV_ABS) or NULL for an
>> + * invalid type
>> + */
>> +const char *evemu_event_type_get_name(unsigned int type);
>> +
>> +/**
>> + * evemu_event_code_get_name() - get the name of an event code
>> + *
>> + * @type: The event type for the code to query (EV_SYN, EV_REL, etc.)
>> + * @code: The event code to return the name for (e.g. ABS_X)
>> + *
>> + * Returns the name of the given event code (e.g. ABS_X) or NULL for an
>> + * invalid type or code
>> + */
>> +const char *evemu_event_code_get_name(unsigned int type, unsigned int code);
>> +
>> +/**
>> + * evemu_property_get_name() - get the name of an input property
>> + *
>> + * @prop: The input prop to return the name for (e.g. INPUT_PROP_BUTTONPAD)
>> + *
>> + * Returns the name of the given input prop (e.g. INPUT_PROP_BUTTONPAD) or NULL for an
>> + * invalid property
>> + */
>> +const char *evemu_property_get_name(unsigned int prop);
>> +
>> +/**
>> + * evemu_event_type_from_name() - get the code of a given event type name
>> + *
>> + * Look up an event-type by its name. Event-types start with "EV_" followed by
>> + * the name (eg., "EV_ABS"). The "EV_" prefix must be included in the name. It
>> + * returns the constant assigned to the event-type or -1 if not found.
>> + *
>> + * @name: A non-NULL string describing an input-event type ("EV_KEY",
>> + * "EV_ABS", ...), zero-terminated.
>> + *
>> + * Returns the given type constant for the passed name or -1 if not found.
>> + */
>> +int evemu_event_type_from_name(const char *name);
>> +
>> +/**
>> + * evemu_event_code_from_name() - get the numerical code of a given event code name
>> + *
>> + * Look up an event code by its type and name. Event codes start with a fixed
>> + * prefix followed by their name (eg., "ABS_X"). The prefix must be included in
>> + * the name. It returns the constant assigned to the event code or -1 if not
>> + * found.
>> + *
>> + * You have to pass the event type where to look for the name. For instance, to
>> + * resolve "ABS_X" you need to pass EV_ABS as type and "ABS_X" as string.
>> + * Supported event codes are codes starting with SYN_, KEY_, BTN_, REL_, ABS_,
>> + * MSC_, SND_, SW_, LED_, REP_, FF_.
>> + *
>> + * @type: The event type (EV_* constant) where to look for the name.
>> + * @name: A non-NULL string describing an input-event code ("KEY_A",
>> + * "ABS_X", "BTN_Y", ...), zero-terminated.
>> + *
>> + * Returns the given code constant for the passed name or -1 if not found.
>> + */
>> +int evemu_event_code_from_name(unsigned int type, const char *name);
>> +
>> +/**
>>   * evemu_get_abs_minimum() - get kernel minimum value of event type
>>   * @dev: the device in use
>>   * @code: the event type code to query
>> diff --git a/src/libevemu.ver b/src/libevemu.ver
>> index d5f914f..3cfae96 100644
>> --- a/src/libevemu.ver
>> +++ b/src/libevemu.ver
>> @@ -45,3 +45,12 @@ EVEMU_2.0 {
>>    local:
>>      *;
>>  };
>> +
>> +EVEMU_2.1 {
>> +  global:
>> +    evemu_event_type_get_name;
>> +    evemu_event_type_from_name;
>> +    evemu_event_code_get_name;
>> +    evemu_event_code_from_name;
>> +    evemu_property_get_name;
>> +} EVEMU_2.0;
>> --
>> 2.0.4
>>
>> _______________________________________________
>> Input-tools mailing list
>> Input-tools at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/input-tools


More information about the Input-tools mailing list