Browse Source

add bdn9/eosti keymap (#7105)

Reid Sox-Harris 5 năm trước cách đây
mục cha
commit
454c99d128

+ 1 - 0
keyboards/keebio/bdn9/keymaps/eosti/config.h

@@ -0,0 +1 @@
+#define TAPPING_TERM 175

+ 161 - 0
keyboards/keebio/bdn9/keymaps/eosti/keymap.c

@@ -0,0 +1,161 @@
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+    _BASE,
+    _MACRO,
+    _MOD
+};
+
+enum custom_keycodes {
+    M801 = SAFE_RANGE,
+    M802,
+    M803,
+    M804,
+    M805,
+    M806,
+    MAIL_C
+};
+
+// tapdance keycodes
+enum td_keycodes {
+    LAY  // Our example key: `LALT` when held, `(` when tapped. Add additional keycodes for each tapdance.
+};
+
+// define a type containing as many tapdance states as you need
+typedef enum {
+  SINGLE_TAP,
+  SINGLE_HOLD,
+} td_state_t;
+
+// create a global instance of the tapdance state type
+static td_state_t td_state;
+
+// declare your tapdance functions:
+
+// function to determine the current tapdance state
+int cur_dance (qk_tap_dance_state_t *state);
+
+// `finished` and `reset` functions for each tapdance keycode
+void altlp_finished (qk_tap_dance_state_t *state, void *user_data);
+void altlp_reset (qk_tap_dance_state_t *state, void *user_data);
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case M801:
+      if (record->event.pressed) {
+        SEND_STRING("M801" SS_TAP(X_ENTER));
+      }
+      break;
+    case M802:
+      if (record->event.pressed) {
+          SEND_STRING("M802" SS_TAP(X_ENTER));
+      }
+      break;
+    case M803:
+      if (record->event.pressed) {
+          SEND_STRING("M803" SS_TAP(X_ENTER));
+      }
+      break;
+     case M804:
+      if (record->event.pressed) {
+          SEND_STRING("M804" SS_TAP(X_ENTER));
+      }
+      break; 
+    case M805:
+      if (record->event.pressed) {
+          SEND_STRING("M805" SS_TAP(X_ENTER));
+      }
+      break;
+    case M806:
+      if (record->event.pressed) {
+          SEND_STRING("M806" SS_TAP(X_ENTER));
+      }
+      break;
+    case MAIL_C:
+      if (record->event.pressed) {
+          SEND_STRING(SS_TAP(X_ENTER) SS_TAP(X_DOWN) SS_TAP(X_DOWN) SS_TAP(X_ENTER));
+      }
+      break;
+  }
+
+  return true;
+};
+
+#define EX_ARR LCTL(LSFT(KC_ENTER))
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [_BASE] = LAYOUT(
+    // ┌────────┬────────┬────────┐
+         KC_MUTE, KC_UP,  TD(LAY),
+    // ├────────┼────────┼────────┤
+         KC_LEFT, KC_DOWN, KC_RGHT,
+    // ├────────┼────────┼────────┤
+         KC_NO,   KC_NO,   KC_NO
+    // └────────┴────────┴────────┘
+        ),
+    [_MACRO] = LAYOUT(
+    // ┌────────┬────────┬────────┐
+        _______,  KC_SPC, TG(_MACRO),
+    // ├────────┼────────┼────────┤
+          M801,    M802,    M803,
+    // ├────────┼────────┼────────┤
+         MAIL_C,  KC_NO,   EX_ARR
+    // └────────┴────────┴────────┘
+        ),
+    [_MOD] = LAYOUT(
+    // ┌────────┬────────┬────────┐
+        _______,  BL_STEP,TG(_MOD),
+    // ├────────┼────────┼────────┤
+         KC_NO,  RGB_MOD,  KC_NO,
+    // ├────────┼────────┼────────┤
+         KC_NO,   KC_NO,   KC_NO
+    // └────────┴────────┴────────┘
+        )
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+    if (index == 0) {
+        if (clockwise) {
+            tap_code(KC_VOLD);
+        } else {
+            tap_code(KC_VOLU);
+        }
+    }
+}
+
+// determine the tapdance state to return
+int cur_dance (qk_tap_dance_state_t *state) {
+  if (state->count == 1) {
+    if (state->interrupted || !state->pressed) { return SINGLE_TAP; }
+    else { return SINGLE_HOLD; }
+  } else { return 3; } // any number higher than the maximum state value you return above
+}
+
+// handle the possible states for each tapdance keycode you define:
+
+void altlp_finished (qk_tap_dance_state_t *state, void *user_data) {
+  td_state = cur_dance(state);
+  switch (td_state) {
+    case SINGLE_TAP:
+      layer_on(_MACRO);
+      break;
+    case SINGLE_HOLD:
+      layer_on(_MOD);
+      break;
+  }
+}
+
+void altlp_reset (qk_tap_dance_state_t *state, void *user_data) {
+  switch (td_state) {
+    case SINGLE_TAP:
+      break;
+    case SINGLE_HOLD:
+      layer_off(_MOD);
+      break;
+  }
+}
+
+// define `ACTION_TAP_DANCE_FN_ADVANCED()` for each tapdance keycode, passing in `finished` and `reset` functions
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [LAY] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altlp_finished, altlp_reset)
+};

+ 9 - 0
keyboards/keebio/bdn9/keymaps/eosti/readme.md

@@ -0,0 +1,9 @@
+# EosTi's BDN9 Macropad Layout
+
+## Features
+
+- Single encoder in the top left to control volume, push to mute
+- Arrow keys on home layer
+- Tap upper right to toggle to macro layer
+- Hold upper right to change keyboard functions (aka RGB)
+- 520 entire bytes free!

+ 1 - 0
keyboards/keebio/bdn9/keymaps/eosti/rules.mk

@@ -0,0 +1 @@
+TAP_DANCE_ENABLE=yes