def test_general_device_serial_number(filter_usb_id: str, serial: str, expected: bool): usb_filter = USBDeviceFilter(usb_id=filter_usb_id) g_virtual_hid_device = {"serial_number": serial} assert usb_filter.compare(g_virtual_hid_device) == expected
def _filter_usb(sio: LIBUSBSIO, ports: List[int], flt: str) -> List[int]: """Filter the LIBUSBSIO device. :param sio: LIBUSBSIO instance. :param ports: Input list of LIBUSBSIO available ports. :param flt: Filter string (PATH, PID/VID, SERIAL_NUMBER) :raises SPSDKError: When libusbsio library error or if no bridge device found :return: List with selected device, empty list otherwise. """ usb_filter = USBDeviceFilter(flt.casefold()) port_indexes = [] for port in ports: info = sio.GetDeviceInfo(port) if not info: raise SPSDKError( f"Cannot retrive information from LIBUSBSIO device {port}." ) dev_info = { "vendor_id": info.vendor_id, "product_id": info.product_id, "serial_number": info.serial_number, "path": info.path, } if usb_filter.compare(dev_info): port_indexes.append(port) break return port_indexes
def test_usb_match_linux( filter_usb_id: str, vid: str, pid: str, path: str, search_by_pid: bool, expected: bool ): with patch("platform.system", MagicMock(return_value="Linux")): usb_filter = USBDeviceFilter(usb_id=filter_usb_id, search_by_pid=search_by_pid) g_virtual_hid_device = {"vendor_id": int(vid, 0), "product_id": int(pid, 0), "path": path} assert usb_filter.compare(g_virtual_hid_device) == expected
def enumerate(usb_device_filter: USBDeviceFilter) -> Sequence[Interface]: """Get list of all connected devices matching the USBDeviceFilter object. :param usb_device_filter: USBDeviceFilter object :return: List of interfaces found """ devices = [] # use HID_API of LIBUSBSIO library to enumerate all USB HID devices sio = libusbsio.usbsio() all_hid_devices = sio.HIDAPI_Enumerate() # iterate on all devices found for dev in all_hid_devices: if usb_device_filter.compare(dev) is True: new_device = RawHid() new_device.device = sio.HIDAPI_DeviceCreate() new_device.vid = dev["vendor_id"] new_device.pid = dev["product_id"] new_device.vendor_name = dev["manufacturer_string"] new_device.product_name = dev["product_string"] new_device.interface_number = dev["interface_number"] new_device.path = dev["path"] devices.append(new_device) return devices
def scan_usb(device_name: str = None) -> Sequence[Interface]: """Scan connected USB devices. Return a list of all devices found. :param device_name: see USBDeviceFilter classes constructor for usb_id specification :return: list of matching RawHid devices """ usb_filter = USBDeviceFilter(usb_id=device_name, nxp_device_names=USB_DEVICES) return RawHid.enumerate(usb_filter)
def list() -> List["Nitrokey3Bootloader"]: from . import PID_NITROKEY3_BOOTLOADER, VID_NITROKEY device_filter = USBDeviceFilter( f"0x{VID_NITROKEY:x}:0x{PID_NITROKEY3_BOOTLOADER:x}") devices = [] for device in RawHid.enumerate(device_filter): # TODO: remove assert if https://github.com/NXPmicro/spsdk/issues/32 is fixed assert isinstance(device, RawHid) try: devices.append(Nitrokey3Bootloader(device)) except ValueError: logger.warn( f"Invalid Nitrokey 3 bootloader returned by enumeration: {device}" ) return devices
def open(path: str) -> Optional["Nitrokey3Bootloader"]: device_filter = USBDeviceFilter(path) devices = RawHid.enumerate(device_filter) if len(devices) == 0: logger.warn(f"No HID device at {path}") return None if len(devices) > 1: logger.warn(f"Multiple HID devices at {path}: {devices}") return None try: # TODO: remove assert if https://github.com/NXPmicro/spsdk/issues/32 is fixed assert isinstance(devices[0], RawHid) return Nitrokey3Bootloader(devices[0]) except ValueError: logger.warn(f"No Nitrokey 3 bootloader at path {path}", exc_info=sys.exc_info()) return None
def enumerate(usb_device_filter: USBDeviceFilter) -> List[Interface]: """Get list of all connected devices which matches device_id. :param usb_device_filter: USBDeviceFilter object :return: List of interfaces found """ devices = [] all_hid_devices = hid.enumerate() # iterate on all devices found for dev in all_hid_devices: if usb_device_filter.compare(dev) is True: new_device = RawHid() new_device.device = hid.device() new_device.vid = dev["vendor_id"] new_device.pid = dev["product_id"] new_device.vendor_name = dev['manufacturer_string'] new_device.product_name = dev['product_string'] new_device.interface_number = dev['interface_number'] new_device.path = dev["path"] devices.append(new_device) return devices
def enumerate(usb_device_filter: USBDeviceFilter) -> List["RawHid"]: """Get list of all connected devices which matches device_id. :param usb_device_filter: USBDeviceFilter object :return: List of interfaces found """ devices = [] sio = libusbsio.usbsio() all_hid_devices = sio.HIDAPI_Enumerate() # iterate on all devices found for dev in all_hid_devices: if usb_device_filter.compare(vars(dev)) is True: new_device = RawHid() new_device.device = sio.HIDAPI_DeviceCreate() new_device.vid = dev["vendor_id"] new_device.pid = dev["product_id"] new_device.vendor_name = dev["manufacturer_string"] new_device.product_name = dev["product_string"] new_device.interface_number = dev["interface_number"] new_device.path = dev["path"] devices.append(new_device) return devices
def test_general_device_name(filter_usb_id: str, name: str, expected: bool): usb_filter = USBDeviceFilter(usb_id=filter_usb_id) g_virtual_hid_device = {"device_name": name} assert usb_filter.compare(g_virtual_hid_device) == expected