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);
- int usage = IOHIDElementGetUsage(element);
- int usagePage = IOHIDElementGetUsagePage(element);
- int max = IOHIDElementGetPhysicalMax(element);
- int min = IOHIDElementGetPhysicalMin(element);
+ unsigned usage = IOHIDElementGetUsage(element);
+ unsigned usagePage = IOHIDElementGetUsagePage(element);
+ long max = IOHIDElementGetPhysicalMax(element);
+ long min = IOHIDElementGetPhysicalMin(element);
CFStringRef elName = IOHIDElementGetName(element);
JSAction *action = nil;
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;
}
action.cookie = IOHIDElementGetCookie(element);
[children addObject:action];
}
+
+ CFRelease(elements);
return children;
}
-@implementation Joystick
-
-@synthesize vendorId;
-@synthesize productId;
-@synthesize productName;
-@synthesize index;
-@synthesize device;
-@synthesize children;
+@implementation Joystick {
+ int vendorId;
+ int productId;
+}
- (id)initWithDevice:(IOHIDDeviceRef)dev {
if ((self = [super init])) {
self.device = dev;
self.productName = (__bridge NSString *)IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDProductKey));
- self.vendorId = [(__bridge NSNumber *)IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDVendorIDKey)) intValue];
- self.productId = [(__bridge NSNumber *)IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDProductIDKey)) intValue];
+ vendorId = [(__bridge NSNumber *)IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDVendorIDKey)) intValue];
+ productId = [(__bridge NSNumber *)IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDProductIDKey)) intValue];
self.children = ActionsForElement(dev, self);
}
return self;
}
- (NSString *)name {
- return [NSString stringWithFormat:@"%@ #%d", productName, index];
+ return [NSString stringWithFormat:@"%@ #%d", _productName, _index];
}
- (id)base {
}
- (NSString *)uid {
- return [NSString stringWithFormat: @"%d:%d:%d", vendorId, productId, index];
+ return [NSString stringWithFormat: @"%d:%d:%d", vendorId, productId, _index];
}
-- (JSAction *)findActionByCookie:(void *)cookie {
- for (JSAction *child in children)
+- (JSAction *)findActionByCookie:(IOHIDElementCookie)cookie {
+ for (JSAction *child in _children)
if (child.cookie == cookie)
return child;
return nil;
- (JSAction *)actionForEvent:(IOHIDValueRef)value {
IOHIDElementRef elt = IOHIDValueGetElement(value);
- void *cookie = IOHIDElementGetCookie(elt);
+ IOHIDElementCookie cookie = IOHIDElementGetCookie(elt);
return [self findActionByCookie:cookie];
}