Пример #1
0
    def from_device(cls, *devices, **kwargs):
        '''
        Create an UInput device with the capabilities of one or more input
        devices.

        Arguments
        ---------
        devices : InputDevice|str
          Varargs of InputDevice instances or paths to input devices.

        **kwargs
          Keyword arguments to UInput constructor (i.e. name, vendor etc.).
        '''

        device_instances = []
        for dev in devices:
            if not isinstance(dev, device.InputDevice):
                dev = device.InputDevice(str(dev))
            device_instances.append(dev)

        all_capabilities = {}
        for dev in device_instances:
            all_capabilities.update(dev.capabilities())

        del all_capabilities[ecodes.EV_SYN]

        return cls(events=all_capabilities, **kwargs)
Пример #2
0
    def _find_device(self):
        #:bug: the device node might not be immediately available
        time.sleep(0.1)

        for fn in util.list_devices('/dev/input/'):
            d = device.InputDevice(fn)
            if d.name == self.name:
                return d
Пример #3
0
 def update_from_devices(self, *devices):
     device_instances = []
     for dev in devices:
         if not isinstance(dev, device.InputDevice):
             dev = device.InputDevice(str(dev))
         device_instances.append(dev)
     for dev in device_instances:
         self.update_capabilities(dev.capabilities())
     self.refresh()
Пример #4
0
    def from_device(cls, *devices, **kwargs):
        '''
        Create an UInput device with the capabilities of one or more input
        devices.

        Arguments
        ---------
        devices : InputDevice|str
          Varargs of InputDevice instances or paths to input devices.

        filtered_types : Tuple[event type codes]
          Event types to exclude from the capabilities of the uinput device.

        **kwargs
          Keyword arguments to UInput constructor (i.e. name, vendor etc.).
        '''

        # TODO: Move back to the argument list once Python 2 support is dropped.
        filtered_types = kwargs.pop('filtered_types',
                                    (ecodes.EV_SYN, ecodes.EV_FF))

        device_instances = []
        for dev in devices:
            if not isinstance(dev, device.InputDevice):
                dev = device.InputDevice(str(dev))
            device_instances.append(dev)

        all_capabilities = defaultdict(set)

        # Merge the capabilities of all devices into one dictionary.
        for dev in device_instances:
            for ev_type, ev_codes in dev.capabilities().items():
                all_capabilities[ev_type].update(ev_codes)

        for evtype in filtered_types:
            if evtype in all_capabilities:
                del all_capabilities[evtype]

        return cls(events=all_capabilities, **kwargs)