我有一个小程序可以找到连接到Mac的所有USB CDC设备的供应商ID和产品ID。该程序使用IOServiceNameMatching和IOServiceGetMatchingServices分别获取匹配的字典和服务迭代器,如下面的代码片段所示:
matchingDictionary = IOServiceNameMatching("AppleUSBCDC");
IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDictionary, &serviceIterator);
然后我遍历serviceIterator来枚举并提取所有连接的USB CDC设备的ID。这曾经完美地工作到OSX 10.10,但IOServiceGetMatchingServices在OSX 10.11中返回空迭代器。为什么即使USB CDC设备连接,它也仅在OSX 10.11上返回空迭代器?是否有另一种方法可以在OSX 10.11中获取设备列表?
答案 0 :(得分:1)
El Capitan更改了USB堆栈的基础名称/架构,我假设服务名称现在不同,但我没有方便检查的USB CDC设备。
使用IORegistryExplorer(包含在硬件IO工具中)查看要匹配的设备小块,并查看它们具有哪些属性(以及您可以尝试使用IOServiceNameMatching
或IOServiceMatching
搜索的内容)
答案 1 :(得分:1)
我使用“IOUSBHostInterface”代替“AppleUSBCDC”,现在能够枚举并获取所有连接的USB CDC设备的供应商ID和产品ID。看起来Apple不再认可“AppleUSBCDC”。