Доступ Mac OS X к устройствам с одинаковым идентификатором поставщика и разными идентификаторами продукта

Я пишу приложение, которое открывает USB-устройства и передает некоторые данные. Я следую UsbSimpleNotificationExample из примеров для разработчиков. В примере добавляются уведомления и назначаются обратные вызовы для уникального идентификатора поставщика и идентификатора продукта. Но для моего приложения у меня есть несколько PID и один VID. Как я могу добавить словарную запись с одним Vid и более чем одним PID? Если я использую CFDictionarySetValue с двумя PID, второй вызов Pid перезаписывает первое значение словаря. Из-за этого я не могу правильно сопоставить обратные вызовы IOServiceAddMatchingNotification. Какие еще варианты я могу попробовать?


person Community    schedule 08.12.2008    source источник


Ответы (2)


Почему бы вам не попробовать добавить только идентификатор поставщика?

Тогда ваши совпадения должны включать все идентификаторы продуктов.

person Rhythmic Fistman    schedule 07.02.2009
comment
Это верно. Расширьте область поиска и просмотрите результаты. - person Azeem.Butt; 19.10.2009

6 лет с опозданием... извините.

Вот как это сделать:

CFMutableDictionaryRef  matchingDict = IOServiceMatching ( kIOUSBDeviceClassName );
if ( matchingDict )
{
    UInt32        usbVendor = k_MyVendorID;
    CFNumberRef   refVendorId = CFNumberCreate ( kCFAllocatorDefault, kCFNumberIntType, &usbVendor );
    CFDictionarySetValue ( matchingDict, CFSTR ( kUSBVendorID ), refVendorId );
    CFRelease ( refVendorID );
    CFDictionarySetValue ( matchingDict, CFSTR ( kUSBProductID ), CFSTR ( "*" ) );   // This is a wildcard, so we find any device.
}

Обратите внимание на подстановочный знак.

person Chris Marshall    schedule 20.03.2014
comment
Для kUSBVendorID и kUSBProductID #include ‹IOKit/usb/USB.h› - person Jerry Krinock; 28.01.2016