Как я могу реплицировать сообщение USB snoopped 0017 VENDOR_DEVICE с помощью pyusb?

У меня есть usb sniff от snoopypro для устройства, с которым я пытаюсь связаться. Я обнаружил, что после настройки устройства я могу общаться с ним через массовые сообщения, но у меня возникают проблемы с копированием сообщений настройки. Некоторые из этих сообщений в snoopy помечены как «VENDOR_DEVICE», и я не могу понять, как отправлять эти сообщения как сообщения передачи управления с помощью pyusb; или даже как расшифровать что это что за данные. Я подозреваю, что неправильно понимаю нюхание (или интерпретацию snoopy) ИЛИ есть проблема с pyusb?

Вот такой запах.

82    in down    n/a    13.669    VENDOR_DEVICE    -    
URB Header (length: 80)
SequenceNumber: 82
Function: 0017 (VENDOR_DEVICE)
PipeHandle: ff98e578

SetupPacket:
0000: 00 05 00 00 00 00 02 00 
bmRequestType: 00
  DIR: Host-To-Device
  TYPE: Standard
  RECIPIENT: Device
bRequest: 05  
  SET_ADDRESS


No TransferBuffer

Вот несколько разных строк, которые я пробовал. Каждая комбинация дает мне «[errno 32] pipe error» или «[Errno None] Other error». Ошибка канала указывает на то, что устройство не поддерживает эту команду. Я не уверен в ошибке Errno None.

dev.ctrl_transfer(0x00, 0x05, 0x0000, 0x0000, 0x0200)

dev.ctrl_transfer(0x20, 0x05, 0x0000, 0x0000, 0x0200)

dev.ctrl_transfer(0x80, 0x05, 0x0000, 0x0000, 0x0200)

dev.ctrl_transfer(0x20, 0x05, 0x0000, 0x0000, 0x0002)

И наоборот, я МОГУ отправить сообщение о статусе на 0x80, и оно пройдет.

dev.ctrl_transfer(0x80, 0x00, 0x0000, 0x0000, 0x0000)

person chmedly    schedule 22.07.2017    source источник


Ответы (1)


Итак, я предлагаю по возможности избегать snoopypro. Он довольно старый и, по-видимому, даже не работает на Win7, 8 или 10. [Сначала я использовал его с Winxp, работающим в виртуальном ящике.] В итоге я использовал Microsoft Message Analyzer (MMA) для повторного отслеживания при запуске Windows 10 и обнаружил намного больше информации о том, что происходило.

Одна из важнейших проблем заключалась в том, что snoopy идентифицировал рассматриваемый пакет как сообщение VENDOR_DEVICE, но не указывал правильный HEX-байт для этого bRequestType. Оно показывало просто «00», хотя должно было быть «40» (0x40). Кстати, где-то еще в сети я нашел сообщение о том, что VENDOR_DEVICE - это просто сообщение передачи управления с типом запроса 0x20, поэтому ранее в моих усилиях я пытался запустить с этим. Ну, 0x2, я полагаю, технически правильный, если вы смотрите только на биты 5,6, но когда вы смотрите на весь полубайт, это будет 0x4. Оглядываясь назад на таблицу контрольных пакетов USB, все это имеет смысл. Это и некоторые другие мелкие недоразумения о том, какие пакеты важны, и вызвали мои проблемы. Команда установки адреса, показанная в моем вопросе, на самом деле не нужна в этом случае. Мне удалось инициализировать это устройство с помощью нескольких простых команд передачи управления, направленных с правильным типом запроса. Например:

dev.ctrl_transfer(0x40, 0x03, 0x0034, 0x0000, 0x0000)

MMA распространяется бесплатно от Microsoft, и в начале 2017 года было выпущено обновление. Я подозреваю, что они продолжат поддерживать его в актуальном состоянии. Его настройка требует немного усилий по сравнению со snoopypro и некоторыми другими, но у него много функций и возможностей.
https://blogs.msdn.microsoft.com/usbcoreblog/2013/11/08/capturing-usb-etw-traces-with-microsoft-message-analyzer-mma/

person chmedly    schedule 25.07.2017