code: def FindDevices(cls, setting_matcher, device_matcher=None,
                      usb_info='', timeout_ms=None):
          
          ctx = usb1.USBContext()
          for device in ctx.getDeviceList(skip_on_error=True):
              setting = setting_matcher(device)
              if setting is None:
                  continue
  
              handle = cls(device, setting, usb_info=usb_info, timeout_ms=timeout_ms)
              if device_matcher is None or device_matcher(handle):
                  yield handle
docs: Find and yield the devices that match.
  
          Args:
            setting_matcher: Function that returns the setting to use given a
              usb1.USBDevice, or None if the device doesn't have a valid setting.
            device_matcher: Function that returns True if the given UsbHandle is
              valid. None to match any device.
            usb_info: Info string describing device(s).
            timeout_ms: Default timeout of commands in milliseconds.
  
          Yields:
            UsbHandle instances