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.
- ✅ : Working
- 🟡 : WIP, partly implemented.
- 🔴 : WIP, not working yet.
- ❌ : Only planned. Not implemented yet.
- Empty: Not planned/Not needed.
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 |
✅ |
Driver |
RP2040 |
NRF52840 |
Duplex-Matrix Scanner |
✅ |
✅ |
Driver |
RP2040 |
NRF52840 |
PMW3360 |
✅ |
✅ |
Driver |
RP2040 |
NRF52840 |
SSD1306 |
✅ |
✅ |
Driver |
RP2040 |
NRF52840 |
Single wire Half-duplex (PIO) |
✅ |
|
Single wire Half-duplex (UART) |
|
🟡 |
Driver |
RP2040 |
NRF52840 |
WS2812 (PIO) |
✅ |
|
WS2812 (PWM) |
|
🟡 |
Driver |
RP2040 |
NRF52840 |
NRF Softdevice |
|
🟡 |
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.
- 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
- rmk for bluetooth implemention