Driver Station USB/Joystick Question

So I’m not sure what the life of the current NI Driver Station software is with the new control system, but I assume its not going anywhere anytime soon so I’d like to find a solution to this issue we’ve been having.

Assuming there are no update’s on NI’s side to resolve this does anyone have any tricks/know how to “better curate” a list of devices to show up here? We’ve been playing with new controllers and really like the SCUF Envision Pro, but it’s 1 downside is that it comes up as AT LEAST 6 different entries on the usb tab, only 1 entry is valid, in this case its #4, the others have either no buttons/axes that come up or only a few (on our development PCs we also have the other issue of our space mice coming up as 3 entries but that’s not an issue for the driver station). So on some PC configs, and when using more then 1, it’s impossible to find the correct one as it’s past index #5.

image

One nice quality of life update to the NI DS would be if they find an entry that has 0 axes, buttons, pov, etc to just ignore it.

image

Even if we happen to get 2 plugged into a DS and get them into slots #1 and #2, we wouldn’t want to risk some re-enumeration at a competition that would make them inaccessible.

So does anyone have any advice here, or are we forced to continue on our search for another controller.

You can disable USB devices in the Windows Device Manager. I don’t know how easy it will be to identify which ones you want to disable. There might be some properties that might identify the various entries.

I haven’t had good experiences with doing that for a usb to GameCube adapter, ymmv

Unfortunately it’s not easy to find what’s what as they aren’t descriptive, maybe I could look by vendor ID and come up with some script I guess, plus it wouldn’t help the case of a re-enumeration.

It’s worth trying to find/disable the HID devices using Windows Device Manager, if you have not done so already. This should stop them from showing up in the list. Apparently, that device has multiple profiles you can cycle through and maybe it’s enumerating them all, even when you don’t select/use them all. Probably also worth seeing if there’s some kind of config utility the vendor provides that could let you turn off the ones you don’t need. And, be careful your drivers know not to change modes, and how to get things back if this happens…

Ok I ended up writing a PowerShell Script (or rather ChatGPT did), TBD if this is a solution we feel comfortable with on field but I’ll leave it here in case anyone else finds it helpful:

If anyone else wants to use this controller, make sure you DON’T install iCUE/the driver software, if you do you’ll lose access to the extra menu buttons and what not:

disable_extra_HIDS_SCUF_Envision_Pro.ps1

# PowerShell script to find a USB HID device by Vendor ID and Device ID, enumerate its endpoints, and disable specific ones

# Define the Vendor ID and Device ID of the target USB HID device
$VendorID = "2E95"  # Replace with your device's Vendor ID (SCUF)
$DeviceID = "434D"  # Replace with your device's Device ID (SCUF Envision Pro Wired)
#$DeviceID = "434E"  # Replace with your device's Device ID (SCUF Envision Pro Wireless)
$InterfacesAndCollections = @( # Define multiple interface and collection pairs
    @{ Interface = "04"; Collection = "" },
    @{ Interface = "03"; Collection = "Col01" }
)

# Function to get device instances by Vendor ID, Device ID, Interface, and Collection
function Get-USBDeviceByDetails {
    param (
        [string]$VendorID,
        [string]$DeviceID,
        [string]$Interface,
        [string]$Collection
    )

    $deviceInstances = pnputil /enum-devices /connected | ForEach-Object {
        $line = $_
        if ($line -match "VID_$VendorID&PID_$DeviceID&MI_$Interface.*$Collection") {
            $line -replace "Instance ID: ", "" | ForEach-Object { $_.Trim() }
        }
    }
    return $deviceInstances
}

# Function to disable a specific device by interface and collection
function DisableDeviceByDetails {
    param (
        [string]$DeviceInstance
    )

    Write-Host "Disabling device with instance: $DeviceInstance"
    # Example: Use pnputil to disable the device instance
    pnputil /disable-device "$DeviceInstance" | Out-Null
    Write-Host "$DeviceInstance disabled successfully"
}

# Main script
foreach ($pair in $InterfacesAndCollections) {
    $Interface = $pair.Interface
    $Collection = $pair.Collection

    Write-Host "Searching for devices with Interface $Interface and Collection $Collection"
    $devices = Get-USBDeviceByDetails -VendorID $VendorID -DeviceID $DeviceID -Interface $Interface -Collection $Collection

    if ($devices -and $devices.Count -gt 0) {
        Write-Host "Found device(s):"
        $devices | ForEach-Object { Write-Host $_ }

        foreach ($device in $devices) {
            DisableDeviceByDetails -DeviceInstance $device
        }
    } else {
        Write-Host "No devices found with Vendor ID $VendorID, Device ID $DeviceID, Interface $Interface, and Collection $Collection"
    }
}

It would be super neat if the NI driver station had a better interface for USB devices

2 Likes