Giter Site home page Giter Site logo

zhengmaoch / xpadneo Goto Github PK

View Code? Open in Web Editor NEW

This project forked from atar-axis/xpadneo

0.0 1.0 0.0 20.42 MB

Advanced Linux Driver for Xbox One Wireless Controller (shipped with Xbox One S)

Home Page: https://atar-axis.github.io/xpadneo/

License: GNU General Public License v3.0

Makefile 11.26% Shell 15.40% C 62.81% Python 10.53%

xpadneo's Introduction

ko-fi If you want to support me or accelerate the development of a special feature, consider a small donation โค๏ธ Just leave a message if your donation is for a specific use (like a new hardware or a specific function).

Build Status Codacy Badge Average time to resolve an issue Packaging status Discord

Advanced Linux Driver for Xbox One Wireless Gamepad

xpadneo Logo

This is the first driver for the Xbox One Wireless Gamepad (which is shipped with the Xbox One S). I wrote it for a student project at fortiss GmbH and it is fully functional but does only support the connection via Bluetooth as yet - more will follow.

Many thanks to Kai Krakow who sponsored me a Xbox One Wireless Controller ๐ŸŽฎ (including Wireless Adapter) and a pack of mouthwatering guarana cacao โ˜•

Other Projects

  • xow is a driver for the Xbox One S controllers, too, and supports the native dongles packaged with the controller. Kudos to @meduslaix for working together on finding some work aorunds for controller firmware bugs.
  • xpad supports this and many other controllers in USB mode.
  • MissionControl aims to support the controller on Nintendo Switch via Bluetooth.

These other projects may not support some of the advanced features of xpadneo.

SDL2 Breaking Changes

As of SDL 2.0.12, SDL introduced a new HIDAPI which can read HID devices in raw mode, bypassing the drivers. Due to the way SDL works, and because xpadneo exposes hidraw devices as user-readable, SDL may see wrong button mappings because it may make wrong assumptions about the protocol mode of Xbox and compatible controllers. If you see wrong button mappings / missing buttons in SDL applications, you may need to turn off this behavior by setting an environment variable in your profile: SDL_JOYSTICK_HIDAPI=0

Advantages of this driver

  • Supports Bluetooth
  • Supports all Force Feedback/Rumble effects through Linux ff-memless effect emulation
  • Supports Trigger Force Feedback in every game by applying a pressure-dependent effect intensity to the current rumble effect (not even supported in Windows)
  • Supports disabling FF
  • Supports multiple Gamepads at the same time (not even supported in Windows)
  • Offers a consistent mapping, even if the Gamepad was paired to Windows/Xbox before, and independent of software layers (SDL2, Stadia via Chrome Gamepad API, etc)
  • Working Select, Start, Mode buttons
  • Correct Axis Range (signed, important for e.g. RPCS3)
  • Supports Battery Level Indication (including the Play `n Charge Kit) Battery Level Indication
  • Easy Installation
  • Agile Support and Development
  • Supports customization through profiles
  • Optional high-precision mode for Wine/Proton users

Xbox One S Wireless controller

The driver emulates profile switching for this controller by pressing buttons A, B, X, or Y while holding down the Xbox logo button. However, the following caveats apply:

  • Profiles currently behave all the same, and there is no support for configuring them.
  • Full support will be available once the Xbox Elite Series 2 controller is fully supported.

Xbox Elite Series 2 Wireless controller

While basic support for the Xbox Elite Series 2 Wireless controller is present, the following features are missing:

  • Profile support. All four profiles behave the same way currently, and there is no support for configuring them.
  • The four paddles at the bottom are currently not supported.

8BitDo controllers

This driver respects the Nintendo layout of those controllers and exposes them correctly as button A, B, X, and Y as labelled on the device. This is swapped compared to the original Xbox controller layout. You can override that behavior with a quirk flag (by removing the Nintendo layout bit).

Breaking change: Users of previous versions of the driver may want to remove their custom SDL mappings. Full support has been added for these controllers and broken mapping of previously versions no longer needs to be applied. See also: SDL.

Getting started

Prerequisites

Make sure you have installed dkms, linux headers and a bluetooth implementation (e.g. bluez) and their dependencies.

  • On Arch and Arch-based distros (like Antergos), try sudo pacman -S dkms linux-headers bluez bluez-utils
  • On Debian based systems (like Ubuntu) you can install those packages by running sudo apt-get install dkms linux-headers-`uname -r`
  • On Fedora, it is sudo dnf install dkms make bluez bluez-tools kernel-devel-`uname -r` kernel-headers-`uname -r`
  • On Manjaro try sudo pacman -S dkms linux-latest-headers bluez bluez-utils
  • On OSMC you will have to run the following commands sudo apt-get install dkms rbp2-headers-`uname -r` sudo ln -s "/usr/src/rbp2-headers-`uname -r`" "/lib/modules/`uname -r`/build" (as a workaround)
  • On Raspbian, it is sudo apt-get install dkms raspberrypi-kernel-headers If you recently updated your firmware using rpi-update the above package may not yet include the header files for your kernel. Please follow the steps described here in this case.
  • On generic distributions, it doesn't need DKMS but requires a configured kernel source tree, then: cd hid-xpadneo && make modules && sudo make modules_install

Please feel free to add other Distributions as well!

Installation

  • Download the Repository to your local machine git clone https://github.com/atar-axis/xpadneo.git
  • cd xpadneo
  • If using DKMS, run sudo ./install.sh
  • If not using DKMS, follow steps above (generic distribution)
  • Done!

Connection

  • sudo bluetoothctl
  • [bluetooth]# scan on
  • wait until all available devices are listed (otherwise it may be hard to identify which one is the gamepad)
  • push the connect button on upper side of the gamepad, and hold it down until the light starts flashing fast
  • wait for the gamepad to show up in bluetoothctl, remember the address (e.g. C8:3F:26:XX:XX:XX)
  • [bluetooth]# pair <MAC>
  • [bluetooth]# trust <MAC>
  • [bluetooth]# connect <MAC>
  • The <MAC> parameter is optional if the command line already shows the controller name

You know that everything works fine when you feel the gamepad rumble ;)

Configuration

  • If using DKMS: Use sudo ./configure.sh to configure the driver as you wish. The script will guide you through the available options.

Profile switching

The driver supports switching between different profiles on the Xbox One S controller by holding down the Xbox logo button while pressing button A, B, X, or Y to select one of four profiles. This switching can be done at any time even while in a game. The API for customizing each profile does not exist yet.

Update

In order to update xpadneo, do the following

  • Update your cloned repo: git pull
  • If using DKMS: Run sudo ./update.sh
  • otherwise follow the steps above (generic distribution)

Uninstallation

  • If using DKSM: Run sudo ./uninstall.sh to remove all installed versions of hid-xpadneo
  • otherwise follow the steps above (generic distribution)

Further information

For further information please visit the GitHub Page https://atar-axis.github.io/xpadneo/ which is generated automatically from the content of the /docs folder.

You will find there e.g. the following sections

xpadneo's People

Contributors

atar-axis avatar kakra avatar spiffyk avatar leotada avatar stripedmonkey avatar ipkpjersi avatar codecanna avatar communicationanimale avatar duganchen avatar ehats avatar haasjona avatar stecklars avatar pimaker avatar srauni avatar gordonsolar avatar azure-pipelines[bot] avatar nassek avatar snpefk avatar

Watchers

James Cloos 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.