cmdr-keyboard/README.md

80 lines
4.2 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CMDR Keyboard (swedish layout)
_This HW(PCB) was original made for use with the TeensyLC module and is reused by patching it to fit the rp2040-zero module_
![image](keyboard_42_green.jpg)
## Layout
```text
Layer 0
--------------------------------------- ---------------------------------------
| Tab | Q | W | E | R | T | | Y | U | I | O | P | Å |
| LCtrl | A | S | D | F | G | | H | J | K | L | Ö | Ä |
| Shift | Z | X | C | V | B | | N | M | ,; | .: | -_ | Shift |
--------------------| Alt | Fn | Spc | |Enter| Fn |AG+Fn|--------------------
------------------- -------------------
Layer 1 (Fn)
--------------------------------------- ---------------------------------------
| Esc | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | BSpc |
| LCtrl | 1! | 2"@ | 3#£ | 4¤$ | 5% | | 6& | 7/{ | 8([ | 9)] | 0=} | Enter |
| Shift | 6& | 7/{ | 8([ | 9)] | 0=} | | <>| | ´`± | '*´ | ¨^~ | +?\ | Shift |
--------------------| Alt | Fn | Spc | | BSpc| Fn |AG+Fn|--------------------
------------------- -------------------
Layer 2 (Fn + Fn)
--------------------------------------- ---------------------------------------
| Esc | F11 | F12 | F13 | F14 |PrSrc| | § | SLk | Gui | OSLk| CpLk| BSpc |
| LCtrl | F15 | F16 | F17 | F18 | F19 | | Left| Down| Up |Right| Del | Enter |
| Shift | F20 | F21 | F22 | F23 | F24 | | Home| PgD | PgU | End | Ins | Shift |
--------------------| Alt | Fn | Spc | | BSpc| Fn |AG+Fn|--------------------
------------------- -------------------
```
## Firmware features
- 42 key split layout (36 finger keys + 6 thumb keys) with a Swedish-centric NKRO HID mapping across three layers.
- Function layer system with two Fn keys (40/43/44) enabling sticky lock, OS lock and deep modifier combos without ghosting.
- High-speed matrix scanning (250µs cadence) with scan-based debounce, per-key press spacing protection and idle/suspend rate throttling.
- Bootloader entry options including `Fn+Fn+LCtrl+LShift+RShift` runtime chord and power-on detection on button index 0.
- Status LED heartbeat carried over from the earlier CMDR firmware: startup heartbeat, activity/idle transitions, sticky-state colors, Caps Lock flash, suspend blanking and error signalling.
- Power-aware USB handling that drops scan frequency 20× during suspend while honouring wake-on-input and immediate resume.
## Development workflow
Recurring tasks are defined in the root `Justfile`:
- Build-check the embedded target: `just check`
- Run host-side tests: `just test`
- Remove build artifacts: `just clean`
- Build and copy a UF2 to a mounted RP2040: `just flash` (auto-detects `/Volumes/*`, `/media/*`, `/run/media/*`; override with `mount=/path` and optional `timeout=30` seconds)
- Build, then transfer a UF2 over SSH: `just flash-ssh target=user@host mount=/media/user/RPI-RP2`
The flash recipes rely on `python3`, the bundled `rp2040/uf2conv.py`, `tools/copy_uf2.py`, and `cargo objcopy` (install with `rustup component add llvm-tools-preview` and `cargo install cargo-binutils`). For SSH transfers you also need passwordless access or supply a key path, e.g. `just flash-ssh target=user@host mount=/media/user/RPI-RP2 key=~/.ssh/id_ed25519`.
## Build environment rp2040 Zero
Rust embedded, rp2040 HAL
- Cargo (cargo.toml)
- rustup target add thumbv6m-none-eabi
- Use install script to flash device
- Flashing via rp2040 USB bootloader
- Pressing reset/boot button on rp2040 Zero board
- Pressing upper left corner on the keyboard when connecting the usb cable
- Pressing Fn+Fn+Shift+Shift+Ctrl
## Hardware
[Schematics](eCAD/cmdr_mainboard_42_v1.pdf)
[patch instruction](/eCAD/rp2040_42_patch_instruction.md)
- 1x rp2040 Zero
- 36x Cherry MX compatible switches
- 6x Kailh Choc low profile switches
- 42x 1N4148 diodes
- 1x PCB [Gerber files](eCAD/cmdr_mainboard_42_gerber_v1.zip) (please see [patch instructions](/eCAD/rp2040_42_patch_instruction.md))
- 1x MCU cover [STL file](mCAD/cmdr_keyboard_42_cover.stl)
- 1x 6x3 Cherry MX mounting jig (optional) [STL file](mCAD/cmdr_mounting_jig-MountingJig.stl)
---