IOServiceMatching на AppleUSBCDCACMData IOClass: аномалия?

Я пытаюсь извлечь список всех устройств AppleUSBCDCACMData IOClass на моем Mac, используя следующий фрагмент кода (всего лишь некоторые небольшие изменения в примере кода Apple). Устройство представляет собой USB-модем, который создает несколько узлов устройства 7 /dev/cu.usbmodemx.

    error = IOMasterPort(MACH_PORT_NULL, &masterPort);  

if(error){
    return ;
}
else{
    matchingDict = IOServiceMatching("AppleUSBCDCACMData");
    IOServiceGetMatchingServices(masterPort,matchingDict,&modem_iterator);
    while(usbDevice = IOIteratorNext(modem_iterator))
    {

            }

По моим наблюдениям, итератор, возвращаемый IOServiceGetMatchingServices, пуст (т. е. нечего повторять). Но если я передам «AppleUSBCDCACMControl» в качестве параметра IOServiceMatching, я получу итератор списка из 7 элементов, который соответствует представлению IORegistryExplorer. См. скриншот IORegistryExplorer здесь, http://tumblr.deepak.dk/post/1666218968/ioregistryexplorer Получается, что невозможно запросить IORegistry с произвольными строками имен IOClass? Так как я столкнулся с теми же проблемами и с некоторыми нестандартными проприетарными IOClasses. Это можно воспроизвести с помощью любого USB-модема (3g/HSDPA), который загружает драйвер AppleUSBCDC.

Что я делаю не так?


person Deepak Narayan    schedule 24.11.2010    source источник


Ответы (1)


IOService объекты могут быть сопоставлены только один раз registerService(). AppleUSBCDCACMControl делает это, а AppleUSBCDCACMData нет.

person Hasturkun    schedule 24.11.2010
comment
Спасибо за ответ. Есть ли конкретная причина для исключения registerService() в драйвере AppleUSBCDCACMData? Что я пытался сделать, так это получить путь /dev всех устройств, связанных с модемом, через IOKit lib. Этой информации нет в записях AppleUSBCDCACMControl в IORegistry. В любом случае есть несколько способов получить эти данные. Я мог бы исправить это, сопоставив IOSerialBSDClient и затем отфильтровав соответствующие записи. - person Deepak Narayan; 24.11.2010
comment
@Deepak: Если вы ищете модемы, вам, вероятно, лучше сопоставить IOSerialStreamSync и/или его подклассы (IORS232SerialStreamSync и IOModemSerialStreamSync) - person Hasturkun; 25.11.2010
comment
кстати, IOSerialStreamSync почти гарантированно будет соответствовать, иначе IOSerialBSDClient никогда бы не работал - person Hasturkun; 25.11.2010