aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/keebio/bdn9/keymaps/eosti/config.h1
-rw-r--r--keyboards/keebio/bdn9/keymaps/eosti/keymap.c161
-rw-r--r--keyboards/keebio/bdn9/keymaps/eosti/readme.md9
-rw-r--r--keyboards/keebio/bdn9/keymaps/eosti/rules.mk1
4 files changed, 172 insertions, 0 deletions
diff --git a/keyboards/keebio/bdn9/keymaps/eosti/config.h b/keyboards/keebio/bdn9/keymaps/eosti/config.h
new file mode 100644
index 000000000..4ba28f26a
--- /dev/null
+++ b/keyboards/keebio/bdn9/keymaps/eosti/config.h
@@ -0,0 +1 @@
#define TAPPING_TERM 175
diff --git a/keyboards/keebio/bdn9/keymaps/eosti/keymap.c b/keyboards/keebio/bdn9/keymaps/eosti/keymap.c
new file mode 100644
index 000000000..adec3984b
--- /dev/null
+++ b/keyboards/keebio/bdn9/keymaps/eosti/keymap.c
@@ -0,0 +1,161 @@
1#include QMK_KEYBOARD_H
2
3enum layer_names {
4 _BASE,
5 _MACRO,
6 _MOD
7};
8
9enum custom_keycodes {
10 M801 = SAFE_RANGE,
11 M802,
12 M803,
13 M804,
14 M805,
15 M806,
16 MAIL_C
17};
18
19// tapdance keycodes
20enum td_keycodes {
21 LAY // Our example key: `LALT` when held, `(` when tapped. Add additional keycodes for each tapdance.
22};
23
24// define a type containing as many tapdance states as you need
25typedef enum {
26 SINGLE_TAP,
27 SINGLE_HOLD,
28} td_state_t;
29
30// create a global instance of the tapdance state type
31static td_state_t td_state;
32
33// declare your tapdance functions:
34
35// function to determine the current tapdance state
36int cur_dance (qk_tap_dance_state_t *state);
37
38// `finished` and `reset` functions for each tapdance keycode
39void altlp_finished (qk_tap_dance_state_t *state, void *user_data);
40void altlp_reset (qk_tap_dance_state_t *state, void *user_data);
41
42bool process_record_user(uint16_t keycode, keyrecord_t *record) {
43 switch (keycode) {
44 case M801:
45 if (record->event.pressed) {
46 SEND_STRING("M801" SS_TAP(X_ENTER));
47 }
48 break;
49 case M802:
50 if (record->event.pressed) {
51 SEND_STRING("M802" SS_TAP(X_ENTER));
52 }
53 break;
54 case M803:
55 if (record->event.pressed) {
56 SEND_STRING("M803" SS_TAP(X_ENTER));
57 }
58 break;
59 case M804:
60 if (record->event.pressed) {
61 SEND_STRING("M804" SS_TAP(X_ENTER));
62 }
63 break;
64 case M805:
65 if (record->event.pressed) {
66 SEND_STRING("M805" SS_TAP(X_ENTER));
67 }
68 break;
69 case M806:
70 if (record->event.pressed) {
71 SEND_STRING("M806" SS_TAP(X_ENTER));
72 }
73 break;
74 case MAIL_C:
75 if (record->event.pressed) {
76 SEND_STRING(SS_TAP(X_ENTER) SS_TAP(X_DOWN) SS_TAP(X_DOWN) SS_TAP(X_ENTER));
77 }
78 break;
79 }
80
81 return true;
82};
83
84#define EX_ARR LCTL(LSFT(KC_ENTER))
85
86const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
87 [_BASE] = LAYOUT(
88 // ┌────────┬────────┬────────┐
89 KC_MUTE, KC_UP, TD(LAY),
90 // ├────────┼────────┼────────┤
91 KC_LEFT, KC_DOWN, KC_RGHT,
92 // ├────────┼────────┼────────┤
93 KC_NO, KC_NO, KC_NO
94 // └────────┴────────┴────────┘
95 ),
96 [_MACRO] = LAYOUT(
97 // ┌────────┬────────┬────────┐
98 _______, KC_SPC, TG(_MACRO),
99 // ├────────┼────────┼────────┤
100 M801, M802, M803,
101 // ├────────┼────────┼────────┤
102 MAIL_C, KC_NO, EX_ARR
103 // └────────┴────────┴────────┘
104 ),
105 [_MOD] = LAYOUT(
106 // ┌────────┬────────┬────────┐
107 _______, BL_STEP,TG(_MOD),
108 // ├────────┼────────┼────────┤
109 KC_NO, RGB_MOD, KC_NO,
110 // ├────────┼────────┼────────┤
111 KC_NO, KC_NO, KC_NO
112 // └────────┴────────┴────────┘
113 )
114};
115
116void encoder_update_user(uint8_t index, bool clockwise) {
117 if (index == 0) {
118 if (clockwise) {
119 tap_code(KC_VOLD);
120 } else {
121 tap_code(KC_VOLU);
122 }
123 }
124}
125
126// determine the tapdance state to return
127int cur_dance (qk_tap_dance_state_t *state) {
128 if (state->count == 1) {
129 if (state->interrupted || !state->pressed) { return SINGLE_TAP; }
130 else { return SINGLE_HOLD; }
131 } else { return 3; } // any number higher than the maximum state value you return above
132}
133
134// handle the possible states for each tapdance keycode you define:
135
136void altlp_finished (qk_tap_dance_state_t *state, void *user_data) {
137 td_state = cur_dance(state);
138 switch (td_state) {
139 case SINGLE_TAP:
140 layer_on(_MACRO);
141 break;
142 case SINGLE_HOLD:
143 layer_on(_MOD);
144 break;
145 }
146}
147
148void altlp_reset (qk_tap_dance_state_t *state, void *user_data) {
149 switch (td_state) {
150 case SINGLE_TAP:
151 break;
152 case SINGLE_HOLD:
153 layer_off(_MOD);
154 break;
155 }
156}
157
158// define `ACTION_TAP_DANCE_FN_ADVANCED()` for each tapdance keycode, passing in `finished` and `reset` functions
159qk_tap_dance_action_t tap_dance_actions[] = {
160 [LAY] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altlp_finished, altlp_reset)
161};
diff --git a/keyboards/keebio/bdn9/keymaps/eosti/readme.md b/keyboards/keebio/bdn9/keymaps/eosti/readme.md
new file mode 100644
index 000000000..d93ce1e5f
--- /dev/null
+++ b/keyboards/keebio/bdn9/keymaps/eosti/readme.md
@@ -0,0 +1,9 @@
1# EosTi's BDN9 Macropad Layout
2
3## Features
4
5- Single encoder in the top left to control volume, push to mute
6- Arrow keys on home layer
7- Tap upper right to toggle to macro layer
8- Hold upper right to change keyboard functions (aka RGB)
9- 520 entire bytes free!
diff --git a/keyboards/keebio/bdn9/keymaps/eosti/rules.mk b/keyboards/keebio/bdn9/keymaps/eosti/rules.mk
new file mode 100644
index 000000000..31e0fcf29
--- /dev/null
+++ b/keyboards/keebio/bdn9/keymaps/eosti/rules.mk
@@ -0,0 +1 @@
TAP_DANCE_ENABLE=yes