An open source implementation of Nintendo's WaveBird protocol for Silicon Labs Gecko SoCs.
libwavebird provides the radio configurations and encoding/decoding logic required to communicate with Nintendo WaveBird wireless controllers and receivers. It serves as the foundation of the WavePhoenix project.
- Event-based radio layer demodulates and frames incoming FSK+DSSS WaveBird packets
- Packet decoding/encoding functions handle BCH error correction and CRC validation, with up to 8-bit burst error correction
- Manual channel selection and virtual pairing support
- Helpers for working with decoded WaveBird messages
- Parse 10-bit controller IDs
- Parse input state messages (button, stick, and trigger states)
- Parse origin messages (stick and trigger calibration data)
This library was designed for Silicon Labs Gecko Series 1 and Series 2 SoCs which support proprietary 2.4 GHz wireless protocols.
Radio modules based on the EFR32BG22 SoC are recommended, but it has been tested with the following SoC families:
- EFR32xG1
- EFR32xG14
- EFR32xG22
To add support for a new SoC, a .radioconf file for that platform will need to be created in config/rail.
This library is packaged as a Silicon Labs SDK extension.
Follow the Silicon Labs Guide to add this repository as an extension.
Open your project's Software Components tab and install the
libwavebirdcomponent.
Clone into your SDK's extension folder and trust the extension:
slc signature trust -extpath <path_to_sdk>/extension/libwavebirdAdd to your project's .slcp file:
sdk_extension:
- id: libwavebirdversion: 1.0.0component:
- id: libwavebirdfrom: libwavebirdSee the examples directory for basic usage examples.
You can also check out the WavePhoenix source code for a more complete example of using this library to build a WaveBird receiver.
If you make changes to the .radioconf files in the config/rail directory, you will need to regenerate the rail_config.c and rail_config.h files.
To regenerate the files, run scripts/generate_rail_config.py.
Build the test suite
cmake -Bbuild && cmake --build buildRun the tests
ctest --test-dir build --output-on-failureThis project is licensed under the MIT License. See the LICENSE file for details.