Skip to content
/ rmk Public
forked from HaoboGu/rmk

A Rust keyboard firmware with layers, online keymap editing and experimental BLE wireless support

License

Notifications You must be signed in to change notification settings

uuhan/rmk

 
 

Repository files navigation

RMK

Crates.io Docs Build Discord

A feature-rich Rust keyboard firmware.

Features

  • Support a wide range of microcontrollers: Powered by embassy, RMK supports a wide range of microcontrollers, such as stm32/nrf/rp2040
  • Real-time keymap editing: Keyboard layout can be customized at the compile-time with real-time keymap editing using vial
  • Advanced keyboard features: Many advanced keyboard features are available by default in RMK, such as layer switch, media control, system control, mouse control, etc
  • Wireless: (Experimental) BLE wireless support with auto-reconnection/multiple devices feature for nrf52 microcontrollers, tested on nrf52840

News

Click to checkout more news
  • [2024.01.26] 🎉rmk-template is released! Now you can create your own keyboard firmware with a single command: cargo generate --git https://github.com/HaoboGu/rmk-template

  • [2024.01.18] RMK just released version 0.1.0! By migrating to Embassy, RMK now has better async support, more supported MCUs and much easier usages than before. For examples, check boards folder!

Usage

Option 1: Initialize from template

You can use rmk-template to initialize your project.

cargo install cargo-generate
cargo generate --git https://github.com/HaoboGu/rmk-template

Then follow the steps in generated README.md. Check RMK's User Guide for details.

Option 2: Try built-in examples

Example can be found at boards. The following is a simple step-to-step instruction for rp2040 and stm32h7

rp2040

  1. Install probe-rs

    cargo install probe-rs --features cli
  2. Build the firmware

    cd boards/rp2040
    cargo build
  3. Flash

    If your rp2040 board is connected with a debugging probe, just use the following command to flash RMK firmware to the board:

    cd boards/rp2040
    cargo run

    If you don't have a debugging probe, you can use elf2uf2-rs to flash your firmware via USB. There are several additional steps you have to do:

    1. Install elf2uf2-rs: cargo install elf2uf2-rs
    2. Update boards/rp2040/.cargo/config.toml, use elf2uf2 as the flashing tool
      - runner = "probe-rs run --chip RP2040"
      + runner = "elf2uf2-rs -d"
    3. Connect your rp2040 board holding the BOOTSEL key, ensure that rp's USB drive appears
    4. Flash
      cd boards/rp2040
      cargo run
      Then, you will see logs like if everything goes right:
      Finished release [optimized + debuginfo] target(s) in 0.21s
      Running `elf2uf2-rs -d 'target\thumbv6m-none-eabi\release\rmk-rp2040'`
      Found pico uf2 disk G:\
      Transfering program to pico
      173.00 KB / 173.00 KB [=======================] 100.00 % 193.64 KB/s  

stm32h7

  1. Install openocd

  2. Build the firmware

    cd boards/stm32h7
    cargo build
  3. Flash

    Make sure you have a debugging probe connected to your board. You can use both probe-rs and openocd to flash the firmware:

    # Use openocd
    openocd -f openocd.cfg -c "program target/thumbv7em-none-eabihf/debug/rmk-stm32h7 preverify verify reset exit"
    
    # Use probe-rs
    cd boards/stm32h7
    cargo run
  4. (Optional) Debug firmware using CMSIS-DAP

    Open the project using VSCode, choose Cortex-Debug - stm32h7 debug profile, then press F5, the firmware will be automatically compiled and flashed. A debug session is started after flashing. Check .vscode/tasks.json and .vscode/launch.json for details.

Current roadmap of RMK can be found here.

Minimum Supported Rust Version (MSRV)

This crate requires stable Rust 1.75 and up.

License

RMK is licensed under either of

at your option.

About

A Rust keyboard firmware with layers, online keymap editing and experimental BLE wireless support

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 99.7%
  • RPC 0.3%