Вычисление данных из IOUSBInterface труб
Я кодирую приложение для Mac, которое отправляет и получает сообщения на видеомагнитофон Personel с использованием IOKit. Мне нужно отправлять сообщения, чтобы изменить его статус, и он должен дать мне информацию о разрешении видео или о его записи. Я понимаю, что мне нужно найти правильные сообщения, чтобы отправить его, поэтому сначала я подумал, что сначала смогу получить от него несколько сообщений. Я уже нашел интерфейс для устройства. Как бы я мог сбросить полученные сообщения?
Вот лог с USB Probe:
Composite device: "PVR"
Port Information: 0x001d
Captive
Internal Device
Connected
Enabled
Number Of Endpoints (includes EP0):
Total Endpoints for Configuration 1 (current): 7
Device Descriptor
Descriptor Version Number: 0x0200
Device Class: 0 (Composite)
Device Subclass: 0
Device Protocol: 0
Device MaxPacketSize: 64
Device VendorID/ProductID: 0x2040/0xE502 (Hauppauge Computer Works, Inc.)
Device Version Number: 0x0800
Number of Configurations: 1
Manufacturer String: 1 "Hauppauge"
Product String: 2 "WinTV"
Serial Number String: 3 "E502-00-00AA3DEE"
Configuration Descriptor (current config)
Length (and contents): 60
Raw Descriptor (hex) 0000: 09 02 3C 00 01 01 00 C0 00 09 04 00 00 06 FF FF
Raw Descriptor (hex) 0010: FF 00 07 05 81 02 00 02 00 07 05 84 02 00 02 00
Raw Descriptor (hex) 0020: 07 05 88 02 00 02 00 07 05 01 02 00 02 00 07 05
Raw Descriptor (hex) 0030: 02 02 00 02 00 07 05 86 02 00 02 00
Number of Interfaces: 1
Configuration Value: 1
Attributes: 0xC0 (self-powered)
MaxPower: 0 mA
Interface #0 - Vendor-specific
Alternate Setting 0
Number of Endpoints 6
Interface Class: 255 (Vendor-specific)
Interface Subclass; 255 (Vendor-specific)
Interface Protocol: 255
Endpoint 0x81 - Bulk Input
Address: 0x81 (IN)
Attributes: 0x02 (Bulk)
Max Packet Size: 512
Polling Interval: 0 ( Endpoint never NAKs)
Endpoint 0x84 - Bulk Input
Address: 0x84 (IN)
Attributes: 0x02 (Bulk)
Max Packet Size: 512
Polling Interval: 0 ( Endpoint never NAKs)
Endpoint 0x88 - Bulk Input
Address: 0x88 (IN)
Attributes: 0x02 (Bulk)
Max Packet Size: 512
Polling Interval: 0 ( Endpoint never NAKs)
Endpoint 0x01 - Bulk Output
Address: 0x01 (OUT)
Attributes: 0x02 (Bulk)
Max Packet Size: 512
Polling Interval: 0 ( Endpoint never NAKs)
Endpoint 0x02 - Bulk Output
Address: 0x02 (OUT)
Attributes: 0x02 (Bulk)
Max Packet Size: 512
Polling Interval: 0 ( Endpoint never NAKs)
Endpoint 0x86 - Bulk Input
Address: 0x86 (IN)
Attributes: 0x02 (Bulk)
Max Packet Size: 512
Polling Interval: 0 ( Endpoint never NAKs)
Device Qualifier Descriptor
Descriptor Version Number: 0x0200
Device Class 0 (Composite)
Device Subclass 0
Device Protocol 0
Device MaxPacketSize: 64
Number of Configurations: 1
bReserved: 0
Other Speed Configuration Descriptor
Length (and contents): 60
Raw Descriptor (hex) 0000: 09 07 3C 00 01 01 00 C0 00 09 04 00 00 06 FF FF
Raw Descriptor (hex) 0010: FF 00 07 05 81 02 40 00 00 07 05 84 02 40 00 00
Raw Descriptor (hex) 0020: 07 05 88 02 40 00 00 07 05 01 02 40 00 00 07 05
Raw Descriptor (hex) 0030: 02 02 40 00 00 07 05 86 02 40 00 00
Number of Interfaces: 1
Configuration Value: 1
Attributes: 0xC0 (self-powered)
MaxPower: 0 mA
Interface #0 - Vendor-specific
Alternate Setting 0
Number of Endpoints 6
Interface Class: 255 (Vendor-specific)
Interface Subclass; 255 (Vendor-specific)
Interface Protocol: 255
Endpoint 0x81 - Bulk Input
Address: 0x81 (IN)
Attributes: 0x02 (Bulk)
Max Packet Size: 64
Polling Interval: 0 ms
Endpoint 0x84 - Bulk Input
Address: 0x84 (IN)
Attributes: 0x02 (Bulk)
Max Packet Size: 64
Polling Interval: 0 ms
Endpoint 0x88 - Bulk Input
Address: 0x88 (IN)
Attributes: 0x02 (Bulk)
Max Packet Size: 64
Polling Interval: 0 ms
Endpoint 0x01 - Bulk Output
Address: 0x01 (OUT)
Attributes: 0x02 (Bulk)
Max Packet Size: 64
Polling Interval: 0 ms
Endpoint 0x02 - Bulk Output
Address: 0x02 (OUT)
Attributes: 0x02 (Bulk)
Max Packet Size: 64
Polling Interval: 0 ms
Endpoint 0x86 - Bulk Input
Address: 0x86 (IN)
Attributes: 0x02 (Bulk)
Max Packet Size: 64
Polling Interval: 0 ms
1 ответ
USB управляется хостом. Это означает, что устройство не отправляет никаких сообщений, кроме как ответы на сообщения с хоста (Mac/PC). Таким образом, чтобы получить от него сообщение, вам сначала нужно будет отправить ему верное сообщение.
Я предполагаю из вашего вопроса, что на самом деле у вас нет документации / спецификации для данного устройства? Это означает, что вам нужно получить эту информацию, либо запросив ее у производителя, либо с помощью ее обратного инжиниринга.
Самый простой способ обратного инжиниринга это прослушивание сообщений, генерируемых существующим драйвером, например, некоторым программным обеспечением Windows, которое делает что-то похожее на то, что вы хотите сделать. Затем вам нужно прослушать данные. В прошлом я успешно запускал программное обеспечение Windows на виртуальной машине под Linux и передавал через USB соответствующее устройство на виртуальную машину, а также использовал функции отладки USB для Linux для записи результатов. Вы должны быть в состоянии сделать то же самое на OSX, используя приложение "USB Prober" с "IOUSBFamily Log Release", доступным в разделе загрузки для разработчиков Apple.