Я не могу заставить класс GameController работать с моим джойстиком.Однако я нашел простую библиотеку https://github.com/suzukiplan/gamepad-osx, использующую IOKit, написанную на C, и сумел заставить ее работать в консольном приложении swift, используя следующий код для main.swift
:
import Foundation
func callback(_ type: Int32, _ page: Int32, _ usage: Int32, _ value: Int32) -> Void {
print("Type: \(type); page: \(page), usage: \(usage), value: \(value)")
}
let ctx = gamepad_init(1, 1, 0)
if ctx == nil {
print("Init failed")
exit(4)
}
gamepad_set_callback(ctx, callback(_:_:_:_:))
CFRunLoopRun()
exit(0)
Консольные сообщения:
attched device: Controller
attched device: 2.4G RX
attched device: VirtualHIDKeyboard
Type: 2; page: 7, usage: 227, value: 1
Type: 2; page: 7, usage: -1, value: 6
....
Поскольку это будет использоваться в приложении MacOS, я создал приложение Cocoa для одного представления со следующим кодом в главном представлении:
import AppKit
class MainView: NSView {
required init?(coder decoder: NSCoder) {
super.init(coder: decoder)
print("Initialising started")
let ctx = gamepad_init(1, 1, 0)
if ctx == nil {
print("Init failed")
return
}
print("Initialising succeeded")
gamepad_set_callback(ctx, callback(_:_:_:_:))
print("Callback attached")
}
}
func callback(_ type: Int32, _ page: Int32, _ usage: Int32, _ value: Int32) -> Void {
print("Type: \(type); page: \(page), usage: \(usage), value: \(value)")
}
Появляется окно, но чтоЯ получаю на консоли только что:
Initialising started
Initialising succeeded
Callback attached
Нет сообщений о присоединении устройства вообще!
Также пробовал запуск и дополнительный поток (DispatchQueue) в главном представлении и в AppDelegate (на этот раз сCFRunLoopRun
):
func applicationDidFinishLaunching(_ aNotification: Notification) {
DispatchQueue(label: "Joy").async {
print("Initialising started")
let ctx = gamepad_init(1, 1, 0)
if ctx == nil {
print("Init failed")
return
}
print("Initialising succeeded")
gamepad_set_callback(ctx, callback(_:_:_:_:))
CFRunLoopRun()
}
}
Опять нет сообщений вложения