Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos IOServiceGetMatchingServices在某些Mac上找不到某些设备_Macos_Io_Usb - Fatal编程技术网

Macos IOServiceGetMatchingServices在某些Mac上找不到某些设备

Macos IOServiceGetMatchingServices在某些Mac上找不到某些设备,macos,io,usb,Macos,Io,Usb,我有一个监控USB总线变化的应用程序问题。特别是如果我想得到一个附加USB服务的列表,我使用下面的代码。奇怪的是,有些用户(nautally不是我的机器)看不到一两台设备。 这些设备确实显示在IORegistryExplorer中,并显示已注册 这不起作用的机器也在运行10.6,而且也是MacBook的专业版 CFMutableDictionaryRef服务_properties=CFDictionaryCreateMutable(NULL,0,NULL,NULL); CFMutableDict

我有一个监控USB总线变化的应用程序问题。特别是如果我想得到一个附加USB服务的列表,我使用下面的代码。奇怪的是,有些用户(nautally不是我的机器)看不到一两台设备。 这些设备确实显示在IORegistryExplorer中,并显示已注册

这不起作用的机器也在运行10.6,而且也是MacBook的专业版

CFMutableDictionaryRef服务_properties=CFDictionaryCreateMutable(NULL,0,NULL,NULL); CFMutableDictionaryRef child_props=CFDictionaryCreateMutable(NULL,0,NULL,NULL)


事实证明,您需要轮询所有总线类型:

for(i=0;i<3;i++){

if(i==0)kr = IOServiceGetMatchingServices(myMasterPort,
                                      IOServiceNameMatching("AppleUSBEHCI"), &io_objects);
if(i==1)kr = IOServiceGetMatchingServices(myMasterPort,
                                      IOServiceNameMatching("AppleUSBOHCI"), &io_objects);
if(i==2)kr = IOServiceGetMatchingServices(myMasterPort,
                                      IOServiceNameMatching("AppleUSBUHCI"), &io_objects);

if(kr != KERN_SUCCESS)
    exit(1);

for(i=0;i我同意杰里米的观点:除了
AppleUSBEHCI

也许你知道(以防万一):


应该在你的机器上显示活动USB状态,你完全匹配错了。你匹配的是Mac中使用的物理控制器(
EHCI
UHCI
OHCI
)。如果他们发明了新的控制器标准,例如2012年以来新Mac中的
XHCI
),这将失败(用于USB 3兼容性)

您可能想做的是匹配
ioubdevice
,这就是我在匹配系统中的每个设备时所做的。这也是在
Deva
示例代码中所做的

for(i=0;i<3;i++){

if(i==0)kr = IOServiceGetMatchingServices(myMasterPort,
                                      IOServiceNameMatching("AppleUSBEHCI"), &io_objects);
if(i==1)kr = IOServiceGetMatchingServices(myMasterPort,
                                      IOServiceNameMatching("AppleUSBOHCI"), &io_objects);
if(i==2)kr = IOServiceGetMatchingServices(myMasterPort,
                                      IOServiceNameMatching("AppleUSBUHCI"), &io_objects);

if(kr != KERN_SUCCESS)
    exit(1);
ioreg -l | grep AppleUSB