Show an error message if opening input devices fail. Move real vs. configuration...
[enjoyable.git] / Joystick.m
index a65304e..7870ce0 100644 (file)
@@ -7,6 +7,11 @@
 
 #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)];
@@ -32,13 +37,13 @@ static NSArray *ActionsForElement(IOHIDDeviceRef device, id base) {
         
         if (max - min == 1 || usagePage == kHIDPage_Button || type == kIOHIDElementTypeInput_Button) {
             action = [[JSActionButton alloc] initWithName:(__bridge NSString *)elName
-                                                      idx:buttons++
+                                                      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++
+            action = [[JSActionAnalog alloc] initWithIndex:++axes
                                                     offset:-1.f
                                                      scale:2.f / (max - min)];
         } else {
@@ -74,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 {