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 |
Half-duplex pio |
β
|
|
Bitbang |
β |
β |
Driver |
RP2040 |
NRF52840 |
ws2812 pio |
β
|
|
Bitbang |
β |
β |
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