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