X-Git-Url: https://git.yukkurigames.com/?a=blobdiff_plain;f=JoystickController.m;h=5056b0ea72971e99dc3ece00ac5f079cad136acb;hb=9ba68ad5a4378bd897fc611929f201681bc71c16;hp=1bf5b4384b16d4ccb560fcd3e72f13e1526ca8d8;hpb=7f9b53485ac2750ac9778b0aaafa62f7bafa251f;p=enjoyable.git diff --git a/JoystickController.m b/JoystickController.m index 1bf5b43..5056b0e 100644 --- a/JoystickController.m +++ b/JoystickController.m @@ -21,20 +21,19 @@ return self; } --(void) finalize { +-(void) dealloc { for(int i=0; i<[joysticks count]; i++) { - [[joysticks objectAtIndex:i] invalidate]; + [joysticks[i] invalidate]; } IOHIDManagerClose(hidManager, kIOHIDOptionsTypeNone); CFRelease(hidManager); - [super finalize]; } static NSMutableDictionary* create_criterion( UInt32 inUsagePage, UInt32 inUsage ) { NSMutableDictionary* dict = [[NSMutableDictionary alloc] init]; - [dict setObject: [NSNumber numberWithInt: inUsagePage] forKey: (NSString*)CFSTR(kIOHIDDeviceUsagePageKey)]; - [dict setObject: [NSNumber numberWithInt: inUsage] forKey: (NSString*)CFSTR(kIOHIDDeviceUsageKey)]; + dict[(NSString*)CFSTR(kIOHIDDeviceUsagePageKey)] = @(inUsagePage); + dict[(NSString*)CFSTR(kIOHIDDeviceUsageKey)] = @(inUsage); return dict; } @@ -53,7 +52,7 @@ BOOL objInArray(NSMutableArray *array, id object) { } void timer_callback(CFRunLoopTimerRef timer, void *ctx) { - JoystickController *jc = (JoystickController *)ctx; + JoystickController *jc = (__bridge JoystickController *)ctx; jc->mouseLoc = [NSEvent mouseLocation]; for (Target *target in [jc runningTargets]) { [target update: jc]; @@ -61,7 +60,7 @@ void timer_callback(CFRunLoopTimerRef timer, void *ctx) { } void input_callback(void* inContext, IOReturn inResult, void* inSender, IOHIDValueRef value) { - JoystickController* self = (JoystickController*)inContext; + JoystickController* self = (__bridge JoystickController*)inContext; IOHIDDeviceRef device = IOHIDQueueGetDevice((IOHIDQueueRef) inSender); Joystick* js = [self findJoystickByRef: device]; @@ -74,7 +73,7 @@ void input_callback(void* inContext, IOReturn inResult, void* inSender, IOHIDVal [mainAction notifyEvent: value]; NSArray* subactions = [mainAction subActions]; if(!subactions) - subactions = [NSArray arrayWithObject:mainAction]; + subactions = @[mainAction]; for(id subaction in subactions) { Target* target = [[self->configsController currentConfig] getTargetForAction:subaction]; if(!target) @@ -121,7 +120,7 @@ int findAvailableIndex(id list, Joystick* js) { for(int index=0;;index++) { available = YES; for(int i=0; i<[list count]; i++) { - js2 = [list objectAtIndex: i]; + js2 = list[i]; if([js2 vendorId] == [js vendorId] && [js2 productId] == [js productId] && [js index] == index) { available = NO; break; @@ -133,10 +132,10 @@ int findAvailableIndex(id list, Joystick* js) { } void add_callback(void* inContext, IOReturn inResult, void* inSender, IOHIDDeviceRef device) { - JoystickController* self = (JoystickController*)inContext; + JoystickController* self = (__bridge JoystickController*)inContext; IOHIDDeviceOpen(device, kIOHIDOptionsTypeNone); - IOHIDDeviceRegisterInputValueCallback(device, input_callback, (void*) self); + IOHIDDeviceRegisterInputValueCallback(device, input_callback, (void*) CFBridgingRetain(self)); Joystick *js = [[Joystick alloc] initWithDevice: device]; [js setIndex: findAvailableIndex([self joysticks], js)]; @@ -155,7 +154,7 @@ void add_callback(void* inContext, IOReturn inResult, void* inSender, IOHIDDevic } void remove_callback(void* inContext, IOReturn inResult, void* inSender, IOHIDDeviceRef device) { - JoystickController* self = (JoystickController*)inContext; + JoystickController* self = CFBridgingRelease(inContext); Joystick* match = [self findJoystickByRef: device]; if(!match) @@ -169,21 +168,18 @@ void remove_callback(void* inContext, IOReturn inResult, void* inSender, IOHIDDe -(void) setup { hidManager = IOHIDManagerCreate( kCFAllocatorDefault, kIOHIDOptionsTypeNone); - NSArray *criteria = [NSArray arrayWithObjects: - create_criterion(kHIDPage_GenericDesktop, kHIDUsage_GD_Joystick), + NSArray *criteria = @[create_criterion(kHIDPage_GenericDesktop, kHIDUsage_GD_Joystick), create_criterion(kHIDPage_GenericDesktop, kHIDUsage_GD_GamePad), - create_criterion(kHIDPage_GenericDesktop, kHIDUsage_GD_MultiAxisController), - //create_criterion(kHIDPage_GenericDesktop, kHIDUsage_GD_Keyboard), - nil]; + create_criterion(kHIDPage_GenericDesktop, kHIDUsage_GD_MultiAxisController)]; - IOHIDManagerSetDeviceMatchingMultiple(hidManager, (CFArrayRef)criteria); + IOHIDManagerSetDeviceMatchingMultiple(hidManager, (CFArrayRef)CFBridgingRetain(criteria)); IOHIDManagerScheduleWithRunLoop( hidManager, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode ); IOReturn tIOReturn = IOHIDManagerOpen( hidManager, kIOHIDOptionsTypeNone ); (void)tIOReturn; - IOHIDManagerRegisterDeviceMatchingCallback( hidManager, add_callback, (void*)self ); - IOHIDManagerRegisterDeviceRemovalCallback(hidManager, remove_callback, (void*) self); + IOHIDManagerRegisterDeviceMatchingCallback( hidManager, add_callback, (__bridge void*)self ); + IOHIDManagerRegisterDeviceRemovalCallback(hidManager, remove_callback, (__bridge void*) self); // IOHIDManagerRegisterInputValueCallback(hidManager, input_callback, (void*)self); // register individually so we can find the device more easily @@ -191,7 +187,7 @@ void remove_callback(void* inContext, IOReturn inResult, void* inSender, IOHIDDe // Setup timer for continuous targets CFRunLoopTimerContext ctx = { - 0, (void*)self, NULL, NULL, NULL + 0, (__bridge void*)self, NULL, NULL, NULL }; CFRunLoopTimerRef timer = CFRunLoopTimerCreate(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent(), 1.0/80.0, @@ -234,13 +230,13 @@ void remove_callback(void* inContext, IOReturn inResult, void* inSender, IOHIDDe - (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item { if(item == nil) - return [joysticks objectAtIndex: index]; + return joysticks[index]; if([item isKindOfClass: [Joystick class]]) - return [[item children] objectAtIndex: index]; + return [item children][index]; if([item isKindOfClass: [JSAction class]]) - return [[item subActions] objectAtIndex:index]; + return [item subActions][index]; return NULL; }