rmk 0.0.1

Keyboard firmware written in Rust
Documentation
# RMK

Keyboard firmware written in Rust. Tested on STM32.

## Prerequisites

This crate requires nightly Rust. `openocd` is used for flashing & debugging.

## Usage

An example can be found at [`boards/stm32h7`](https://github.com/HaoboGu/rmk/blob/main/boards/stm32h7). The following is a simple step-to-step instruction for creating your own firmware:

1. Create a rust embedded project, Add rmk to your project
2. Choose your target. For stm32h7, you can use `rustup target add thumbv7em-none-eabihf`
3. Create `.cargo/config.toml` in your project's root, specify your target. See [`boards/stm32h7/.cargo/config.toml`]https://github.com/HaoboGu/rmk/blob/main/boards/stm32h7/.cargo/config.toml
4. Create `main.rs`, initialize your MCU in rtic's `mod app`, create usb polling task and keyboard task. See [`boards/stm32h7/src/main.rs`]https://github.com/HaoboGu/rmk/blob/main/boards/stm32h7/src/main.rs

## Compile

Just run
```
cargo build

# Check binary size after build
cargo size
```


## Flash

Requires `openocd`.

VSCode: Press `F5`, the firmware will be automatically compiled and flashed. A debug session is started after flashing. Check `.vscode/tasks.json` for details.

Or you can do it manually using this command after compile:
```shell
openocd -f openocd.cfg -c "program target/thumbv7em-none-eabihf/debug/rmk-stm32h7 preverify verify reset exit"
``` 

## TODOs

A lot of todos at the list, any contributions are welcomed :)

- [x] basic keyboard functions
- [ ] system/media keys
- [ ] layer
- [ ] macro
- [ ] via/vial support
- [ ] encoder
- [ ] RGB
- [ ] cli