keymap.c 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597
  1. #include QMK_KEYBOARD_H
  2. #include "bootloader.h"
  3. #ifdef PROTOCOL_LUFA
  4. #include "lufa.h"
  5. #include "split_util.h"
  6. #endif
  7. #ifdef AUDIO_ENABLE
  8. #include "audio.h"
  9. #endif
  10. #ifdef SSD1306OLED
  11. #include "ssd1306.h"
  12. #endif
  13. #ifdef CONSOLE_ENABLE
  14. #include <print.h>
  15. #endif
  16. extern keymap_config_t keymap_config;
  17. #ifdef RGBLIGHT_ENABLE
  18. //Following line allows macro to read current RGB settings
  19. extern rgblight_config_t rgblight_config;
  20. #endif
  21. extern uint8_t is_master;
  22. // Each layer gets a name for readability, which is then used in the keymap matrix below.
  23. // The underscores don't mean anything - you can have a layer called STUFF or any other name.
  24. // Layer names don't all need to be of the same length, obviously, and you can also skip them
  25. // entirely and just use numbers.
  26. enum layer_number {
  27. _QWERTY = 0,
  28. _COLEMAK,
  29. _DVORAK,
  30. _EUCALYN,
  31. _KEYPAD,
  32. _AUX,
  33. _KAUX,
  34. _LOWER,
  35. _RAISE,
  36. _PADFUNC,
  37. _ADJUST,
  38. };
  39. enum custom_keycodes {
  40. QWERTY = SAFE_RANGE,
  41. COLEMAK,
  42. DVORAK,
  43. EUCALYN,
  44. KEYPAD,
  45. KC_xEISU,
  46. KC_xKANA,
  47. KC_ZERO2,
  48. RGBRST
  49. };
  50. //Macros
  51. #define KC_LOWER MO(_LOWER)
  52. #define KC_RABS LT(_RAISE,KC_BSPC)
  53. #define KC_RAEN LT(_RAISE,KC_ENT)
  54. #define KC_FF12 LT(_PADFUNC,KC_F12)
  55. #define KC_____ _______
  56. #define KC_XXXX XXXXXXX
  57. #define KC_ADJ MO(_ADJUST)
  58. #define KC_LSMI LSFT(KC_MINS)
  59. #define KC_LSEQ LSFT(KC_EQL)
  60. #define KC_LSRB LSFT(KC_RBRC)
  61. #define KC_LSLB LSFT(KC_LBRC)
  62. #define ___ _______
  63. #if HELIX_ROWS == 5
  64. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  65. /* Qwerty
  66. * ,-----------------------------------------. ,-----------------------------------------.
  67. * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BS |
  68. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  69. * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
  70. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  71. * | Ctrl | A | S | D | F | G | | H | J | K | L | ; | Ctrl |
  72. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  73. * | Shift| Z | X | C | V | B | ` | ' | N | M | , | . | / | Shift|
  74. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  75. * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower |
  76. * `-------------------------------------------------------------------------------------------------'
  77. */
  78. [_QWERTY] = LAYOUT_kc( \
  79. ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC, \
  80. TAB, Q, W, E, R, T, Y, U, I, O, P, BSLS, \
  81. LCTL, A, S, D, F, G, H, J, K, L, SCLN, RCTL, \
  82. LSFT, Z, X, C, V, B, GRV, QUOT, N, M, COMM, DOT, SLSH, RSFT, \
  83. LOWER, LOWER, CAPS, LALT, LGUI, SPC, RABS, RAEN, SPC, RGUI, RALT, APP,LOWER, LOWER \
  84. ),
  85. /* Colemak
  86. * ,-----------------------------------------. ,-----------------------------------------.
  87. * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
  88. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  89. * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ |
  90. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  91. * | Ctrl | A | R | S | T | D | | H | N | E | I | O | Ctrl |
  92. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  93. * | Shift| Z | X | C | V | B | ` | ' | K | M | , | . | / | Shift|
  94. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  95. * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower |
  96. * `-------------------------------------------------------------------------------------------------'
  97. */
  98. [_COLEMAK] = LAYOUT_kc( \
  99. ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC, \
  100. TAB, Q, W, F, P, G, J, L, U, Y, SCLN, BSLS, \
  101. LCTL, A, R, S, T, D, H, N, E, I, O, RCTL, \
  102. LSFT, Z, X, C, V, B, GRV, QUOT, K, M, COMM, DOT, SLSH, RSFT, \
  103. LOWER, LOWER, CAPS, LALT, LGUI, SPC, RABS, RAEN, SPC, RGUI, RALT, APP,LOWER, LOWER \
  104. ),
  105. /* Dvorak
  106. * ,-----------------------------------------. ,-----------------------------------------.
  107. * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
  108. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  109. * | Tab | ' | , | . | P | Y | | F | G | C | R | L | \ |
  110. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  111. * | Ctrl | A | O | E | U | I | | D | H | T | N | S | Ctrl |
  112. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  113. * | Shift| ; | Q | J | K | X | ` | / | B | M | W | V | Z | Shift|
  114. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  115. * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower |
  116. * `-------------------------------------------------------------------------------------------------'
  117. */
  118. [_DVORAK] = LAYOUT_kc( \
  119. ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC, \
  120. TAB, QUOT, COMM, DOT, P, Y, F, G, C, R, L, BSLS, \
  121. LCTL, A, O, E, U, I, D, H, T, N, S, RCTL, \
  122. LSFT, SCLN, Q, J, K, X, GRV, SLSH, B, M, W, V, Z, RSFT, \
  123. LOWER, LOWER, CAPS, LALT, LGUI, SPC, RABS, RAEN, SPC, RGUI, RALT, APP,LOWER, LOWER \
  124. ),
  125. /* Eucalyn (http://eucalyn.hatenadiary.jp/entry/about-eucalyn-layout)
  126. * ,-----------------------------------------. ,-----------------------------------------.
  127. * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
  128. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  129. * | Tab | Q | W | , | . | ; | | M | R | D | Y | P | \ |
  130. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  131. * | Ctrl | A | O | E | I | U | | G | T | K | S | N | Ctrl |
  132. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  133. * | Shift| Z | X | C | V | F | ` | ' | B | H | J | L | / | Shift|
  134. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  135. * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower |
  136. * `-------------------------------------------------------------------------------------------------'
  137. */
  138. [_EUCALYN] = LAYOUT_kc( \
  139. ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC, \
  140. TAB, Q, W, COMM, DOT, SCLN, M, R, D, Y, P, BSLS, \
  141. LCTL, A, O, E, I, U, G, T, K, S, N, RCTL, \
  142. LSFT, Z, X, C, V, F, GRV, QUOT, B, H, J, L, SLSH, RSFT, \
  143. LOWER, LOWER, CAPS, LALT, LGUI, SPC, RABS, RAEN, SPC, RGUI, RALT, APP,LOWER, LOWER \
  144. ),
  145. /* Keypad
  146. * ,-----------------------------------------. ,-----------------------------------------.
  147. * | Tab | / | * | Del | F1 | F6 | | F1 | F6 | Del | Tab | / | * |
  148. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  149. * | 7 | 8 | 9 | BS | F2 | F7 | | F2 | F7 | BS | 7 | 8 | 9 |
  150. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  151. * | 4 | 5 | 6 | - | F3 | F8 | | F3 | F8 | - | 4 | 5 | 6 |
  152. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  153. * | 1 | 2 | 3 | + | F4 | F9 | F11 | F11 | F4 | F9 | + | 1 | 2 | 3 |
  154. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  155. * | 0 | , | . | Enter| F5 | F10 | F12 | F12 | F5 | F10 | Enter| 0 | , | . |
  156. * `-------------------------------------------------------------------------------------------------'
  157. */
  158. [_KEYPAD] = LAYOUT_kc( \
  159. TAB, PSLS, PAST, DEL, F1, F6, F1, F6, DEL, TAB, PSLS, PAST, \
  160. KP_7, KP_8, KP_9, BSPC, F2, F7, F2, F7, BSPC, KP_7, KP_8, KP_9, \
  161. KP_4, KP_5, KP_6, PMNS, F3, F8, F3, F8, PMNS, KP_4, KP_5, KP_6, \
  162. KP_1, KP_2, KP_3, PPLS, F4, F9, F11, F11, F4, F9, PPLS, KP_1, KP_2, KP_3, \
  163. KP_0, COMM, PDOT, PENT, F5, F10, FF12, FF12, F5, F10, PENT, KP_0, COMM, PDOT \
  164. ),
  165. /* AUX modifier key layer
  166. * ,-----------------------------------------. ,-----------------------------------------.
  167. * | | | | | | | | | | | | | |
  168. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  169. * | | | | | | | | | | | | | |
  170. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  171. * | | | | | | | | | | | | | |
  172. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  173. * | | | | | | | | | | | | | | |
  174. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  175. * | | 00 | | | | | | | | | | | 00 | |
  176. * `-------------------------------------------------------------------------------------------------'
  177. */
  178. [_KAUX] = LAYOUT_kc( \
  179. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
  180. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
  181. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
  182. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
  183. ____,ZERO2, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ZERO2,____ \
  184. ),
  185. /* Keypad function layer
  186. * ,-----------------------------------------. ,-----------------------------------------.
  187. * | | | | Pause| ScrLk| PtrSc| | PtrSc| ScrLk| Pause| | | |
  188. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  189. * | | | | Home | Up | PgUp | | PgUp | Up | Home | | | |
  190. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  191. * | |Delete|Insert| Left | Down | Right| | Left | Down | Right|Insert|Delete| |
  192. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  193. * | | | | End | | PgDn |Adjust|Adjust| PgDn | | End | | | |
  194. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  195. * | | | | | | | | | | | | | | |
  196. * `-------------------------------------------------------------------------------------------------'
  197. */
  198. [_PADFUNC] = LAYOUT_kc( \
  199. XXXX, XXXX, XXXX, PAUS, SLCK, PSCR, PSCR, SLCK, PAUS, XXXX, XXXX, XXXX, \
  200. XXXX, XXXX, XXXX, HOME, UP, PGUP, PGUP, UP, HOME, XXXX, XXXX, XXXX, \
  201. XXXX, DEL, INS, LEFT, DOWN, RGHT, LEFT, DOWN, RGHT, INS, DEL, XXXX, \
  202. XXXX, XXXX, XXXX, END, XXXX, PGDN, ADJ, ADJ, PGDN, XXXX, END, XXXX, XXXX, XXXX, \
  203. XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, ____, ____, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX \
  204. ),
  205. /* Lower
  206. * ,-----------------------------------------. ,-----------------------------------------.
  207. * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
  208. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  209. * | | |Pause | ScrLk| Ins | | | | Ins | ScrLk|Pause | | F12 |
  210. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  211. * | | PgUp | | Up |Delete| Home | | Home |Delete| Up | | PgUp | |
  212. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  213. * | | PgDn | Left | Down | Right| End |Adjust|Adjust| End | Left | Down | Right| PgDn | |
  214. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  215. * | | | PrtSc| | | | | | | | | PrtSc| | |
  216. * `-------------------------------------------------------------------------------------------------'
  217. */
  218. [_LOWER] = LAYOUT_kc( \
  219. XXXX, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, \
  220. XXXX, XXXX, PAUS, SLCK, INS, XXXX, XXXX, INS, SLCK, PAUS, XXXX, F12, \
  221. ____, HOME, XXXX, UP, DEL, PGUP, PGUP, DEL, UP, XXXX, HOME, ____, \
  222. ____, END, LEFT, DOWN, RGHT, PGDN, XXXX, XXXX, PGDN, LEFT, DOWN, RGHT, END, ____, \
  223. ____, ____, PSCR, ____, ____, ____, ADJ, ADJ, ____, ____, ____, PSCR, ____, ____ \
  224. ),
  225. /* Raise
  226. * ,-----------------------------------------. ,-----------------------------------------.
  227. * | | | | | | | | | | | | | |
  228. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  229. * | | | | | _ | - | | = | + | | | | |
  230. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  231. * | | | | | { | [ | | ] | } | | | | |
  232. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  233. * | | | | | | EISU | EISU | KANA | KANA | Next | Vol- | Vol+ | Play | |
  234. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  235. * | | | | | | | | | | | | | | |
  236. * `-------------------------------------------------------------------------------------------------'
  237. */
  238. [_RAISE] = LAYOUT_kc( \
  239. XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, \
  240. XXXX, XXXX, XXXX, XXXX, LSMI, MINS, EQL, LSEQ, XXXX, XXXX, XXXX, XXXX, \
  241. ____, XXXX, XXXX, XXXX, LSLB, LBRC, RBRC, LSRB, XXXX, XXXX, XXXX, ____, \
  242. ____, XXXX, XXXX, XXXX, XXXX,xEISU,xEISU, xKANA,xKANA,MNXT, VOLD, VOLU, MPLY, ____, \
  243. ADJ, ADJ, XXXX, ____, ____, XXXX, ____, ____, XXXX, ____, ____, XXXX, ADJ, ADJ \
  244. ),
  245. /* Adjust (Lower + Raise)
  246. * ,-----------------------------------------. ,-----------------------------------------.
  247. * | |Keypad|Dvorak|Colemk|Euclyn|Qwerty| |Qwerty|Euclyn|Colemk|Dvorak|Keypad| |
  248. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  249. * | | Reset|RGBRST|RGB ON|Aud on| Win | | Win |Aud on|RGB ON|RGBRST| | |
  250. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  251. * | HUE+ | SAT+ | VAL+ |RGB md|Audoff| Mac | | Mac |Audoff|RGB md| VAL+ | SAT+ | HUE+ |
  252. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  253. * | HUE- | SAT- | VAL- | | | | | | | | | VAL- | SAT- | HUE- |
  254. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  255. * | | | | | | | | | | | | | | |
  256. * `-------------------------------------------------------------------------------------------------'
  257. */
  258. [_ADJUST] = LAYOUT( \
  259. XXXXXXX, KEYPAD, DVORAK, COLEMAK, EUCALYN, QWERTY, QWERTY, EUCALYN, COLEMAK, DVORAK, KEYPAD, XXXXXXX, \
  260. XXXXXXX, RESET, RGBRST, RGB_TOG, AU_ON, AG_SWAP, AG_SWAP, AU_ON, RGB_TOG, RGBRST, XXXXXXX, XXXXXXX, \
  261. RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, AU_OFF, AG_NORM, AG_NORM, AU_OFF, RGB_MOD, RGB_VAI, RGB_SAI, RGB_HUI, \
  262. RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, ___,___, XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAD, RGB_SAD, RGB_HUD, \
  263. _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ___,___, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______ \
  264. ),
  265. /* AUX modifier key layer
  266. * ,-----------------------------------------. ,-----------------------------------------.
  267. * | | | | | | | | | | | | | |
  268. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  269. * | | | | | | | | | | | | | |
  270. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  271. * | | | | | | | | | | | | | |
  272. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  273. * | | | | | | | | | | | | | | |
  274. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  275. * | | | | | | BS | Enter| | | | | | | |
  276. * `-------------------------------------------------------------------------------------------------'
  277. */
  278. [_AUX] = LAYOUT_kc( \
  279. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
  280. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
  281. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
  282. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
  283. ____, ____, ____, ____, ____, BSPC, RAEN, ____, ____, ____, ____, ____, ____, ____ \
  284. )
  285. };
  286. #else
  287. #error "undefined keymaps"
  288. #endif
  289. #ifdef AUDIO_ENABLE
  290. float tone_qwerty[][2] = SONG(QWERTY_SOUND);
  291. float tone_dvorak[][2] = SONG(DVORAK_SOUND);
  292. float tone_colemak[][2] = SONG(COLEMAK_SOUND);
  293. float tone_plover[][2] = SONG(PLOVER_SOUND);
  294. float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
  295. float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
  296. #endif
  297. static int current_default_layer;
  298. uint32_t default_layer_state_set_kb(uint32_t state) {
  299. // 1<<_QWERTY - 1 == 1 - 1 == _QWERTY (=0)
  300. // 1<<_COLEMAK - 1 == 2 - 1 == _COLEMAK (=1)
  301. current_default_layer = state - 1;
  302. // 1<<_DVORAK - 2 == 4 - 2 == _DVORAK (=2)
  303. if ( current_default_layer == 3 ) current_default_layer -= 1;
  304. // 1<<_EUCALYN - 5 == 8 - 5 == _EUCALYN (=3)
  305. if ( current_default_layer == 7 ) current_default_layer -= 4;
  306. // 1<<_KEYPAD - 12 == 16 - 12 == _KEYPAD (=4)
  307. if ( current_default_layer == 15 ) current_default_layer -= 11;
  308. return state;
  309. }
  310. void update_base_layer(int base)
  311. {
  312. if( current_default_layer != base ) {
  313. eeconfig_update_default_layer(1UL<<base);
  314. default_layer_set(1UL<<base);
  315. layer_off(_AUX);
  316. layer_off(_KAUX);
  317. } else {
  318. if( base < _KEYPAD )
  319. layer_invert(_AUX);
  320. else
  321. layer_invert(_KAUX);
  322. }
  323. }
  324. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  325. switch (keycode) {
  326. case QWERTY:
  327. if (record->event.pressed) {
  328. #ifdef AUDIO_ENABLE
  329. PLAY_SONG(tone_qwerty);
  330. #endif
  331. update_base_layer(_QWERTY);
  332. }
  333. return false;
  334. break;
  335. case COLEMAK:
  336. if (record->event.pressed) {
  337. #ifdef AUDIO_ENABLE
  338. PLAY_SONG(tone_colemak);
  339. #endif
  340. update_base_layer(_COLEMAK);
  341. }
  342. return false;
  343. break;
  344. case DVORAK:
  345. if (record->event.pressed) {
  346. #ifdef AUDIO_ENABLE
  347. PLAY_SONG(tone_dvorak);
  348. #endif
  349. update_base_layer(_DVORAK);
  350. }
  351. return false;
  352. break;
  353. case EUCALYN:
  354. if (record->event.pressed) {
  355. #ifdef AUDIO_ENABLE
  356. PLAY_SONG(tone_dvorak);
  357. #endif
  358. update_base_layer(_EUCALYN);
  359. }
  360. return false;
  361. break;
  362. case KEYPAD:
  363. if (record->event.pressed) {
  364. #ifdef AUDIO_ENABLE
  365. PLAY_SONG(tone_dvorak);
  366. #endif
  367. update_base_layer(_KEYPAD);
  368. }
  369. return false;
  370. break;
  371. case KC_ZERO2:
  372. if (record->event.pressed) {
  373. SEND_STRING("00");
  374. }
  375. return false;
  376. break;
  377. case KC_xEISU:
  378. if (record->event.pressed) {
  379. if(keymap_config.swap_lalt_lgui==false){
  380. register_code(KC_LANG2);
  381. }else{
  382. SEND_STRING(SS_LALT("`"));
  383. }
  384. } else {
  385. unregister_code(KC_LANG2);
  386. }
  387. return false;
  388. break;
  389. case KC_xKANA:
  390. if (record->event.pressed) {
  391. if(keymap_config.swap_lalt_lgui==false){
  392. register_code(KC_LANG1);
  393. }else{
  394. SEND_STRING(SS_LALT("`"));
  395. }
  396. } else {
  397. unregister_code(KC_LANG1);
  398. }
  399. return false;
  400. break;
  401. case RGBRST:
  402. #ifdef RGBLIGHT_ENABLE
  403. if (record->event.pressed) {
  404. eeconfig_update_rgblight_default();
  405. rgblight_enable();
  406. }
  407. #endif
  408. break;
  409. }
  410. return true;
  411. }
  412. void matrix_init_user(void) {
  413. #ifdef AUDIO_ENABLE
  414. startup_user();
  415. #endif
  416. //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
  417. #ifdef SSD1306OLED
  418. iota_gfx_init(!has_usb()); // turns on the display
  419. #endif
  420. }
  421. #ifdef AUDIO_ENABLE
  422. void startup_user()
  423. {
  424. _delay_ms(20); // gets rid of tick
  425. }
  426. void shutdown_user()
  427. {
  428. _delay_ms(150);
  429. stop_all_notes();
  430. }
  431. void music_on_user(void)
  432. {
  433. music_scale_user();
  434. }
  435. void music_scale_user(void)
  436. {
  437. PLAY_SONG(music_scale);
  438. }
  439. #endif
  440. //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
  441. #ifdef SSD1306OLED
  442. void matrix_scan_user(void) {
  443. iota_gfx_task(); // this is what updates the display continuously
  444. }
  445. void matrix_update(struct CharacterMatrix *dest,
  446. const struct CharacterMatrix *source) {
  447. if (memcmp(dest->display, source->display, sizeof(dest->display))) {
  448. memcpy(dest->display, source->display, sizeof(dest->display));
  449. dest->dirty = true;
  450. }
  451. }
  452. static void render_logo(struct CharacterMatrix *matrix) {
  453. static char logo[]={
  454. 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
  455. 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
  456. 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
  457. 0};
  458. matrix_write(matrix, logo);
  459. #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_ANIMATIONS)
  460. char buf[30];
  461. if(rgblight_config.enable) {
  462. snprintf(buf, sizeof(buf), " LED %2d: %d,%d,%d ",
  463. rgblight_config.mode,
  464. rgblight_config.hue/RGBLIGHT_HUE_STEP,
  465. rgblight_config.sat/RGBLIGHT_SAT_STEP,
  466. rgblight_config.val/RGBLIGHT_VAL_STEP);
  467. matrix_write(matrix, buf);
  468. }
  469. #endif
  470. //matrix_write_P(&matrix, PSTR(" Split keyboard kit"));
  471. }
  472. static const char Qwerty_name[] PROGMEM = " Qwerty";
  473. static const char Colemak_name[] PROGMEM = " Colemak";
  474. static const char Dvorak_name[] PROGMEM = " Dvorak";
  475. static const char Eucalyn_name[] PROGMEM = " Eucalyn";
  476. static const char Keypad_name[] PROGMEM = " Keypad";
  477. static const char AUX_name[] PROGMEM = ":AUX";
  478. static const char KAUX_name[] PROGMEM = ":00";
  479. static const char Padfunc_name[] PROGMEM = ":PadFunc";
  480. static const char Lower_name[] PROGMEM = ":Func";
  481. static const char Raise_name[] PROGMEM = ":Extra";
  482. static const char Adjust_name[] PROGMEM = ":Adjust";
  483. static const char *layer_names[] = {
  484. [_QWERTY] = Qwerty_name,
  485. [_COLEMAK] = Colemak_name,
  486. [_DVORAK] = Dvorak_name,
  487. [_EUCALYN]= Eucalyn_name,
  488. [_KEYPAD] = Keypad_name,
  489. [_AUX] = AUX_name,
  490. [_KAUX] = KAUX_name,
  491. [_LOWER] = Lower_name,
  492. [_RAISE] = Raise_name,
  493. [_PADFUNC]= Padfunc_name,
  494. [_ADJUST] = Adjust_name
  495. };
  496. void render_status(struct CharacterMatrix *matrix) {
  497. // Render to mode icon
  498. static char logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
  499. if(keymap_config.swap_lalt_lgui==false){
  500. matrix_write(matrix, logo[0][0]);
  501. matrix_write_P(matrix, PSTR("\n"));
  502. matrix_write(matrix, logo[0][1]);
  503. }else{
  504. matrix_write(matrix, logo[1][0]);
  505. matrix_write_P(matrix, PSTR("\n"));
  506. matrix_write(matrix, logo[1][1]);
  507. }
  508. // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
  509. int name_num;
  510. uint32_t lstate;
  511. matrix_write_P(matrix, layer_names[current_default_layer]);
  512. matrix_write_P(matrix, PSTR("\n"));
  513. for( lstate = layer_state, name_num = 0;
  514. lstate && name_num < sizeof(layer_names)/sizeof(char *);
  515. lstate >>=1, name_num++ ) {
  516. if( (lstate & 1) != 0 ) {
  517. if( layer_names[name_num] ) {
  518. matrix_write_P(matrix, layer_names[name_num]);
  519. }
  520. }
  521. }
  522. // Host Keyboard LED Status
  523. char led[40];
  524. snprintf(led, sizeof(led), "\n%s %s %s",
  525. (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
  526. (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
  527. (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
  528. matrix_write(matrix, led);
  529. }
  530. void iota_gfx_task_user(void) {
  531. struct CharacterMatrix matrix;
  532. #if DEBUG_TO_SCREEN
  533. if (debug_enable) {
  534. return;
  535. }
  536. #endif
  537. matrix_clear(&matrix);
  538. if(is_master){
  539. render_status(&matrix);
  540. }else{
  541. render_logo(&matrix);
  542. }
  543. matrix_update(&display, &matrix);
  544. }
  545. #endif