multiple identical HID devices on a Mac
Has anyone used multiple identical HID devices in MaxMSP on a mac without problems? I’m trying it but have problems:
In an installation I’m using multiple identical HID devices (18 trackballs) connected through a collection of USB hubs to one mac running MaxMSP. In MaxMSP I use multiple instances of the ‘hi’ object to receive all the controller data.
18 trackballs – Logitech Trackman Marble
7 USB hubs with external powersupplies
Apple Mac mini "Core 2 Duo" 2.26 (Late 2009)
Each hi-object fills its umenu correctly with the 18 trackballs named "Trackball 1", "Trackball 2", Trackball 3", etc. so I can assign each trackball to its own hi-object. The problem is that each time the computer is restarted the numbering of the trackball-names in the umenus refer to different physical trackballs.
1. I’ve tried other hid drivers then the default ones provided by OSX (USB overdrive 301, Logitech Control Center lcc320) but with the same result.
2. I’ve searched for an alternative max-external for the hi-object on maxobjects.com but didn’t find any.
3. I’ve tried different USB hubs with more than enough external power to drive all the trackballs. Doesn’t seem to be the issue.
4. I’ve tried with 3 trackballs connected – same issue.
Has anyone used multiple identical HID devices in MaxMSP and was that with or without such problems?
Does anyone have a suggestion how to solve this?
I’ve done some additional testing with the USB devices and hubs, connecting them in different ways and checking the way they are reported in System Profiler and by the hi-object in MaxMSP. System Preferences shows a lot more detailed information about connected usb peripherals than the hi-object.
To OSX, the trackballs seem to be indistinguishable from each other. They have no unique ID or something. The USB-ports on the Mac as well as on the USB hubs however, seem to have unique Location IDs. So, OSX can distinguish identical USB devices by the USB-port through which they are connected to the computer.
Sadly, the hi-object in MaxMSP only reports names of connected USB HID devices, not its location IDs. And the names given by the hi-object to identical USB devices aren’t reliable to distinguish those devices from each other since the order* in which they are registered in the OS as being connected is different every time you restart the computer or reconnect USB-plugs.
To me it seems the only way to solve this is to use an alternative to the hi-object that can report the location IDs of the available USB HID devices. I haven’t found this on the internets, though. – Or to ask/stimulate/pressure Cycling’74 to add ability to report location IDs to the hi-object.
If anyone can confirm, add to or rebuke this, I’d love to hear it. (I’m somewhat surprised I can’t find anything else about this issue in this forum. I’m surely not the only* one using multiple identical USB controllers with MaxMSP).
I ran into this problem several years ago, using multiple identical game controllers in an installation. The only solution we could come up with was to go through an initialization process at the beginning of each day – we would identify each controller by creating gestural data with each and storing the information in a lookup table. That way the data would be routed correctly no matter what position in the hi devices list.
I do agree that Cycling could provide more detail about devices in the hi object, but I doubt it’s a high priority.
I don’t know whether people from Puce Muse in Paris read these forums but they organize concerts with joysticks so I guess they must have an idea.
Thanks for your response.
For now, I am also using a somewhat cumbersome initialization process which involves receiving control data from the usb devices and then remapping it. It’s realy an ugly hack though, since it’s a permanent installation…
I would disagree with improving the hi-object being a low priority for Cycling. At least, it shouldn’t be. So many people use MaxMSP for making a connection between computer and the physical world.
we have the same behavior here at Puce Muse. each time we start the patch we have to assign manually each interface to the right player.
there’s no way to memorize these settings. this behavior seems to come from the operating system and not from max.
i’ve also implemented a patch that remaps automatically the hi devices when data is sent. (the first to send something will be player 1 etc…) so the device affectation becomes more simple.
Thanks Roald and Guillaume, for replying.
It’s true that the order in which the usb devices get registered in the OS is unpredictable. This might also be a limitation of the USB standard though, I don’t know. Either way, this causes the hi-object at every startup to give a different numbering to the actual devices.
But the hi-object doesn’t report the Location Ids of the connected devices. That seems to me to be a limitation of the hi-object only.
Maybe Cycling could put this on their feature-todo-list.
Sorry for the necromancy, but in case this is still an issue for anyone, I just wanted to mention that I wrote a replacement for the hi object which offers a lot more flexibility. In particular, it allows identifying devices by location ID. Give it a try:
Thanks for posting this, very cool!