Logitech G29 Help

Hello, trying to use my Logitech G29 though VH. However, when I'm using it on my Nvidia Shield TV Pro 2019 Model, while using Game Stream and VH to pass through USB, the wheel does not calibrate properly.

When I connect the wheel to the Shield TV, it calibrates as expected, and the force feedback feels normal, applying a light feedback within just 1-2* of rotation. However, once I take control of the device on my desktop, it goes through it's normal self calibration again, and the degree input is all wrong. When I turn the wheel 90* in either direction, there's zero force feedback. Anything beyond that, and the wheel is applying full feedback and extremely hard to turn, as if at full lock. If I open the Logitech Gaming Software, and look at the wheel input, it shows that just turning the wheel that initial 90* where there's no feedback, is inputting it as making the wheels full 450* rotation in either direction. Pedals, H Shift and all button work fine though.

I've tried manually calibrating it via Control Panel>Devices and Printers>Logitech G29, but it still is only seeing the 90* input in that menu.

However, the wheel works perfectly fine in every other situation I've tested it in.
It works fine when connected locally to the desktop PC (I've owned the wheel for about a year and have never had issues with it. PC is also very new, 3600X CPU, 2060 KO, 32GB, 1TB NVMe, etc)
It works fine when connected to my Nvidia Shield and not passed through VH.
It works fine when connected to my laptop, running Win10 21H1. I can also use VH on my laptop to pass it through to my desktop, and the wheel works fine there. I've tested this in game, and it works fine. A fine temporary work around, but not a solution.
It also works on my SteamLink with VH, however, due to it's slow processor, it's not an option. That's literally the reason I purchased the Nvidia Shield, because my house caused lag at 500hz input.

I've tried multiple different combo's of connecting the wheel. Via a USB3 hub, directly connected to a USB port on the shield, restarting the PC while the wheel was connected via VH, with auto start and auto use device enabled, restarting the Shield with everything connected, reinstall the app in all locations multiple times, with reboots in between, etc.

VH works fine with everything else, on every platform. I use a Logitech Extreme3D flight stick, a Logitech G602 mouse, a Corsair K63 keyboard, and some other various devices from time to time. Usually a very good experience.

My entire network is hardwired where the devices support it, via a 48 port HPE gigabit switch. I did however, test via Wifi and the same thing happens. Using a Ubiquti AP.

I'm not providing any logs, as I figured I'd way to see what specific logs you might want. One other point worth noting. When attempting to calibrate the wheel via the Control Panel method, I can see the input degree sent in the 16-bit digit (65536) and it's completely different from when it's working properly. i.e. - when working and the wheel is turned, there's only a few bits showing as input. However, when connected via Sheild/VH, a slight input shows a massive change in the bit input.

#2

Thanks for the very detailed information.

It is possible to plug the wheel into the shield, try to use it via virtualhere and then send me the System Messages log from the Android App by clicking on the menu at the top right of the Android App and selecting System Messages->Copy to clipboard and somehow paste into an email to me if possible?

#3

--------- beginning of main
12-21 20:13:21.343 7432 7432 W ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@36529ee
12-21 20:13:21.347 7432 7670 I vhusbd : Tue Dec 21 20:13:21 2021 LOG_INFO Found Full speed device [1b1c:1b8f] "CORSAIR, CORSAIR K63 Wireless USB Receiver" at address 1012
12-21 20:13:21.565 7432 7670 I vhusbd : Tue Dec 21 20:13:21 2021 LOG_INFO Device 1012 [1b1c:1b8f] BOUND to connection 1
12-21 20:13:21.857 7432 7670 I vhusbd : Tue Dec 21 20:13:21 2021 LOG_INFO Found Full speed device [046d:c52b] "Logitech, USB Receiver" at address 1013
12-21 20:13:21.988 7432 7432 W ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@34cc708
12-21 20:13:22.195 7432 7432 W ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@2e5ea9e
12-21 20:13:22.199 7432 7670 I vhusbd : Tue Dec 21 20:13:22 2021 LOG_INFO Found Full speed device [046d:c260] "Logitech, G29 Driving Force Racing Wheel" at address 1014
12-21 20:13:22.267 7432 7670 I vhusbd : Tue Dec 21 20:13:22 2021 LOG_INFO Executed "" for onReset.046d.c260
12-21 20:13:22.267 7432 7670 I vhusbd : Tue Dec 21 20:13:22 2021 LOG_INFO Device 1014 [046d:c260] BOUND to connection 1
12-21 20:13:22.469 7432 7670 I vhusbd : Tue Dec 21 20:13:22 2021 LOG_INFO Executed "" for onReset.046d.c260
12-21 20:13:22.736 7432 7670 I vhusbd : Tue Dec 21 20:13:22 2021 LOG_INFO Device 1014 [046d:c260] SURPRISE UNBOUND from connection 1
12-21 20:13:22.736 7432 7670 I vhusbd : Tue Dec 21 20:13:22 2021 LOG_INFO Unmanaging device 1014 [046d:c260]
12-21 20:13:23.213 7432 7670 I vhusbd : Tue Dec 21 20:13:23 2021 LOG_INFO Found Full speed device [046d:c24f] "Logitech, G29 Driving Force Racing Wheel" at address 1015
12-21 20:13:23.339 7432 7432 W ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@b051195
12-21 20:13:33.275 7432 7670 I vhusbd : Tue Dec 21 20:13:33 2021 LOG_INFO Unmanaging device 1015 [046d:c24f]
12-21 20:13:37.156 7432 7670 I vhusbd : Tue Dec 21 20:13:37 2021 LOG_INFO Found Full speed device [046d:c260] "Logitech, G29 Driving Force Racing Wheel" at address 1016
12-21 20:13:37.156 7432 7432 W ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@440238
12-21 20:13:37.188 7432 7442 W System : A resource failed to call close.
12-21 20:13:37.189 7432 7442 W System : A resource failed to call close.
12-21 20:13:37.232 7432 7670 I vhusbd : Tue Dec 21 20:13:37 2021 LOG_INFO Executed "" for onReset.046d.c260
12-21 20:13:37.233 7432 7670 I vhusbd : Tue Dec 21 20:13:37 2021 LOG_INFO Device 1016 [046d:c260] BOUND to connection 1
12-21 20:13:37.446 7432 7670 I vhusbd : Tue Dec 21 20:13:37 2021 LOG_INFO Executed "" for onReset.046d.c260
12-21 20:13:37.581 7432 7670 I vhusbd : Tue Dec 21 20:13:37 2021 LOG_INFO Device 1016 [046d:c260] SURPRISE UNBOUND from connection 1
12-21 20:13:37.582 7432 7670 I vhusbd : Tue Dec 21 20:13:37 2021 LOG_INFO Unmanaging device 1016 [046d:c260]
12-21 20:13:38.173 7432 7670 I vhusbd : Tue Dec 21 20:13:38 2021 LOG_INFO Found Full speed device [046d:c24f] "Logitech, G29 Driving Force Racing Wheel" at address 1017
12-21 20:13:38.225 7432 7432 W ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@e12d977
12-21 20:15:00.093 7432 7670 I vhusbd : Tue Dec 21 20:15:00 2021 LOG_INFO Executed "" for onReset.046d.c24f
12-21 20:15:00.094 7432 7670 I vhusbd : Tue Dec 21 20:15:00 2021 LOG_INFO Device 1017 [046d:c24f] BOUND to connection 1
12-21 20:15:00.322 7432 7670 I vhusbd : Tue Dec 21 20:15:00 2021 LOG_INFO Executed "" for onReset.046d.c24f
12-21 20:15:44.189 7432 7670 I vhusbd : Tue Dec 21 20:15:44 2021 LOG_INFO Device 1017 [046d:c24f] UNBOUND from connection 1
12-21 20:15:50.742 7432 7670 I vhusbd : Tue Dec 21 20:15:50 2021 LOG_INFO Executed "" for onReset.046d.c24f
12-21 20:15:50.742 7432 7670 I vhusbd : Tue Dec 21 20:15:50 2021 LOG_INFO Device 1017 [046d:c24f] BOUND to connection 1
12-21 20:15:50.944 7432 7670 I vhusbd : Tue Dec 21 20:15:50 2021 LOG_INFO Executed "" for onReset.046d.c24f
12-21 20:17:26.681 7432 7432 W ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@1264d02
12-21 20:17:26.755 7432 7432 D OpenGLRenderer: Skia GL Pipeline
12-21 20:17:26.816 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingString failed to get INvCplHalService
12-21 20:17:26.816 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingString failed to get INvCplHalService
12-21 20:17:26.819 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:26.819 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:26.822 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:26.823 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:26.824 7432 10563 I ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 1
12-21 20:17:26.825 7432 10563 I ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 1
12-21 20:17:26.825 7432 10563 I OpenGLRenderer: Initialized EGL, version 1.4
12-21 20:17:26.825 7432 10563 D OpenGLRenderer: Swap behavior 2
12-21 20:17:26.825 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:26.826 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:26.827 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:26.829 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingStringLength failed to get INvCplHalService
12-21 20:17:26.829 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:26.829 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingStringLength failed to get INvCplHalService
12-21 20:17:26.830 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:26.831 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:26.831 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:26.833 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:26.836 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:26.839 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:26.889 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:26.890 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:30.407 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:30.407 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:30.423 7432 7461 I e.androidserve: Waiting for a blocking GC ProfileSaver
12-21 20:17:30.441 7432 7461 I e.androidserve: WaitForGcToComplete blocked ProfileSaver on HeapTrim for 17.414ms
12-21 20:17:30.441 7432 7442 W System : A resource failed to call close.
12-21 20:17:30.441 7432 7442 I chatty : uid=10111(com.virtualhere.androidserver) FinalizerDaemon identical 1 line
12-21 20:17:30.442 7432 7442 W System : A resource failed to call close.
12-21 20:17:34.846 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:34.846 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:36.644 7432 7432 W InputEventReceiver: Attempted to finish an input event but the input event receiver has already been disposed.
12-21 20:17:39.842 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService
12-21 20:17:39.842 7432 10563 E libnvcpl_vendor: NvCplGetAppProfileSettingInt failed to get INvCplHalService

#4

Didn’t know what email to send it to, and I’m not worried about it containing sensitive data.

#5

OK thanks, yes i wanted to see two things in the log, whether it was appearing as a Full Speed device (it is) and if it is skipping resets (it is).

So i dont know the issue unfortunately.

It appears that the wheel is starting as (vendor id:product id) 046d:c260 then switching to 046d:c24f after it perhaps loads its firmware.

I dont know why its then not configuring.

I do have a G29 and a shield so i will test this over the next few days and let you know what i find...

#6

I was using it via a USB hub. Possible that’s why it was seeing it as two different devices. However, the same issue happens if I connect it directly to the Shield itself, so I don’t think it’s due to the hub.

#7

And I want to just clarify that it does configure and function, but the angle of steering input seems to be multiplied for some reason.

#8

Also, something I just tested since you mentioned it. It seems to be detected twice while using it with VH on my laptop. I can hear the usb disconnect and reconnect sound, and it will calibrate each time. But it works fine through my laptop.

#9

I did some testing with my G29 and Shield, and im not sure but what i think is happening is that android is sending something to the wheel when it resets and comes back as a new device and this is causing the extended configuration problem where the wheel > 90 degrees.

In linux/windows etc these operating systems dont send anything special to the wheel when it resets and comes back as another device and so it works via virtualhere.

In Android the USB device control is more restricted than in linux/windows, for security reasons. VirtualHere cannot get more control over the device and therefore cannot bypass these commands being sent from Android, so the wheel wont work properly at the moment via Virtualhere.

#10

I feel like there has to be something specific to VH though. When the wheel isn’t being controlled by VH, it seems to calibrate and function properly. Only when VH takes control of the device, does it drop repeatedly and recalibrate. This is the only device that VH drops and reconfigures as well. Why is it dropping it in the first place?

I understand you may not have an answer quickly, I understand how complicated dev work is. However, I don’t think the blame can be put on the OS here.

I don’t have another android device to test this with, you may. I could emulate android, but i don’t think that’s a proper test to perform.

#11

Its a bit complicated to explain if you are not deeply familiar with the USB protocol, but it is related to the way the USB enumeration works

#12

Something else I noticed while testing, worth noting and kind of lines up with your thinking.

I did manage to get the wheel to exhibit the same symptoms on the Shield, while not being controlled by VH. I don’t know why it happened, or what I did to cause it to happen, but while testing random apps using the wheel as the input/remote control, it seemed to be using the steering wheel input as a left/right d-pad input. As if the Shield is seeing the wheel as a Xbox controller or similar game pads. When I’d rotate the wheel 90* with 0 feedback, it would then move the cursor in that direction once feedback is applied.

Is it possible the Shield is disconnecting/reconnecting because it’s switching input types? Would make sense as to why it shows two devices.

Any help is greatly appreciated. I’ve purchased VH 4 times now, trying to find a solution that is complete and supports all my needs, but it seems there’s always some kind of catch.

#13

I have emailed Logitech (they use virtualhere themselves for testing their wheels during development surprisingly! hence they replied to me) a while back and they told me that the wheel has to reset itself a few times so that it is backwards compatible with certain devices. The wheel switches modes to a new mode, reboots itself and comes back as the new device, if it detects it can be the new device. This can be changed at any time as they update their ghub software and/or new firmware for the wheel so its not a definite series of steps i can program to.

This is why you are seeing two different devices: it boots up as one basic device, then reboots as another more advanced device. Its not android/virtualhere/windows etc rebooting the device, its the firmware inside the wheel doing that.

Normally when a new device appears on the usb bus, a USB RESET command is sent. However this will confuse the wheel so virtualhere skips a reset command (which is why you see onReset..."" a few times in the log) so as not to upset the new firmware mode.

I asked Logitech if they could send me the protocol bootup for their wheels but they havent yet (and i suspect they wont, they dont have the time/motivation/resources to document this for some small company like mine so it works with my software. VirtualHere works for them with their Linux or Windows setup (not sure of their exact dev process) so thats why im not expecting much.

Normally linux will select configuration 1 when a usb device appears and this can upset the firmware. In Linux this can be bypassed but in Android there is no option to do this because Android limits the USB bus access to only the device you are using. This is why i cant do much to try to work around this because there is no API to do so in Android.

Sometimes USB hardware analyzers are useful to diagnose this sort of thing, but the issue is that the bytes they send to the wheel are not documented (see above) so i don't know what bytes to send when. There used to be usb_modeswitch to switch modes in linux by reverse engineering their protocols but i don't think this keeps up with the latest wheels/firmware. E.g for example https://www.phoronix.com/scan.php?page=news_item&px=Logitech-G920-Wheel

#14

Well, it seems using another host for VH is the only choice I have here.. I'm looking for simplicity, so my next go to would be a RPi.

Can you confirm if this wheel works with them, and is there a specific model you suggest? I've never actually used one, so I'm not sure if the extra performance is needed of a higher model. I work professionally in IT though, so setting it up won't be an issue. But I don't want to waste more money on hardware, and yet another VH license..

#15

Pi4 2GB, email me before trying virtualhere on it

#16

I'll be buying a Pi 4 8GB (possibly 4GB), but it won't be for a little bit until I have the funds available. Looking at about $200 with scalper pricing for everything I'd need/want for the build to work the way I need....

What email should I reach out to?

#17

mail [at] virtualhere.com (mail[at]virtualhere[dot]com)