Generic gamepad not recognised by Driver Hub

I just upgraded from a Motorola phone to a Rev Driver Hub for our driver station. I can not get our generic gamepads to be recognised by the Driver Hub, although they work OK with the Motorola phone running the same driver staion app. Our Driver Hub details are:
OS version: 1.2.0
Android version: 10
Kernel Version: 4.19.111
Driver Station App Version: 8.1.1
Library Version: 22.12.01
Robot Protocol Version: v123

  1. The Driver Hub and Control Hub are linked properly. The Driver Hub can show and select OpModes as normal. The display of the Driver Hub looks good.

  2. Autonomous operation of the robot is working fine.

  3. Normally, the gamepad controller is linked by pressing Start and A or Start and B on the gamepad controller. Normally the gamepad icon on the Driver Hub display will light up to show that the gamepad is connected properly. With the Driver Hub we have, the gamepad icons do not light up after pressing Start and A or Start and B.

  4. The gamepad controller status LED is mauve when connected to the phone. The gamepad controller status LED is blue when connected to the Driver Hub. I am not sure if this is significant.

  5. If I install driver station app 8.1.1 onto the phone, the gamepad controllers are not recognized. If I downgrade the driver station app to 8.1 on the phone, the controllers work fine. This indicates some change between 8.1 and 8.1.1 which is disabling my gamepads when used with a phone.

  6. I tried downgrading the driver station app running on the Driver Hub from 8.1.1 to 8.1. Unfortunately this did not enable proper operation of the gamepads. This indicates that there is another issue, not just the app version, with our Driver Hub.

  7. I have attached a picture of the game controllers that we are using. I suspect that they may be quite old.

  8. If I attach a memory stick to one of the type A USB ports on the Driver Hub, the additonal memory shows up correctly in the settings of the Android OS on the Driver Hub. This indicates that the USB ports are working.

Please can you investigate and help me get our gamepads working with our Driver Hub. I can run any tests that you request.

Thanks Steve

That is not a supported gamepad for FIRST Tech Challenge, legal gamepads are listed in Game Manual 1. That gamepad is not legal for competition, hence there is no expectation of support. The Android drivers on the phone may detect and support the gamepad, but it’s not an expectation that you should have on all Android devices - we only guarantee that the allowed FTC gamepads are supported.

Thanks for your super quick response. I will look into getting some new gamepads. Hopefully they will work OK. In the meantime, we will keep using the Motorola phone for our development work.

Hi again. Can you recommend a preferred gamepad? Thanks

I will echo @ddiaz’s statement that as this is not an officially supported gamepad (which is not legal for competition, anyhow), it is not guaranteed to work with the FTC software across all devices. Significant work went into making sure that officially supported gamepads work reliably (the Driver Station actually employs a fully custom user-mode USB driver to interface with officially supported gamepads without depending on Android/kernel support).

