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

Steam for Windows, Mac, Android & Linux. If you have a controller that is missing from this list please report it in the Steam Controller bug reports. Intel Driver Update Utility 19.2.8.7.

Two modes are already working with haptic feedback:

  • If the Xbox 360 controller is not working properly then make sure that the problem is not with the USB port. This is because Xbox controller in windows requires a powered USB port (USB 2.0 or 3.0 port), so you can try using different ports excluding USB hubs and the front ports of the PC.
  • XBCD – Original Xbox Controllers with Win10-8. May 9, 2018April 5, 2016. XBCD is an abbreviation for the “X-Box Controller Driver” Which has been around for almost as long as the Original Xbox Controllers themselves (approximately 2001-2003).
  • xbox360: gamepad emulator
  • desktop: mouse, keyboard mode

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
  • for python 3.4+:
    • Install python libusb1 sudo pip install libusb1
  • for python 2.7+ (you might have to use pip2 for python2.7 or pip3 for python3):
    • Install python libusb1 sudo pip install libusb1
    • Install python enum backport sudo pip install enum34
Steam controller driver windows 8 0
  1. Get the project tarbal or clone it from github:
  1. wget https://github.com/ynsta/steamcontroller/archive/master.tar.gz
  2. tar xf master.tar.gz
  3. cd steamcontroller-master
  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:
  1. Reload udev sudo udevadm control --reload

Usage

  1. Exit Steam.
  2. Start:
  • sc-xbox.py start for the simple xbox360 emulator.
  • sc-desktop.py start for the desktop keyboard/mouse mode.
  1. Stop: sc-xbox.py stop or sc-desktop.py stop

Other test tools are installed:

  • sc-dump.py : Dump raw message from the controller.
  • sc-gyro-plot.py : Plot curves from gyro data (require pyqtgraph and pyside installed).
  • sc-test-cmsg.py : Permit to send control message to the contoller. For example:echo 8f07005e 015e01f4 01000000 | sc-test-cmsg.py will make the controller beep.
  • vdf2json.py : Convert Steam VDF file to JSON.
  • json2vdf.py : Convert back JSON to VDF file.

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):
  • Create an event mapper that reads steam vdf files and maps usb inputs to uinput events.
  • Create fallback mappings for unsupported config options.
  • Get all possible configurations of steam config file.
  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:

  • 81000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

Enable Gyro

  • 87153284 03180000 31020008 07000707 00301400 2f010000 00000000 00000000

Disable Gyro

  • 87153284 03180000 31020008 07000707 00300000 2f010000 00000000 00000000

Stop Controller

Driver windows xp
  • 9f046f66 66210000 ...

Control Messages formats

Install Steam Controller Windows 10

Haptic feedback format:

Steam Controller Driver Windows 8 7

  • u8 : 8f
  • u8 : 07
  • u8 : 00 for Right 01 for Left
  • u16 : Amplitude
  • u16 : Period
  • u16 : count
  • pads the end with 00