summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGibbio <gibbio@gmail.com>2022-01-23 11:44:30 +0100
committerGitHub <noreply@github.com>2022-01-23 12:44:30 +0200
commitbc759e3f15ca94dc0fb0fa48f73614c7df2168d0 (patch)
treea09bc0f1ea95282b800c5f0626c0df42e7882fa8
parent3c8200883d33d70f77b8d54f2e7bcb21bc5ed51d (diff)
Keychron K3 ISO OS selector, Mac keymap and fixes (#199)
* Added MAC/iOS Keyboad map and fixed OS selector switch Fixed #177 Added missing special key for Windows and Mac: KC_TASK (Task viewer) Fn + F3 KC_FLXP (Windows file explorer) Fn + F4 KC_SNIP (Windows snip tool) Fn + Print Screen KC_MSSN (Mission Control) Fn + F3 KC_FIND (Finder) Fn + F4 KC_MSCR (Mac screenshot) Print Screen KC_MSNP (Mac snip tool) Fn + Print Screen KC_BRIU (Brightness Up) Fn + F1 KC_BRID (Brightness Down) Fn + F2 * Fixed typo * Turn off rgb after 10mins idle
-rw-r--r--keyboards/keychron/k3/keymaps/iso/keymap.c155
-rw-r--r--keyboards/keychron/k3/rgb/config.h4
2 files changed, 129 insertions, 30 deletions
diff --git a/keyboards/keychron/k3/keymaps/iso/keymap.c b/keyboards/keychron/k3/keymaps/iso/keymap.c
index c3409d1a4..a8ece7820 100644
--- a/keyboards/keychron/k3/keymaps/iso/keymap.c
+++ b/keyboards/keychron/k3/keymaps/iso/keymap.c
@@ -21,13 +21,31 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum layer_names {
- _BASE = 0,
- _FN,
+ MAC_BASE = 0,
+ WIN_BASE,
+ MAC_FN,
+ WIN_FN
};
+#define KC_TASK LGUI(KC_TAB) // Task viewer
+#define KC_FLXP LGUI(KC_E) // Windows file explorer
+#define KC_SNIP LGUI(LSFT(KC_S)) // Windows snip tool
+
+#define KC_MSSN LGUI(KC_F3) // Mission Control
+#define KC_FIND LALT(LGUI(KC_SPC)) // Finder
+#define KC_MSCR LSFT(LGUI(KC_3)) // Mac screenshot
+#define KC_MSNP LSFT(LGUI(KC_4)) // Mac snip tool
+
+// RGB sleep feature
+#define RGB_TIMEOUT 10 // in minutes
+static uint16_t idle_timer = 0;
+static uint8_t halfmin_counter = 0;
+static bool rgb_on = true;
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* +------------------------------------------------------------------------------+
+/* Mac base layout
+ +------------------------------------------------------------------------------+
| ESC| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10| F11| F12|PSCR|DEL|RMOD|
+------------------------------------------------------------------------------+
| ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BACKSP |PGUP|
@@ -38,54 +56,98 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+------------------------------------------------------------------------------+
|LSHFT| \ | Z | X | C | V | B | N | M | , | . | / | RSHIFT| UP | END|
+------------------------------------------------------------------------------+
- |LCTRL| LGUI| LALT| SPACE | RALT| FN |RCTL|LEFT|DOWN|RGHT|
+ |LCTRL| LALT| LGUI| SPACE | RALT| FN |RCTL|LEFT|DOWN|RGHT|
+------------------------------------------------------------------------------+
*/
- [_BASE] = {
- /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */
- { KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_DEL, RGB_MOD },
- { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NO, KC_PGUP },
- { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NO, KC_NO, KC_PGDN },
- { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_NO, KC_HOME },
- { KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_UP, KC_END },
- { KC_LCTL, KC_LGUI, KC_LALT, KC_NO, KC_NO, KC_NO, KC_SPC, KC_NO, KC_NO, KC_NO, KC_RALT, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }
- },
-/* +------------------------------------------------------------------------------+
- | | | | | |RVAD|RVAI|MPRV|MPLY|MNXT|MUTE|VOLD|VOLU| | |RTOG|
+ [MAC_BASE] = {
+ /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */
+ { KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MSCR, KC_DEL, RGB_MOD },
+ { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NO, KC_PGUP },
+ { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NO, KC_NO, KC_PGDN },
+ { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_NO, KC_HOME },
+ { KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_UP, KC_END },
+ { KC_LCTL, KC_LALT, KC_LGUI, KC_NO, KC_NO, KC_NO, KC_SPC, KC_NO, KC_NO, KC_NO, KC_RALT, MO(MAC_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }
+ },
+
+/* Mac Fn overlay
+ +------------------------------------------------------------------------------+
+ | RST|BRID|BRIU|MCTL|LPAD|RVAD|RVAI|MPRV|MPLY|MNXT|MUTE|VOLD|VOLU|MSNP| |RTOG|
+------------------------------------------------------------------------------+
| | | | | | | | | | | | | | |RM_P|
+------------------------------------------------------------------------------+
| | | | | | | | | | | | | | | |
+ +------------------------------------------------------------------- -----+
+ | | | | | | | | | | | | | | | |
+ +------------------------------------------------------------------------------+
+ | | | | | | | | | | | | | |RSAI| |
+ +------------------------------------------------------------------------------+
+ | | | | | | | |RHUD|RSAD|RHUI|
+ +------------------------------------------------------------------------------+
+*/
+ [MAC_FN] = {
+ /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */
+ { RESET, KC_BRID, KC_BRIU, KC_MSSN, KC_FIND, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MSNP, KC_NO, RGB_TOG },
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, XXXXXXX, RGB_M_P },
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, XXXXXXX, XXXXXXX, KC_NO },
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, XXXXXXX, KC_NO },
+ { KC_NO, XXXXXXX, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, XXXXXXX, KC_NO, RGB_SAI, KC_NO },
+ { KC_NO, KC_NO, KC_NO, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, KC_NO, KC_NO, RGB_HUD, RGB_SAD, RGB_HUI }
+ },
+
+/* Windows base layout
+ +------------------------------------------------------------------------------+
+ | ESC| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10| F11| F12|PSCR|DEL|RMOD|
+ +------------------------------------------------------------------------------+
+ | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BACKSP |PGUP|
+ +------------------------------------------------------------------------------+
+ | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | |PGDN|
+------------------------------------------------------------------- RET -----+
+ |CAPSLCK| A | S | D | F | G | H | J | K | L | ; | ' | # | |HOME|
+ +------------------------------------------------------------------------------+
+ |LSHFT| \ | Z | X | C | V | B | N | M | , | . | / | RSHIFT| UP | END|
+ +------------------------------------------------------------------------------+
+ |LCTRL| LGUI| LALT| SPACE | RALT| FN |RCTL|LEFT|DOWN|RGHT|
+ +------------------------------------------------------------------------------+
+*/
+ [WIN_BASE] = {
+ /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */
+ { KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_DEL, RGB_MOD },
+ { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NO, KC_PGUP },
+ { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NO, KC_NO, KC_PGDN },
+ { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_NO, KC_HOME },
+ { KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_UP, KC_END },
+ { KC_LCTL, KC_LGUI, KC_LALT, KC_NO, KC_NO, KC_NO, KC_SPC, KC_NO, KC_NO, KC_NO, KC_RALT, MO(WIN_FN),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }
+ },
+
+/* Windows Fn overlay
+ +------------------------------------------------------------------------------+
+ | RST|BRID|BRIU|TASK|FLXP|RVAD|RVAI|MPRV|MPLY|MNXT|MUTE|VOLD|VOLU|SNIP| |RTOG|
+ +------------------------------------------------------------------------------+
+ | | | | | | | | | | | | | | |RM_P|
+ +------------------------------------------------------------------------------+
+ | | | | | | | | | | | | | | | |
+ +------------------------------------------------------------------- -----+
| | | | | | | | | | | | | | | |
+------------------------------------------------------------------------------+
| | | | | | | | | | | | | |RSAI| |
+------------------------------------------------------------------------------+
- | | | | | | FN | |RHUD|RSAD|RHUI|
+ | | | | | | | |RHUD|RSAD|RHUI|
+------------------------------------------------------------------------------+
*/
- [_FN] = {
+ [WIN_FN] = {
/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */
- { RESET, KC_NO, KC_NO, KC_APP, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, RGB_TOG },
+ { RESET, KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_SNIP, KC_NO, RGB_TOG },
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, XXXXXXX, RGB_M_P },
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, XXXXXXX, XXXXXXX, KC_NO },
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, XXXXXXX, KC_NO },
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, XXXXXXX, KC_NO, XXXXXXX, KC_NO },
{ KC_NO, XXXXXXX, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, XXXXXXX, KC_NO, RGB_SAI, KC_NO },
- { KC_NO, KC_NO, KC_NO, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, MO(_FN), KC_NO, RGB_HUD, RGB_SAD, RGB_HUI }
+ { KC_NO, KC_NO, KC_NO, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, KC_NO, KC_NO, RGB_HUD, RGB_SAD, RGB_HUI }
}
};
bool dip_switch_update_user(uint8_t index, bool active) {
switch(index) {
- case 0: // OS switch
- if (active) { // Win/Android mode
- // do stuff
- }
- else { // Mac/iOS mode
- // do stuff
- }
- break;
- case 1: // Connection switch
+ case 0: // Connection switch
// Probably it's not possible to do anything sensible here as switching from Cable to BT requires turning off the board. (BT / OFF / Cable)
if (active) { // BT mode
// do stuff
@@ -94,6 +156,14 @@ bool dip_switch_update_user(uint8_t index, bool active) {
// do stuff
}
break;
+ case 1: // OS switch
+ if (active) { // Mac/iOS mode
+ layer_move(MAC_BASE);
+ }
+ else { // Windows/Android mode
+ layer_move(WIN_BASE);
+ }
+ break;
}
return true;
}
@@ -105,3 +175,30 @@ void keyboard_post_init_user(void) {
// debug_keyboard = true;
// debug_mouse = true;
}
+
+void matrix_scan_user(void) {
+ if (idle_timer == 0) {
+ idle_timer = timer_read();
+ }
+ if (rgb_on && timer_elapsed(idle_timer) > 30000) {
+ halfmin_counter++;
+ idle_timer = timer_read();
+ }
+ if (rgb_on && halfmin_counter >= RGB_TIMEOUT * 2) {
+ halfmin_counter = 0;
+ rgblight_disable();
+ rgb_on = false;
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ if (rgb_on == false) {
+ rgblight_enable();
+ rgb_on = true;
+ }
+ idle_timer = timer_read();
+ halfmin_counter = 0;
+ }
+ return true;
+} \ No newline at end of file
diff --git a/keyboards/keychron/k3/rgb/config.h b/keyboards/keychron/k3/rgb/config.h
index e946c2e38..f5863116a 100644
--- a/keyboards/keychron/k3/rgb/config.h
+++ b/keyboards/keychron/k3/rgb/config.h
@@ -32,8 +32,10 @@
#define MATRIX_COL_PINS { A8, A9, A10, A11, A12, A13, A14, A15, B0, B1, B2, B3, B4, B5, B6, B7 }
#define MATRIX_ROW_PINS { C15, D11, D10, D9, D8, D7 }
+#define LED_CAPS_LOCK_PIN D4
+
// Connects each switch in the dip switch to the GPIO pin of the MCU
-#define DIP_SWITCH_PINS { D4, D5 }
+#define DIP_SWITCH_PINS { D5, D6 }
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5