hidapi.enumerate() returns an iterable
This commit is contained in:
parent
c6d1ab4526
commit
8fc078bdaf
|
@ -82,8 +82,8 @@ del namedtuple
|
||||||
def _makeDeviceInfo(native_device_info):
|
def _makeDeviceInfo(native_device_info):
|
||||||
return DeviceInfo(
|
return DeviceInfo(
|
||||||
path=native_device_info.path.decode('ascii'),
|
path=native_device_info.path.decode('ascii'),
|
||||||
vendor_id=hex(native_device_info.vendor_id)[2:],
|
vendor_id=hex(native_device_info.vendor_id)[2:].zfill(4),
|
||||||
product_id=hex(native_device_info.product_id)[2:],
|
product_id=hex(native_device_info.product_id)[2:].zfill(4),
|
||||||
serial=native_device_info.serial if native_device_info.serial else None,
|
serial=native_device_info.serial if native_device_info.serial else None,
|
||||||
release=hex(native_device_info.release)[2:],
|
release=hex(native_device_info.release)[2:],
|
||||||
manufacturer=native_device_info.manufacturer,
|
manufacturer=native_device_info.manufacturer,
|
||||||
|
@ -187,22 +187,19 @@ def enumerate(vendor_id=None, product_id=None, interface_number=None):
|
||||||
List all the HID devices attached to the system, optionally filtering by
|
List all the HID devices attached to the system, optionally filtering by
|
||||||
vendor_id, product_id, and/or interface_number.
|
vendor_id, product_id, and/or interface_number.
|
||||||
|
|
||||||
:returns: a list of matching ``DeviceInfo`` tuples.
|
:returns: an iterable of matching ``DeviceInfo`` tuples.
|
||||||
"""
|
"""
|
||||||
results = []
|
|
||||||
|
|
||||||
devices = _native.hid_enumerate(vendor_id, product_id)
|
devices = _native.hid_enumerate(vendor_id, product_id)
|
||||||
d = devices
|
d = devices
|
||||||
while d:
|
while d:
|
||||||
if interface_number is None or interface_number == d.contents.interface:
|
if interface_number is None or interface_number == d.contents.interface:
|
||||||
results.append(_makeDeviceInfo(d.contents))
|
yield _makeDeviceInfo(d.contents)
|
||||||
d = d.contents.next_device
|
d = d.contents.next_device
|
||||||
|
|
||||||
if devices:
|
if devices:
|
||||||
_native.hid_free_enumeration(devices)
|
_native.hid_free_enumeration(devices)
|
||||||
|
|
||||||
return results
|
|
||||||
|
|
||||||
|
|
||||||
def open(vendor_id, product_id, serial=None):
|
def open(vendor_id, product_id, serial=None):
|
||||||
"""Open a HID device by its Vendor ID, Product ID and optional serial number.
|
"""Open a HID device by its Vendor ID, Product ID and optional serial number.
|
||||||
|
@ -378,15 +375,3 @@ def get_indexed_string(device_handle, index):
|
||||||
:param index: the index of the string to get.
|
:param index: the index of the string to get.
|
||||||
"""
|
"""
|
||||||
return _read_wchar(_native.hid_get_indexed_string, device_handle, index)
|
return _read_wchar(_native.hid_get_indexed_string, device_handle, index)
|
||||||
|
|
||||||
|
|
||||||
def last_error(device_handle):
|
|
||||||
"""Get a string describing the last error which occurred.
|
|
||||||
|
|
||||||
Note: currently not working in either underlying native implementation.
|
|
||||||
|
|
||||||
:param device_handle: a device handle returned by open() or open_path().
|
|
||||||
:returns: a string containing the last error which occurred, or None.
|
|
||||||
"""
|
|
||||||
error = _native.hid_error(device_handle)
|
|
||||||
return error.value
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ class Receiver(object):
|
||||||
reply = _base.request(self.handle, 0xFF, b'\x83\xB5', b'\x02')
|
reply = _base.request(self.handle, 0xFF, b'\x83\xB5', b'\x02')
|
||||||
if reply and reply[0:1] == b'\x02':
|
if reply and reply[0:1] == b'\x02':
|
||||||
fw_version = _hex(reply[1:5])
|
fw_version = _hex(reply[1:5])
|
||||||
fw_version = '%s.%s.%s' % (fw_version[0:2], fw_version[2:4], fw_version[4:8])
|
fw_version = '%s.%s.B%s' % (fw_version[0:2], fw_version[2:4], fw_version[4:8])
|
||||||
firmware.append(_FirmwareInfo(0, FIRMWARE_KIND[0], '', fw_version, None))
|
firmware.append(_FirmwareInfo(0, FIRMWARE_KIND[0], '', fw_version, None))
|
||||||
|
|
||||||
reply = _base.request(self.handle, 0xFF, b'\x81\xF1', b'\x04')
|
reply = _base.request(self.handle, 0xFF, b'\x81\xF1', b'\x04')
|
||||||
|
|
|
@ -110,13 +110,7 @@ def try_open(path):
|
||||||
# 'device 0 unreachable' is the expected reply from a valid receiver handle
|
# 'device 0 unreachable' is the expected reply from a valid receiver handle
|
||||||
_log.info("[%s] success: handle %X", path, receiver_handle)
|
_log.info("[%s] success: handle %X", path, receiver_handle)
|
||||||
return receiver_handle
|
return receiver_handle
|
||||||
|
_log.debug("[%s] %X ignored reply %s", path, receiver_handle, _hex(reply))
|
||||||
# any other replies are ignored, and will assume this is the wrong Linux device
|
|
||||||
if reply == b'\x01\x00\x00\x00\x00\x00\x00\x00':
|
|
||||||
# no idea what this is, but it comes up occasionally
|
|
||||||
_log.debug("[%s] %X mistery reply [%s]", path, receiver_handle, _hex(reply))
|
|
||||||
else:
|
|
||||||
_log.debug("[%s] %X unknown reply [%s]", path, receiver_handle, _hex(reply))
|
|
||||||
else:
|
else:
|
||||||
_log.debug("[%s] %X no reply", path, receiver_handle)
|
_log.debug("[%s] %X no reply", path, receiver_handle)
|
||||||
|
|
||||||
|
|
|
@ -27,8 +27,8 @@ class Test_UR_Base(unittest.TestCase):
|
||||||
def test_10_list_receiver_devices(self):
|
def test_10_list_receiver_devices(self):
|
||||||
rawdevices = base.list_receiver_devices()
|
rawdevices = base.list_receiver_devices()
|
||||||
self.assertIsNotNone(rawdevices, "list_receiver_devices returned None")
|
self.assertIsNotNone(rawdevices, "list_receiver_devices returned None")
|
||||||
self.assertIsInstance(rawdevices, list, "list_receiver_devices should have returned a list")
|
# self.assertIsInstance(rawdevices, Iterable, "list_receiver_devices should have returned an iterable")
|
||||||
Test_UR_Base.ur_available = len(rawdevices) > 0
|
Test_UR_Base.ur_available = len(list(rawdevices)) > 0
|
||||||
|
|
||||||
def test_20_try_open(self):
|
def test_20_try_open(self):
|
||||||
if not self.ur_available:
|
if not self.ur_available:
|
||||||
|
|
Loading…
Reference in New Issue