Passing Link is an open source game controller firmware implementation focused on minimizing latency and supporting inexpensive development boards. Currently, the latency as measured by WydD's usblag project is around 0.95ms.
- USB output
- PS3 output
- PS4 output, with controller authentication supported with extracted keys
- Nintendo Switch output (thanks to progmem for researching Switch controllers)
- PC output via PS4
- Console autodetection (detects Switch and PS3, with fallback to PS4)
- Razer Panthera touchpad support
- USB firmware upgrade support
- Unimplemented hardware support
- PS4 audio output
- Act as a USB decoder/converter
- Input/output over SPI
- USB input
# Install tool dependencies
apt-get -y install --no-install-recommends build-essential cmake git ninja-build python3-pip python3-setuptools python3-pyelftools wget
# Install the Zephyr SDK
ZEPHYR_SDK_VERSION=0.11.1
export ZEPHYR_SDK_INSTALL_DIR=~/zephyr-sdk
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZEPHYR_SDK_VERSION}/zephyr-sdk-${ZEPHYR_SDK_VERSION}-setup.run
sh zephyr-sdk-${ZEPHYR_SDK_VERSION}-setup.run -- -d $ZEPHYR_SDK_INSTALL_DIR
# Install west, Zephyr's source management tool
pip3 install west
# Checkout the source
west init -m https://github.com/passinglink/passinglink passinglink
cd passinglink
west update
# Build and flash
cd passinglink
export BOARD=pl_bluepill
./scripts/build.sh
# `ninja -C build/$BOARD menuconfig` to configure
./scripts/flash.sh
# If you have an extracted PS4 authentication key:
./scripts/provision.sh "arbitrary name string" ds4.der ds4.serial ds4.sig
# See also: https://github.com/passinglink/zephyr-docker/blob/master/Dockerfile
Passing Link is based on the widely supported Zephyr RTOS with no specific hardware requirements, so it should be portable to a wide variety of microcontrollers. The following is a list of microcontrollers/development boards that are actively used for development:
- Custom PCB with NRF52840 (aka
pl_e73
)- 64MHz, 256kB RAM, 1MB flash
- Primary development target
- Bluetooth LE support (but not useful for implementing a wireless controller, because of missing Bluetooth Classic support)
- Various nRF development boards
- 64MHz, 256kB RAM, 1MB flash
- nRF52840 MDK USB Dongle (aka
pl_dongle
)- $18 on Amazon
- limited GPIOs
- Adafruit Feather nRF52840 Express
- $25
- 21 GPIOs
- Particle Xenon (discontinued by manufacturer)
- Generic STM32F103 Bluepill boards (aka
pl_bluepill
)- 72MHz, 20kB RAM, 64kB flash
- Recommended against due to resource constraints, but will be supported for as long as is feasible
- $3 from RobotDyn
- STM32F4 Discovery board (STM32F407VG) (aka
stm32f4_disco
)- 168MHz, 128kB RAM + 64kB CCM, 1MB flash
- 2 USB controllers (currently only 1 can be used).
- ~$22 from Digi-Key. Cheaper option should be available elsewhere.
Passing Link is open source software licensed under the MIT license.
Passing Link depends on and makes modifications to Zephyr and mbedTLS, both of which are licensed under the Apache-2.0 license. The modified sources can be found in the GitHub organization.