2015-07-19 5 views
3

Я взял барабан wii, который собирался выбросить. У этого есть USB-порт, и я хочу подключить его к моей macbook для проекта. Моя цель состоит в основном в том, чтобы иметь возможность обнаруживать, когда определенный барабан был задействован на устройстве. Исходя из того, что я собрал до сих пор, мне нужно сделать следующие шаги:Как читать данные с периферийного устройства usb?

  1. Подключите устройство и определить, какие TTY порт он находится на
  2. использовать команду «экран», чтобы распечатать данные, происходит от барабанов
  3. выходных данных команды экрана в некоторый код, который генерирует полезный выход для моего проекта

Я думаю, что я понимаю, как это сделать 2 и 3, но получаю вешал на шаге 1.

Если я запускаю «ioreg -Src IOUSBDevice» в терминале, я могу определить, что устройство подключено, но я не знаю, какой порт tty он включен. (см. ниже для вывода)

Кроме того, в общем случае, возможно ли распечатать данные в виде потока байтов с любого периферийного устройства USB, подключенного к порту USB?

EDIT: Я должен добавить, что если я запустил «ls /dev/tty.*», я не вижу никаких элементов tty.usb, но только tty.bluetooth.

+-o Harmonix Drum Controller for Nintendo [email protected] <class IOUSBDevice, id $ 
 
    | { 
 
    | "sessionID" = 2111009401078 
 
    | "iManufacturer" = 1 
 
    | "bNumConfigurations" = 1 
 
    | "idProduct" = 5 
 
    | "bcdDevice" = 4096 
 
    | "Bus Power Available" = 250 
 
    | "bMaxPacketSize0" = 64 
 
    | "USB Product Name" = "Harmonix Drum Controller for Nintendo Wii" 
 
    | "iProduct" = 2 
 
    | "iSerialNumber" = 0 
 
    | "USB Address" = 4 
 
    | "bDeviceClass" = 0 
 
    | "locationID" = 337641472 
 
    | "bDeviceSubClass" = 0 
 
    | "IOUserClientClass" = "IOUSBDeviceUserClientV2" 
 
    | "PortNum" = 2 
 
    | "IOCFPlugInTypes" = {"9dc7b780-9ec0-11d4-a54f-000a27052861"="IOUSBFamily.$ 
 
    | "bDeviceProtocol" = 0 
 
    | "USB Vendor Name" = "Licensed by Nintendo of America " 
 
    | "Device Speed" = 1 
 
    | "idVendor" = 7085 
 
    | "Requested Power" = 50 
 
    | "IOGeneralInterest" = "IOCommand is not serializable" 
 
    | "Low Power Displayed" = No 
 
    | } 
 
    | 
 
    +-o IOUSBCompositeDriver <class IOUSBCompositeDriver, id 0x100000ebe, !regis$ 
 
    +-o [email protected] <class IOUSBInterface, id 0x100000ebf, registered, matc$ 
 
+-o IOUSBHIDDriver <class IOUSBHIDDriver, id 0x100000ec2, registered, matc$ 
 
    +-o IOHIDInterface <class IOHIDInterface, id 0x100000ec4, registered, ma$ 
 
    +-o IOHIDLibUserClient <class IOHIDLibUserClient, id 0x100000ec5, !regis$ 
 
    +-o IOHIDLibUserClient <class IOHIDLibUserClient, id 0x100000ec7, !regis$

До сих пор

ответ

1

У меня нет точного ответа, что вы ищете, но я столкнулся с подобной проблемой, пытаясь прочитать данные из устройства GPS, подключенного к мой MacBook Pro. В моем случае, после выдачи команды:

ioreg -w0 -l -p IOUSB 

Я получил (отсечения не соответствующие части):

+-o u-blox 7 - GPS/GNSS [email protected] <class IOUSBDevice, id 0x1000026b0, registered, matched, active, busy 0 (60 ms), retain 12> 
    | { 
    |  "sessionID" = 17488341785377 
    |  "idProduct" = 423 
    |  "bNumConfigurations" = 1 
    |  "iManufacturer" = 1 
    |  "bcdDevice" = 256 
    |  "Bus Power Available" = 250 
    |  "bMaxPacketSize0" = 64 
    |  "USB Product Name" = "u-blox 7 - GPS/GNSS Receiver" 
    |  "iProduct" = 2 
    |  "iSerialNumber" = 0 
    |  "USB Address" = 12 
    |  "IOUserClientClass" = "IOUSBDeviceUserClientV2" 
    |  "bDeviceSubClass" = 0 
    |  "bDeviceClass" = 2 
    |  "bcdUSB" = 272 
    |  "locationID" = 336658432 
    |  "PortNum" = 1 
    |  "IOCFPlugInTypes" = {"9dc7b780-9ec0-11d4-a54f-000a27052861"="IOUSBFamily.kext/Contents/PlugIns/IOUSBLib.bundle"} 
    |  "bDeviceProtocol" = 0 
    |  "USB Vendor Name" = "u-blox AG - www.u-blox.com" 
    |  "Device Speed" = 1 
    |  "idVendor" = 5446 
    |  "Requested Power" = 50 
    |  "IOGeneralInterest" = "IOCommand is not serializable" 
    |  "Low Power Displayed" = No 
    | } 
    | 

Это не говорит много, на котором tty.* устройство выделяется так, что я сделал является ls /dev/tty.* до и после отсоединения устройства. Сделав это, я понял, что терминал /dev/tty.usbmodem14111 исчез. Возможно, у вас не будет tty.usbmodem* в вашем случае, но обратите внимание на часть 14111, которая частично совпадает с первой частью строки ioreg для моего устройства (u-blox 7 - GPS/GNSS [email protected]). Возможно, вы можете использовать этот намек в своем случае, чтобы узнать, открываете ли вы устройство tty.

Если вы найдете более «общий» способ обнаружить tty, пожалуйста, поделитесь им! Удачи!

1

Похоже, что ваш набор ударных идентифицируется как устройство HID, а не последовательный порт/TTY. OSX имеет пользовательские пространства API-интерфейсы HID, которые позволят вам проверять дескриптор отчета и собирать отчеты HID, т. Е. События. Выезд IOHIDDeviceGetReportWithCallback. В качестве альтернативы, с API HID transaction может быть проще работать, поскольку он имеет дело с беспорядочным бизнесом анализа отчетов и дескрипторов для вас.