On 24 May 2009, at 14:50, dan trueman wrote:
One would want a way to list all available devices, and make a pick from them. (Like 'chuck --probe' but for HIDs and within the program.)
yes, this would be super useful...
I think this is essentially what the program I mentioned in the other post does. Below is a sample printout, for a Logitech Extreme 3D, which has 12 buttons, x-, y- and z-axis, slider, and hatswitch. As you can see, it writes out a lot information about the product and all its controller elements. Hans ---- --- Device 0 --- IO Registry Path: [ IOService:/MacRISC2PE/pci@f2000000/AppleMacRiscPCI/ usb@18/AppleUSBOHCI/Logitech Extreme 3D@18100000/IOUSBInterface@0/ IOUSBHIDDriver ] - Device Properties - Transport = USB VendorID = 0x46d (1133) ProductID = 0xc215 (49685) VersionNumber = 0x204 (516) Manufacturer = Logitech Product = Logitech Extreme 3D LocationID = 0x18100000 (403701760) PrimaryUsage = 0x4 (4) PrimaryUsagePage = 0x1 (1)- Device Element Properties - Elements = [0] ElementCookie = 0x1 (1) Collection Type (513), CollectionType = 0x1 (1) Usage: Generic Desktop (0x1), Joystick (0x4) Elements = [0] ElementCookie = 0x2 (2) Collection Type (513), CollectionType = 0x2 (2) Usage: Generic Desktop (0x1), X-Axis (0x30) Elements = [0] ElementCookie = 0x4 (4) Button Input Type (2), Usage: Button Page (0x9), Button #1 (0x1) Min = 0x0 (0) Max = 0x1 (1) ScaledMin = 0x0 (0) ScaledMax = 0x1 (1) Size = 0x1 (1) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = false Unit = 0x0 (0) UnitExponent = 0x0 (0) [1] ElementCookie = 0x5 (5) Button Input Type (2), Usage: Button Page (0x9), Button #2 (0x2) Min = 0x0 (0) Max = 0x1 (1) ScaledMin = 0x0 (0) ScaledMax = 0x1 (1) Size = 0x1 (1) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = false Unit = 0x0 (0) UnitExponent = 0x0 (0) [2] ElementCookie = 0x6 (6) Button Input Type (2), Usage: Button Page (0x9), Button #3 (0x3) Min = 0x0 (0) Max = 0x1 (1) ScaledMin = 0x0 (0) ScaledMax = 0x1 (1) Size = 0x1 (1) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = false Unit = 0x0 (0) UnitExponent = 0x0 (0) [3] ElementCookie = 0x7 (7) Button Input Type (2), Usage: Button Page (0x9), Button #4 (0x4) Min = 0x0 (0) Max = 0x1 (1) ScaledMin = 0x0 (0) ScaledMax = 0x1 (1) Size = 0x1 (1) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = false Unit = 0x0 (0) UnitExponent = 0x0 (0) [4] ElementCookie = 0x8 (8) Button Input Type (2), Usage: Button Page (0x9), Button #5 (0x5) Min = 0x0 (0) Max = 0x1 (1) ScaledMin = 0x0 (0) ScaledMax = 0x1 (1) Size = 0x1 (1) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = false Unit = 0x0 (0) UnitExponent = 0x0 (0) [5] ElementCookie = 0x9 (9) Button Input Type (2), Usage: Button Page (0x9), Button #6 (0x6) Min = 0x0 (0) Max = 0x1 (1) ScaledMin = 0x0 (0) ScaledMax = 0x1 (1) Size = 0x1 (1) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = false Unit = 0x0 (0) UnitExponent = 0x0 (0) [6] ElementCookie = 0xa (10) Button Input Type (2), Usage: Button Page (0x9), Button #7 (0x7) Min = 0x0 (0) Max = 0x1 (1) ScaledMin = 0x0 (0) ScaledMax = 0x1 (1) Size = 0x1 (1) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = false Unit = 0x0 (0) UnitExponent = 0x0 (0) [7] ElementCookie = 0xb (11) Button Input Type (2), Usage: Button Page (0x9), Button #8 (0x8) Min = 0x0 (0) Max = 0x1 (1) ScaledMin = 0x0 (0) ScaledMax = 0x1 (1) Size = 0x1 (1) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = false Unit = 0x0 (0) UnitExponent = 0x0 (0) [8] ElementCookie = 0xc (12) Button Input Type (2), Usage: Button Page (0x9), Button #9 (0x9) Min = 0x0 (0) Max = 0x1 (1) ScaledMin = 0x0 (0) ScaledMax = 0x1 (1) Size = 0x1 (1) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = false Unit = 0x0 (0) UnitExponent = 0x0 (0) [9] ElementCookie = 0xd (13) Button Input Type (2), Usage: Button Page (0x9), Button #10 (0xa) Min = 0x0 (0) Max = 0x1 (1) ScaledMin = 0x0 (0) ScaledMax = 0x1 (1) Size = 0x1 (1) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = false Unit = 0x0 (0) UnitExponent = 0x0 (0) [10] ElementCookie = 0xe (14) Button Input Type (2), Usage: Button Page (0x9), Button #11 (0xb) Min = 0x0 (0) Max = 0x1 (1) ScaledMin = 0x0 (0) ScaledMax = 0x1 (1) Size = 0x1 (1) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = false Unit = 0x0 (0) UnitExponent = 0x0 (0) [11] ElementCookie = 0xf (15) Button Input Type (2), Usage: Button Page (0x9), Button #12 (0xc) Min = 0x0 (0) Max = 0x1 (1) ScaledMin = 0x0 (0) ScaledMax = 0x1 (1) Size = 0x1 (1) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = false Unit = 0x0 (0) UnitExponent = 0x0 (0) [12] ElementCookie = 0x10 (16) Miscellaneous Input Type (1), Usage: Generic Desktop (0x1), X-Axis (0x30) Min = 0x0 (0) Max = 0x3ff (1023) ScaledMin = 0x0 (0) ScaledMax = 0x3ff (1023) Size = 0xa (10) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = false Unit = 0x0 (0) UnitExponent = 0x0 (0) [13] ElementCookie = 0x11 (17) Miscellaneous Input Type (1), Usage: Generic Desktop (0x1), Y-Axis (0x31) Min = 0x0 (0) Max = 0x3ff (1023) ScaledMin = 0x0 (0) ScaledMax = 0x3ff (1023) Size = 0xa (10) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = false Unit = 0x0 (0) UnitExponent = 0x0 (0) [14] ElementCookie = 0x12 (18) Miscellaneous Input Type (1), Usage: Generic Desktop (0x1), Hatswitch (0x39) Min = 0x0 (0) Max = 0x7 (7) ScaledMin = 0x0 (0) ScaledMax = 0x13b (315) Size = 0x4 (4) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = true Unit = 0x14 (20) UnitExponent = 0x0 (0) [15] ElementCookie = 0x13 (19) Miscellaneous Input Type (1), Usage: Generic Desktop (0x1), Z-Rotation (0x35) Min = 0x0 (0) Max = 0xff (255) ScaledMin = 0x0 (0) ScaledMax = 0xff (255) Size = 0x8 (8) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = false Unit = 0x0 (0) UnitExponent = 0x0 (0) [16] ElementCookie = 0x14 (20) Miscellaneous Input Type (1), Usage: Generic Desktop (0x1), Slider (0x36) Min = 0x0 (0) Max = 0xff (255) ScaledMin = 0x0 (0) ScaledMax = 0xff (255) Size = 0x8 (8) IsRelative = false IsWrapping = false IsNonLinear = false HasPreferredState = true HasNullState = false Unit = 0x0 (0) UnitExponent = 0x0 (0) ... ----