def get_property_value(properties, key): key_string = create_cfstring(key) value = ctypes.c_void_p() present = carbon.CFDictionaryGetValueIfPresent(properties, key_string, ctypes.byref(value)) carbon.CFRelease(key_string) if not present: return None return value
def _init_properties(self, generic_device): properties = CFMutableDictionaryRef() _oscheck( carbon.IORegistryEntryCreateCFProperties(generic_device, ctypes.byref(properties), None, 0)) self.name = get_property(properties, "Product") self.manufacturer = get_property(properties, "Manufacturer") carbon.CFRelease(properties)
def _get_elements(self): elements_array = CFArrayRef() _oscheck( self._device.contents.contents.copyMatchingElements( self._device, None, ctypes.byref(elements_array))) self._element_cookies = dict() elements = list() n_elements = carbon.CFArrayGetCount(elements_array) for i in range(n_elements): properties = carbon.CFArrayGetValueAtIndex(elements_array, i) element = DeviceElement(self, properties) elements.append(element) self._element_cookies[element._cookie] = element carbon.CFRelease(elements_array) return elements
def _init_controls(self): elements_array = CFArrayRef() _oscheck( self._device.contents.contents.copyMatchingElements(self._device, None, ctypes.byref(elements_array)) ) self._control_cookies = {} controls = [] n_elements = carbon.CFArrayGetCount(elements_array) for i in range(n_elements): properties = carbon.CFArrayGetValueAtIndex(elements_array, i) control = _create_control(properties) if control: controls.append(control) self._control_cookies[control._cookie] = control carbon.CFRelease(elements_array) return controls
def __init__(self, display, generic_device): super(DarwinHIDDevice, self).__init__(display, name=None) self._device = self._get_device_interface(generic_device) properties = CFMutableDictionaryRef() _oscheck( carbon.IORegistryEntryCreateCFProperties(generic_device, ctypes.byref(properties), None, 0) ) self.name = get_property(properties, "Product") self.manufacturer = get_property(properties, "Manufacturer") self.usage_page = get_property(properties, 'PrimaryUsagePage') self.usage = get_property(properties, 'PrimaryUsage') carbon.CFRelease(properties) self._controls = self._init_controls() self._open = False self._queue = None self._queue_depth = 8 # Number of events queue can buffer