как получить идентификатор устройства, идентификатор производителя и идентификатор продукта подключенного USB-устройства в Mac OS какао - PullRequest
3 голосов
/ 07 января 2010

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

Ответы [ 3 ]

2 голосов
/ 07 января 2010

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

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

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

Правильно.

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

Correct.

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

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

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

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

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

0 голосов
/ 20 января 2013

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

ioregistryexplorer также требует 100% членства в программе для разработчиков Mac от Mountain Lion

0 голосов
/ 18 января 2010

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

...