Git Product home page Git Product logo

xow's Introduction

xow Build Status Release

Screenshot

xow is a Linux user mode driver for the Xbox One wireless dongle. It communicates with the dongle via libusb and provides joystick input through the uinput kernel module. The input mapping is based on existing kernel drivers like xpad.

NOTE: xow is still at a VERY EARLY stage of development. Do not be surprised if it does not work at all. In case of problems, please open an issue with all the relevant details (dongle version, controller version, logs, captures, etc.) and I will see what I can do.

Supported devices

xow supports both versions of the wireless dongle (slim and bulky one). The following Xbox One controllers are currently compatible with the driver:

Model number Year Additional information Status
1537 2013 Original controller Broken
1697 2015 Added audio jack Working
1708 2016 Bluetooth functionality Working

Elite controllers may be added in the future.

Planned features

Make controller's LEDs and power settings accessible

Ideally, other applications should be able to query/set these things.

Automatic channel selection

The Windows driver goes through all channels and reads MT_CH_IDLE and MT_CH_BUSY to select the best one. I have not figured out what these values are and how they are used to determine the least noisy channel.

Improved controller rumble

Rumble support is not finished yet and I would really like to see ff_memless being implemented for uinput devices (see here). This would greatly simplify things.

Any help/suggestions regarding the planned features is much appreciated.

Releases

Feel free to create prebuilt releases of xow for any package repository you want. Ideally, I would like to provide binaries for every major Linux distribution.

Building

Make sure that libusb is installed on your machine. You can build xow using the following command:

make BUILD=RELEASE

Option 1: Install xow as a systemd service (starts xow at boot):

sudo make install

Option 2: Run xow manually:

sudo ./xow

xow needs root privileges to create an input device from user space.

Troubleshooting

  • Connection dropouts
    • Try adjust the radio's CHANNEL (2.4 GHz channels might work better)
  • Buttons/triggers/sticks are mapped incorrectly
    • Try the options listed on this page to remap your inputs.
  • Input from the sticks is jumping around
    • Try the options listed on this page to set your deadzones.
  • Controller does not connect to the dongle

NOTE: Please refrain from opening issues concerning input remapping, deadzones or game compatibility, as these topics are outside the scope of this project.

How it works

The dongle's wireless chip (MT76xx) handles the WLAN connection with individual controllers. The packet format follows Microsoft's undisclosed GIP (Game Input Protocol) specification. Most of the reverse engineering was done by capturing the communication between the dongle and a Windows PC using Wireshark. As no datasheets for this chip are publicly available, I have used datasheets of similar wireless radios for assistance. Special thanks to the authors of Linux' mt76 kernel driver. It would have been impossible for me to create this driver without mt76's source code. If anyone has a greater understanding of the GIP or the weird quirks I had to add to make the driver work (like initGain), please contact me.

xow's People

Contributors

medusalix avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.