我正在尝试使用以下代码片段(只是苹果示例代码中的一些小规模修改)提取我的 mac 中所有 AppleUSBCDCACMData IOClass 设备的列表。该设备是一个 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似乎无法使用任意 IOClass 名称字符串查询 IORegistry?因为我也遇到了一些非标准专有 IOClass 的相同问题。这可以使用任何加载 AppleUSBCDC 驱动程序的 USB 调制解调器 (3g/HSDPA) 来重现。

我究竟做错了什么?

有帮助吗?

解决方案

IOService 对象只能匹配一次 registerService() 已被要求为他们。 AppleUSBCDCACMControl 这样做,但是 AppleUSBCDCACMData 才不是。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top