Broken: wired Xbox One controller, Linux server to Windows 10 client

I cannot get the Xbox One to be shared from Linux to Windows 10.

Linux running vhusbdx86_64 v3.3.9. Windows 10 running vhui64 4.2.5.

If I use the defaults in config.ini, the client shows a brief "in use by you" and then disconnects, and I get this on the server:

Sat Sep 23 13:03:57 2017 LOG_INFO Found Full speed device [045e:02ea] "Microsoft, Controller" at address 32
Sat Sep 23 13:04:04 2017 LOG_INFO Device 32 [045e:02ea] BOUND to connection 3
Sat Sep 23 13:04:04 2017 LOG_INFO Device 32 [045e:02ea] SURPRISE UNBOUND from connection 3
Sat Sep 23 13:04:04 2017 LOG_INFO Unmanaging device 32 [045e:02ea]
Sat Sep 23 13:04:05 2017 LOG_INFO Found Full speed device [045e:02ea] "Microsoft, Controller" at address 32

I tried turning on ClaimPorts=1 in config.ini, and though I don't get disconnected, the controller still does not appear on the Windows box. Also of interest is that in ClaimPorts mode the controller's light is off when connected to the Linux box. If I press the controller's Xbox button it flashes but nothing else happens. I get this on the server:

Sat Sep 23 13:09:44 2017 LOG_INFO Found Full speed device [045e:02ea] "Microsoft, Controller" at address 32
Sat Sep 23 13:09:48 2017 LOG_INFO Unmanaging device 32 [045e:02ea]
Sat Sep 23 13:09:49 2017 LOG_INFO Found Full speed device [045e:02ea] "Microsoft, Controller" at address 32
Sat Sep 23 13:09:52 2017 LOG_INFO Device 32 [045e:02ea] BOUND to connection 1
Sat Sep 23 13:10:08 2017 LOG_WARNING Warning, Clear halt has 1 inflight urbs when clearing halt on ep 0x02 for device 32
Sat Sep 23 13:10:08 2017 LOG_WARNING Warning, resetEP has 1 inflight urbs ep 0x02 for device 32
Sat Sep 23 13:10:23 2017 LOG_WARNING Warning, Clear halt has 1 inflight urbs when clearing halt on ep 0x02 for device 32
Sat Sep 23 13:10:23 2017 LOG_WARNING Warning, resetEP has 1 inflight urbs ep 0x02 for device 32

