IOSERVICEMATCHING ON APPLOUSBCDCACCMDATA IOCLASS: Anomalia?
Pergunta
Estou tentando extrair uma lista de todos os dispositivos de ioclassa de AppleUSBCDCACMDATA no meu Mac usando o seguinte snippet de código (apenas algumas modificações em pequena escala no código de amostra da Apple). O dispositivo é um modem USB que cria alguns nós do dispositivo 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))
{
}
Minha observação é que o iterador devolvido pelo ioservicegetMatchingServices está vazio (ou seja, nada para iterar). Mas se eu passar "AppleUSBCDCACMControl" como o parâmetro para o iServicematching, recebo um iterador de uma lista de 7 elementos - que está em conformidade com a visualização do ioregistryExplorer. Veja uma captura de tela do ioregistryExplorer aqui, http://tumblr.deepak.dk/post/1666218968/iorregistryExplorerParece que não é possível consultar o ioregistry com seqüências de nome de ioclass arbitrárias? Desde que enfrentei os mesmos problemas com alguns ioclantes proprietários não padrão. Isso pode ser reproduzido usando qualquer modem USB (3G/HSDPA) que carregue o driver AppleUSBCDC.
O que estou fazendo errado?
Solução
IOService
Os objetos só podem ser correspondidos uma vez registerService()
foi chamado para eles. AppleUSBCDCACMControl
faz isso, mas AppleUSBCDCACMData
não.