как получить идентификатор устройства, идентификатор поставщика и идентификатор продукта подключенного USB-устройства в какао Mac OS

Я пытаюсь написать программу Cocoa, которая обнаруживает iPod, подключенный к Mac OS. Я слушаю NSWorkspaceDidMountNotification и NSWorkspaceDidUnmountNotification для уведомлений о монтировании и отключении USB-устройства. Я могу получить путь к смонтированному устройству, используя NSString *path = [[notif userInfo] objectForKey:@"NSDevicePath"]; но мне также не нужно знать идентификатор устройства, идентификатор поставщика, идентификатор продукта и т. д., чтобы проверить, является ли подключенное устройство iPod. Я думаю, что путь вперед — это IOKit. Но у меня такое ощущение, что это для низкоуровневого программирования. Есть ли другой способ найти их? Кроме того, если это комплект ввода-вывода, есть ли пример программы, которая выдаст идентификаторы, когда я укажу путь монтирования?

Большое спасибо.


person wantro    schedule 07.01.2010    source источник


Ответы (4)


Я думаю, что вы можете получить идентификатор продукта и поставщика по

ioreg -p IOUSB -l -b | grep -E "@|idVendor|idProduct"

но не уверен насчет идентификатора устройства. Может быть

ioreg -p IOUSB -l -b | grep -E "@|idVendor|idProduct|bcdDevice"

Для моего Arduino Uno я получаю следующую информацию:

+-o Arduino Uno@14100000  <class AppleUSBDevice, id 0x100000bec, registered, matched, active, busy 0 (2 ms), retain 13>
      "idProduct" = 67
      "bcdDevice" = 1
      "idVendor" = 10755
person Foad    schedule 02.11.2019

Я слушаю NSWorkspaceDidMountNotification и NSWorkspaceDidUnmountNotification для уведомлений о монтировании и отключении USB-устройства.

Эти уведомления не для этого. Это тома уведомления о монтировании и отключении, а том может исходить от чего-то, что не является USB-устройством. Образы дисков, устройства FireWire, оптические диски и карты флэш-памяти — все это устройства, не являющиеся устройствами USB. (Карта может находиться в устройстве чтения карт памяти USB, но карта не является устройством чтения.)

Я думаю, что путь вперед — это IOKit.

Правильный.

Но у меня такое ощущение, что это для низкоуровневого программирования.

Правильный.

Есть ли другой способ найти их?

Вы не можете полностью отключить I/O Kit, но есть ярлык, который может сэкономить вам часть работы. Это структура дискового арбитража.

Зарегистрируйте обратный вызов на диске и обратный вызов при исчезновении диска. Каждая функция обратного вызова, которую вы реализуете, принимает DADiskRef. Вы можете передать это в функцию DADiskCopyIOMedia, чтобы получить служебный порт для медиа-объекта I/O Kit для диска.

Я понятия не имею, что тогда делать, за исключением того, что вам нужно будет освободить служебный порт, как описано в этой документации. Кроме того, вам все равно нужно будет отфильтровать устройства, отличные от USB, но, по крайней мере, у вас будет медиа-объект I/O Kit, чтобы сделать это.

Еще одна вещь: это решение и уведомления NSWorkspace, которые вы используете в настоящее время, вероятно, не будут работать, если iPod не настроен на использование или не поддерживает дисковый режим. iPhone и iPod touch — самый большой современный пример. Если это так, то вам просто придется использовать I/O Kit от начала до конца — ни DiskArb, ни NSWorkspace не сделают эту работу за вас.

person Peter Hosey    schedule 07.01.2010
comment
Большое спасибо за ответ. Я очень новичок в Mac и IOKit. Я думаю, что для универсального решения я буду использовать IO Kit с самого начала. Работает ли он, даже если iPod не подключен? Не могли бы вы предоставить некоторые рекомендации, например, где искать дополнительную информацию и примеры IO Kit. - person wantro; 08.01.2010
comment
Конечно, это работает, так как предоставляет вам доступ к дереву устройств. Но iPod не будет в дереве устройств, если он не подключен, потому что дерево устройств — это только те устройства, которые подключены. Например: developer.apple.com/mac - person Peter Hosey; 08.01.2010

вы можете использовать usbprobe, ioregistryexplorer или если вам просто нужен idProduct и... вы всегда можете подключить его к Linux-машине и использовать "lsusb -v" для получения информации об устройстве очень разумным способом, в отличие от ioregistryexplorer, который кажется постоянно ломаются при каждом выпуске os x.

ioregistryexplorer также требует 100-долларового членства в программе для разработчиков Mac, как и в случае с горным львом.

person stewie    schedule 20.01.2013

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

person RyanWilcox    schedule 18.01.2010