Skip to content
/ rktk Public

Keyboard firmware framework built with Rust and embassy

License

Notifications You must be signed in to change notification settings

nazo6/rktk

Repository files navigation

rktk

Rust Keyboard Toolkit

rktk is a keyboard firmware framework written in Rust.

Currently, rktk supports nRF52840 and RP2040, and although there are bugs and performance issues (especially related to split keyboards), it can be used as a decent keyboard.

This firmware consists of two parts: the core functionality implemented in the rktk crate and the driver that actually interacts with the hardware. This makes it easy to extend.

Libraries

Crate crates.io docs.rs repo
rktk Crates.io Version docs.rs link
rktk-drivers-common Crates.io Version docs.rs link
rktk-drivers-nrf Crates.io Version docs.rs link
rktk-drivers-rp Crates.io Version docs.rs link
rktk-keymanager Crates.io Version docs.rs link
rktk-rrp Crates.io Version docs.rs link
rktk-rrp-client-webhid Crates.io Version docs.rs link
rktk-cli Crates.io Version link
rktk-client link

Features

  • ✅ : Working
  • 🟡 : Basic implementation only or known bugs.
  • 🔴 : Planned.
  • (blank): N/A.

Core features

Feature Status Note
Keyscan
Key mapping 🟡 See below table for detail
Mouse
Encoder 🟡
Hook system 🟡
USB
Bluetooth 🟡
Split keyboard
Display 🟡
Storage 🟡
RGB led 🟡
Remapper (rktk-client) 🟡

Key mapping features

Key mapping features is implemented in rktk-keymanager and this crate does not depend on rktk or embassy.

Feature name Status Note
Key action
Tap-Hold Called as Mod-Tap or Layer-Tap in QMK
Tap Dance
Oneshot key
Combo key 🟡
Key code
Normal key
Modifier key
Media key
Mouse key
Mouse scroll momentary
Layer momentary (MO)
Layer toggle (TG)

Drivers

Driver that is available in the rktk-drivers-common crate is available for all platforms which have embassy compatible HAL.

Driver Common RP2040 NRF52840
Key scanner
Matrix 🟡 - -
Matrix with shift register - -
(Japanese) Duplex-Matrix 🟡 - -
 
Mouse
PMW3360 - -
PAW3395 - -
 
Encoder 🟡 - -
 
Debouncer
Eager debouncer 🟡 - -
 
Host communication
USB - -
Bluetooth 🟡 (SoftDevice)
 
Split communication
Half-duplex (single wire, TRS) 🟡 (PIO) 🟡 (UART)
Full-duplex (dual wire, TRRS) ✅ (UART)
Bluetooth 🔴
 
Display
SSD1306 - -
 
Storage
sequential-storage (NorFlash) 🟡 - -
 
RGB led
WS2812 ✅ (PIO) ✅ (PWM)

Examples

You can find examples in the examples directory.

Development

Dependencies

arm-none-eabi-objcopy is required to generate uf2 file.

MSRV

rktk actually doesn't depends on nightly feature of rustc, but uses nightly cargo features like per-package-target. So, it requires nightly toolchain.

Creating new keyboard

Currently, there is no guide for building a new keyboard, but you can refer to the examples in this repo or the following repository:

Credits & Acknowledgements

  • rumcake: RP2040 double-tap-reset driver
  • uf2: uf2conv.py, uf2families.json
  • rust-dilemma: RP2040 Half-duplex communication
  • qmk: RP2040 Half-duplex communication
  • rmk: bluetooth implemention

About

Keyboard firmware framework built with Rust and embassy

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages