New issue
Advanced search Search tips

Issue 809826 link

Starred by 3 users

Issue metadata

Status: Available
Owner: ----
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Android , Windows , Chrome , Mac
Pri: 3
Type: Feature



Sign in to add a comment

Add mappings for the SteelSeries Stratus XL

Project Member Reported by mattreynolds@chromium.org, Feb 7 2018

Issue description

The device appears on html5gamepad.com with the ID string:

SteelSeries SteelSeries Stratus XL (Vendor: 1038 Product: 1418)

This gamepad supports both Bluetooth and USB connections, although the micro-USB port is hidden inside the battery compartment.
 
Cc: klausw@chromium.org
I got this controller based on a recommendation [1], mot realizing that it's actually unsupported on Chromebooks according to the manufacturer's comment on that article...

How hard would it be to support it? It successfully connects via Bluetooth, and the Home/Back buttons work in the browser, so it appears to be communicating to some extent. I'd be interested in helping since I like the controller overall, it's great on Android.


[1] https://www.androidcentral.com/best-game-controllers-chromebooks-2018
Project Member

Comment 2 by bugdroid1@chromium.org, Nov 30

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/49997881e430f5f35b4ebf232cf6c2c2df7436b2

commit 49997881e430f5f35b4ebf232cf6c2c2df7436b2
Author: Klaus Weidner <klausw@chromium.org>
Date: Fri Nov 30 02:56:04 2018

Add standard mapping for SteelSeries Stratus XL USB gamepad

BUG=809826

