Rust Wiimote Extension-Controller (Nunchuck/classic controller) Driver
This is a platform agnostic Rust driver for Wiimote Extension controllers (Nunchuk, Classic, Classic Pro, NES Classic, SNES Classic, and clones) using the embedded-hal traits.
This driver allows you to read all axes and buttons for Wiimote Extension controllers
Physical protocol details
Wiimote extension controllers are designed to talk to a Wiimote over an I2C interface at 3.3V. The official controllers are capable of operating in fast-mode (400Khz) though some clones require normal-mode (100Khz). The protocol is quite simple - it's not officially documented, but it has been reverse-engineered.
- http://wiibrew.org/wiki/Wiimote/Extension_Controllers
- http://wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck
- http://wiibrew.org/wiki/Wiimote/Extension_Controllers/Classic_Controller
High Resolution mode is a recent addition and was only discovered once the NES Classic console was released. It is described here:
Wii Motion Plus support is planned, both in standalone and combo mode
Usage
To use this driver, import this crate and an embedded_hal implementation,
then instantiate the appropriate device.
use Classic;
use I2C; // insert an include for your HAL i2c peripheral name here
Status
- Nunchuk is functional, no calibration yet
- Classic controllers supported in regular and HD mode
Support
For questions, issues, feature requests like compatibility with other Wiimote extension controllers please file an issue in the github project.
License
Nunchuk portions of this crate are largely derived from
https://github.com/rust-embedded/rust-i2cdev/blob/master/examples/nunchuck.rs
Copyright 2015, Paul Osborne osbpau@gmail.com
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contributing
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.