From 8fdc02a640a38eeea2c52f9f0ca95d3ab9ee9fc5 Mon Sep 17 00:00:00 2001 From: Christoffer Martinsson Date: Fri, 14 Mar 2025 20:01:00 +0100 Subject: [PATCH] Added support for OS lock key --- README.md | 8 ++++---- rp2040_42/src/layout.rs | 6 +++++- rp2040_42/src/main.rs | 11 +++++++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 72a2e5a..8be6af5 100644 --- a/README.md +++ b/README.md @@ -16,14 +16,14 @@ ------------------- ------------------- Layer 1 (Fn) --------------------------------------- --------------------------------------- - | Esc | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | BSpc | + | 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| | § | SLOK| Gui | | CpLk| BSpc | + | 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|-------------------- @@ -78,7 +78,7 @@ Rust embedded, rp2040 HAL ```text Layer 0 -------------------------------------- ------ ------ -------------------------------------- - | Tab | Q | W | E | R | T || SLCK| |PrSrc|| Y | U | I | O | P | Å | + | Tab | Q | W | E | R | T || SLk | |PrSrc|| Y | U | I | O | P | Å | | LCtrl | A | S | D | F | G || M2 | | M5 || H | J | K | L | Ö | Ä | | Shift | Z | X | C | V | B || M3 |-----| M6 || N | M | ,; | .: | -_ | Shift | --------------------| Alt | Fn | Spc || BSpc| Gui |Enter|| Spc | Fn |AG+Fn|-------------------- @@ -92,7 +92,7 @@ Rust embedded, rp2040 HAL ------------------ ----------------- ------------------ Layer 2 (Fn + Fn) -------------------------------------- ------ ------ -------------------------------------- - | Esc | F11 | F12 | F13 | F14 | || M1 | | M4 || § | SLCK| | | CpLk| BSpc | + | Esc | F11 | F12 | F13 | F14 | || M1 | | M4 || § | SLk | | | CpLk| BSpc | | LCtrl | F15 | F16 | F17 | F18 | F19 || M2 | | M5 || Left| Down| Up |Right| Del | Enter | | Shift | F20 | F21 | F22 | F23 | F24 || M3 |-----| M6 || Home| PgD | PgU | End | Ins | Shift | --------------------| Alt | Fn | Spc || BSpc| Gui |Enter|| Spc | Fn |AG+Fn|-------------------- diff --git a/rp2040_42/src/layout.rs b/rp2040_42/src/layout.rs index a32776e..7698af7 100644 --- a/rp2040_42/src/layout.rs +++ b/rp2040_42/src/layout.rs @@ -39,6 +39,10 @@ pub const FN_BUTTONS: [u8; 3] = [40, 43, 44]; /// Sticky button [index, layer] pub const STICKY_BUTTON: [u8; 2] = [7, 2]; +/// OS Lock button [index, layer] +pub const OS_LOCK_BUTTON: [u8; 2] = [9, 2]; +pub const OS_LOCK_BUTTON_KEYS: [Keyboard; 2] = [Keyboard::LeftGUI, Keyboard::L]; + /// Button map to HID key (three Function layers) pub const MAP: [[Keyboard; NUMBER_OF_KEYS]; 3] = [ [ @@ -160,7 +164,7 @@ pub const MAP: [[Keyboard; NUMBER_OF_KEYS]; 3] = [ Keyboard::Grave, // 6 § Keyboard::NoEventIndicated, // 7 STICKY lock Keyboard::LeftGUI, // 8 - Keyboard::NoEventIndicated, // 9 + Keyboard::NoEventIndicated, // 9 OS Lock Keyboard::CapsLock, // 10 Keyboard::DeleteForward, // 11 Keyboard::LeftControl, // 12 diff --git a/rp2040_42/src/main.rs b/rp2040_42/src/main.rs index 80860da..e888380 100644 --- a/rp2040_42/src/main.rs +++ b/rp2040_42/src/main.rs @@ -341,6 +341,17 @@ fn get_keyboard_report( *sticky_key = Keyboard::NoEventIndicated; } + // Check if OS Lock button is pressed (SET STICKY) + if key.pressed != key.previous_pressed + && key.pressed + && index as u8 == layout::OS_LOCK_BUTTON[0] + && fn_mode == layout::OS_LOCK_BUTTON[1] + { + // Index 36, 37, 38, 45, 46, 47 are not used by any other keys + keyboard_report[36] = layout::OS_LOCK_BUTTON_KEYS[0]; + keyboard_report[37] = layout::OS_LOCK_BUTTON_KEYS[1]; + } + // Set fn mode for the pressed button if key.pressed != key.previous_pressed && key.pressed { key.fn_mode = fn_mode;