2015-11-10 2 views
1

У меня есть небольшая программа, чтобы узнать идентификатор поставщика и идентификатор продукта всех USB-устройств CDC, подключенных к Mac. Программа использует IOServiceNameMatching и IOServiceGetMatchingServices, чтобы получить словарное соответствие и обслуживание итератор соответственно, как показано на фрагменте кода ниже:IOServiceGetMatchingServices, возвращающий пустой итератор в OSX 10.11 El Capitan

matchingDictionary = IOServiceNameMatching("AppleUSBCDC"); 
IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDictionary, &serviceIterator); 

Я тогда перебирать serviceIterator для перечисления и извлечения идентификаторов всех подключенных устройств USB CDC. Это отлично работает до OSX 10.10, но IOServiceGetMatchingServices возвращает пустой итератор в OSX 10.11. Почему он возвращает пустой итератор только на OSX 10.11, хотя USB-устройства CDC подключены? Есть ли альтернативный способ получить список устройств в OSX 10.11?

ответ

1

El Capitan изменил основные названия/архитектуры USB-накопителя, я предполагаю, что имя службы теперь отличается, но у меня нет USB CDC-устройства, которое можно проверить. Используйте IORegistryExplorer (в комплекте с аппаратными средствами ввода-вывода), чтобы посмотреть на нумераторы устройств, с которыми вы хотите сопоставлять, и посмотреть, какие у них есть свойства (и что вы можете попытаться найти с помощью IOServiceNameMatching или IOServiceMatching).

1

Я использовал «IOUSBHostInterface» вместо «AppleUSBCDC» и теперь могу перечислить и получить идентификатор поставщика и идентификатор продукта всех подключенных USB CDC-устройств. Похоже, Apple больше не признает «AppleUSBCDC».

Смежные вопросы