Итак. Я использую Ма c с Мохаве. Я хочу использовать XBox 360 Controller в качестве MIDI-контроллера. Часть MIDI довольно ясна, и теперь мне нужно как-то отлавливать события смены контроллера. Контроллер XBox 360 изначально не поддерживается, поэтому я установил драйвер 360Controller
Затем я
import Foundation
import IOKit
import IOKit.usb
import IOKit.hid
private func createDeviceMatchingDictionary(usagePage: Int, usage: Int) -> CFMutableDictionary {
let dict = [
kIOHIDDeviceUsageKey: usage,
kIOHIDDeviceUsagePageKey: usagePage
] as NSDictionary
return dict.mutableCopy() as! NSMutableDictionary;
}
let manager = IOHIDManagerCreate(kCFAllocatorDefault, IOOptionBits(kIOHIDOptionsTypeNone));
let gamepad = createDeviceMatchingDictionary(usagePage: kHIDPage_GenericDesktop, usage: kHIDUsage_GD_GamePad)
IOHIDManagerOpen(manager, IOOptionBits(kIOHIDOptionsTypeNone))
IOHIDManagerSetDeviceMatching(manager, gamepad)
let devices = IOHIDManagerCopyDevices(manager)
if (devices != nil) {
print("Found devices!")
let n = CFSetGetCount(devices)
let array = UnsafeMutablePointer<UnsafeRawPointer?>.allocate(capacity: n)
array.initialize(repeating: nil, count: n)
CFSetGetValues(devices, array)
let managedArray = UnsafeMutableBufferPointer(start: array, count: n).map{Unmanaged<IOHIDDevice>.fromOpaque($0!).takeRetainedValue()}
for device in managedArray {
// MY GOD! I'VE SPENT COUPLE OF HOURS TO ITERATE COLLECTION!!!
print(device)
}
} else {
print("Did not find any devices :(")
}
У меня есть IOHIDDevice с моим контроллером. Теперь я предполагаю использовать IOHIDDeviceValueCallback, правильно?
![enter image description here](https://i.stack.imgur.com/QOsU1.jpg)
![enter image description here](https://i.stack.imgur.com/PL2ON.jpg)
Мне нужно добавить слушателей на палочках, изменения значений в красных кружках, чтобы быть в состоянии генерировать события MIDI, пожалуйста, помогите мне.