3
터미널에서 screen
명령을 사용하는 것과 같은 방법으로 USB 장치와 통신하는 응용 프로그램을 만들려고합니다. IOKit을 사용하여 USB 장치와 통신하기
명령을
ls /dev/tty.usb*
반환 :
/dev/tty.usbmodem1411 /dev/tty.usbmodem1451
다음, 내가 전화 :
screen /dev/tty.usbmodem1411
그런 다음 장치에 명령을 보낼 수 있습니다 (예 : 'U'를 입력하면 응답 받기)
지금 Xcode에서이 작업을 수행하려고합니다. IOKit를 사용
가, 내가 USB 포트의 목록을 반환 첫 번째 명령에 해당 무엇을 실행하기 위해 관리했습니다 : 심지어 지금
@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;
}
}
:
/dev/tty.usbmodem1411 /dev/tty.usbmodem1451
이 코드입니다 Apple의 IOKit 설명서를 읽은 후에는 앞으로 나아갈 수 없습니다. IOKit을 사용하여 명령을 보내려면 어떻게해야합니까?
감사합니다. 나는 그것을 들여다 보니 당신에게 돌아갈 것입니다. – kmn
안녕하십니까, 링크 주셔서 감사합니다. 나는 이것을 빨리 할 길을 찾고있다. C에 있습니다. 당신의 도움에 감사드립니다. – kmn
@ kmn 당신이 이것을 얻었습니까? 나는 똑같은 것을 찾고있다! – Boggartfly