--(void) populateActions {
- NSArray* elements = (NSArray*)CFBridgingRelease(IOHIDDeviceCopyMatchingElements(device, NULL, kIOHIDOptionsTypeNone));
-
- int buttons = 0;
- int axes = 0;
-
- for(int i=0; i<[elements count]; i++) {
- IOHIDElementRef element = (__bridge IOHIDElementRef)elements[i];
- int type = IOHIDElementGetType(element);
- int usage = IOHIDElementGetUsage(element);
- int usagePage = IOHIDElementGetUsagePage(element);
- int max = IOHIDElementGetPhysicalMax(element);
- int min = IOHIDElementGetPhysicalMin(element);
- CFStringRef elName = IOHIDElementGetName(element);
-
-// if(usagePage != 1 || usagePage == 9) {
-// NSLog(@"Skipping usage page %x usage %x", usagePage, usage);
-// continue;
-// }
-
- JSAction* action = NULL;
-
- if(!(type == kIOHIDElementTypeInput_Misc || type == kIOHIDElementTypeInput_Axis ||
- type == kIOHIDElementTypeInput_Button)) {
-
- continue;
- }
-
- if((max - min == 1) || usagePage == kHIDPage_Button || type == kIOHIDElementTypeInput_Button) {
- action = [[JSActionButton alloc] initWithIndex: buttons++ andName: (__bridge NSString *)elName];
- [(JSActionButton*)action setMax: max];
- } else if(usage == 0x39)
- action = [[JSActionHat alloc] init];
- else {
- if(usage >= 0x30 && usage < 0x36) {
- action = [[JSActionAnalog alloc] initWithIndex: axes++];
- [(JSActionAnalog*)action setOffset: (double)-1.0];
- [(JSActionAnalog*)action setScale: (double)2.0/(max - min)];
- } else
- continue;
- }
-
- [action setBase: self];
- [action setUsage: usage];
- [action setCookie: IOHIDElementGetCookie(element)];
- [children addObject:action];
- }