<DS03> Lists officially supprted / legal gamepads:

  • Logitech F310 gamepad (Part# 940-00010)
  • Xbox 360 Controller for Windows (Part# 52A-00004)
  • Sony DualShock 4 Wireless Controller for PS4 (ASIN # B01LWVX2RG) operating in wired mode only
    (i.e., connected through USB 2.0 Type A to Type B Micro cable with Bluetooth turned off)
  • Etpark Wired Controller for PS4 (ASIN # B07NYVK9BT).
  • Quadstick game controller in Xbox 360 Emulation Mode (any model).

That all being stated, you said:

The gamepad controller status LED is mauve when connected to the phone. The gamepad controller status LED is blue when connected to the Driver Hub. I am not sure if this is significant.

This leads me to believe that the Linux kernel is treating the gamepad differently on the different devices. You may try going to the Gamepad Type Overrides option in the Driver Station settings and giving the DS software a hint about button mappings for the gamepad.

Yes, I tried Gamepad Type Overrides. I get the window “Gamepad identification” “Please press any key on the gamepad”. I tried pressing keys, but get no response from the app. I think there is a fundamental communication issue between the DS app and the gamepad. I was wondering if this could be a USB speed issue, and perhaps slowing down the interface may help. Any other suggestions most welcome. Thanks Steve.

Can you share the Driver Station log from both the Driver Hub and the Moto phone (after attempting to connect the gamepad)?

Motorola__ Android Device (Driver Station) - driverStationLog.txt
is the log file with the phome DS, gamepad working OK.

Driver Hub - driverStationLog.txt
is the log file using the Driver Hub, same gamepad as above, gamepad not working.

I have uploaded the files to a shared dropbox folder. Here are the links:

Any advice you can give me gratefully received. I can run more tests if that would help. Thanks Steve

It looks like the controller you have is another case of what I call a “controller with an identity crisis” i.e. it changes what it presents itself to the host as, depending on whether the host talks to it in a format it expects within a time interval. For instance, the EtPark controller will (I can’t remember if the order of this sequence is correct, but the general idea stands) initially present itself as a PS4 controller. If the host does not “speak PS4” to it within a time period, it disconnects itself and presents as a PS3 controller. If the host does not “speak PS3” to it within a time period, it disconnects itself and presents as an Xbox360 controller.

As for your controller…

Looking at your logs, we see this from the Moto phone:

// Kernel version
LinuxKernelVersion: Raw Linux kernel version string: 3.10.49-g6d40c12
LinuxKernelVersion: Failed to parse int from String "49-g6d40c12". Substituting a zero.
LinuxKernelVersion: Processed Linux kernel version: 3.10.0

...

// Gamepad initially presents as
// "Shenzhen ShanWan Technology Co., Ltd. ZD-V+ Wired Gaming Controller"
20:55:14.416 onInputDeviceAdded() id=11 vid=0x2563 pid=0x575
20:55:14.417 Input device id=11 has a VID and PID which does not correspond to a known officially supported gamepad; also, the user's mapping suggestor did not immediately provide a suggestion, tracking in placeholder mode for now

// Gamepad disconnects itself
20:55:14.446 onInputDeviceRemoved() id=11

// Gamepad re-presents as
// "Guangzhou Pingzhong Electronic Technology Co., Ltd. Frostbite controller"
20:55:15.162 onInputDeviceAdded() id=12 vid=0x20BC pid=0x5500
20:55:15.162 Input device id=12 has a VID and PID which does not correspond to a known officially supported gamepad; also, the user's mapping suggestor did not immediately provide a suggestion, tracking in placeholder mode for now

// Gamepad presents a SECOND instance of itself (???)
20:55:15.185 onInputDeviceAdded() id=13 vid=0x20BC pid=0x5500
20:55:19.310 User's mapping suggestor has indicated that gamepad id=12 (previously tracked in placeholder mode) should be treated as GAMEPAD_SUPPORTED_BY_KERNEL

Now looking at the Driver Hub logs, we see:

// Kernel version
LinuxKernelVersion: Raw Linux kernel version string: 4.19.111
LinuxKernelVersion: Processed Linux kernel version: 4.19.111

...

// Gamepad initially presents as
// "Shenzhen ShanWan Technology Co., Ltd. ZD-V+ Wired Gaming Controller"
15:11:19.355 onInputDeviceAdded() id=4 vid=0x2563 pid=0x575 
15:11:19.357 Input device id=4 has a VID and PID which does not correspond to a known officially supported gamepad; also, the user's mapping suggestor did not immediately provide a suggestion, tracking in placeholder mode for now

// Gamepad disconnects itself
15:11:19.497 onInputDeviceRemoved() id=4

// Gamepad re-presents as "Microsoft Corporation Xbox360 Controller"
15:11:20.065 onInputDeviceAdded() id=5 vid=0x45E pid=0x28E
15:11:20.066 Input device id=5 has been autodetected based on USB VID and PID as a Microsoft Xbox360 gamepad

From these log’s it’s clear that is a gamepad with an “identity crisis”. Also, the gamepad settles as different devices on the Driver Hub vs. the Moto phone. Why? Not sure, but it’s likely due to kernel driver differences. Note that on the Driver Hub, it settles as an Xbox360 controller. Apparently, however, its implementation of the Xbox360 controller’s protocol is not consistent with the official Xbox360, otherwise it would be working. I do not think there’s anything that can be done to help the situation here. Because the gamepad claims (based on VID and PID) to be an official Xbox360 controller, there is not even a provision for being able to distinguish it from a real Xbox360 controller.

I think the only course of action here is to buy new gamepads. (Which is also necessary to be competition legal)

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.