首先,导入由于IOKit框架,包括像这样在你的头和实现文件:
#import <IOKit/hid/IOHIDLib.h>
在你的头文件,你可能希望有这个变量:
IOHIDManagerRef hidManager;
然后加入这对你的实现:
void gamepadWasAdded(void* inContext, IOReturn inResult, void* inSender, IOHIDDeviceRef device) {
NSLog(@"Gamepad was plugged in");
}
void gamepadWasRemoved(void* inContext, IOReturn inResult, void* inSender, IOHIDDeviceRef device) {
NSLog(@"Gamepad was unplugged");
}
void gamepadAction(void* inContext, IOReturn inResult, void* inSender, IOHIDValueRef value) {
NSLog(@"Gamepad talked!");
IOHIDElementRef element = IOHIDValueGetElement(value);
NSLog(@"Element: %@", element);
int elementValue = IOHIDValueGetIntegerValue(value);
NSLog(@"Element value: %i", elementValue);
}
-(void) setupGamepad {
hidManager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);
NSMutableDictionary* criterion = [[NSMutableDictionary alloc] init];
[criterion setObject: [NSNumber numberWithInt: kHIDPage_GenericDesktop] forKey: (NSString*)CFSTR(kIOHIDDeviceUsagePageKey)];
[criterion setObject: [NSNumber numberWithInt: kHIDUsage_GD_GamePad] forKey: (NSString*)CFSTR(kIOHIDDeviceUsageKey)];
IOHIDManagerSetDeviceMatching(hidManager, criterion);
IOHIDManagerRegisterDeviceMatchingCallback(hidManager, gamepadWasAdded, (void*)self);
IOHIDManagerRegisterDeviceRemovalCallback(hidManager, gamepadWasRemoved, (void*)self);
IOHIDManagerScheduleWithRunLoop(hidManager, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
IOReturn tIOReturn = IOHIDManagerOpen(hidManager, kIOHIDOptionsTypeNone);
IOHIDManagerRegisterInputValueCallback(hidManager, gamepadAction, (void*)self);
}
并从你的awakeFrom调用setupGamepad笔尖。您也可以修改变量“kHIDUsage_GD_GamePad”以注册其他设备。我通过逐步阅读http://developer.apple.com/library/mac/documentation/DeviceDrivers/Conceptual/HID/hid.pdf文档示例并将其与http://abstractable.net/enjoy
“真实”源代码进行比较,对上述内容进行了编码。祝您好运。
这是值得花一点时间调查的选项。我花了五分钟的时间来下载DDHidLib源代码,找到与游戏杆相关的代码并创建一个实现。 – 2010-02-24 06:35:01
彼得发布后,我尽快做了。 30分钟后无法弄清楚。如果我没有从这个答案中得到工作代码片段,我将别无选择,但说实话,我害怕那一刻。这对于这样一个简单的问题来说太复杂了。 – 2010-02-26 03:46:14