def capabilities(self, verbose=False, absinfo=True): ''' Returns the event types that this device supports as a mapping of supported event types to lists of handled event codes. Example:: { 1: [272, 273, 274], 2: [0, 1, 6, 8] } If ``verbose`` is ``True``, event codes and types will be resolved to their names. Example:: { ('EV_KEY', 1) : [('BTN_MOUSE', 272), ('BTN_RIGHT', 273), ('BTN_MIDDLE', 273)], ('EV_REL', 2) : [('REL_X', 0), ('REL_Y', 0), ('REL_HWHEEL', 6), ('REL_WHEEL', 8)] } Unknown codes or types will be resolved to ``'?'``. If ``absinfo`` is ``True``, the list of capabilities will also include absolute axis information (``absmin``, ``absmax``, ``absfuzz``, ``absflat``) in the following form:: { 3 : [ (0, AbsInfo(min=0, max=255, fuzz=0, flat=0)), (1, AbsInfo(min=0, max=255, fuzz=0, flat=0)) ]} Combined with ``verbose`` the above becomes:: { ('EV_ABS', 3) : [ (('ABS_X', 0), AbsInfo(min=0, max=255, fuzz=0, flat=0)), (('ABS_Y', 1), AbsInfo(min=0, max=255, fuzz=0, flat=0)) ]} ''' if verbose: return dict(util.resolve_ecodes(self._capabilities(absinfo))) else: return self._capabilities(absinfo)
def read(self): """Get input from the controlelr, yields tuple with '(key_code, value of key).""" for event in self._device.read_loop(): if event.type in (ecodes.EV_ABS, ecodes.EV_KEY): yield (util.resolve_ecodes(self._keys, [event.code])[0][0], event.value)
def leds(self, verbose=False): ''' Return currently set LED keys. Example ------- >>> device.leds() [0, 1, 8, 9] If ``verbose`` is ``True``, event codes are resolved to their names. Unknown codes are resolved to ``'?'``:: [('LED_NUML', 0), ('LED_CAPSL', 1), ('LED_MISC', 8), ('LED_MAIL', 9)] ''' leds = _input.ioctl_EVIOCG_bits(self.fd, ecodes.EV_LED) if verbose: return util.resolve_ecodes(ecodes.LED, leds) return leds
def input_props(self, verbose=False): ''' Get device properties and quirks. Example ------- >>> device.input_props() [0, 5] If ``verbose`` is ``True``, input properties are resolved to their names. Unknown codes are resolved to ``'?'``:: [('INPUT_PROP_POINTER', 0), ('INPUT_PROP_POINTING_STICK', 5)] ''' props = _input.ioctl_EVIOCGPROP(self.fd) if verbose: return util.resolve_ecodes(ecodes.INPUT_PROP, props) return props
def active_keys(self, verbose=False): ''' Return currently active keys. Example ------- >>> device.active_keys() [1, 42] If ``verbose`` is ``True``, key codes are resolved to their verbose names. Unknown codes are resolved to ``'?'``. For example:: [('KEY_ESC', 1), ('KEY_LEFTSHIFT', 42)] ''' active_keys = _input.ioctl_EVIOCG_bits(self.fd, ecodes.EV_KEY) if verbose: return util.resolve_ecodes(ecodes.KEY, active_keys) return active_keys