112 lines
2.8 KiB
Python
112 lines
2.8 KiB
Python
# pylint: disable=undefined-variable
|
|
"""
|
|
This modules exposes the integer constants defined in ``linux/input.h`` and
|
|
``linux/input-event-codes.h``.
|
|
|
|
Exposed constants::
|
|
|
|
KEY, ABS, REL, SW, MSC, LED, BTN, REP, SND, ID, EV,
|
|
BUS, SYN, FF, FF_STATUS, INPUT_PROP
|
|
|
|
This module also provides reverse and forward mappings of the names and values
|
|
of the above mentioned constants::
|
|
|
|
>>> evdev.ecodes.KEY_A
|
|
30
|
|
|
|
>>> evdev.ecodes.ecodes['KEY_A']
|
|
30
|
|
|
|
>>> evdev.ecodes.KEY[30]
|
|
'KEY_A'
|
|
|
|
>>> evdev.ecodes.REL[0]
|
|
'REL_X'
|
|
|
|
>>> evdev.ecodes.EV[evdev.ecodes.EV_KEY]
|
|
'EV_KEY'
|
|
|
|
>>> evdev.ecodes.bytype[evdev.ecodes.EV_REL][0]
|
|
'REL_X'
|
|
|
|
Keep in mind that values in reverse mappings may point to one or more event
|
|
codes. For example::
|
|
|
|
>>> evdev.ecodes.FF[80]
|
|
('FF_EFFECT_MIN', 'FF_RUMBLE')
|
|
|
|
>>> evdev.ecodes.FF[81]
|
|
'FF_PERIODIC'
|
|
"""
|
|
|
|
from inspect import getmembers
|
|
|
|
from . import _ecodes
|
|
|
|
#: Mapping of names to values.
|
|
ecodes = {}
|
|
|
|
prefixes = "KEY ABS REL SW MSC LED BTN REP SND ID EV BUS SYN FF_STATUS FF INPUT_PROP UI_FF".split()
|
|
prev_prefix = ""
|
|
g = globals()
|
|
|
|
# eg. code: 'REL_Z', val: 2
|
|
for code, val in getmembers(_ecodes):
|
|
for prefix in prefixes: # eg. 'REL'
|
|
if code.startswith(prefix):
|
|
ecodes[code] = val
|
|
# FF_STATUS codes should not appear in the FF reverse mapping
|
|
if not code.startswith(prev_prefix):
|
|
d = g.setdefault(prefix, {})
|
|
# codes that share the same value will be added to a list. eg:
|
|
# >>> ecodes.FF_STATUS
|
|
# {0: 'FF_STATUS_STOPPED', 1: ['FF_STATUS_MAX', 'FF_STATUS_PLAYING']}
|
|
if val in d:
|
|
if isinstance(d[val], list):
|
|
d[val].append(code)
|
|
else:
|
|
d[val] = [d[val], code]
|
|
else:
|
|
d[val] = code
|
|
|
|
prev_prefix = prefix
|
|
|
|
|
|
# Convert lists to tuples.
|
|
k, v = None, None
|
|
for prefix in prefixes:
|
|
for k, v in g[prefix].items():
|
|
if isinstance(v, list):
|
|
g[prefix][k] = tuple(v)
|
|
|
|
|
|
#: Keys are a combination of all BTN and KEY codes.
|
|
keys = {}
|
|
keys.update(BTN)
|
|
keys.update(KEY)
|
|
|
|
# make keys safe to use for the default list of uinput device
|
|
# capabilities
|
|
del keys[_ecodes.KEY_MAX]
|
|
del keys[_ecodes.KEY_CNT]
|
|
|
|
#: Mapping of event types to other value/name mappings.
|
|
bytype = {
|
|
_ecodes.EV_KEY: keys,
|
|
_ecodes.EV_ABS: ABS,
|
|
_ecodes.EV_REL: REL,
|
|
_ecodes.EV_SW: SW,
|
|
_ecodes.EV_MSC: MSC,
|
|
_ecodes.EV_LED: LED,
|
|
_ecodes.EV_REP: REP,
|
|
_ecodes.EV_SND: SND,
|
|
_ecodes.EV_SYN: SYN,
|
|
_ecodes.EV_FF: FF,
|
|
_ecodes.EV_FF_STATUS: FF_STATUS,
|
|
}
|
|
|
|
from evdev._ecodes import *
|
|
|
|
# cheaper than whitelisting in an __all__
|
|
del code, val, prefix, getmembers, g, d, k, v, prefixes, prev_prefix
|