Change-Id: I41250680f22aacac2c1f193276d5d0e0beaa2a00
Reviewed-on: https://chromium-review.googlesource.com/c/1356228
Reviewed-by: Matt Reynolds <mattreynolds@chromium.org>
Commit-Queue: Klaus Weidner <klausw@chromium.org>
Cr-Commit-Position: refs/heads/master@{#612534}
[modify] https://crrev.com/49997881e430f5f35b4ebf232cf6c2c2df7436b2/device/gamepad/gamepad_standard_mappings_linux.cc

To clarify, the patch from comment #2 only enables a mapping for a wired USB connection through the MicroUSB port in the battery compartment. Bluetooth still doesn't work at this point. It pairs but only the Home and Back buttons work, triggering corresponding browser actions.
I've put my old Samsung Chromebook snow/daisy into developer mode on m71 beta, and interestingly the Bluetooth paired device already seems to work at the evdev level.

After Bluetooth pairing via the normal ChromeOS UI, it's visible in bluetoothctl:

[SteelSeries Stratus XL]# info 
Device 28:9A:4B:09:2D:8F
        Name: SteelSeries Stratus XL
        Alias: SteelSeries Stratus XL
        Class: 0x002508
        Icon: input-gaming
        Paired: yes
        Trusted: yes
        Blocked: no
        Connected: yes
        LegacyPairing: yes
        UUID: Human Interface Device... (00001124-0000-1000-8000-00805f9b34fb)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        Modalias: usb:v0111p1419d0109
        RSSI: -57

And the evtest tool shows it as a selectable device:

Input driver version is 1.0.1
Input device ID: bus 0x5 vendor 0x111 product 0x1419 version 0x109
Input device name: "SteelSeries Stratus XL"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 139 (KEY_MENU)
    Event code 158 (KEY_BACK)
    Event code 172 (KEY_HOMEPAGE)
    Event code 272 (BTN_LEFT)
    Event code 273 (BTN_RIGHT)
    Event code 274 (BTN_MIDDLE)
    Event code 275 (BTN_SIDE)
    Event code 276 (BTN_EXTRA)
    Event code 304 (BTN_A)
    Event code 305 (BTN_B)
    Event code 306 (BTN_C)
    Event code 307 (BTN_X)
    Event code 308 (BTN_Y)
    Event code 309 (BTN_Z)
    Event code 310 (BTN_TL)
    Event code 311 (BTN_TR)
    Event code 312 (BTN_TL2)
    Event code 313 (BTN_TR2)
    Event code 314 (BTN_SELECT)
    Event code 315 (BTN_START)
    Event code 316 (BTN_MODE)
    Event code 317 (BTN_THUMBL)
    Event code 318 (BTN_THUMBR)
    Event code 319 (?)
  Event type 2 (EV_REL)
    Event code 0 (REL_X)
    Event code 1 (REL_Y)
    Event code 8 (REL_WHEEL)
  Event type 3 (EV_ABS)
    Event code 0 (ABS_X)
      Value      0
      Min    -2047
      Max     2047
      Fuzz      15
      Flat     255
    Event code 1 (ABS_Y)
      Value      0
      Min    -2047
      Max     2047
      Fuzz      15
      Flat     255
    Event code 2 (ABS_Z)
      Value      0
      Min    -2047
      Max     2047
      Fuzz      15
      Flat     255
    Event code 5 (ABS_RZ)
      Value      0
      Min    -2047
      Max     2047
      Fuzz      15
      Flat     255
      Resolution     745
    Event code 9 (ABS_GAS)
      Value      0
      Min        0
      Max     4095
      Fuzz      15
      Flat     255
    Event code 10 (ABS_BRAKE)
      Value      0
      Min        0
      Max     4095
      Fuzz      15
      Flat     255
    Event code 16 (ABS_HAT0X)
      Value      0
      Min       -1
      Max        1
    Event code 17 (ABS_HAT0Y)
      Value      0
      Min       -1
      Max        1
    Event code 40 (ABS_MISC)
      Value      0
      Min        0
      Max      255
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
  Event type 17 (EV_LED)
    Event code 0 (LED_NUML)
    Event code 1 (LED_CAPSL)
    Event code 2 (LED_SCROLLL)
    Event code 3 (LED_COMPOSE)
Properties:
Testing ... (interrupt to exit)
Event: time 1543555529.000302, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 1543555529.000302, type 1 (EV_KEY), code 304 (BTN_A), value 1
Event: time 1543555529.000302, -------------- SYN_REPORT ------------
Event: time 1543555529.135103, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 1543555529.135103, type 1 (EV_KEY), code 304 (BTN_A), value 0
Event: time 1543555529.135103, -------------- SYN_REPORT ------------
[...]

More output in the attached file where I try various inputs. The Home button is still intercepted by ChromeOS, but everything else seems to work,

Do you have a tip where to look next? Does ChromeOS use evdev, or does it read the Bluetooth HID device directly?
evtest3.txt
31.6 KB View Download
Here's the rdesc file from /sys/kernel/debug/hid on Chromebook:
rdesc.txt
10.0 KB View Download
for the record, here's the udevadm info requested by mattreynolds@:

localhost / # udevadm info --query=all /dev/input/js0 
P: /devices/virtual/bluetooth/hci0/hci0:1:2/input6/js0
N: input/js0
E: DEVNAME=/dev/input/js0
E: DEVPATH=/devices/virtual/bluetooth/hci0/hci0:1:2/input6/js0
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_INPUT_MOUSE=1
E: MAJOR=13
E: MINOR=0
E: SUBSYSTEM=input
E: TAGS=:powerd:
E: USEC_INITIALIZED=468403332

mattreynolds@ thinks that the missing ID_INPUT_JOYSTICK would cause it to be ignored in UdevGamepadLinux (https://cs.chromium.org/chromium/src/device/gamepad/udev_gamepad_linux.cc).

FWIW, this device works via Bluetooth connection in Chrome on Linux (as opposed to ChromeOS). It appears as device {0x0111, 0x1419}. The HOME and BACK buttons are directly used by the browser and not accessible to the gamepad API. Proposed standard mapping in https://chromium-review.googlesource.com/c/chromium/src/+/1356892
Project Member

Comment 7 by bugdroid1@chromium.org, Dec 8

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/401770722daeea00304d0c06bf3cf57c5ca5b686

commit 401770722daeea00304d0c06bf3cf57c5ca5b686
Author: Klaus Weidner <klausw@chromium.org>
Date: Fri Dec 07 23:59:58 2018

Add Bluetooth gamepad mapping for SteelSeries Stratus XL

This is missing the select/back and meta (home) buttons which are
treated separately as keyboard keys, and which trigger browser
actions.

This currently seems to work on Chrome for Linux, but not ChromeOS.

BUG=809826

Change-Id: Ie328c8990e03cdda167ddac624b41f6b78710fd8
Reviewed-on: https://chromium-review.googlesource.com/c/1356892
Commit-Queue: Klaus Weidner <klausw@chromium.org>
Reviewed-by: Matt Reynolds <mattreynolds@chromium.org>
Cr-Commit-Position: refs/heads/master@{#614874}
[modify] https://crrev.com/401770722daeea00304d0c06bf3cf57c5ca5b686/device/gamepad/gamepad_id.h
[modify] https://crrev.com/401770722daeea00304d0c06bf3cf57c5ca5b686/device/gamepad/gamepad_id_list.cc
[modify] https://crrev.com/401770722daeea00304d0c06bf3cf57c5ca5b686/device/gamepad/gamepad_standard_mappings_linux.cc

Sign in to add a comment