1 # encoding: utf-8
2
3 '''
4 This modules exposes most integer constants defined in ``linux/input.h``.
5
6 Exposed constants::
7
8 KEY, ABS, REL, SW, MSC, LED, BTN, REP, SND, ID, EV, BUS, SYN
9
10 This module also provides numerous reverse and forward mappings that are best
11 illustrated by a few examples::
12
13 >>> evdev.ecodes.KEY_A
14 30
15
16 >>> evdev.ecodes.ecodes['KEY_A']
17 30
18
19 >>> evdev.ecodes.KEY[30]
20 'KEY_A'
21
22 >>> evdev.ecodes.REL[0]
23 'REL_X'
24
25 >>> evdev.ecodes.EV[evdev.EV_KEY]
26 'EV_KEY'
27
28 >>> evdev.ecodes.bytype[EV_REL][0]
29 'REL_X'
30 '''
31
32 from inspect import getmembers
33 from evdev import _ecodes
34
35
36 #: mapping of names to values
37 ecodes = {}
38
39 prefixes = 'KEY ABS REL SW MSC LED BTN REP SND ID EV BUS SYN'
40 g = globals()
41
42 for k,v in getmembers(_ecodes):
43 for i in prefixes.split():
44 if k.startswith(i):
45 g.setdefault(i, {})[v] = k
46 ecodes[k] = v
47
48
49 #: keys are a combination of all BTN and KEY codes
50 keys = {}
51 keys.update(BTN)
52 keys.update(KEY)
53
54 # make keys safe to use for the default list of uinput device
55 # capabilities
56 del keys[_ecodes.KEY_MAX]
57 del keys[_ecodes.KEY_CNT]
58
59 #: mapping of event types to other value/name mappings
60 bytype = {
61 _ecodes.EV_KEY: keys,
62 _ecodes.EV_ABS: ABS,
63 _ecodes.EV_REL: REL,
64 _ecodes.EV_SW: SW,
65 _ecodes.EV_MSC: MSC,
66 _ecodes.EV_LED: LED,
67 _ecodes.EV_REP: REP,
68 _ecodes.EV_SND: SND,
69 _ecodes.EV_SYN: SYN, }
70
71 from evdev._ecodes import *
72
73 # cheaper than whitelisting in an __all__
74 del k, v, i, getmembers, g, prefixes