rktk 0.0.1

rktk - Rust Keyboard Toolkit
docs.rs failed to build rktk-0.0.1
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: rktk-0.2.0

rktk

Rust keybord toolkit.

Currently, the firmware is for the Keyball61, but by separating the core functionality from the driver, the core functionality is architecture- and hardware-independent and can be easily extended.

Our current goal is to port it to the NRF52840 chip and connect it via bluetooth.

Features

  • ✅ : Working
  • 🟡 : WIP, partly implemented.
  • 🔴 : WIP, not working yet.
  • ❌ : Only planned. Not implemented yet.
  • Empty: Not planned/Not needed.

Core features

Feature Status
Keyscan
Media key support
Mouse
Layer system 🟡
Split keyboard
Non-Split keyboard 🟡
Display 🟡
Backlight LED 🟡
USB
Bluetooth
VIA/Vial support
Double-tap reset

Drivers

Key scanner

Driver RP2040 NRF52840
Duplex-Matrix Scanner 🔴

Mouse

Driver RP2040 NRF52840
PMW3360 🔴

Display

Driver RP2040 NRF52840
SSD1306 🔴

Split

Driver RP2040 NRF52840
Half-duplex pio
Bitbang

Backlight

Driver RP2040 NRF52840
ws2812 pio
Bitbang

USB

RP2040 NRF52840
🔴

Bluetooth

RP2040 NRF52840

Double tap reset

RP2040 NRF52840

Architecture

There are rktk, rktk-drivers-common, rktk-drivers-{rp2040,nrf52} and a crate for each keyboard.

The rktk crate is completely hardware independent and provides the core functionality of the keyboard.

The rktk-drivers-common uses the abstraction of embedded-hal and embedded-hal-async to provide the basis for drivers that can be used universally on a variety of chips. This makes porting drivers to various chips very easy.

The rktk-drivers-* crate provides drivers for each chip. Most drivers are wrappings of rktk-drivers-common, but some are proprietary implementations, such as ws2812-pio.

Each keyboard crate can then create a driver for the appropriate chip and pass it to rktk::task::start to configure the actual working keyboard firmware. The only keyboard that currently works is keyball61-rp2040, but it is not too difficult to create your own keyboard by referring to the keyboards/keyball61-rp2040 directory.

Credits

  • rumcake (rp2040 double-tap-to-bootloader driver)
  • uf2 (uf2conv.py, uf2families.json)
  • ARM GNU Toolchain (arm-none-eabi-objcopy)
  • rust-dilemma and qmk for pio half-duplex