0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
Настройка
Подключите USB-устройство и посмотрите всё, что оно объявляет: его Vendor ID и Product ID, производителя, продукт, серийный номер и полное дерево конфигураций, интерфейсов и конечных точек с их классами и типами передачи. Инструмент только читает дескрипторы; он никогда не открывает устройство и не отправляет ему данные.
Предлагаемые устройства

Как это работает

Показывает, что USB-устройство сообщает о себе сразу после подключения. Дескриптор устройства содержит Vendor ID, назначенный USB-IF, Product ID, выбранный производителем, версию спецификации USB, которой оно заявляет соответствие, версию самого продукта и, если устройство их предоставляет, строки производителя, продукта и серийного номера.

Ниже появляется полное дерево: каждая конфигурация со своими интерфейсами, каждый интерфейс со своей тройкой класса, подкласса и протокола в официальном названии USB-IF и каждая конечная точка со своим адресом, направлением, типом передачи и максимальным размером пакета. Интерфейсы с несколькими альтернативными настройками —обычное дело для камер и звуковых плат— перечислены отдельно.

Инструмент только читает дескрипторы: он никогда не открывает сеанс с устройством, никогда не занимает интерфейс и никогда не отправляет ему ни байта, поэтому не мешает драйверу, который с ним работает. Всё дерево можно выгрузить в JSON, чтобы приложить к отчёту или сравнить с деревом с другого компьютера.

Примеры

046D:C52B0x00 / 0x00 / 0x00 → 3 × HID (0x03)Беспроводной приёмник клавиатуры и мыши объявляет на уровне устройства класс 0x00, поэтому настоящий тип задаётся отдельно в каждом интерфейсе: здесь три интерфейса HID, у каждого одна входная конечная точка по прерыванию.
0x08 / 0x06 / 0x50Mass Storage · SCSI transparent command set · Bulk-Only TransportТипичная тройка флешки или внешнего диска: две массовые конечные точки, одна на вход и одна на выход, по которым идут команды SCSI.
0x02 / 0x02 / 0x01Communications and CDC Control · Abstract Control Model · AT Commands (ITU-T V.250)Это виртуальный последовательный порт отладочной платы или модема: управляющий интерфейс с одной конечной точкой по прерыванию и интерфейс CDC-Data с двумя массовыми конечными точками, которые несут данные.

Сценарии использования

  • Узнать точные Vendor ID и Product ID устройства, чтобы найти для него драйвер или написать правило udev в Linux.
  • Посмотреть серийный номер флешки, считывателя или адаптера, когда операционная система не показывает его сразу.
  • Убедиться при разработке прошивки, что устройство публикует ожидаемые интерфейсы, альтернативы и конечные точки с правильными классами.
  • Выяснить, через какую конечную точку и каким типом передачи нужно общаться с устройством, прежде чем писать под него код.
  • Отличить два внешне одинаковых устройства, сравнив их версию, интерфейсы и размеры пакетов.
  • Задокументировать USB-конфигурацию компьютера, выгрузив всё дерево в JSON.

Часто задаваемые вопросы

Почему не работает на моём iPhone и в Firefox?

API WebUSB реализован в браузерах на основе Chromium —Chrome, Edge и Opera— для Windows, macOS, Linux, ChromeOS и Android. Firefox и Safari его не реализуют, а в iOS все браузеры используют системный движок, поэтому там он тоже недоступен. Кроме того, нужны HTTPS и чтобы страница не была встроена внутрь другого сайта.

Устройство подключено, но не появляется в окне выбора.

Возможно, выбранный фильтр слишком узкий: попробуйте вариант, который предлагает все устройства. Если оно всё равно не появляется, скорее всего, оно в списке блокировки браузера, который из соображений безопасности исключает некоторые продукты —среди них ключи безопасности FIDO— чтобы ни одна веб-страница не могла к ним обратиться. В Linux также могут отсутствовать системные права на узел устройства.

Почему устройство указывает класс 0x00?

Класс 0x00 в дескрипторе устройства означает «смотрите интерфейсы». Его используют почти все составные устройства, которые объединяют разные функции в одном кабеле: клавиатура со встроенным концентратором, камера, которая заодно предоставляет микрофон, или МФУ. В таких случаях настоящий тип каждой функции находится в классе каждого интерфейса, а не в классе устройства.

Что такое конечная точка и что означает адрес вроде 0x81?

Конечная точка — это каждый из почтовых ящиков, через которые данные входят в интерфейс или выходят из него. Семь младших битов адреса — это номер конечной точки, а старший бит указывает направление, поэтому 0x81 — это входная конечная точка 1 —от устройства к компьютеру—, а 0x01 была бы выходной конечной точкой 1. Тип передачи определяет обращение с ней: массовая для больших объёмов без срока, по прерыванию для мелких и частых событий вроде нажатия клавиши и изохронная для звука и видео, которым лучше потерять пакет, чем прийти с опозданием.

Может ли инструмент что-то изменить или сломать в устройстве?

Нет. Он только читает дескрипторы, которые браузер уже получил при обнаружении устройства; он никогда не открывает сеанс, никогда не занимает интерфейс и никогда не пишет. Поэтому можно проверить даже клавиатуру или флешку, которую операционная система использует прямо сейчас, хотя веб-странице и запрещено с ними обмениваться данными.

Почему производитель или продукт пустые?

Эти строки — необязательные дескрипторы: многие дешёвые устройства их просто не записывают, а некоторые операционные системы не передают их браузеру. Для таких случаев инструмент ищет Vendor ID и Product ID в каталоге usb.ids проекта Linux USB, где официальное название производителя есть всегда, а название продукта — очень часто.

Покидают ли данные устройства мой компьютер?

Дескрипторы читаются в вашем браузере и не отправляются ни на какой сервер. Единственное исключение — поиск в каталоге usb.ids, который запрашивает Vendor ID и Product ID —два числа, определяющих модель, а не ваш компьютер и не ваш экземпляр— и который можно отключить перед выбором устройства. Серийный номер не отправляется никогда.

Что такое альтернативные настройки интерфейса?

Один и тот же интерфейс может объявить несколько наборов конечных точек и держать активным только один. Камеры и звуковые платы используют это, чтобы предлагать разные сочетания разрешения или качества: каждая альтернатива резервирует свою полосу пропускания на шине, и операционная система выбирает подходящую в момент начала передачи. Альтернатива 0 остаётся активной, пока устройство простаивает.