Primary firmware for the NaxGCC, and optional firmware for the PhobGCC, utilizing the embassy-rs framework.
Find a file
Marcel Romagnuolo 5cdd3348f4
All checks were successful
Publish nightly release / build (push) Successful in 1m31s
implement filter for angled ftilts (#23)
Reviewed-on: #23
Reviewed-by: Naxdy <naxdy@naxdy.org>
Co-authored-by: Marcel Romagnuolo <marcello.r@gmx.net>
Co-committed-by: Marcel Romagnuolo <marcello.r@gmx.net>
2024-06-29 12:58:01 +00:00
.changelogs chore: fix changelog symlink 2024-04-25 11:26:24 +02:00
.forgejo/workflows chore: clippy concurrency (#10) 2024-04-08 21:25:02 +00:00
.github/workflows chore(ci): add github action for PR's 2024-04-16 00:01:55 +02:00
src implement filter for angled ftilts (#23) 2024-06-29 12:58:01 +00:00
.envrc project setup with sample code 2024-03-03 16:31:37 +01:00
.gitignore add button mapping, implement SPI, use patched embassy 2024-03-18 10:36:47 +01:00
build.rs refactor (WORKING) using embassy 2024-03-12 00:08:34 +01:00
Cargo.lock feat: bump to v1.1.1 / improve opt-level 2024-04-25 10:50:31 +02:00
Cargo.toml feat: don't inline time-critical functions 2024-04-30 13:59:52 +02:00
CONTRIBUTING.md chore: add CONTRIBUTING.md 2024-04-12 21:46:04 +02:00
Embed.toml project setup with sample code 2024-03-03 16:31:37 +01:00
flake.lock change(project): use https for git resolution 2024-04-05 12:39:39 +02:00
flake.nix change(project): use https for git resolution 2024-04-05 12:39:39 +02:00
LICENSE chore: amend readme & add license 2024-04-05 23:37:35 +02:00
memory.x refactor (WORKING) using embassy 2024-03-12 00:08:34 +01:00
README.md chore: add CONTRIBUTING.md 2024-04-12 21:46:04 +02:00

NaxGCC

The main repository is located at git.naxdy.org. The GitHub mirror exists solely for the sake of discoverability and redundancy.

Please do not submit issues or pull requests on GitHub.

Find the latest releases here: https://git.naxdy.org/NaxdyOrg/NaxGCC-FW/releases

Full documentation is available at gcc.naxdy.org.

Join the NaxGCC matrix chat at #naxgcc:naxdy.org to discuss development or ask for help.


This repo houses the firmware for the NaxGCC, a GameCube-style controller built on the PhobGCC. The firmware can also be used as an optional firmware for the PhobGCC, though the PhobGCC will then have to be connected to the console directly via USB.

Like the PhobGCC, the NaxGCC uses hall effect sensors instead of potentiometers for stick input. Additionally, it connects directly to the console via USB, by pretending to be a GCC adapter with 1 controller (itself) connected. This eliminates one additional layer of polling, and thus reduces perceived latency and improves input consistency. The NaxGCC also features a special "input consistency mode" that even further improves input consistency, beyond what is delivered by any other controller / adapter. The NaxGCC firmware makes use of the embassy-rs framework for asynchronous operations. Mainly, this means that the firmware is capable of polling the sticks and buttons at different frequencies, further improving input consistency and latency for button inputs.

Key Aspects

Click on any of these to expand.

NaxGCC has all the important PhobGCC features.

The hardware of NaxGCC is directly forked from PhobGCC's, meaning it benefits from the same improvements over a "regular" GCC, most importantly the fact that it uses hall-effect sensors instead of potentiometers for reading your stick positions.

Furthermore, large parts of its firmware have also been taken from PhobGCC's firmware, such as the snapback filter, cardinal snapping, and notch remapping to name a few. If you're used to calibrating a PhobGCC, you will have no trouble here.

Firmware is written in Rust, using the embassy-rs framework for asynchronous operations.

The firmware being written in Rust allows for writing much cleaner code than one would normally be used to when writing firmware in C, because Rust allows for many zero and low cost abstractions in order to enhance code readability and maintainability. Adding embassy-rs for asynchronous operations on top of that provides 2 main benefits:

  1. It further improves code readability and maintainability by allowing to separate functionality on a semantic level.
  2. It allows multiple tasks to be executed on the same thread, sharing their workload. Effectively, due to this, the NaxGCC can update its buttons at a ~50us (that's microseconds) interval, and its sticks at a 1ms interval.
Provides both the lowest latency of any Switch controller, as well as the best input integrity.

Because the NaxGCC connects directly to the console via USB, it already outperforms any controller that has to go through an adapter in terms of input latency.

Further, the NaxGCC has a special "input consistency" mode (enabled by default), which ensures a \gt 98\% input accuracy, compared to \lt 76\% for any other controller (worse if there is an adapter in the mix, with the exception of the Lossless Adapter).

For details on how it works, have a look at our documentation.

Compatible with Phob hardware.

The NaxGCC firmware is compatible with regular Phob 2.0 boards (those using an RP2040 microcontroller), since it's originally forked from the PhobGCC project. This means that if you are willing and able to slightly modify your controller shell to allow a micro USB cable to connect to your Phob board during play, you can turn your existing PhobGCC into a NaxGCC at no extra cost!

Contributing

The NaxGCC firmware is built using nix, which also provides a ready-to-go development environment, complete with all the tooling and libraries you need to get going. Simply install nix, enable flakes and run

nix develop .

and you're ready to work on the project. Submit your pull requests here. Also be sure to have a look at our CONTRIBUTING.md for more information on how to contribute.