【问题标题】:Get Product Name Of USB Device From portIterator从 portIterator 获取 USB 设备的产品名称
【发布时间】:2017-01-07 05:07:52
【问题描述】:

有没有一种方法,使用 IOKit 或类似的东西,不涉及从 Internet 下载其他软件包,我可以使用它来读取 USB 设备的产品名称?

这是我当前的代码...

func printSerialPaths(portIterator: io_iterator_t) {
    var serialService: io_object_t
    repeat {
        serialService = IOIteratorNext(portIterator)
        if (serialService != 0) {
            var key: CFString! = "IOCalloutDevice"
            var bsdPathAsCFtring: AnyObject? = IORegistryEntryCreateCFProperty(serialService, key, kCFAllocatorDefault, 0).takeUnretainedValue()
            var bsdPath = bsdPathAsCFtring as! String?
            if let path = bsdPath {
                print(path)
            }

            var deviceNameCString: [CChar] = [CChar](count: 128, repeatedValue: 0)
            let deviceNameResult = IORegistryEntryGetName(serialService, &deviceNameCString)
            let deviceName = String.fromCString(&deviceNameCString)!
            print("usb Device Name: \(deviceName)")


        }
    } while serialService != 0;
}

我也尝试过在 IORegistryEntryCreateCFProperty() 命令中使用其他 CFString,例如 "Product Name",正如我在其他地方看到的建议,但没有运气。如果我只需要替换它,我在哪里可以找到其余这些字符串的文档?

我正在谈论的产品名称在下面突出显示。我不确定它的技术名称是什么。

【问题讨论】:

    标签: swift macos usb iokit


    【解决方案1】:

    如果io_service_t 句柄是IOUSBDevice/IOUSBHostDevice,它应该有一个名为"USB Product Name" 的属性(符号常量kUSBProductString,至少在C 中) - 我相信这就是你所追求的.您可以使用IORegistryEntryCreateCFProperty() 查询它,就像您已经对“IOCalloutDevice”属性所做的那样,顺便说一下,该属性被定义为符号常量kIOCalloutDeviceKey

    如果在导入 IOKit 模块时这些常量在 Swift 中不存在,只需定义您自己的常量并向 Apple 提交关于遗漏的错误 (Radar)。

    【讨论】:

    • 这包括很多开始研究这个的好地方,但不幸的是,我什么也没想到。kUSBProductString 在 Swift 中不存在。在搜索其他人时,我找到了 kUSBVendorName 之类的东西,但它们似乎只适用于其他语言,如 Objective-C,并且导致我出现致命错误。
    • 在这种情况下,在 Swift 中定义您自己的这些常量版本并使用它们应该是非常安全的。它们不会改变,除了 OSX 10.11 引入了新的,并为旧键和新键设置属性值。 (这与新的 USB 堆栈有关,尽管 Apple 创建新属性名称的原因尚不清楚。)
    • 使用桥接头可以帮助我获得大多数常量——如果我只是在 Swift 中导入 IOKit,它们并不总是可以访问的。 stackoverflow.com/a/39026607/2227743
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多