2

我正在尝试使用以下代码片段(只是苹果示例代码中的一些小规模修改)在我的 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) 重现。

我究竟做错了什么?

4

1 回答 1

2

IOService对象只能在registerService()被调用后才能匹配。AppleUSBCDCACMControl这样做,但AppleUSBCDCACMData没有。

于 2010-11-24T08:50:53.900 回答