2016-09-15 00:04:52 +02:00
|
|
|
#!/bin/python
|
|
|
|
|
|
|
|
import evdev
|
|
|
|
from evdev import InputDevice, UInput
|
|
|
|
from select import select
|
|
|
|
import time
|
|
|
|
from utils import debug
|
|
|
|
|
|
|
|
class driver():
|
|
|
|
def __init__(self):
|
|
|
|
self.iDevices = {}
|
|
|
|
self.uDevices = {}
|
|
|
|
self.getInputDevices()
|
|
|
|
def initialize(self, environment):
|
|
|
|
return environment
|
|
|
|
def shutdown(self, environment):
|
|
|
|
return environment
|
|
|
|
def getInput(self, environment):
|
|
|
|
event = None
|
|
|
|
r, w, x = select(self.iDevices, [], [], environment['runtime']['settingsManager'].getSettingAsFloat(environment, 'screen', 'screenUpdateDelay'))
|
|
|
|
if r != []:
|
|
|
|
for fd in r:
|
|
|
|
event = self.iDevices[fd].read_one()
|
|
|
|
return event
|
|
|
|
return None
|
|
|
|
|
|
|
|
def writeUInput(self, uDevice, event,environment):
|
|
|
|
uDevice.write_event(event)
|
|
|
|
uDevice.syn()
|
|
|
|
|
|
|
|
def getInputDevices(self):
|
|
|
|
self.iDevices = map(evdev.InputDevice, (evdev.list_devices()))
|
|
|
|
self.iDevices = {dev.fd: dev for dev in self.iDevices if 1 in dev.capabilities()}
|
|
|
|
|
2016-09-17 17:45:55 +02:00
|
|
|
def mapEvent(self, event):
|
|
|
|
try:
|
|
|
|
return evdev.ecodes.ecodes[keyID.upper()]
|
|
|
|
except:
|
|
|
|
return 0
|
|
|
|
|
2016-09-15 00:04:52 +02:00
|
|
|
def grabDevices(self):
|
|
|
|
for fd in self.iDevices:
|
|
|
|
dev = self.iDevices[fd]
|
|
|
|
cap = dev.capabilities()
|
|
|
|
del cap[0]
|
|
|
|
self.uDevices[fd] = UInput(
|
|
|
|
cap,
|
|
|
|
dev.name,
|
|
|
|
#dev.info.vendor,
|
|
|
|
#dev.info.product,
|
|
|
|
#dev.version,
|
|
|
|
#dev.info.bustype,
|
|
|
|
#'/dev/uinput'
|
|
|
|
)
|
|
|
|
dev.grab()
|
|
|
|
|
|
|
|
def releaseDevices(self):
|
|
|
|
for fd in self.iDevices:
|
|
|
|
try:
|
|
|
|
self.iDevices[fd].ungrab()
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
try:
|
|
|
|
self.iDevices[fd].close()
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
try:
|
|
|
|
self.uDevices[fd].close()
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
|
|
|
|
self.iDevices.clear()
|
|
|
|
self.uDevices.clear()
|
|
|
|
|
|
|
|
def __del__(self):
|
|
|
|
self.releaseDevices()
|
|
|
|
|
|
|
|
|