#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);
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];
+ 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)];
+ action = [[JSActionAnalog alloc] initWithIndex:++axes
+ rawMin:min
+ rawMax:max];
} else {
continue;
}
}
- (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 {