You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

318 lines
14 KiB

  1. /* Copyright 2015-2017 Jack Humbert
  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 "muse.h"
  18. #include "kuatsure.h"
  19. #define LAYOUT_planck_grid_wrapper(...) LAYOUT_planck_grid(__VA_ARGS__)
  20. enum planck_layers {
  21. _QWERTY,
  22. _GAME,
  23. _GAME_LOWER,
  24. _GAME_RAISE,
  25. _MOUSE,
  26. _LOWER,
  27. _RAISE,
  28. _ADJUST
  29. };
  30. enum planck_keycodes {
  31. QWERTY = USER_SAFE_RANGE,
  32. GAME,
  33. };
  34. #define LOWER MO(_LOWER)
  35. #define RAISE MO(_RAISE)
  36. #define MOUSE TG(_MOUSE)
  37. #define G_LOWER MO(_GAME_LOWER)
  38. #define G_RAISE MO(_GAME_RAISE)
  39. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  40. /* Qwerty
  41. * ,-----------------------------------------------------------------------------------.
  42. * | Tab/M| Q | W | E | R | T | Y | U | I | O | P | Bksp |
  43. * |------+------+------+------+------+-------------+------+------+------+------+------|
  44. * | Esc/C| A | S | D | F | G | H | J | K | L | ; | ' |
  45. * |------+------+------+------+------+------|------+------+------+------+------+------|
  46. * | Shift| Z | X | C | V | B | N | M | , | . | / | Ent |
  47. * |------+------+------+------+------+------+------+------+------+------+------+------|
  48. * | Mute | Ldr | Alt | GUI |Lower | RSE | SPC | Left | Down | Up |Right |
  49. * `-----------------------------------------------------------------------------------'
  50. */
  51. [_QWERTY] = LAYOUT_planck_grid_wrapper(
  52. KT_MTAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC,
  53. KT_CESC, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT,
  54. KT_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_ENT,
  55. KC_MPLY, KC_LEAD, KC_LALT, KC_LGUI, LOWER, RAISE, KC_SPC, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
  56. ),
  57. /* Lower
  58. * ,-----------------------------------------------------------------------------------.
  59. * | | ! | & | Up | | ` | | { | } | _ | | | |
  60. * |------+------+------+------+------+-------------+------+------+------+------+------|
  61. * | | Del | Left | Down | Right| ~ | = | ( | ) | + | : | " |
  62. * |------+------+------+------+------+------|------+------+------+------+------+------|
  63. * | | VolD | Prev | Play | Next | VolU | - | [ | ] | | ? |Mouse |
  64. * |------+------+------+------+------+------+------+------+------+------+------+------|
  65. * | | | | | | | | | Home | PgDn | PgUp | End |
  66. * `-----------------------------------------------------------------------------------'
  67. */
  68. [_LOWER] = LAYOUT_planck_grid_wrapper(
  69. _______, KC_EXLM, KC_AMPR, KC_UP, _______, KC_GRV, _______, ____CRBRACES____, KC_UNDS, _______, KC_PIPE,
  70. _______, KC_DEL, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TILD, KC_EQL, _____PARENS_____, KC_PLUS, KC_COLN, KC_DQT ,
  71. _______, KC_VOLD, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLU, KC_MINS, ___SQBRACKETS___, _______, KC_QUES, MOUSE ,
  72. _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
  73. ),
  74. /* Raise
  75. * ,-----------------------------------------------------------------------------------.
  76. * | | F9 | F10 | F11 | F12 | | * | 7 | 8 | 9 | 0 | \ |
  77. * |------+------+------+------+------+-------------+------+------+------+------+------|
  78. * | | F5 | F6 | F7 | F8 | | = | 4 | 5 | 6 | + | |
  79. * |------+------+------+------+------+------|------+------+------+------+------+------|
  80. * | | F1 | F2 | F3 | F4 | | - | 1 | 2 | 3 | / | |
  81. * |------+------+------+------+------+------+------+------+------+------+------+------|
  82. * | | | | | | | | | 0 | 0 | | |
  83. * `-----------------------------------------------------------------------------------'
  84. */
  85. [_RAISE] = LAYOUT_planck_grid_wrapper(
  86. _______, ____________FUNCTION_3____________, _______, KC_ASTR, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
  87. _______, ____________FUNCTION_2____________, _______, KC_EQL, KC_4, KC_5, KC_6, KC_PLUS, _______,
  88. _______, ____________FUNCTION_1____________, _______, KC_MINS, KC_1, KC_2, KC_3, KC_SLASH, _______,
  89. _______, _______, _______, _______, _______, _______, _______, KC_0, KC_0, _______, _______, _______
  90. ),
  91. /* Mouse
  92. * ,-----------------------------------------------------------------------------------.
  93. * | | | Btn1 | mUP | Btn2 | | | | | | | |
  94. * |------+------+------+------+------+------+------+------+------+------+------+------|
  95. * | | | mLEFT| mDWN | mRGHT| | | | | | | |
  96. * |------+------+------+------+------+------+------+------+------+------+------+------|
  97. * | | | Btn3 | Btn4 | Btn5 | | | | | | |Mouse |
  98. * |------+------+------+------+------+------+------+------+------+------+------+------|
  99. * | | | | | | | | | | | | |
  100. * `-----------------------------------------------------------------------------------'
  101. */
  102. [_MOUSE] = LAYOUT_planck_grid_wrapper(
  103. _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, _______, _______, _______, _______, _______, _______, _______,
  104. _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, _______, _______, _______,
  105. _______, _______, KC_BTN3, KC_BTN4, KC_BTN5, _______, _______, _______, _______, _______, _______, MOUSE ,
  106. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  107. ),
  108. /* Adjust (Lower + Raise)
  109. * ,-----------------------------------------------------------------------------------.
  110. * | | MAKE | FLSH | | | | | | | | | Del |
  111. * |------+------+------+------+------+-------------+------+------+------+------+------|
  112. * | | RESET| DEBUG| | |Aud on|AudOff| Game |Mouse | | | |
  113. * |------+------+------+------+------+------|------+------+------+------+------+------|
  114. * | | VRSN | | |MusMod|Mus on|MusOff| | | | | |
  115. * |------+------+------+------+------+------+------+------+------+------+------+------|
  116. * | | | | | | | | | | | | |
  117. * `-----------------------------------------------------------------------------------'
  118. */
  119. [_ADJUST] = LAYOUT_planck_grid_wrapper(
  120. _______, KB_MAKE, KB_FLSH, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
  121. _______, RESET, DEBUG, _______, _______, AU_ON, AU_OFF, GAME, MOUSE, _______, _______, _______,
  122. _______, KB_VRSN, _______, _______, MU_MOD, MU_ON, MU_OFF, _______, _______, _______, _______, _______,
  123. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  124. ),
  125. /* Game
  126. *
  127. * Mostly transparent, but wanted to disable gui key.
  128. * Also give a key to get back to qwerty layout.
  129. *
  130. * Disabling the `Controlled ESC` key is also plus.
  131. * Think BDO / Monster Hunter / D2
  132. *
  133. * ,-----------------------------------------------------------------------------------.
  134. * | Tab | | | | | | | | | | | |
  135. * |------+------+------+------+------+-------------+------+------+------+------+------|
  136. * | Ctrl | | | | | | | | | | | |
  137. * |------+------+------+------+------+------|------+------+------+------+------+------|
  138. * | Shft | | | | | | | | | | | |
  139. * |------+------+------+------+------+------+------+------+------+------+------+------|
  140. * | |Qwerty| F14 | Spc | gLWR | gRSE | ESC | | | | |
  141. * `-----------------------------------------------------------------------------------'
  142. */
  143. [_GAME] = LAYOUT_planck_grid_wrapper(
  144. KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  145. KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  146. KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  147. _______, QWERTY, KC_F14, KC_SPC, G_LOWER, G_RAISE, KC_ESC, KC_ESC, _______, _______, _______, _______
  148. ),
  149. /* Game Lower
  150. * ,-----------------------------------------------------------------------------------.
  151. * | | 1 | 2 | 3 | 4 | ` | | F9 | F10 | F11 | F12 | |
  152. * |------+------+------+------+------+-------------+------+------+------+------+------|
  153. * | | 5 | 6 | 7 | 8 | | | F5 | F6 | F7 | F8 | |
  154. * |------+------+------+------+------+------|------+------+------+------+------+------|
  155. * | | 9 | 0 | - | = | | | F1 | F2 | F3 | F4 | |
  156. * |------+------+------+------+------+------+------+------+------+------+------+------|
  157. * | | | | | | | | | | | | |
  158. * `-----------------------------------------------------------------------------------'
  159. */
  160. [_GAME_LOWER] = LAYOUT_planck_grid_wrapper(
  161. _______, KC_1, KC_2, KC_3, KC_4, KC_GRV, _______, ____________FUNCTION_3____________, _______,
  162. _______, KC_5, KC_6, KC_7, KC_8, _______, _______, ____________FUNCTION_2____________, _______,
  163. _______, KC_9, KC_0, KC_MINS, KC_EQL, _______, _______, ____________FUNCTION_1____________, _______,
  164. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  165. ),
  166. /* Game Raise
  167. * ,-----------------------------------------------------------------------------------.
  168. * | | p7 | p8 | p9 | p0 | ` | | F9 | F10 | F11 | F12 | |
  169. * |------+------+------+------+------+-------------+------+------+------+------+------|
  170. * | | p4 | p5 | p6 | p+ | | | F5 | F6 | F7 | F8 | |
  171. * |------+------+------+------+------+------|------+------+------+------+------+------|
  172. * | | p1 | p2 | p3 | pE | | | F1 | F2 | F3 | F4 | |
  173. * |------+------+------+------+------+------+------+------+------+------+------+------|
  174. * | | | | | | | | | | | | |
  175. * `-----------------------------------------------------------------------------------'
  176. */
  177. [_GAME_RAISE] = LAYOUT_planck_grid_wrapper(
  178. _______, KC_P7, KC_P8, KC_P9, KC_P0, KC_GRV, _______, ____________FUNCTION_3____________, _______,
  179. _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, ____________FUNCTION_2____________, _______,
  180. _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______, _______, ____________FUNCTION_1____________, _______,
  181. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  182. ),
  183. };
  184. #ifdef AUDIO_ENABLE
  185. float plover_song[][2] = SONG(PLOVER_SOUND);
  186. float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
  187. #endif
  188. layer_state_t layer_state_set_user(layer_state_t state) {
  189. return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
  190. }
  191. bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
  192. switch (keycode) {
  193. case QWERTY:
  194. if (record->event.pressed) {
  195. print("mode just switched to qwerty and this is a huge string\n");
  196. set_single_persistent_default_layer(_QWERTY);
  197. }
  198. return false;
  199. break;
  200. case GAME:
  201. if (record->event.pressed) {
  202. set_single_persistent_default_layer(_GAME);
  203. }
  204. return false;
  205. break;
  206. }
  207. return true;
  208. }
  209. bool muse_mode = false;
  210. uint8_t last_muse_note = 0;
  211. uint16_t muse_counter = 0;
  212. uint8_t muse_offset = 70;
  213. uint16_t muse_tempo = 50;
  214. void encoder_update(bool clockwise) {
  215. if (muse_mode) {
  216. if (IS_LAYER_ON(_RAISE)) {
  217. if (clockwise) {
  218. muse_offset++;
  219. } else {
  220. muse_offset--;
  221. }
  222. } else {
  223. if (clockwise) {
  224. muse_tempo+=1;
  225. } else {
  226. muse_tempo-=1;
  227. }
  228. }
  229. } else {
  230. if (clockwise) {
  231. if (IS_LAYER_ON(_MOUSE)) {
  232. tap_code(KC_MS_WH_UP);
  233. } else {
  234. tap_code(KC_VOLU);
  235. }
  236. } else {
  237. if (IS_LAYER_ON(_MOUSE)) {
  238. tap_code(KC_MS_WH_DOWN);
  239. } else {
  240. tap_code(KC_VOLD);
  241. }
  242. }
  243. }
  244. }
  245. void dip_update(uint8_t index, bool active) {
  246. switch (index) {
  247. case 0:
  248. if (active) {
  249. #ifdef AUDIO_ENABLE
  250. PLAY_SONG(plover_song);
  251. #endif
  252. layer_on(_ADJUST);
  253. } else {
  254. #ifdef AUDIO_ENABLE
  255. PLAY_SONG(plover_gb_song);
  256. #endif
  257. layer_off(_ADJUST);
  258. }
  259. break;
  260. case 1:
  261. if (active) {
  262. muse_mode = true;
  263. } else {
  264. muse_mode = false;
  265. #ifdef AUDIO_ENABLE
  266. stop_all_notes();
  267. #endif
  268. }
  269. }
  270. }
  271. void matrix_scan_keymap(void) {
  272. #ifdef AUDIO_ENABLE
  273. if (muse_mode) {
  274. if (muse_counter == 0) {
  275. uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
  276. if (muse_note != last_muse_note) {
  277. stop_note(compute_freq_for_midi_note(last_muse_note));
  278. play_note(compute_freq_for_midi_note(muse_note), 0xF);
  279. last_muse_note = muse_note;
  280. }
  281. }
  282. muse_counter = (muse_counter + 1) % muse_tempo;
  283. }
  284. #endif
  285. }
  286. bool music_mask_user(uint16_t keycode) {
  287. switch (keycode) {
  288. case RAISE:
  289. case LOWER:
  290. return false;
  291. default:
  292. return true;
  293. }
  294. }