Multiple Teensy LC Game Controllers at a time on Windows

Status
Not open for further replies.

Brion Sohn

Well-known member
I tried searching the forum but have not found anything on this..But here is the issue:

On windows 10 Pro (latest updates) -

#1 - I hook up a Teensy LC setup in Keyboard/Game Controller/Mouse it downloads all of the drivers and works perfectly..
#2 - I then I unplug it and plug in a different Teensy LC with the exact same program and windows will not allow it to work. It shows up but testing properties are locked and I get a line about calibration.
#3 - I plug the original Teensy Back in and it works perfectly

On windows 7 Pro -

#1 - I hook up a Teensy LC setup in Keyboard/Game Controller/Mouse it downloads all of the drivers and works perfectly..
#2 - I then I unplug it and plug in a different Teensy LC (same second one as with the Win10 example) with the exact same program and it loads and works perfectly..
#3 - I plug in BOTH Teensy LC's and the first one works fully but the second one windows will not allow it to work. It shows up but testing properties are locked and I get a line about calibration. in the same way Windows 10 does.

So what I have deduced by this is that there is a conflict when having two Teensy LC's in Keyboard/Game Controller/Mouse mode connected to the computer at the same time AND Windows 10 doesn't fully forget the first instance of the Teensy so that conflict shows up EVEN if the first one is not attached.

Problem is I would like to be able to connect two of these at the same time and have them run as independent game controllers..

Any ideas as to what is happening or what can be altered with the Teensy to allow two of them to run at the same time on the same Windows computer..

Thank you
Brion Sohn

EDIT - I was doing some checking around on the devices and I found that the error I am getting is the following " not migrated due to partial or ambiguous match"
 
Last edited:
Is the latest TeensyDuino 1.42 installed? Not sure it changes anything - but that is what changes would be based off of. USB startup does get some new info from device - but that is the Teensy type - which would be the same with both being LC's.

Not sure if these USB types include Serial# of Teensy in the connect transfer? It seems the USB connect info isn't passing Windows 'unique device recognition' to differentiate them. What happens if you add 'Serial' option 'Keyboard/Game Controller/Mouse'?
 
Is the latest TeensyDuino 1.42 installed? Not sure it changes anything - but that is what changes would be based off of. USB startup does get some new info from device - but that is the Teensy type - which would be the same with both being LC's.

Not sure if these USB types include Serial# of Teensy in the connect transfer? It seems the USB connect info isn't passing Windows 'unique device recognition' to differentiate them. What happens if you add 'Serial' option 'Keyboard/Game Controller/Mouse'?

I am not sure on the TeensyDuino as I have not installed anything regarding the teensy on the test computers so it is running off of the Native Windows USB HID Drivers.. Is there a specific Teensy Driver?? Can you point me in the direction of that..

and I will try the adding Serial and see if it changes things a bit..

I was sort of wondering about the serial Number not being transferred causing it to think it was the same device but with a discrepancy causing issue. Is there any way to alter a serial number through the usb.c (where you can alter the name) as I can always give it a certain serial number if that would work?
 
Is there a specific Teensy Driver??

For HID, no. The built in Windows HID driver is always used.

For Serial (technically called CDC ACM protocol) on Windows 10, Mac and Linux, drivers built into the operating system are used. On Windows the driver is USBSER.SYS. For Windows XP, 7 & 8, USBSER.SYS is also used for Serial, but Microsoft in their infinite wisdom didn't provide an "INF" file to cause their own driver to load until Windows 10 (probably because USBSER.SYS was so buggy in all prior versions). So when you run the installer for the first time on those older Windows system, Teensyduino does a "driver" install step, which is really just adding that INF to tell Windows to use USBSER.SYS. When you run the installer on Windows 10, it will detect that the Windows 10 "driver" is present and always skip that step.

But that's Serial. For HID, on all versions of Windows, Mac and Linux, the built-in HID drivers are used. There's never a driver install for HID.
 
For HID, no. The built in Windows HID driver is always used.

For Serial (technically called CDC ACM protocol) on Windows 10, Mac and Linux, drivers built into the operating system are used. On Windows the driver is USBSER.SYS. For Windows XP, 7 & 8, USBSER.SYS is also used for Serial, but Microsoft in their infinite wisdom didn't provide an "INF" file to cause their own driver to load until Windows 10 (probably because USBSER.SYS was so buggy in all prior versions). So when you run the installer for the first time on those older Windows system, Teensyduino does a "driver" install step, which is really just adding that INF to tell Windows to use USBSER.SYS. When you run the installer on Windows 10, it will detect that the Windows 10 "driver" is present and always skip that step.

