keymap.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. /* Copyright 2019 Thomas Baart <thomas@splitkb.com>
  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. enum layers {
  18. QWERTY = 0,
  19. LOWER,
  20. RAISE,
  21. ADJUST
  22. };
  23. enum custom_keycodes {
  24. RGBRST = SAFE_RANGE,
  25. KC_RACL
  26. };
  27. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  28. /*
  29. * Base Layer: QWERTY
  30. *
  31. * ,-------------------------------------------. ,-------------------------------------------.
  32. * | ESC | Q | W | E | R | T | | Y | U | I | O | P | BSPC |
  33. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  34. * | TAB/ADJ| A | S | D | F | G | | H | J | K | L | ; : | ENTER |
  35. * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
  36. * | LSHIFT | Z | X | C | V | B | | | | | | N | M | , < | . > | / ? | F16 |
  37. * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
  38. * | | | | | Space| | MYCM | Calc | F15 | | |
  39. * | | | Ctrl | LAlt | Lower| | Raise| | | | |
  40. * `----------------------------------' `----------------------------------'
  41. */
  42. [QWERTY] = LAYOUT(
  43. KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
  44. LT(ADJUST,KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
  45. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_F16,
  46. XXXXXXX, XXXXXXX, KC_LCTL, KC_LALT, LT(LOWER,KC_SPC), LT(RAISE,KC_MYCM), KC_CALC, KC_F15, XXXXXXX, XXXXXXX
  47. ),
  48. /*
  49. * Lower Layer: Numbers and symbols
  50. *
  51. * ,-------------------------------------------. ,-------------------------------------------.
  52. * | ` | 1 ! | 2 @ | 3 # | 4 $ | 5 % | | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | DEL |
  53. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  54. * | CAPS | - _ | = + | [ { | ] } | | | | | | | ' " | |
  55. * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
  56. * | LSHIFT | TAB | | | | | | | | | | Home | PgDn | PgUp | End | \ | | |
  57. * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
  58. * | | | | | Space| | Space| | | | |
  59. * | | | Ctrl | LAlt | Lower| | | | | | |
  60. * `----------------------------------' `----------------------------------'
  61. */
  62. [LOWER] = LAYOUT(
  63. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
  64. KC_CAPS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_QUOT, KC_NO,
  65. KC_LSFT, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_BSLS, KC_NO,
  66. _______, _______, _______, _______, _______, KC_SPC, KC_NO, KC_NO, _______, _______
  67. ),
  68. /*
  69. * Raise Layer: Function Keys
  70. *
  71. * ,-------------------------------------------. ,-------------------------------------------.
  72. * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
  73. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  74. * | | |EEPRST| | | | | | | | | | F12 |
  75. * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
  76. * | LSHIFT | TAB | RESET| | | | | | | | | Play | | | | | |
  77. * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
  78. * | | | | | Space| | MYCM | Prev | Next | | |
  79. * | | | Ctrl | LAlt | | | Raise| | | | |
  80. * `----------------------------------' `----------------------------------'
  81. */
  82. [RAISE] = LAYOUT(
  83. KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  84. KC_NO, KC_NO, EEP_RST, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
  85. KC_LSFT, KC_TAB, RESET, KC_NO, KC_NO, KC_NO, _______, _______, _______, _______, KC_MPLY, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  86. _______, _______, _______, _______, KC_SPC , KC_MPRV, KC_MNXT, _______, _______, _______
  87. ),
  88. /*
  89. * Adjust Layer: Arrow keys, RGB
  90. *
  91. * ,-------------------------------------------. ,-------------------------------------------.
  92. * | | BTN2 | Up | BTN1 |RGBMOD|RGBTOG| | | | | | | |
  93. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  94. * | | Left | Down | Right|RGBSAI|RGBHUI| | | | | | | |
  95. * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
  96. * | RGBRST | |RGBVAI|RGBVAD|RGBSAD|RGBHUD| | | | | | | | | | | |
  97. * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
  98. * | | | WBAK | BTN3 | WFWD | | MYCM | Calc | F15 | | |
  99. * | | | | | | | Raise| | | | |
  100. * `----------------------------------' `----------------------------------'
  101. */
  102. [ADJUST] = LAYOUT(
  103. KC_NO, KC_BTN2, KC_UP, KC_BTN1, RGB_MOD, RGB_TOG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  104. KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, RGB_SAI, RGB_HUI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  105. RGBRST, KC_NO, RGB_VAI, RGB_VAD, RGB_SAD, RGB_HUD, _______, _______, _______, _______, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  106. _______, _______, KC_WBAK, KC_BTN3, KC_WFWD, _______, _______, _______, _______, _______
  107. ),
  108. // /*
  109. // * Layer template
  110. // *
  111. // * ,-------------------------------------------. ,-------------------------------------------.
  112. // * | | | | | | | | | | | | | |
  113. // * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  114. // * | | | | | | | | | | | | | |
  115. // * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
  116. // * | | | | | | | | | | | | | | | | | |
  117. // * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
  118. // * | | | | | | | | | | | |
  119. // * | | | | | | | | | | | |
  120. // * `----------------------------------' `----------------------------------'
  121. // */
  122. // [LAYERINDEX] = LAYOUT(
  123. // _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  124. // _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  125. // _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  126. // _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  127. // ),
  128. };
  129. layer_state_t layer_state_set_user(layer_state_t state) {
  130. return update_tri_layer_state(state, LOWER, RAISE, ADJUST);
  131. }
  132. // bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  133. // switch (keycode) {
  134. // case MyCustomKeycode:
  135. // if (record->event.pressed) {
  136. // // What to do if the button was pressed
  137. // } else {
  138. // // What to do if the button was released
  139. // }
  140. // break;
  141. // }
  142. // return true;
  143. // }
  144. #ifdef OLED_DRIVER_ENABLE
  145. oled_rotation_t oled_init_user(oled_rotation_t rotation) {
  146. return OLED_ROTATION_180;
  147. }
  148. static void render_kyria_logo(void) {
  149. static const char PROGMEM kyria_logo[] = {
  150. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,192,224,240,112,120, 56, 60, 28, 30, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, 14, 30, 28, 60, 56,120,112,240,224,192,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  151. 0, 0, 0, 0, 0, 0, 0,192,224,240,124, 62, 31, 15, 7, 3, 1,128,192,224,240,120, 56, 60, 28, 30, 14, 14, 7, 7,135,231,127, 31,255,255, 31,127,231,135, 7, 7, 14, 14, 30, 28, 60, 56,120,240,224,192,128, 1, 3, 7, 15, 31, 62,124,240,224,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  152. 0, 0, 0, 0,240,252,255, 31, 7, 1, 0, 0,192,240,252,254,255,247,243,177,176, 48, 48, 48, 48, 48, 48, 48,120,254,135, 1, 0, 0,255,255, 0, 0, 1,135,254,120, 48, 48, 48, 48, 48, 48, 48,176,177,243,247,255,254,252,240,192, 0, 0, 1, 7, 31,255,252,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  153. 0, 0, 0,255,255,255, 0, 0, 0, 0, 0,254,255,255, 1, 1, 7, 30,120,225,129,131,131,134,134,140,140,152,152,177,183,254,248,224,255,255,224,248,254,183,177,152,152,140,140,134,134,131,131,129,225,120, 30, 7, 1, 1,255,255,254, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0,255,255, 0, 0,192,192, 48, 48, 0, 0,240,240, 0, 0, 0, 0, 0, 0,240,240, 0, 0,240,240,192,192, 48, 48, 48, 48,192,192, 0, 0, 48, 48,243,243, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,192,192, 0, 0, 0, 0, 0,
  154. 0, 0, 0,255,255,255, 0, 0, 0, 0, 0,127,255,255,128,128,224,120, 30,135,129,193,193, 97, 97, 49, 49, 25, 25,141,237,127, 31, 7,255,255, 7, 31,127,237,141, 25, 25, 49, 49, 97, 97,193,193,129,135, 30,120,224,128,128,255,255,127, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0, 63, 63, 3, 3, 12, 12, 48, 48, 0, 0, 0, 0, 51, 51, 51, 51, 51, 51, 15, 15, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 63, 63, 48, 48, 0, 0, 12, 12, 51, 51, 51, 51, 51, 51, 63, 63, 0, 0, 0, 0, 0,
  155. 0, 0, 0, 0, 15, 63,255,248,224,128, 0, 0, 3, 15, 63,127,255,239,207,141, 13, 12, 12, 12, 12, 12, 12, 12, 30,127,225,128, 0, 0,255,255, 0, 0,128,225,127, 30, 12, 12, 12, 12, 12, 12, 12, 13,141,207,239,255,127, 63, 15, 3, 0, 0,128,224,248,255, 63, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  156. 0, 0, 0, 0, 0, 0, 0, 3, 7, 15, 62,124,248,240,224,192,128, 1, 3, 7, 15, 30, 28, 60, 56,120,112,112,224,224,225,231,254,248,255,255,248,254,231,225,224,224,112,112,120, 56, 60, 28, 30, 15, 7, 3, 1,128,192,224,240,248,124, 62, 15, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  157. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 7, 15, 14, 30, 28, 60, 56,120,112,112,112,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,112,112,112,120, 56, 60, 28, 30, 14, 15, 7, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  158. };
  159. oled_write_raw_P(kyria_logo, sizeof(kyria_logo));
  160. }
  161. static void render_tessachka_logo(void) {
  162. static const char PROGMEM Tessachka_OLED_Logo_Inverted[] =
  163. {
  164. 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 192, 192, 192, 192, 192, 192, 192,
  165. 192, 192, 192, 64, 0, 0, 128, 128, 192, 192, 192, 192, 192, 192, 64, 0, 0,
  166. 128, 192, 192, 192, 192, 192, 192, 192, 192, 192, 64, 0, 0, 128, 192, 192, 192,
  167. 192, 192, 192, 192, 192, 192, 64, 0, 0, 0, 0, 0, 0, 192, 192, 0, 0,
  168. 0, 0, 0, 0, 0, 128, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 0,
  169. 192, 128, 0, 0, 0, 0, 0, 0, 0, 0, 128, 192, 0, 192, 128, 0, 0,
  170. 0, 0, 128, 192, 192, 128, 0, 0, 0, 0, 0, 0, 0, 192, 192, 0, 0,
  171. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  172. 1, 1, 1, 1, 255, 255, 255, 127, 1, 1, 1, 0, 24, 126, 255, 255, 219,
  173. 219, 153, 153, 153, 137, 128, 128, 0, 135, 143, 159, 153, 153, 153, 153, 153, 153,
  174. 249, 240, 224, 0, 135, 143, 159, 153, 153, 153, 153, 153, 153, 249, 240, 224, 0,
  175. 0, 192, 240, 252, 159, 135, 135, 159, 124, 240, 192, 0, 60, 255, 255, 231, 195,
  176. 129, 0, 0, 0, 129, 195, 195, 195, 0, 255, 255, 255, 24, 24, 24, 24, 24,
  177. 24, 255, 255, 255, 0, 255, 255, 255, 28, 62, 127, 247, 227, 193, 128, 0, 0,
  178. 0, 192, 240, 252, 159, 135, 135, 159, 124, 240, 192, 0, 0, 0, 0, 0, 0,
  179. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0,
  180. 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 1, 0, 0,
  181. 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 1, 3, 3,
  182. 3, 3, 3, 3, 3, 3, 1, 0, 0, 3, 3, 3, 3, 3, 3, 1, 0,
  183. 0, 1, 3, 3, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0,
  184. 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 1, 3,
  185. 0, 0, 0, 0, 1, 3, 3, 1, 0, 3, 3, 3, 3, 3, 3, 1, 0,
  186. 0, 1, 3, 3, 0, 0, 0, 0, 0, 0
  187. };
  188. oled_write_raw_P(Tessachka_OLED_Logo_Inverted, sizeof(Tessachka_OLED_Logo_Inverted));
  189. oled_advance_page(false);
  190. oled_advance_page(false);
  191. oled_advance_page(false);
  192. }
  193. static void render_status(void) {
  194. // Logo and version information
  195. render_tessachka_logo();
  196. oled_write_P(PSTR("Kyria rev1.0\n\n"), false);
  197. // Host Keyboard Layer Status
  198. oled_write_P(PSTR("Layer: "), false);
  199. switch (get_highest_layer(layer_state)) {
  200. case QWERTY:
  201. oled_write_P(PSTR("Default\n"), false);
  202. break;
  203. case LOWER:
  204. oled_write_P(PSTR("Lower\n"), false);
  205. break;
  206. case RAISE:
  207. oled_write_P(PSTR("Raise\n"), false);
  208. break;
  209. case ADJUST:
  210. oled_write_P(PSTR("Adjust\n"), false);
  211. break;
  212. default:
  213. oled_write_P(PSTR("Undefined\n"), false);
  214. }
  215. // Host Keyboard LED Status
  216. uint8_t led_usb_state = host_keyboard_leds();
  217. oled_write_P(IS_LED_ON(led_usb_state, USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR(" "), false);
  218. oled_write_P(IS_LED_ON(led_usb_state, USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR(" "), false);
  219. oled_write_P(IS_LED_ON(led_usb_state, USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR(" "), false);
  220. }
  221. void oled_task_user(void) {
  222. if (is_keyboard_master()) {
  223. render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
  224. } else {
  225. render_kyria_logo();
  226. }
  227. }
  228. #endif