X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=Joystick.m;h=ae278b30b3094527adaee68d0efa9ba818df55be;hp=861ab8d8bc1c44459d22f6515c077cb22aa21b51;hb=c262a3d0972ba16257fd24a948ab04f528f80d33;hpb=3f6df7a954fb74bcebf6fc6c0e60821843b0f31b diff --git a/Joystick.m b/Joystick.m index 861ab8d..ae278b3 100644 --- a/Joystick.m +++ b/Joystick.m @@ -7,12 +7,18 @@ #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)]; int buttons = 0; int axes = 0; + int hats = 0; for (int i = 0; i < CFArrayGetCount(elements); i++) { IOHIDElementRef element = (IOHIDElementRef)CFArrayGetValueAtIndex(elements, i); @@ -35,12 +41,11 @@ static NSArray *ActionsForElement(IOHIDDeviceRef device, id base) { idx:++buttons max:max]; } else if (usage == kHIDUsage_GD_Hatswitch) { - action = [[JSActionHat alloc] init]; + action = [[JSActionHat alloc] initWithIndex:++hats]; } 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)]; + rawMin:min + rawMax:max]; } else { continue; } @@ -50,6 +55,8 @@ static NSArray *ActionsForElement(IOHIDDeviceRef device, id base) { action.cookie = IOHIDElementGetCookie(element); [children addObject:action]; } + + CFRelease(elements); return children; } @@ -78,12 +85,11 @@ static NSArray *ActionsForElement(IOHIDDeviceRef device, id base) { } - (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 {