X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=Joystick.m;h=7870ce0589ec6e6a44f0d54790726eb0bf664d0b;hp=9f3c8265688564acc0d6c1df615e55fc7b7cb2a4;hb=dd1f684886c2809133356bb9b335a35293e8849e;hpb=fad073260e61084c4962e172c58a0595261bd811 diff --git a/Joystick.m b/Joystick.m index 9f3c826..7870ce0 100644 --- a/Joystick.m +++ b/Joystick.m @@ -5,6 +5,13 @@ // Created by Sam McCall on 4/05/09. // +#import "Joystick.h" + +#import "JSAction.h" +#import "JSActionAnalog.h" +#import "JSActionButton.h" +#import "JSActionHat.h" + static NSArray *ActionsForElement(IOHIDDeviceRef device, id base) { CFArrayRef elements = IOHIDDeviceCopyMatchingElements(device, NULL, kIOHIDOptionsTypeNone); NSMutableArray *children = [NSMutableArray arrayWithCapacity:CFArrayGetCount(elements)]; @@ -21,30 +28,31 @@ static NSArray *ActionsForElement(IOHIDDeviceRef device, id base) { int min = IOHIDElementGetPhysicalMin(element); CFStringRef elName = IOHIDElementGetName(element); - JSAction *action = NULL; + JSAction *action = nil; - if(!(type == kIOHIDElementTypeInput_Misc - || type == kIOHIDElementTypeInput_Axis - || type == kIOHIDElementTypeInput_Button)) - continue; + if (!(type == kIOHIDElementTypeInput_Misc + || type == kIOHIDElementTypeInput_Axis + || type == kIOHIDElementTypeInput_Button)) + continue; if (max - min == 1 || usagePage == kHIDPage_Button || type == kIOHIDElementTypeInput_Button) { - action = [[JSActionButton alloc] initWithIndex:buttons++ andName:(__bridge NSString *)elName]; - [(JSActionButton*)action setMax:max]; + action = [[JSActionButton alloc] initWithName:(__bridge NSString *)elName + idx:++buttons + max:max]; } else if (usage == kHIDUsage_GD_Hatswitch) { action = [[JSActionHat alloc] init]; + } else if (usage >= kHIDUsage_GD_X && usage <= kHIDUsage_GD_Rz) { + // TODO(jfw): Scaling equation doesn't seem right if min != 0. + action = [[JSActionAnalog alloc] initWithIndex:++axes + offset:-1.f + scale:2.f / (max - min)]; } else { - if (usage >= kHIDUsage_GD_X && usage <= kHIDUsage_GD_Rz) { - action = [[JSActionAnalog alloc] initWithIndex: axes++]; - [(JSActionAnalog*)action setOffset:(double)-1.0]; - [(JSActionAnalog*)action setScale:(double)2.0/(max - min)]; - } else - continue; + continue; } - [action setBase:base]; - [action setUsage:usage]; - [action setCookie:IOHIDElementGetCookie(element)]; + // TODO(jfw): Should be moved into better constructors. + action.base = base; + action.cookie = IOHIDElementGetCookie(element); [children addObject:action]; } return children; @@ -71,16 +79,15 @@ static NSArray *ActionsForElement(IOHIDDeviceRef device, id base) { } - (NSString *)name { - return [NSString stringWithFormat:@"%@ #%d", productName, index + 1]; + return [NSString stringWithFormat:@"%@ #%d", productName, index]; } - (id)base { - // FIXME(jfw): This is a hack because actions get joysticks as their base. return nil; } -- (NSString *)stringify { - return [[NSString alloc] initWithFormat: @"%d~%d~%d", vendorId, productId, index]; +- (NSString *)uid { + return [NSString stringWithFormat: @"%d:%d:%d", vendorId, productId, index]; } - (JSAction *)findActionByCookie:(void *)cookie {