Home

Awesome

Standalone Steam Controller Driver

This project is a standalone userland driver for the steam controller to be used where the steam client can't be installed.

Two modes are already working with haptic feedback:

The final purpose is to have support for custom mapping created with a stand-alone tool or imported from steam vdf files.

The initial target is GNU/Linux, but I'll welcome any contributor that want to port input generation for other OS (OSX, Windows, *BSD, Android/Linux, ...)

This project is licensed under MIT.

Installation

  1. Install dependencies
  1. Get the project tarbal or clone it from github:

Get from tarbal:

  1. wget https://github.com/ynsta/steamcontroller/archive/master.tar.gz

  2. tar xf master.tar.gz

  3. cd steamcontroller-master

or clone it:

  1. git clone https://github.com/ynsta/steamcontroller.git
  2. cd steamcontroller
  3. Install python modules and scripts with sudo python setup.py install
  4. Install udev rules (if not already done for steam) in /etc/udev/rules.d/99-steam-controller.rules:
# replace game group by a valid group on your system
# Steam controller keyboard/mouse mode
SUBSYSTEM=="usb", ATTRS{idVendor}=="28de", GROUP="games", MODE="0660"

# Steam controller gamepad mode
KERNEL=="uinput", MODE="0660", GROUP="games", OPTIONS+="static_node=uinput"
  1. Reload udev sudo udevadm control --reload

Usage

  1. Exit Steam.
  2. Start:
  1. Stop: sc-xbox.py stop or sc-desktop.py stop

Other test tools are installed:

TODO / Status

  1. Finish to guess each bytes/bits roles in the usb message (Done).
  2. Understand how to configure haptic feed backs (Done).
  3. Understand how to enable gyroscopes (Done).
  4. Redirect inputs to userland events via uinput (Done).
    • Xbox360 uintput device (Done)
    • Keyboard uintput device (Done)
    • Mouse uintput device with trackball model (Done)
  5. Create a simple xbox event mapper (Done)
  6. Create a configurable event mapper (Paused):
  1. Create a haptic feedback Manager (Paused)
  2. Measure latencies.
  3. Support multiple controller in wireless mode (Done)
  4. Support multiple controller in wired mode
  5. Support correct deconnexion of controllers (with 2sec press on steam button) (Done)
  6. Add support to control light intensity
  7. Add support for gyroscopes in the event mapper:
    • Enable gyro condition (always on, or on specific button event)
    • Use gyro as mouse (add yaw, pitch, roll accell to mouse event with a scale factor).
    • Use gyro as an axis (compute yawn, pitch or roll from quaternion, normalize to -32768 32768 and use it as an axe)
  8. Optimize event mapper.
  9. Verify if pairing between a controller and a dongle is possible without steam or add a tools to do it.
  10. Add support to change "music" for power on off.
  11. Create an tool to convert musical notes, to haptic messages.

Control Messages Capture

  1. sudo modprobe usbmon
  2. lsusb -d 28de:1142 and look at bus and device numbers (B & D)
  3. sudo cat /sys/kernel/debug/usb/usbmon/Bu | grep Co:B:D:0 (B=3 and D=003 for example)

Disable auto feedback on rpad:

Enable Gyro

Disable Gyro

Stop Controller

Control Messages formats

Haptic feedback format: