import libi2dx class I2DXWebSocketOSC(libi2dx.I2DXWebSocket): def toggle_key(self, key_id, state, player): print 'key', key_id, state, "player %s" % player if __name__ == "__main__": libi2dx.serve(I2DXWebSocketOSC)
keys.append(keyval) devicemap = {} xboxmap = {} def toggle_key(self, key_id, active, player): if player not in self.devicemap: old_ls = subprocess.check_output('ls /dev/input/', shell=True).split() self.devicemap[player] = uinput.Device(self.keys, 'web_kbd%s' % player, 0x03, # BUS_USB (at least on Ubuntu...) 0x1337, # fake vendor id 0x1337) # fake device id time.sleep(1) new_ls = subprocess.check_output('ls /dev/input/', shell=True).split() matcher = difflib.SequenceMatcher(None, old_ls, new_ls) for tag, i1, i2, j1, j2 in reversed(matcher.get_opcodes()): if tag == 'insert': print "new device id is %s" % new_ls[j1] print subprocess.check_output('pwd', shell=True) args = shlex.split("xboxdrv -c " + os.path.abspath(os.path.join(os.path.dirname(__file__), '../web2xbox.xbox')) + ' --evdev /dev/input/' + new_ls[j1]+ " " + self.extra_args) self.xboxmap[player] = subprocess.Popen(args) if active: active = 1 else: active = 0 self.devicemap[player].emit(uinput._CHAR_MAP.get(libi2dx.config.get('keymap_player%s' % player, key_id), uinput.KEY_BACKSLASH), active) if __name__ == "__main__": libi2dx.serve(I2DXWebSocketUInput)
def toggle_key(self, key_id, active, player): if player not in self.devicemap: old_ls = subprocess.check_output('ls /dev/input/', shell=True).split() self.devicemap[player] = uinput.Device(self.keys, 'web_gamepad%s' % player, 0x03, # BUS_USB (at least on Ubuntu...) 0x1337, # fake vendor id 0x1337) # fake device id time.sleep(1) # give uinput time to make device... new_ls = subprocess.check_output('ls /dev/input/', shell=True).split() matcher = difflib.SequenceMatcher(None, old_ls, new_ls) for tag, i1, i2, j1, j2 in reversed(matcher.get_opcodes()): if tag == 'insert': devname = new_ls[j1] print "new device id is %s" % devname if not devname.startswith('event'): print "not an event device, ignoring" continue command = "xboxdrv -c " + os.path.abspath(os.path.join(os.path.dirname(__file__), '../web2xbox.xbox')) + ' --evdev /dev/input/' + devname + " " + self.extra_args args = shlex.split(command) self.xboxmap[player] = subprocess.Popen(args) if active: active = 1 else: active = 0 self.devicemap[player].emit(self.btn_map[key_id], active) if __name__ == "__main__": libi2dx.serve(XPadWebSocketUInput)
import sys import libi2dx from os import path from autopy import key import ConfigParser class I2DXWebSocketAutoPy(libi2dx.I2DXWebSocket): def toggle_key(self, key_id, state, player): try: key.toggle(libi2dx.config.get('keymap_player%s' % player, key_id), state) except ConfigParser.NoOptionError: print "key map not found for %s, player %s" % (key_id, player) if __name__ == "__main__": libi2dx.serve(I2DXWebSocketAutoPy)
'web_kbd%s' % player, 0x03, # BUS_USB (at least on Ubuntu...) 0x1337, # fake vendor id 0x1337) # fake device id time.sleep(1) new_ls = subprocess.check_output('ls /dev/input/', shell=True).split() matcher = difflib.SequenceMatcher(None, old_ls, new_ls) for tag, i1, i2, j1, j2 in reversed(matcher.get_opcodes()): if tag == 'insert': print "new device id is %s" % new_ls[j1] print subprocess.check_output('pwd', shell=True) args = shlex.split("xboxdrv -c " + os.path.abspath( os.path.join(os.path.dirname(__file__), '../web2xbox.xbox')) + ' --evdev /dev/input/' + new_ls[j1] + " " + self.extra_args) self.xboxmap[player] = subprocess.Popen(args) if active: active = 1 else: active = 0 self.devicemap[player].emit( uinput._CHAR_MAP.get( libi2dx.config.get('keymap_player%s' % player, key_id), uinput.KEY_BACKSLASH), active) if __name__ == "__main__": libi2dx.serve(I2DXWebSocketUInput)