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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top