diff --git a/firmware/src/main.cpp b/firmware/src/main.cpp index 57a204e..c8410e7 100755 --- a/firmware/src/main.cpp +++ b/firmware/src/main.cpp @@ -45,10 +45,10 @@ * ------------------- ------------------- * Layer 2 (Fn1 + Fn1) * --------------------------------------- --------------------------------------- - * | F11 | F12 | F13 | F14 | F15 | F16 | | § | MWD | MWU | | | CapLk | - * | LCtrl | Play| Next| F17 | F18 | F19 | | Left| Down| Up |Right| Del | | + * | F11 | F12 | F13 | F14 | F15 | F16 | | § | | | | CpLk| BSpc | + * | LCtrl | Play| Next| F17 | F18 | F19 | | Left| Down| Up |Right| Del | Enter | * | Shift | F20 | F21 | F22 | F23 | F24 | | Home| PgD | PgU | End | Ins | Shift | - * --------------------| Alt | Fn1 | Win | | | Fn1 | Win |-------------------- + * --------------------| Alt | Fn1 | Win | | BSpc| Fn1 | Win |-------------------- * ------------------- ------------------- * Features: * @@ -73,6 +73,7 @@ #define KEY_FN1 10 + KEY_OFFSET // Function layer 1 button #define KEY_FN2 11 + KEY_OFFSET // Function layer 2 button +#define KEY_WIN_LATCH 12 + KEY_OFFSET // Function layer 2 button #define TAP_TIMEOUT 150 // Key tap timeout (ms) #define NBR_OF_BUTTONS 42 // Number of buttons used (42 in this case) @@ -129,11 +130,11 @@ Button buttons[NBR_OF_BUTTONS] = {5, KEY_R, KEY_F4, KEY_F15, IDLE, NO_KEY, false}, {6, KEY_T, KEY_F5, KEY_F16, IDLE, NO_KEY, false}, {7, KEY_Y, KEY_F6, '§', IDLE, NO_KEY, false}, - {8, KEY_U, KEY_F7, NO_KEY, IDLE, NO_KEY, false}, - {9, KEY_I, KEY_F8, NO_KEY, IDLE, NO_KEY, false}, + {8, KEY_U, KEY_F7, KEY_WIN_LATCH, IDLE, NO_KEY, false}, + {9, KEY_I, KEY_F8, KEY_LEFT_GUI, IDLE, NO_KEY, false}, {10, KEY_O, KEY_F9, NO_KEY, IDLE, NO_KEY, false}, - {11, KEY_P, KEY_F10, NO_KEY, IDLE, NO_KEY, false}, - {12, 'å', KEY_BACKSPACE, KEY_CAPS_LOCK, IDLE, NO_KEY, false}, + {11, KEY_P, KEY_F10, KEY_CAPS_LOCK, IDLE, NO_KEY, false}, + {12, 'å', KEY_BACKSPACE, KEY_BACKSPACE, IDLE, NO_KEY, false}, {13, KEY_LEFT_CTRL, KEY_LEFT_CTRL, KEY_LEFT_CTRL, IDLE, NO_KEY, false}, {14, KEY_A, KEY_1, KEY_MEDIA_PLAY_PAUSE, IDLE, NO_KEY, false}, {15, KEY_S, KEY_2, KEY_MEDIA_NEXT_TRACK, IDLE, NO_KEY, false}, @@ -145,7 +146,7 @@ Button buttons[NBR_OF_BUTTONS] = {21, KEY_K, KEY_8, KEY_UP_ARROW, IDLE, NO_KEY, false}, {22, KEY_L, KEY_9, KEY_RIGHT_ARROW, IDLE, NO_KEY, false}, {23, 'ö', KEY_0, KEY_DELETE, IDLE, NO_KEY, false}, - {24, 'ä', KEY_ENTER, NO_KEY, IDLE, NO_KEY, false}, + {24, 'ä', KEY_ENTER, KEY_ENTER, IDLE, NO_KEY, false}, {25, KEY_LEFT_SHIFT, KEY_LEFT_SHIFT, KEY_LEFT_SHIFT, IDLE, NO_KEY, false}, {26, KEY_Z, KEY_6, KEY_F20, IDLE, NO_KEY, false}, {27, KEY_X, KEY_7, KEY_F21, IDLE, NO_KEY, false}, @@ -161,9 +162,9 @@ Button buttons[NBR_OF_BUTTONS] = {37, KEY_LEFT_ALT, KEY_LEFT_ALT, KEY_LEFT_ALT, IDLE, NO_KEY, false}, {38, KEY_FN1, KEY_FN1, KEY_FN1, IDLE, NO_KEY, false}, {39, KEY_SPACE, KEY_SPACE, KEY_LEFT_GUI, IDLE, NO_KEY, false}, - {40, KEY_SPACE, KEY_BACKSPACE, NO_KEY, IDLE, NO_KEY, false}, + {40, KEY_SPACE, KEY_BACKSPACE, KEY_BACKSPACE, IDLE, NO_KEY, false}, {41, KEY_FN1, KEY_FN1, KEY_FN1, IDLE, NO_KEY, false}, - {42, KEY_LEFT_GUI, KEY_RIGHT_ALT, KEY_LEFT_GUI, IDLE, NO_KEY, false}}; + {42, KEY_FN1, KEY_RIGHT_ALT, KEY_RIGHT_ALT, IDLE, NO_KEY, false}}; // clang-format on /* End of keymap config ----------------------------------------------------------------------------------------------------------------------------- */ @@ -177,6 +178,7 @@ unsigned long button_timestamp = 0; unsigned long indicator_timestamp = 0; bool key_pressed = false; +bool win_latched = false; /** Perform key action. @@ -193,16 +195,38 @@ bool set_key(uint16_t keycode, uint8_t kstate) return false; } + else if (keycode == KEY_WIN_LATCH) + { + win_latched = true; + } + /* Normal keyboard keys (HID keyboard) */ else { if (kstate == RELEASED) { - Keyboard.release(keycode); + if (win_latched == true) + { + Keyboard.release(keycode); + Keyboard.release(KEY_LEFT_GUI); + win_latched = false; + } + else + { + Keyboard.release(keycode); + } } else if (kstate == PRESSED) { - Keyboard.press(keycode); + if (win_latched == true) + { + Keyboard.press(KEY_LEFT_GUI); + Keyboard.press(keycode); + } + else + { + Keyboard.press(keycode); + } } } @@ -338,6 +362,10 @@ void scan_buttons() /* 2 = blinking (CapsLock) */ status_led_mode = 2; } + else if (win_latched) + { + status_led_mode = 1; + } else { /* 0 = off (normal) */ diff --git a/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-10-05_213736.zip b/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-10-05_213736.zip deleted file mode 100644 index 00234e2..0000000 --- a/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-10-05_213736.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:57090989789a367f06352bca4264064db0fe48665ff3388f90a2bc3e7f7a0b90 -size 785582 diff --git a/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-10-05_214828.zip b/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-10-05_214828.zip deleted file mode 100644 index a969ed4..0000000 --- a/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-10-05_214828.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:194c5f10f1d79972590cccf2d6443ca1d3ec68c6f83f2b0af23200b783fcd4b8 -size 1247338 diff --git a/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-10-05_215432.zip b/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-10-05_215432.zip deleted file mode 100644 index 8134b23..0000000 --- a/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-10-05_215432.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3130b72513d2c843b8de480d87db5b1dd324ff38748b5f191e3d0d357b88b675 -size 1248636 diff --git a/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-11-21_205733.zip b/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-11-21_205733.zip new file mode 100644 index 0000000..9bd33fa --- /dev/null +++ b/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-11-21_205733.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbd09a94e4a4f25286d8e342d0a7b0b656e5b3b7f41b8f979bd582804405de87 +size 528498 diff --git a/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-11-22_115506.zip b/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-11-22_115506.zip new file mode 100644 index 0000000..9bd33fa --- /dev/null +++ b/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-11-22_115506.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbd09a94e4a4f25286d8e342d0a7b0b656e5b3b7f41b8f979bd582804405de87 +size 528498 diff --git a/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-11-28_203403.zip b/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-11-28_203403.zip new file mode 100644 index 0000000..9bd33fa --- /dev/null +++ b/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard-backups/cmdr_mainboard-2022-11-28_203403.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbd09a94e4a4f25286d8e342d0a7b0b656e5b3b7f41b8f979bd582804405de87 +size 528498 diff --git a/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard.kicad_prl b/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard.kicad_prl index 45f68f0..ef5d262 100644 --- a/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard.kicad_prl +++ b/schematics/cmdr-keyboard-mainboard-42/cmdr_mainboard.kicad_prl @@ -1,6 +1,6 @@ { "board": { - "active_layer": 0, + "active_layer": 31, "active_layer_preset": "", "auto_track_width": true, "hidden_nets": [], @@ -64,7 +64,7 @@ 35, 36 ], - "visible_layers": "fffffff_fffffffe", + "visible_layers": "fffffff_ffffffff", "zone_display_mode": 0 }, "meta": {