keymap.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. /* Copyright 2020 Naoki Katahira
  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. //extern uint8_t is_master;
  19. enum layer_number {
  20. _QWERTY = 0,
  21. _LOWER,
  22. _RAISE,
  23. _ADJUST,
  24. };
  25. #define RAISE MO(_RAISE)
  26. #define LOWER MO(_LOWER)
  27. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  28. /* QWERTY
  29. * ,-----------------------------------------. ,-----------------------------------------.
  30. * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ~ |
  31. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  32. * | Tab | Q | W | E | R | T | | Y | U | I | O | P | - |
  33. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  34. * |LCTRL | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
  35. * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
  36. * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
  37. * `-----------------------------------------/ / \ \-----------------------------------------'
  38. * |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE |
  39. * | | | |/ / \ \ | | | |
  40. * `-------------------''-------' '------''--------------------'
  41. */
  42. [_QWERTY] = LAYOUT(
  43. KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV,
  44. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
  45. KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
  46. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
  47. LOWER, KC_LGUI, KC_LALT, KC_SPC, KC_ENT, KC_BSPC, KC_RGUI, RAISE
  48. ),
  49. /* LOWER
  50. * ,-----------------------------------------. ,-----------------------------------------.
  51. * | | | | | | | | | | | | | |
  52. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  53. * | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
  54. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  55. * | | 1 | 2 | 3 | 4 | 5 |-------. ,-------| 6 | 7 | 8 | 9 | 0 | |
  56. * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
  57. * | | | | | | |-------| |-------| | | ` | + | { | } | |
  58. * `-----------------------------------------/ / \ \-----------------------------------------'
  59. * |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE |
  60. * | | | |/ / \ \ | | | |
  61. * `-------------------''-------' '------''--------------------'
  62. */
  63. [_LOWER] = LAYOUT(
  64. _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, _______, _______,
  65. _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
  66. _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
  67. _______, _______, _______, _______, _______, _______, _______, _______, KC_PIPE, KC_GRAVE, KC_PLUS, KC_LCBR, KC_RCBR, _______,
  68. _______, _______, _______, _______, _______, _______, _______, _______
  69. ),
  70. /* RAISE
  71. * ,-----------------------------------------. ,-----------------------------------------.
  72. * | | | | | | | | | | | | | |
  73. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  74. * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
  75. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  76. * | | | | | | |-------. ,-------| | Left | Down | Up |Right | |
  77. * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
  78. * | | | | | | |-------| |-------| + | = | [ | ] | \ | |
  79. * `-----------------------------------------/ / \ \-----------------------------------------'
  80. * |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE |
  81. * | | | |/ / \ \ | | | |
  82. * `-------------------''-------' '------''--------------------'
  83. */
  84. [_RAISE] = LAYOUT(
  85. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  86. KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
  87. _______, _______, _______, _______, _______, _______, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX,
  88. _______, _______, _______, _______, _______, _______, _______, _______, KC_PLUS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______,
  89. _______, _______, _______, _______, _______, _______, _______, _______
  90. ),
  91. /* ADJUST
  92. * ,-----------------------------------------. ,-----------------------------------------.
  93. * | | | | | | | | | | | | | |
  94. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  95. * | | | | | | | | | | | | | |
  96. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  97. * | | | | | | |-------. ,-------| | | | | | |
  98. * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
  99. * | | | | | | |-------| |-------| | | | | | |
  100. * `-----------------------------------------/ / \ \-----------------------------------------'
  101. * |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE |
  102. * | | | |/ / \ \ | | | |
  103. * `----------------------------' '------''--------------------'
  104. */
  105. [_ADJUST] = LAYOUT(
  106. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  107. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  108. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  109. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  110. _______, _______, _______, _______, _______, _______, _______, _______
  111. )
  112. };
  113. #ifdef OLED_DRIVER_ENABLE
  114. oled_rotation_t oled_init_user(oled_rotation_t rotation) {
  115. if (!is_keyboard_master())
  116. return OLED_ROTATION_180; // flips the display 180 degrees if offhand
  117. return rotation;
  118. }
  119. layer_state_t layer_state_set_user(layer_state_t state) {
  120. state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
  121. return state;
  122. }
  123. static void render_logo(void) {
  124. static const char PROGMEM logo[] = {
  125. 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
  126. 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
  127. 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
  128. };
  129. oled_write_P(logo, false);
  130. }
  131. char keylog_str[24] = {};
  132. char keylogs_str[21] = {};
  133. int keylogs_str_idx = 0;
  134. const char code_to_name[60] = {
  135. ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
  136. 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
  137. 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
  138. '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
  139. 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\',
  140. '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
  141. void set_keylog(uint16_t keycode, keyrecord_t *record) {
  142. char name = ' ';
  143. if (keycode < 60) {
  144. name = code_to_name[keycode];
  145. }
  146. // update keylog
  147. snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
  148. record->event.key.row, record->event.key.col,
  149. keycode, name);
  150. // update keylogs
  151. if (keylogs_str_idx == sizeof(keylogs_str) - 1) {
  152. keylogs_str_idx = 0;
  153. for (int i = 0; i < sizeof(keylogs_str) - 1; i++) {
  154. keylogs_str[i] = ' ';
  155. }
  156. }
  157. keylogs_str[keylogs_str_idx] = name;
  158. keylogs_str_idx++;
  159. }
  160. const char *read_keylog(void) {
  161. return keylog_str;
  162. }
  163. const char *read_keylogs(void) {
  164. return keylogs_str;
  165. }
  166. //new
  167. void oled_task_user(void) {
  168. if (is_keyboard_master()) {
  169. // Host Keyboard Layer Status
  170. oled_write_P(PSTR("Layer: "), false);
  171. switch (get_highest_layer(layer_state)) {
  172. case _QWERTY:
  173. oled_write_ln_P(PSTR("Default"), false);
  174. break;
  175. case _RAISE:
  176. oled_write_ln_P(PSTR("Raise"), false);
  177. break;
  178. case _LOWER:
  179. oled_write_ln_P(PSTR("Lower"), false);
  180. break;
  181. case _ADJUST:
  182. oled_write_ln_P(PSTR("Adjust"), false);
  183. break;
  184. default:
  185. oled_write_ln_P(PSTR("Undefined"), false);
  186. }
  187. oled_write_ln(read_keylog(), false);
  188. oled_write_ln(read_keylogs(), false);
  189. } else {
  190. render_logo();
  191. }
  192. }
  193. #endif // OLED_DRIVER_ENABLE
  194. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  195. if (record->event.pressed) {
  196. #ifdef OLED_DRIVER_ENABLE
  197. set_keylog(keycode, record);
  198. #endif
  199. // set_timelog();
  200. }
  201. return true;
  202. }