diff --git a/README.md b/README.md index bc8892d..1fdb155 100644 --- a/README.md +++ b/README.md @@ -30,24 +30,24 @@ _This HW(PCB) was original made for use with the TeensyLC module and is reused b ------------------- ------------------- ``` -## Features +## Firmware features -- 42 keys "Split" keyboard layout. 36 finger buttons and 6 thumb buttons. -- Extreme low profile (only one pcb). -- Cost efficient solution with one pcb and one 3D printed cover. -- Function layers provide three active maps (primary + two Fn layers) with sticky-lock support. -- High-speed key scanning: 250 µs cadence with enhanced 5-scan debounce (1.25ms) and anti-bounce protection to prevent double characters. -- Status indication driven by the joystick-style heartbeat model: - - Heartbeat green while waiting for USB enumeration. - - Solid green during normal operation; automatic heartbeat idle animation after 5 s inactivity. - - Blue solid / flashing when sticky lock is armed / latched. - - Red solid on firmware error, red flashing for Caps Lock. - - LED turns off during USB suspend for power savings. -- Power management for USB suspend/resume: - - Automatic power saving when USB host suspends device. - - Reduced key scanning frequency (20x slower) during suspend. - - Wake-on-input detection for any key press. - - Immediate resume response when keys are pressed. +- 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 derived from joystick 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. + +## Install script (`install.sh`) + +The repository includes a host automation helper for the RP2040 firmware. + +- Quick start: `./install.sh check` (compilation + clippy) or `./install.sh test` (full suite including host-side tests). +- Flashing: `./install.sh flash --local` for direct UF2 copy on Linux/macOS, or `./install.sh flash --ssh --target user@host --mount /path` for remote deployments. +- Cleaning: `./install.sh clean` removes cargo artefacts, generated binaries and UF2 images. +- Prerequisites are validated automatically (Rust toolchain, `thumbv6m-none-eabi`, `cargo-binutils`, `uf2conv.py`, optional SSH settings). +- Script output uses colour-coded sections for readability and fails fast on missing dependencies or connectivity issues. ## Build environment rp2040 Zero @@ -55,10 +55,11 @@ Rust embedded, rp2040 HAL - Cargo (cargo.toml) - rustup target add thumbv6m-none-eabi - - cargo install elf2uf2-rs --locked + - 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