mirror of
https://github.com/moparisthebest/uinput-mapper
synced 2024-11-22 00:12:14 -05:00
Improve mapping and config support.
This commit is contained in:
parent
9d21419deb
commit
d09d6011d8
76
py/create.py
76
py/create.py
@ -2,85 +2,39 @@ import linux_uinput, ctypes, fcntl, os, sys
|
|||||||
|
|
||||||
from cinput import *
|
from cinput import *
|
||||||
|
|
||||||
clone = True
|
from mapper import KeyMapper, parse_conf
|
||||||
|
|
||||||
overrule = lambda x: -x*2
|
|
||||||
passthrough = lambda x: x
|
|
||||||
config = {
|
|
||||||
EV_REL : {
|
|
||||||
REL_X : {
|
|
||||||
'type' : EV_REL,
|
|
||||||
'code' : REL_X,
|
|
||||||
'value': overrule
|
|
||||||
},
|
|
||||||
REL_Y : {
|
|
||||||
'type': EV_REL,
|
|
||||||
'code': REL_Y,
|
|
||||||
'value' : overrule
|
|
||||||
}
|
|
||||||
},
|
|
||||||
EV_KEY : {
|
|
||||||
BTN_LEFT : {
|
|
||||||
'type' : EV_KEY,
|
|
||||||
'code' : BTN_LEFT,
|
|
||||||
'value' : passthrough
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
from example_conf import config
|
||||||
|
|
||||||
|
clone = False
|
||||||
|
|
||||||
f = InputDevice(sys.argv[1] if len(sys.argv) == 2 else "/dev/input/event3")
|
f = InputDevice(sys.argv[1] if len(sys.argv) == 2 else "/dev/input/event3")
|
||||||
|
|
||||||
d = UInputDevice()
|
d = UInputDevice()
|
||||||
|
|
||||||
|
|
||||||
if clone:
|
if clone:
|
||||||
e = f.get_exposed_events()
|
conf = parse_conf(f)
|
||||||
for k, v in e.iteritems():
|
m = KeyMapper(conf)
|
||||||
t = events[k]
|
|
||||||
if t == EV_SYN:
|
|
||||||
continue
|
|
||||||
d.expose_event_type(t)
|
|
||||||
for key in v:
|
|
||||||
tt = event_keys[t][key]
|
|
||||||
d.expose_event(t, tt)
|
|
||||||
|
|
||||||
print k + ':', ', '.join(v)
|
|
||||||
else:
|
else:
|
||||||
for evt, v in config.iteritems():
|
m = KeyMapper(config)
|
||||||
for code, dat in v.iteritems():
|
|
||||||
d.expose_event_type(dat['type'])
|
|
||||||
d.expose_event(dat['type'], dat['code'])
|
|
||||||
|
|
||||||
|
m.expose(d)
|
||||||
|
|
||||||
d.setup('Example input device' )
|
d.setup('Example input device' )
|
||||||
|
|
||||||
|
|
||||||
def map_ev(ev):
|
|
||||||
|
|
||||||
_type = ev.type
|
|
||||||
if _type in config:
|
|
||||||
typemaps = config[_type]
|
|
||||||
if ev.code in typemaps:
|
|
||||||
info = typemaps[ev.code]
|
|
||||||
ev.type = info['type']
|
|
||||||
ev.code = info['code']
|
|
||||||
ev.value = info['value'](ev.value)
|
|
||||||
|
|
||||||
return ev
|
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
ev = f.next_event()
|
ev = f.next_event()
|
||||||
|
|
||||||
if not clone:
|
ev = m.map_event(ev)
|
||||||
ev = map_ev(ev)
|
|
||||||
|
|
||||||
d.fire_event(ev)
|
d.fire_event(ev)
|
||||||
|
|
||||||
try:
|
#try:
|
||||||
#print ev.time.tv_sec, ev.time.tv_usec
|
# print ev.time.tv_sec, ev.time.tv_usec
|
||||||
s = '%s %s %d' % (rev_events[ev.type], rev_event_keys[ev.type][ev.code], ev.value)
|
# s = '%s %s %d' % (rev_events[ev.type], rev_event_keys[ev.type][ev.code], ev.value)
|
||||||
print 'Event type:', s
|
# print 'Event type:', s
|
||||||
|
|
||||||
except KeyError:
|
#except KeyError:
|
||||||
pass
|
# pass
|
||||||
|
43
py/mapper.py
Normal file
43
py/mapper.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
import cinput
|
||||||
|
|
||||||
|
def parse_conf(f):
|
||||||
|
conf = {}
|
||||||
|
e = f.get_exposed_events()
|
||||||
|
for k, v in e.iteritems():
|
||||||
|
t = cinput.events[k]
|
||||||
|
if t == cinput.EV_SYN:
|
||||||
|
continue
|
||||||
|
|
||||||
|
conf[t] = {}
|
||||||
|
|
||||||
|
for key in v:
|
||||||
|
tt = cinput.event_keys[t][key]
|
||||||
|
conf[t][tt] = {
|
||||||
|
'type' : t,
|
||||||
|
'code' : tt,
|
||||||
|
'value' : lambda x: x
|
||||||
|
}
|
||||||
|
|
||||||
|
return conf
|
||||||
|
|
||||||
|
class KeyMapper(object):
|
||||||
|
def __init__(self, config):
|
||||||
|
self._config = config
|
||||||
|
|
||||||
|
def map_event(self, ev):
|
||||||
|
_type = ev.type
|
||||||
|
if _type in self._config:
|
||||||
|
typemaps = self._config[_type]
|
||||||
|
if ev.code in typemaps:
|
||||||
|
info = typemaps[ev.code]
|
||||||
|
ev.type = info['type']
|
||||||
|
ev.code = info['code']
|
||||||
|
ev.value = info['value'](ev.value)
|
||||||
|
|
||||||
|
return ev
|
||||||
|
|
||||||
|
def expose(self, d):
|
||||||
|
for evt, v in self._config.iteritems():
|
||||||
|
for code, dat in v.iteritems():
|
||||||
|
d.expose_event_type(dat['type'])
|
||||||
|
d.expose_event(dat['type'], dat['code'])
|
Loading…
Reference in New Issue
Block a user