Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Cocoa 如何在Mac OS中获取已安装usb设备的设备id、供应商id和产品id_Cocoa_Usb_Mount_Iokit - Fatal编程技术网

Cocoa 如何在Mac OS中获取已安装usb设备的设备id、供应商id和产品id

Cocoa 如何在Mac OS中获取已安装usb设备的设备id、供应商id和产品id,cocoa,usb,mount,iokit,Cocoa,Usb,Mount,Iokit,我正在尝试编写一个Cocoa程序,用于检测连接到Mac OS的iPod。我正在收听有关USB设备装载和卸载通知的NSWorkspaceDidMountNotification和NSWorkspaceDidUnmountNotification。我可以使用NSString*path=[[notif userInfo]objectForKey:@“NSDevicePath”]获取已装载设备的设备路径;但我也不需要知道设备Id、供应商Id、产品Id等来检查安装的设备是否是iPod。我认为前进的道路是I

我正在尝试编写一个Cocoa程序,用于检测连接到Mac OS的iPod。我正在收听有关USB设备装载和卸载通知的NSWorkspaceDidMountNotification和NSWorkspaceDidUnmountNotification。我可以使用NSString*path=[[notif userInfo]objectForKey:@“NSDevicePath”]获取已装载设备的设备路径;但我也不需要知道设备Id、供应商Id、产品Id等来检查安装的设备是否是iPod。我认为前进的道路是IOKit。但我有一种感觉,它适用于低级编程。还有别的办法找到这些吗?另外,如果是IO套件,当我提供装载路径时,是否有任何示例程序会给出ID

非常感谢

我正在收听有关USB设备装载和卸载通知的NSWorkspaceDidMountNotification和NSWorkspaceDidUnmountNotification

这不是那些通知的目的。它们是卷装载和卸载通知,卷可以来自非USB设备。磁盘映像、FireWire设备、光盘和闪存卡都不是USB设备。(该卡可能位于USB读卡器中,但该卡不是读卡器。)

我认为前进的道路是IOKit

但我有一种感觉,它适用于低级编程

还有别的办法找到这些吗

您不能完全删除I/O工具包,但有一个快捷方式可以为您节省一些工作。这是磁盘仲裁框架

和。您实现的每个回调函数都接受一个
DADiskRef
。您可以将此消息传递到以获取磁盘I/O工具包介质对象的服务端口

我不知道接下来要做什么,只是您需要按照文档中的描述释放服务端口。此外,您仍然需要过滤掉非USB设备,但至少您可以使用I/O Kit介质对象进行过滤


还有一件事:如果iPod未设置为使用或不支持磁盘模式,则此解决方案和您当前使用的NSWorkspace通知可能都不起作用。iphone和ipodtouch是目前最大的例子。如果是这样的话,那么您只需要从头到尾使用I/O工具包,DiskArb和NSWorkspace都不能为您完成这项工作。

还有来自苹果的示例。通读一下标题——虽然没有关于这个框架的很好的文档,但我认为有一个示例应用程序或与之相关的东西。

您可以使用usbprobe、ioregistryexplorer,或者如果您只需要idProduct和。。。你可以把它插到linux机器上,使用“lsusb-v”以一种非常理智的方式获取有关该设备的信息,而ioregistryexplorer似乎在每个版本的OSX上都会不断中断


ioregistryexplorer还需要从mountain lion开始的mac开发者计划的100美元会员资格

我想你可以通过

ioreg -p IOUSB -l -b | grep -E "@|idVendor|idProduct"
但不确定设备ID。也许吧

ioreg -p IOUSB -l -b | grep -E "@|idVendor|idProduct|bcdDevice"
对于我的Arduino Uno,以下是我获得的信息:

+-o阿杜伊诺Uno@14100000  
“idProduct”=67
“BCD设备”=1
“idVendor”=10755

非常感谢你的回答。我对Mac和IOKit很陌生。我认为对于通用解决方案,我将从一开始就使用IO工具包。即使没有安装iPod,它也能工作吗?您能否提供一些线索,如在何处查找更多信息和IO工具包示例。当然,它是有效的,因为中提供了对设备树的访问。但是如果iPod没有连接,它就不会在设备树中,因为设备树只是那些连接的设备。例如:
+-o Arduino Uno@14100000  <class AppleUSBDevice, id 0x100000bec, registered, matched, active, busy 0 (2 ms), retain 13>
      "idProduct" = 67
      "bcdDevice" = 1
      "idVendor" = 10755