The bottom line is that it does not work in either mode. :( I'm using VirtualHere trial now, really hoping to get this to work so that I can buy it!

#2

OK try this

right click on the XBox Controller in the virtualhere client and select 'Custom Event Handler..." then paste in this line:

onReset.$VENDOR_ID$.$PRODUCT_ID$=

then press OK. Now replug the xbox controller and try to use it via virtualhere. does it work ok now?

#3

Thanks. With the onReset hook I don't get disconnects, the client machine does not see the controller. Log:
Sun Sep 24 16:41:27 2017 LOG_DEBUG 192.168.1.2 connected as connection 1
Sun Sep 24 16:41:35 2017 LOG_INFO Executed "" for onReset.045e.02ea
Sun Sep 24 16:41:35 2017 LOG_INFO Device 32 [045e:02ea] BOUND to connection 1

I'm noticing something strange: on the Windows 10 client machine the controller *does* appear in the control panel, but no game or testing software recognizes that a controller is connected.

#4

OK, with the onReset handler I'm no longer getting disconnected, but the Windows 10 client is still not showing the Xbox One controller. Interestingly, I am seeing a controller connected in the control panel, but no game or testing app acknowledges that a controller is connect.

Server log:

Sun Sep 24 16:41:27 2017 LOG_DEBUG 192.168.1.2 connected as connection 1
Sun Sep 24 16:41:35 2017 LOG_INFO Executed "" for onReset.045e.02ea
Sun Sep 24 16:41:35 2017 LOG_INFO Device 32 [045e:02ea] BOUND to connection 1

#5

Can you press the middle xbox button to wake the controller..

#6

I tried all the buttons, including the Xbox button. The light is already lit anyway, so I guess it's already awake. Any other ideas? Anything I can send you to help debug?

#7

Ive been testing with my xbox one wireless connected via usb, Its not the identical controller but it does work. What i do is make sure that the xbox controller firmware is fully updated, you can do this by plugging the xbox controller directly into the computer then getting the "XBOX Accessories" app from the windows store then seeing if there is a firmware update for your controller. Sometime there is and this can fix issues like you are having.

#8

Thanks, but I already did that. Could you try to connect your Xbox One controller directly via a USB cable to duplicate my scenario?

Again, I'll emphasize that it seems to *almost* work. On Windows 10, I do see a "Game Controller" in my device manager. But nothing appears on the list of game controllers for Settings->Games, and no application can see it.

#9

Yes i did that and it works fine,... im not sure what the issue is unfortunately with your controller..

#10

Thanks for trying, I guess I will have to look at other products.

By the way, if that onReset handler is required for Xbox One controllers, I recommend you made it a default in your software. Very few potential customers would think to try something like that if it doesn't immediately work.

#11

OK, some more testing and I made some curious progress. I removed the device on the Windows 10 client, and then tried to re-add it again. When it didn't work, I tried the "Troubleshoot" option and Windows said: "Xbox Controller is an older USB device and might not work with USB 3.0." Does this give you an idea where the problem might be?

#12

Interesting, do you have a USB 2.0 port on your pc? (USB 3 ports are usually blue inside) If so plug it into one of the usb 2 ports. Or maybe if you have a USB 2 hub plug the hub into a usb 3 port then the controller into the hub

#13

Of course that was the first thing I thought of, but no. :) Both my client and server machines only have USB 3 ports. And I also tried a USB 2 hub, same effect. (Well, the USB controller is still USB 3.0, which I think is the main issue.)

I'm curious to why this would matter. After all, the USB device is emulated via the Windows 10 driver, no? I have to imagine there is a bug there somewhere. Why would Windows think this is a USB version issue?

My Windows 10 machine is a very clean install (Pro, 64bits) updated just today to the latest Microsoft update.

#14

Ok let me see if i can fix this once and for all, i think if i disable the device first then reenable i think it might workaround this issue, ill try it now and let you know...

#16

Yes i will do this in the next update available in a day or two

#17

I have been testing this and unfortunately the method i thought i could use wont work. I was hoping to disable the device (to disconnect any current programs using the device) then re-enable the device then let virtualhere grab it. However this wont work because disabling the device when its in use by another program will force windows to require a reboot, so it doesnt really help the issue. I was hoping to avoid the reboot then it would be easier to grab from another program.

#18

Well, if there is anything I can do to help you test, I'm very happy to!

#19

I went and bought this exact controller so i can test it here locally, im going to do that in the next few days...

#20

You're a hero. :) To be clear, my model is the newer Xbox One controller that was released with the Xbox One S. It supports both USB and Bluetooth. I would imagine that in terms of USB, though, it works identically to the original Xbox One controller.

#21

Yeah thats the one i got, the one with the bluetooth.

#22

OK i spent some more time on this, it seems there is some special command that switches a firmware mode on controller boot which is not passable via virtualhere. My guess at this point is that the xbox one controller detects if its connect to a windows device and if so switches to a certain mode and then boots itself. Since you are connecting to linux first it switches to some mode that cant be passed through via virtualhere. Thats as far as i got.

I could pass the controller but only by first plugging in a bluetooth dongle (DLINK f8t065) and then using that via virtualhere and syncing the controller to that and then it worked ok as a "Bluetooth XINPUT Compatible Input Device" (thats what it says in joy.cpl)

So for the time being it doesnt seem to want to work directly via virtualhere

#23

Thanks, that's very informative. I would recommend perhaps putting the above info in the FAQ to avoid repeat questions about it, because I imagine it's a common use case.