Как справиться с изменениями осей X и Y контроллера XBox 360 в ОС Ma c? - PullRequest
0 голосов
/ 08 апреля 2020

Итак. Я использую Ма 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

enter image description here

Мне нужно добавить слушателей на палочках, изменения значений в красных кружках, чтобы быть в состоянии генерировать события MIDI, пожалуйста, помогите мне.

...