예제 #1
0
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
예제 #2
0
파일: usbsio.py 프로젝트: mstarecek/spsdk
    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
예제 #3
0
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
예제 #4
0
    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
예제 #5
0
파일: usb.py 프로젝트: AdrianCano-01/spsdk
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)
예제 #6
0
    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
예제 #7
0
    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
예제 #8
0
    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
예제 #9
0
    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
예제 #10
0
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