Skip to content
This repository has been archived by the owner on Nov 17, 2023. It is now read-only.

robertosw/gamepad-bridge

Repository files navigation

I have stopped developing this any further. The biggest reason is that Microsoft is starting to block unofficial XBOX accessories. This is coming to PC pretty soon and I dont want to reverse engineer some ingenious device authentication from Microsoft... if thats even legal. It was fun to develop and test, but with Steam's gamepad support getting better every day, I dont even need this tool anymore.

Current state

  • Bluetooth connection has to be established manually before programm start
  • Reading input from bluetooth-connected dual sense (ps5) gamepad works, see supported events below
  • Gadget mode seems to work
    • Linux detects the RPi as the simulated gamepad (using lsusb), but dmesg shows some errors that were not shown on previous linux kernels (5.15 worked, 6.1 doesnt)
    • These might be fixable if I actually create all audio functions the real controller has, but I dont think thats the problem
    • Windows 10 detects the Raspberry Pi as a DualSense gamepad without showing any errors in the Device Manager.
  • Output to Host: Every input of the PS5 Gamepad that is supported, is being written into the device file correctly
    • Supported inputs: all buttons, joystick movement and press, triggers, bumpers and touchpad pressed (without location)
    • Missing: Touchpad touch location, vibration, leds, battery state readout

In short:

  • Controller is recognized by Steam. Currently, the latency is to high to be usable for gaming.
  • Vibration not supported

Idea

Personally, I enjoy playing with PlayStation controllers, simply because of their almost symmetrical layout. The problem is that only one platform supports one of the PS controllers. Only the PS4 natively supports the PS4 controller, and only the PS5 natively supports the PS5 controller. With this project I want to solve this problem by using the raspi in between to translate the used controller for the connected platform. I expect there will be some problems as Playstations communicate both ways, but maybe this can be ignored...

What I can test

  • Platforms: PS4 and PC
  • Controllers: PS5, PS4 connected via BT to Raspi

Used hardware

  • Raspberry Pi Zero 2W
    • Since this raspi is able to run the normal raspi OS, this project is made easier because the bluetooth and usb connection is handled by the OS, which means the data can just be read from and written to a filehandler instead of having to connect everything manually.
  • Raspberry Sense HAT (not yet)
  • Emulator stick
    • Connects to PS5 controllers and emulates them as XBOX for Win10 and PS4 for PS4
    • Why don't I just use this?
      • When playing coop with a friend on a PS4, this stick often loses connection with my PS5 controller
        (The stick or controller is not faulty, because when playing alone the connection lasts until the controller battery dies)

Goal

Due to the PS4 problem described in "Used Hardware", the Raspi must be connected to the targeted platform via a USB cable.

Ideally, the Raspi would support a Bluetooth connection to two controllers, processing both inputs and translating them to the platform. Since USB allows a lot of things in one connection this shouldn't really be a problem :D

Possible Inspirations / Mapping Sources

Why dont I just use these?

  1. I want to learn how this can be done
  2. Both firmwares dont support PS5 controllers

About

The goal of this repo is to provide the software to use a Raspberry Pi as a middle-man between any controller/gamepad and any game platform (PS, XBOX, PC, ..)

Topics

Resources

License

Stars

Watchers

Forks