Jump to content

Cannot get Vive Tracker touchpad press input after upgrading to VIU 1.17

Yuuki Ishimaru

Recommended Posts

After upgrading to VIU 1.17 I cannot get Vive Tracker input, even though the role has been assigned, the Shift-B assignment has been done, and I can see that the tracker's input is triggering as expected in the SteamVR Test Controller UI. Further, all other input pins are registered as expected.

Unity version is 2020.1.3f1. The configurations are set to build for windows, using the Vive and Vive Pro. The project also has the Wave package as we also target the Focus 3, testing with it disabled in VIUSettings did not change the results

I have tried reverting to VIU 1.16, and 1.12 but neither worked.

Link to comment
Share on other sites

Note: In SteamVRv2Module.cs, adding a print statement for action states (UpdateDeviceInput -> first foreach loop) it seems like the input is being registered and IVRModuleDeviceStateRW's value for VRModuleRawButton.Touchpad/ VRModuleRawButton.Axis0 is being set to TRUE when connected as expected. As for why this information isn't propagating to the API I have no idea. I am checking the state through the API using ViveInput.GetPressEx(TrackerRole.Tracker1, ControllerButton.Pad) in the update loop.

Link to comment
Share on other sites

@chengnay SteamVR Unity Plugin v2.7.2 (SDK 1.14.15), SteamVR is 1.13.9 offline stable release. I also tested it with the most recent SteamVR plugin and executable, but had no luck.
I did try restarting SteamVR multiple times, as well as the whole headset.


Judging by the specific code issue I listed in my earlier comment, is this not an API problem?

Link to comment
Share on other sites

@chengnay as a test I set up a new project with the same Unity version, with VIU and SteamVR updated to the most recent versions, and everything but the pad was detected.

I used the following to check if it was triggered:

        var state = ViveInput.GetState(TrackerRole.Tracker1);
        print(state.LastPressDownTime(ControllerButton.Grip) + " " + state.LastPressDownTime(ControllerButton.Trigger) + " " + state.PreviousButtonPressed + " " + state.CurrentButtonPressed);
        print(state.GetPadAxis() + " " + state.GetAxis(ControllerAxis.PadX) + " " + state.GetAxis(ControllerAxis.PadY) + " " + state.PadPressAxis + " " + state.PadTouchAxis);

        if (ViveInput.GetPressEx(TrackerRole.Tracker1, ControllerButton.Pad))
            Debug.Log("Pad Pressed");

        if (ViveInput.GetPressEx(TrackerRole.Tracker1, ControllerButton.Trigger))
            Debug.Log("Trigger Pressed");


Of these, I was able to get nonzero values of LastPressDownTime for Trigger and Grip, was able to see the PreviousButtonPressed and CurrentButtonPressed change with non-pad inputs, and saw "Trigger Pressed" when those pins were connected.

Link to comment
Share on other sites

Update: I have a temporary fix in place, where I route the input of VRModuleRawButton.Axis0 through VRModuleRawButton.A (a button that doesn't exist on trackers) and using GetPressEx(TrackerRole.Tracker1, ControllerButton.AKey) works as desired. However I'd still like to use VRModuleRawButton.Axis0/Pad as the current workaround is hacky

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Create New...