首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用IOKit实现与通用串行总线设备通信

用IOKit实现与通用串行总线设备通信
EN

Stack Overflow用户
提问于 2015-02-03 21:43:29
回答 1查看 9.6K关注 0票数 6

我正在尝试创建一个与USB设备通信的应用程序,就像我在终端上使用screen命令一样。

为了让我的问题更容易理解,我通常在终端中这样做:

命令:

代码语言:javascript
复制
ls /dev/tty.usb*

返回:

代码语言:javascript
复制
/dev/tty.usbmodem1411   /dev/tty.usbmodem1451

接下来,我调用:

代码语言:javascript
复制
screen /dev/tty.usbmodem1411

在此之后,我可以向设备发送命令(例如,输入'U‘,获取响应)

我现在正尝试在Xcode中这样做。

使用IOKit,我成功地执行了相当于第一个返回usb端口列表的命令:

代码语言:javascript
复制
/dev/tty.usbmodem1411   /dev/tty.usbmodem1451

代码如下:

代码语言:javascript
复制
@IBAction func testPressed(sender: AnyObject) {

        var portIterator: io_iterator_t = 0
        let kernResult = findSerialDevices(kIOSerialBSDModemType, serialPortIterator: &portIterator)
        if kernResult == KERN_SUCCESS {
            printSerialPaths(portIterator)
        }

    }

    func findSerialDevices(deviceType: String, inout serialPortIterator: io_iterator_t ) -> kern_return_t {
        var result: kern_return_t = KERN_FAILURE
        var classesToMatch = IOServiceMatching(kIOSerialBSDServiceValue).takeUnretainedValue()
        var classesToMatchDict = (classesToMatch as NSDictionary) as Dictionary<String, AnyObject>
        classesToMatchDict[kIOSerialBSDTypeKey] = deviceType
        let classesToMatchCFDictRef = (classesToMatchDict as NSDictionary) as CFDictionaryRef
        result = IOServiceGetMatchingServices(kIOMasterPortDefault, classesToMatchCFDictRef, &serialPortIterator);
        return result
    }

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

现在,即使在读完苹果的IOKit手册后,我仍然无法继续前进。如何开始使用IOKit发送命令?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-05 05:12:55

请参阅苹果Performing Serial I/O示例项目。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28300416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档