diff --git a/.gitignore b/.gitignore index 7145b50..23ec5a2 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ rp2040_42/Cargo.lock rp2040_51/Cargo.lock *.FCBak rp2040/target +rp2040/firmware.uf2 diff --git a/README.md b/README.md index c9c137d..e168f02 100644 --- a/README.md +++ b/README.md @@ -35,14 +35,14 @@ - 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 keys with total of three layer support (Primary + 2fn layers). -- Status indication - - - LED green = Normal mode - - LED green flashing = waiting for USB enumeration - - LED blue on = sticky lock initiated - - LED blue flashing = sticky lock activated - - LED red = error - - LED red flashing = Caps Lock activated +- Function layers provide three active maps (primary + two Fn layers) with sticky-lock support. +- High-speed key scanning: 250 µs cadence with 2-scan press / 3-scan release debounce for sub-millisecond latency and immediate USB reporting. +- 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. + ## Build environment rp2040 Zero @@ -101,17 +101,11 @@ Rust embedded, rp2040 HAL ## Features -- 51 keys "Split" keyboard layout. 36 finger buttons and 9 thumb buttons and 6 function buttons. +- 51 keys "Split" keyboard layout. 36 finger buttons, 9 thumb buttons and 6 function buttons. - Extreme low profile (only one pcb). - Cost efficient solution with one pcb and one 3D printed cover. -- Function keys with total of three layer support (Primary + 2fn layers). -- Status indication - - - LED green = Normal mode - - LED green flashing = waiting for USB enumeration - - LED blue on = sticky lock initiated - - LED blue flashing = sticky lock activated - - LED red = error - - LED red flashing = Caps Lock activated +- Function layers with the same immediate-report, low-latency scanning pipeline as the 42-key variant (primary + two Fn layers with sticky lock). +- Status LED behaviour mirrors the joystick/42-key firmware: heartbeat during boot, idle animation after 5 s inactivity, blue indicators for sticky lock, and red for caps/error conditions. ## Build environment rp2040 Zero @@ -135,4 +129,3 @@ Rust embedded, rp2040 HAL - 1x PCB [Gerber files](eCAD/cmdr_mainboard_51_gerber_v1.zip) - 1x MCU cover (TBD) - 1x 6x3 Cherry MX mounting jig (optional) [STL file](mCAD/cmdr_mounting_jig-MountingJig.stl) - diff --git a/rp2040/firmware.uf2 b/rp2040/firmware.uf2 deleted file mode 100644 index 747db56..0000000 Binary files a/rp2040/firmware.uf2 and /dev/null differ diff --git a/rp2040/src/hardware.rs b/rp2040/src/hardware.rs index 4d853a7..6f10799 100644 --- a/rp2040/src/hardware.rs +++ b/rp2040/src/hardware.rs @@ -28,7 +28,7 @@ pub mod usb { pub mod timers { pub const USB_REPORT_INTERVAL_MS: u32 = 10; pub const USB_TICK_INTERVAL_US: u32 = 250; - pub const STATUS_LED_INTERVAL_MS: u32 = 4; + pub const STATUS_LED_INTERVAL_MS: u32 = 10; pub const IDLE_TIMEOUT_MS: u32 = 5_000; } diff --git a/rp2040/src/status.rs b/rp2040/src/status.rs index 348f512..a76f43e 100644 --- a/rp2040/src/status.rs +++ b/rp2040/src/status.rs @@ -109,7 +109,7 @@ impl LedEffect { match self { LedEffect::Solid => 0, LedEffect::Blink { period_ms } => period_ms / 2, - LedEffect::Heartbeat { .. } => 4, + LedEffect::Heartbeat { .. } => 10, } }