diff --git a/evdevremapkeys/evdevremapkeys.py b/evdevremapkeys/evdevremapkeys.py index 723ee75..3689f35 100755 --- a/evdevremapkeys/evdevremapkeys.py +++ b/evdevremapkeys/evdevremapkeys.py @@ -72,10 +72,7 @@ async def handle_events( output.syn() finally: del registered_devices[input.path] - print( - "Unregistered: %s, %s, %s" % (input.name, input.path, input.phys), - flush=True, - ) + print(f"Unregistered: {input.name} ({input.path}) {input.phys}", flush=True) input.close() @@ -302,6 +299,7 @@ def register_device(device, loop: AbstractEventLoop): input = find_input(device) if input is None: return None + input.grab() caps = input.capabilities() @@ -309,7 +307,13 @@ def register_device(device, loop: AbstractEventLoop): del caps[ecodes.EV_SYN] remappings = device["remappings"] - extended = set(caps[ecodes.EV_KEY]) + if ecodes.EV_KEY not in caps: + extended = set() + else: + extended = set(caps[ecodes.EV_KEY]) + + if "dummy_buttons" in device: # add dummy buttons + extended |= set(device["dummy_buttons"]) modifier_groups = [] if "modifier_groups" in device: @@ -328,8 +332,16 @@ def flatmap(lst): extended.update([remapping["code"]]) caps[ecodes.EV_KEY] = list(extended) - output = UInput(caps, name=device["output_name"]) + + extra_options = {"name": device["output_name"]} + + for k, v in device.items(): + if k in ["vendor", "product", "version", "bustype"]: + extra_options[k] = v + + output = UInput(caps, **extra_options) print("Registered: %s, %s, %s" % (input.name, input.path, input.phys), flush=True) + task = loop.create_task( handle_events(input, output, remappings, modifier_groups), name=input.name ) diff --git a/examples/advanced_config.yaml b/examples/advanced_config.yaml index 0a1b9d9..b7517e7 100644 --- a/examples/advanced_config.yaml +++ b/examples/advanced_config.yaml @@ -47,3 +47,9 @@ devices: - code: KEY_A value: [1,0,1,0] repeat: true +- input_name: "Thrustmaster T-Rudder" # Example for using rudder pedals without buttons (and a changed productid to make wine recognize it) + output_name: "T-Rudder" + product: 0x1234 + dummy_buttons: [304, 305] + remappings: {} +