Expand description
RMK
Keyboard firmware for cortex-m, with layer/dynamic keymap/vial support, written in Rust.
News
Rmk just released version 0.1.0, migrate to Embassy! By migrating to Embassy, Rmk now has better async support, more supported MCUs and much easier usages than before. For examples using Embassy, check boards folder!
Prerequisites
This crate requires nightly Rust. openocd(stm32) or probe-rs(rp2040) is used for flashing & debugging.
Usage
You can build your own keyboard firmware using RMK or try built-in firmware example for stm32h7 & rp2040.
Build your own firmware
Example can be found at boards. The following is a simple
step-to-step instruction for creating your own firmware:
- Create a rust embedded project, Add rmk to your project using
cargo add rmk - Choose your target, use
rustup target add <your-target-name>to install the target. Here is the doc for target choosing. For example, rp2040 is Cortex-M0+, so its target isthumbv6m-none-eabi. - Create
.cargo/config.tomlin your project’s root, specify your target here. Seeboards/stm32h7/.cargo/config.toml - Create
main.rs, initialize your MCU in rtic’smod app, create usb polling task and keyboard task. Seeboards/stm32h7/src/main.rs
Use built-in example
rp2040
- Install probe-rs
cargo install probe-rs --features cli - Build the firmware
cd boards/rp2040 cargo build - Flash it
cd boards/rp2040 cargo run
stm32h7
-
Install openocd
-
Build the firmware
cd boards/stm32h7 cargo build -
Flash
openocd -f openocd.cfg -c "program target/thumbv7em-none-eabihf/debug/rmk-stm32h7 preverify verify reset exit" -
(Optional) Debug firmware using CMSIS-DAP
Open the project using VSCode, press
F5, the firmware will be automatically compiled and flashed. A debug session is started after flashing. Check.vscode/tasks.jsonand.vscode/launch.jsonfor details.
Roadmap
A lot of todos at the list, any contributions are welcomed :)
- support rp2040
- basic keyboard functions
- layer
- system/media keys
- vial support
- eeprom
- keyboard macro
- encoder
- RGB
- cli tools
License
Rmk is 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.
Re-exports
pub use embassy_sync;pub use embassy_usb;pub use usbd_hid;
Modules
Macros
- Macro for consumer control action
- Macro for creating layout of actions
- Macro for layer activate with modifier
- Macro for layer or tap key
- Macro for mouse key action
- Macro for layer activate
- Macro for oneshot layer
- Macro for system control action
- Macro for layer toggle
- Macro for layer or tap toggle
Functions
- Initialize keyboard core and keyboard usb device