Вычисление данных из 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.

Другие вопросы по тегам