X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=NJDevice.m;fp=NJDevice.m;h=0000000000000000000000000000000000000000;hp=69775d835d399f3c315bb7e52519726bbdbb9560;hb=0064c1fbff36795885a9724081af2a17d83c20a3;hpb=56d825ba259066d847a9fc3f9c8c0c0a362a1507 diff --git a/NJDevice.m b/NJDevice.m deleted file mode 100644 index 69775d8..0000000 --- a/NJDevice.m +++ /dev/null @@ -1,109 +0,0 @@ -// -// NJDevice.m -// Enjoy -// -// Created by Sam McCall on 4/05/09. -// - -#import "NJDevice.h" - -#import "NJInput.h" -#import "NJInputAnalog.h" -#import "NJInputHat.h" -#import "NJInputButton.h" - -static NSArray *InputsForElement(IOHIDDeviceRef device, id base) { - CFArrayRef elements = IOHIDDeviceCopyMatchingElements(device, NULL, kIOHIDOptionsTypeNone); - NSMutableArray *children = [NSMutableArray arrayWithCapacity:CFArrayGetCount(elements)]; - - int buttons = 0; - int axes = 0; - int hats = 0; - - for (int i = 0; i < CFArrayGetCount(elements); i++) { - IOHIDElementRef element = (IOHIDElementRef)CFArrayGetValueAtIndex(elements, i); - int type = IOHIDElementGetType(element); - unsigned usage = IOHIDElementGetUsage(element); - unsigned usagePage = IOHIDElementGetUsagePage(element); - long max = IOHIDElementGetPhysicalMax(element); - long min = IOHIDElementGetPhysicalMin(element); - CFStringRef elName = IOHIDElementGetName(element); - - NJInput *input = nil; - - if (!(type == kIOHIDElementTypeInput_Misc - || type == kIOHIDElementTypeInput_Axis - || type == kIOHIDElementTypeInput_Button)) - continue; - - if (max - min == 1 || usagePage == kHIDPage_Button || type == kIOHIDElementTypeInput_Button) { - input = [[NJInputButton alloc] initWithName:(__bridge NSString *)elName - idx:++buttons - max:max]; - } else if (usage == kHIDUsage_GD_Hatswitch) { - input = [[NJInputHat alloc] initWithIndex:++hats]; - } else if (usage >= kHIDUsage_GD_X && usage <= kHIDUsage_GD_Rz) { - input = [[NJInputAnalog alloc] initWithIndex:++axes - rawMin:min - rawMax:max]; - } else { - continue; - } - - // TODO(jfw): Should be moved into better constructors. - input.base = base; - input.cookie = IOHIDElementGetCookie(element); - [children addObject:input]; - } - - CFRelease(elements); - return children; -} - -@implementation NJDevice { - int vendorId; - int productId; -} - -- (id)initWithDevice:(IOHIDDeviceRef)dev { - if ((self = [super init])) { - self.device = dev; - self.productName = (__bridge NSString *)IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDProductKey)); - vendorId = [(__bridge NSNumber *)IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDVendorIDKey)) intValue]; - productId = [(__bridge NSNumber *)IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDProductIDKey)) intValue]; - self.children = InputsForElement(dev, self); - } - return self; -} - -- (NSString *)name { - return [NSString stringWithFormat:@"%@ #%d", _productName, _index]; -} - -- (id)base { - return nil; -} - -- (NSString *)uid { - return [NSString stringWithFormat: @"%d:%d:%d", vendorId, productId, _index]; -} - -- (NJInput *)findInputByCookie:(IOHIDElementCookie)cookie { - for (NJInput *child in _children) - if (child.cookie == cookie) - return child; - return nil; -} - -- (NJInput *)handlerForEvent:(IOHIDValueRef)value { - NJInput *mainInput = [self inputForEvent:value]; - return [mainInput findSubInputForValue:value]; -} - -- (NJInput *)inputForEvent:(IOHIDValueRef)value { - IOHIDElementRef elt = IOHIDValueGetElement(value); - IOHIDElementCookie cookie = IOHIDElementGetCookie(elt); - return [self findInputByCookie:cookie]; -} - -@end