keymap.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  1. /* Copyright 2021 Carlos Martins
  2. *
  3. * This program is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 2 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #include QMK_KEYBOARD_H
  17. #include <stdio.h>
  18. enum sofle_layers {
  19. /* _M_XYZ = Mac Os, _W_XYZ = Win/Linux */
  20. _QWERTY,
  21. _LOWER,
  22. _RAISE,
  23. _ADJUST,
  24. };
  25. enum custom_keycodes {
  26. KC_QWERTY = SAFE_RANGE,
  27. KC_LOWER,
  28. KC_RAISE,
  29. KC_ADJUST,
  30. KC_PRVWD,
  31. KC_NXTWD,
  32. KC_LSTRT,
  33. KC_LEND,
  34. KC_DLINE
  35. };
  36. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  37. /*
  38. * QWERTY
  39. * ,-----------------------------------------. ,-----------------------------------------.
  40. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
  41. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  42. * | ESC | Q | W | E | R | T | | Y | U | I | O | P | Bspc |
  43. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  44. * | Tab | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
  45. * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
  46. * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
  47. * `-----------------------------------------/ / \ \-----------------------------------------'
  48. * | LGUI | LAlt | LCTR |LOWER | /Space / \Enter \ |RAISE | RCTR | RAlt | RGUI |
  49. * | | | | |/ / \ \ | | | | |
  50. * `----------------------------------' '------''---------------------------'
  51. */
  52. [_QWERTY] = LAYOUT(
  53. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
  54. KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
  55. KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
  56. SC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_MPLY,KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC,
  57. KC_LGUI,KC_LALT,KC_LCTL, KC_LOWER, KC_SPC, KC_ENT, KC_RAISE, KC_RCTL, KC_RALT, KC_RGUI
  58. ),
  59. /* LOWER
  60. * ,-----------------------------------------. ,-----------------------------------------.
  61. * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
  62. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  63. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 |
  64. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  65. * | Tab | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | | |
  66. * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
  67. * | Shift| = | - | + | { | } |-------| |-------| [ | ] | ; | : | \ | Shift|
  68. * `-----------------------------------------/ / \ \-----------------------------------------'
  69. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  70. * | | | | |/ / \ \ | | | | |
  71. * `----------------------------------' '------''---------------------------'
  72. */
  73. [_LOWER] = LAYOUT(
  74. _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  75. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12,
  76. _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
  77. _______, KC_EQL, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______,
  78. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  79. ),
  80. /* RAISE
  81. * ,----------------------------------------. ,-----------------------------------------.
  82. * | | | | | | | | | | | | | |
  83. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  84. * | Esc | Ins | Pscr | Menu | |RGBTog| | | PWrd | Up | NWrd | DLine| Bspc |
  85. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  86. * | Tab | LAt | LCtl |LShift| | Caps |-------. ,-------| | Left | Down | Rigth| Del | Bspc |
  87. * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
  88. * |Shift | Undo | Cut | Copy | Paste| |-------| |-------| | LStr | | LEnd | | Shift|
  89. * `-----------------------------------------/ / \ \-----------------------------------------'
  90. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  91. * | | | | |/ / \ \ | | | | |
  92. * `----------------------------------' '------''---------------------------'
  93. */
  94. [_RAISE] = LAYOUT(
  95. _______, _______ , _______ , _______ , RGB_RMOD , RGB_MOD, _______, _______ , _______, _______ , _______ ,_______,
  96. _______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, RGB_TOG, KC_PGUP, KC_PRVWD, KC_UP, KC_NXTWD,KC_DLINE, KC_BSPC,
  97. _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_BSPC,
  98. _______,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, KC_LSTRT, XXXXXXX, KC_LEND, XXXXXXX, _______,
  99. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  100. ),
  101. /* ADJUST
  102. * ,-----------------------------------------. ,-----------------------------------------.
  103. * | | | | | | | | | | | | | |
  104. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  105. * | QK_BOOT| |QWERTY|COLEMAK| | | | | | | | | |
  106. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  107. * | | |MACWIN| | | |-------. ,-------| | VOLDO| MUTE | VOLUP| | |
  108. * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
  109. * | | | | | | |-------| |-------| | PREV | PLAY | NEXT | | |
  110. * `-----------------------------------------/ / \ \-----------------------------------------'
  111. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  112. * | | | | |/ / \ \ | | | | |
  113. * `----------------------------------' '------''---------------------------'
  114. */
  115. [_ADJUST] = LAYOUT(
  116. XXXXXXX , XXXXXXX, XXXXXXX , XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  117. QK_BOOT, XXXXXXX, KC_QWERTY, XXXXXXX , CG_TOGG,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  118. XXXXXXX , XXXXXXX,CG_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX,
  119. XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,
  120. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  121. )
  122. };
  123. #ifdef OLED_ENABLE
  124. static void render_logo(void) {
  125. static const char PROGMEM bananas_logo[] = {
  126. // 'killmaster_bananas', 128x32px
  127. 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xe0, 0x02, 0x0e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
  128. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  129. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  130. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  131. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  132. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  133. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  134. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  135. 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  136. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
  137. 0x00, 0x00, 0x80, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x40, 0x40, 0xd8, 0xc8, 0x00, 0x00, 0x00, 0x00,
  138. 0x08, 0x08, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf8, 0xf8, 0x00, 0x00, 0x00,
  139. 0x00, 0x00, 0xc0, 0x40, 0x40, 0xc0, 0x80, 0x40, 0xc0, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40,
  140. 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0xc0, 0x40, 0x00, 0x00, 0x40, 0x40, 0xf0,
  141. 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0xc0, 0x80, 0x00, 0x00, 0x00,
  142. 0x40, 0xc0, 0x80, 0x40, 0x40, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  143. 0x00, 0x01, 0x0f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xf0,
  144. 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
  145. 0x02, 0x07, 0x0d, 0x10, 0x20, 0x20, 0x00, 0x00, 0x20, 0x20, 0x3f, 0x3f, 0x20, 0x20, 0x00, 0x00,
  146. 0x00, 0x00, 0x1f, 0x3f, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x3f, 0x20, 0x20, 0x20,
  147. 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x1c, 0x36, 0x22, 0x22, 0x22,
  148. 0x1f, 0x20, 0x00, 0x00, 0x10, 0x23, 0x22, 0x22, 0x26, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x1f,
  149. 0x30, 0x20, 0x20, 0x20, 0x00, 0x00, 0x0f, 0x1f, 0x32, 0x22, 0x22, 0x32, 0x23, 0x00, 0x00, 0x00,
  150. 0x20, 0x3f, 0x21, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  151. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x0f, 0x0f, 0x1f, 0x1f,
  152. 0x1f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3e, 0x3e, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  153. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  154. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  155. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  156. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  157. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  158. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  159. };
  160. oled_write_raw_P(bananas_logo, sizeof(bananas_logo));
  161. }
  162. static void print_status_narrow(void) {
  163. // Print current mode
  164. oled_write_P(PSTR("Sofle"), false);
  165. oled_write_P(PSTR("\n\n\n"), false);
  166. switch (get_highest_layer(default_layer_state)) {
  167. case _QWERTY:
  168. oled_write_ln_P(PSTR("QWERT"), false);
  169. break;
  170. default:
  171. oled_write_P(PSTR("Undef"), false);
  172. }
  173. oled_write_P(PSTR("\n\n"), false);
  174. // Print current layer
  175. oled_write_ln_P(PSTR("Layer"), false);
  176. switch (get_highest_layer(layer_state)) {
  177. case _QWERTY:
  178. oled_write_P(PSTR("Base\n"), false);
  179. break;
  180. case _RAISE:
  181. oled_write_P(PSTR("Raise"), false);
  182. break;
  183. case _LOWER:
  184. oled_write_P(PSTR("Lower"), false);
  185. break;
  186. case _ADJUST:
  187. oled_write_P(PSTR("Adj\n"), false);
  188. break;
  189. default:
  190. oled_write_ln_P(PSTR("Undef"), false);
  191. }
  192. oled_write_P(PSTR("\n\n"), false);
  193. }
  194. oled_rotation_t oled_init_user(oled_rotation_t rotation) {
  195. if (is_keyboard_master()) {
  196. return OLED_ROTATION_270;
  197. }
  198. else {
  199. return OLED_ROTATION_180;
  200. }
  201. return rotation;
  202. }
  203. bool oled_task_user(void) {
  204. if (is_keyboard_master()) {
  205. print_status_narrow();
  206. } else {
  207. render_logo();
  208. }
  209. return false;
  210. }
  211. #endif // OLED_ENABLE
  212. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  213. switch (keycode) {
  214. case KC_QWERTY:
  215. if (record->event.pressed) {
  216. set_single_persistent_default_layer(_QWERTY);
  217. }
  218. return false;
  219. case KC_LOWER:
  220. if (record->event.pressed) {
  221. layer_on(_LOWER);
  222. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  223. } else {
  224. layer_off(_LOWER);
  225. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  226. }
  227. return false;
  228. case KC_RAISE:
  229. if (record->event.pressed) {
  230. layer_on(_RAISE);
  231. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  232. } else {
  233. layer_off(_RAISE);
  234. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  235. }
  236. return false;
  237. case KC_ADJUST:
  238. if (record->event.pressed) {
  239. layer_on(_ADJUST);
  240. } else {
  241. layer_off(_ADJUST);
  242. }
  243. return false;
  244. case KC_PRVWD:
  245. if (record->event.pressed) {
  246. if (keymap_config.swap_lctl_lgui) {
  247. register_mods(mod_config(MOD_LALT));
  248. register_code(KC_LEFT);
  249. } else {
  250. register_mods(mod_config(MOD_LCTL));
  251. register_code(KC_LEFT);
  252. }
  253. } else {
  254. if (keymap_config.swap_lctl_lgui) {
  255. unregister_mods(mod_config(MOD_LALT));
  256. unregister_code(KC_LEFT);
  257. } else {
  258. unregister_mods(mod_config(MOD_LCTL));
  259. unregister_code(KC_LEFT);
  260. }
  261. }
  262. break;
  263. case KC_NXTWD:
  264. if (record->event.pressed) {
  265. if (keymap_config.swap_lctl_lgui) {
  266. register_mods(mod_config(MOD_LALT));
  267. register_code(KC_RIGHT);
  268. } else {
  269. register_mods(mod_config(MOD_LCTL));
  270. register_code(KC_RIGHT);
  271. }
  272. } else {
  273. if (keymap_config.swap_lctl_lgui) {
  274. unregister_mods(mod_config(MOD_LALT));
  275. unregister_code(KC_RIGHT);
  276. } else {
  277. unregister_mods(mod_config(MOD_LCTL));
  278. unregister_code(KC_RIGHT);
  279. }
  280. }
  281. break;
  282. case KC_LSTRT:
  283. if (record->event.pressed) {
  284. if (keymap_config.swap_lctl_lgui) {
  285. //CMD-arrow on Mac, but we have CTL and GUI swapped
  286. register_mods(mod_config(MOD_LCTL));
  287. register_code(KC_LEFT);
  288. } else {
  289. register_code(KC_HOME);
  290. }
  291. } else {
  292. if (keymap_config.swap_lctl_lgui) {
  293. unregister_mods(mod_config(MOD_LCTL));
  294. unregister_code(KC_LEFT);
  295. } else {
  296. unregister_code(KC_HOME);
  297. }
  298. }
  299. break;
  300. case KC_LEND:
  301. if (record->event.pressed) {
  302. if (keymap_config.swap_lctl_lgui) {
  303. //CMD-arrow on Mac, but we have CTL and GUI swapped
  304. register_mods(mod_config(MOD_LCTL));
  305. register_code(KC_RIGHT);
  306. } else {
  307. register_code(KC_END);
  308. }
  309. } else {
  310. if (keymap_config.swap_lctl_lgui) {
  311. unregister_mods(mod_config(MOD_LCTL));
  312. unregister_code(KC_RIGHT);
  313. } else {
  314. unregister_code(KC_END);
  315. }
  316. }
  317. break;
  318. case KC_DLINE:
  319. if (record->event.pressed) {
  320. register_mods(mod_config(MOD_LCTL));
  321. register_code(KC_BSPC);
  322. } else {
  323. unregister_mods(mod_config(MOD_LCTL));
  324. unregister_code(KC_BSPC);
  325. }
  326. break;
  327. }
  328. return true;
  329. }
  330. #ifdef ENCODER_ENABLE
  331. bool encoder_update_user(uint8_t index, bool clockwise) {
  332. uint8_t temp_mod = get_mods();
  333. uint8_t temp_osm = get_oneshot_mods();
  334. bool is_ctrl = (temp_mod | temp_osm) & MOD_MASK_CTRL;
  335. bool is_shift = (temp_mod | temp_osm) & MOD_MASK_SHIFT;
  336. if (is_shift) {
  337. if (index == 0) { /* First encoder */
  338. if (clockwise) {
  339. rgb_matrix_increase_hue();
  340. } else {
  341. rgb_matrix_decrease_hue();
  342. }
  343. } else if (index == 1) { /* Second encoder */
  344. if (clockwise) {
  345. rgb_matrix_decrease_sat();
  346. } else {
  347. rgb_matrix_increase_sat();
  348. }
  349. }
  350. } else if (is_ctrl) {
  351. if (index == 0) { /* First encoder */
  352. if (clockwise) {
  353. rgb_matrix_increase_val();
  354. } else {
  355. rgb_matrix_decrease_val();
  356. }
  357. } else if (index == 1) { /* Second encoder */
  358. if (clockwise) {
  359. rgb_matrix_increase_speed();
  360. } else {
  361. rgb_matrix_decrease_speed();
  362. }
  363. }
  364. } else {
  365. if (index == 1) { /* First encoder */
  366. if (clockwise) {
  367. tap_code(KC_PGUP);
  368. // tap_code(KC_MS_WH_UP);
  369. } else {
  370. tap_code(KC_PGDN);
  371. // tap_code(KC_MS_WH_DOWN);
  372. }
  373. } else if (index == 0) { /* Second encoder */
  374. uint16_t mapped_code = 0;
  375. if (clockwise) {
  376. mapped_code = KC_VOLD;
  377. } else {
  378. mapped_code = KC_VOLU;
  379. }
  380. tap_code_delay(mapped_code, MEDIA_KEY_DELAY);
  381. }
  382. }
  383. return true;
  384. }
  385. #endif