IOServiceMatching en AppleUSBCDCACMData IOClass: Anomalía?
Pregunta
Estoy intentando extraer una lista de todos los dispositivos AppleUSBCDCACMData IOClass en mi MAC utilizando el siguiente fragmento de código (sólo algunas modificaciones a pequeña escala en código de ejemplo de manzana). El dispositivo es un módem USB que crea algunos 7 nodos de dispositivos /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))
{
}
Mi observación es, el iterador devuelto por IOServiceGetMatchingServices está vacía (es decir, nada que iterar sobre). Pero si paso "AppleUSBCDCACMControl" como parámetro a IOServiceMatching, me sale un iterador de una lista de 7 elementos - que está en conformidad con la opinión IORegistryExplorer. Ver una captura de pantalla de IORegistryExplorer aquí, http://tumblr.deepak.dk/post/1666218968/ioregistryexplorer Parece que no es posible consultar IORegistry con cadenas arbitrarias nombre IOClass? Desde que tuve que enfrentar los mismos problemas con algunos propietarios IOClasses no estándar también. Esto puede ser reproducida mediante cualquier módem USB (3G / HSDPA), que carga el controlador AppleUSBCDC.
¿Qué estoy haciendo mal?
Solución
objetos IOService
sólo puede ser igualado una vez registerService()
ha sido llamado por ellos. AppleUSBCDCACMControl
hace esto, pero AppleUSBCDCACMData
no lo hace.