But that's Serial. For HID, on all versions of Windows, Mac and Linux, the built-in HID drivers are used. There's never a driver install for HID.

OK that is sort of what I thought.. I have done some reading and though older it seems like it is the root of my issues in that when Windows enumerates an HID device it decides whether to determine it by Serial Number or by Install number and it defaults to install number if no serial number is found..

What seems to be happening is that it is probably installing the HID Device by Serial number and if I am correct the teensy must all have that same serial number and therefore It is being seen as the same device (only Different) rather than a completely new instance of a device..

So I am not sure where what or how to get each device to show up as a completely separate entity..

The weird thing is that under Devices and Printers on Win10 and on Win 7 Pro they do show up as completely separate devices but somewhere in the HID stuff it is not allowing it to come up as a totally separate device and it is shutting down the HID interface via the non-migration.

So basically I am completely confused as to how to get these to show up as completely independent functioning devices..

As I mentioned the HID Device installs for the first one then it semi disables the second one in windows 10 regardless of the first one being connected and in Win 7 Pro it is fine with each one connected independently but does what windows 10 does when both are connected together..

I'm just at a loss but i do have to figure this out..

So basically I will try just about anything (within reason)...
 
Was the idea in post #2 tried?

Each { 32 bit (edit)} Teensy has a unique serial#, but it may not be presented with 'Keyboard/Game Controller/Mouse' changing to 'Serial + Keyboard + Game Controller + Mouse' might change that.
 
Last edited:
All 32 bit Teensy boards have a unique serial number. That's Teensy LC, 3.2, 3.5 & 3.6, and also the discontinued 3.0 and 3.1. Every one of those 6 models has a unique number.

The 8 bit Teensy boards do *not* have unique serial numbers.
 
Was the idea in post #2 tried?

Each { 32 bit (edit)} Teensy has a unique serial#, but it may not be presented with 'Keyboard/Game Controller/Mouse' changing to 'Serial + Keyboard + Game Controller + Mouse' might change that.

OK well I have tested with serial enabled.. and it appears that is what Windows 10 needs for independent devices.. It actually appears that it does even MORE than just sending the serial number as in the Game Controllers Testing window where the devices are listed it ALSO puts the name of the device that you specify instead of the Generic Keyboard/Joystick/Mouse naming..

I that Serial seems like it fixed two things at one time..

It is just weird as before that I tested on my Mac and the Mac had no issue with identifying each device independently with full function on the standard..

I than you for your help and YES it works.
 
… very welcome …

For whatever historical reason MSFT did USB as they do. They want a positive device ID to tie to recognize it in future. As postulated it seems the 'Serial' ID descriptor of the Teensy includes the Serial# in a way that makes Windows logic work to ID and differentiate the device. The other types somehow don't provide the needed info - or are not given the same treatment. Once it has a positive ID on the device perhaps Windows trusts to name it.

Perhaps Paul can say if this is understood and expected behavior or if there is some malleable descriptor element that would make Windows happy without adding 'Serial'.

Mac … it's just different.
 
… very welcome …

For whatever historical reason MSFT did USB as they do. They want a positive device ID to tie to recognize it in future. As postulated it seems the 'Serial' ID descriptor of the Teensy includes the Serial# in a way that makes Windows logic work to ID and differentiate the device. The other types somehow don't provide the needed info - or are not given the same treatment. Once it has a positive ID on the device perhaps Windows trusts to name it.

Perhaps Paul can say if this is understood and expected behavior or if there is some malleable descriptor element that would make Windows happy without adding 'Serial'.

Mac … it's just different.

Yea it just seemed weird to me.. But I like the results Because I like having the actual name in the Joystick Properties area as well.. I would love to drop the Keyboard and the Mouse Descriptors off of it as well BUT I have only found information on doing this with the Teensy 3.1 AND I am beginner with these enough where i am not sure of the path they are going to in order to actually modify the USB descriptor file.. and what they are using as from what I gather it cannot be done through the normal Arduino programming set-up.

Interesting thing is that with the Serial enabled on the Teensy LC it also has reverted to requiring the Button press for Program upload instead of automatic upload.. Just oddities not a concern there.. I have now tested with three different units connected and all seems to be working fine (Except my own issue of killing a couple of pin inputs on one of the Teensy's I have (though I am not sure how I did it) but I was trying lots of things in development sooooo.. it is possible I over volted them or shorted them in some manner.

Anyway your suggestion what right on track..
 
Status
Not open for further replies.
Back
Top