keymap.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. /* Copyright 2019 Stefano Marago'
  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. /*
  17. * The 25% SuperMicro keyboard: a pure - full features - "Alpha 26" keymap on Gherkin, compatible also with 28 and 30 keys layouts
  18. * See https://github.com/stevexyz/qmk_firmware/blob/master/keyboards/40percentclub/gherkin/keymaps/stevexyz/readme.md for more information
  19. */
  20. #include QMK_KEYBOARD_H
  21. enum layers {
  22. LAYER_HOME, // home base layer
  23. LAYER_FUNC, // function keys and cursors
  24. LAYER_NUMSYM, // numbers and other characters
  25. LAYER_SYST, // media, mouse and other system keys
  26. LAYER_ARROWPAD,
  27. LAYER_NUMPAD,
  28. LAYER_MEDIAPAD,
  29. };
  30. enum custom_keycodes {
  31. CK_TRIPLEZERO = SAFE_RANGE,
  32. };
  33. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  34. /*
  35. * LEGEND:
  36. *
  37. * ,--------------------------------.
  38. * | Top row: shifted character |
  39. * | Central row: standard char |
  40. * | Bottom row: hold modifier |
  41. * `--------------------------------'
  42. *
  43. * "____" means free to be assigned
  44. *
  45. */
  46. /* Qwerty Home Layer
  47. * ,---------------------------------------------------------------------.
  48. * | | | | | | | | | | |
  49. * | Q | W | E | R | T | Y | U | I | O | P |
  50. * | ____ | ____ | ____ | ____ | ____ | FnNav|NumSym| Alt | Ctrl | Shift|
  51. * |------+------+------+------+-------------+------+------+------+------|
  52. * | | | | | | | | | | |
  53. * | A | S | D | F | G | H | J | K | L | Enter|
  54. * | Shift| FnNav|NumSym| AltGr| OSkey| OSkey| AltGr| FnNav|NumSym| Shift|
  55. * '------+------+------+------+------+------|------+------+------+------'
  56. * | | | | | | | | |
  57. * | Z | X | C | V | B | N | M | Space|
  58. * | Ctrl | Alt | FnNav|NumSym| Shift| Alt | Ctrl | Shift|
  59. * '-------------------------------------------------------'
  60. */
  61. [LAYER_HOME] = LAYOUT_ortho_3x10(
  62. LT(LAYER_ARROWPAD, KC_Q), LT(LAYER_NUMPAD, KC_W), LT(LAYER_MEDIAPAD, KC_E), KC_R, KC_T, LT(LAYER_FUNC, KC_Y), LT(LAYER_NUMSYM, KC_U), MT(MOD_LALT, KC_I), MT(MOD_RCTL, KC_O), MT(MOD_RSFT, KC_P),
  63. MT(MOD_LSFT, KC_A), LT(LAYER_FUNC, KC_S), LT(LAYER_NUMSYM, KC_D), MT(MOD_RALT, KC_F), MT(MOD_LGUI, KC_G), MT(MOD_RGUI, KC_H), MT(MOD_RALT, KC_J), LT(LAYER_FUNC, KC_K), LT(LAYER_NUMSYM, KC_L), MT(MOD_RSFT, KC_ENT),
  64. KC_DOWN, MT(MOD_LCTL, KC_Z), MT(MOD_LALT, KC_X), LT(LAYER_FUNC, KC_C), LT(LAYER_NUMSYM, KC_V), MT(MOD_LSFT, KC_B), MT(MOD_LALT, KC_N), MT(MOD_RCTL, KC_M), MT(MOD_RSFT, KC_SPC), KC_BSPC
  65. ),
  66. /* Function and Navigation Layer
  67. * ,---------------------------------------------------------------------.
  68. * | | | | | | | | | | |
  69. * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |
  70. * | ____ | ____ | ____ | ____ | ____ | ____ |SysLay| Alt | Ctrl | Shift|
  71. * |------+------+------+------+-------------+------+------+------+------|
  72. * | | | | | | | | | | |
  73. * | ESC | Home | PgDn | PgUp | End | Left | Down | Up | Right|Backsp|
  74. * | Shift| ____ |SysLay| AltGr| OSkey| OSkey| AltGr| ____ |SysLay| Shift|
  75. * '------+------+------+------+------+------|------+------+------+------'
  76. * | | | | | | | | |
  77. * | F11 | F12 | | Space|PrnScr|ScrLck|Pause |Backsp|
  78. * | Ctrl | Alt | ____ |SysLay| Shift| Alt | Ctrl | Shift|
  79. * '-------------------------------------------------------'
  80. */
  81. [LAYER_FUNC] = LAYOUT_ortho_3x10(
  82. KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, LT(LAYER_SYST, KC_F7), MT(MOD_LALT, KC_F8), MT(MOD_RCTL,KC_F9), MT(MOD_RSFT, KC_F10),
  83. MT(MOD_LSFT, KC_ESC), KC_HOME, LT(LAYER_SYST, KC_PGDN), MT(MOD_RALT, KC_PGUP), MT(MOD_LGUI, KC_END), MT(MOD_RGUI, KC_LEFT), MT(MOD_RALT, KC_DOWN), KC_UP, LT(LAYER_SYST, KC_RGHT), MT(MOD_RSFT, KC_BSPC),
  84. KC_DOWN, MT(KC_LCTL, KC_F11), MT(KC_LALT, KC_F12), KC_NO, LT(LAYER_SYST, KC_SPACE), MT(KC_LSFT, KC_PSCR), MT(KC_LALT, KC_SCRL), MT(KC_RCTL, KC_PAUS), MT(MOD_RSFT, KC_BSPC), KC_UP
  85. ),
  86. /* Number and Symbols Layer
  87. * ,---------------------------------------------------------------------.
  88. * | ! | @ | # | $ | % | ^ | & | * | ( | ) |
  89. * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
  90. * | ____ | ____ | ____ | ____ | ____ |SysLay| ____ | Alt | Ctrl | Shift|
  91. * |------+------+------+------+-------------+------+------+------+------|
  92. * | | ~ | _ | + | { | } | | | : | " | |
  93. * | TAB | ` | - | = | [ | ] | \ | ; | ' | Del |
  94. * | Shift|SysLay| ____ | AltGr| OSkey| OSkey| AltGr|SysLay| ____ | Shift|
  95. * ' -----+------+------+------+------+------|------+------+------+------'
  96. * | | | | | < | > | ? | |
  97. * |BackSp| Del | Enter| | , | . | / | Enter|
  98. * | Ctrl | Alt |SysLay| ____ | Shift| Alt | Ctrl | Shift|
  99. * '-------------------------------------------------------'
  100. */
  101. [LAYER_NUMSYM] = LAYOUT_ortho_3x10(
  102. KC_1, KC_2, KC_3, KC_4, KC_5, LT(LAYER_SYST, KC_6), KC_7, MT(MOD_LALT, KC_8), MT(MOD_RCTL,KC_9), MT(MOD_RSFT, KC_0),
  103. MT(MOD_LSFT, KC_TAB), LT(LAYER_SYST, KC_GRV), KC_MINS, MT(MOD_RALT, KC_EQL), MT(MOD_LGUI, KC_LBRC), MT(MOD_RGUI, KC_RBRC), MT(MOD_RALT, KC_BSLS), LT(LAYER_SYST, KC_SCLN), KC_QUOT, MT(MOD_RSFT, KC_DEL),
  104. KC_LEFT, MT(KC_LCTL, KC_BSPC), MT(KC_LALT, KC_DEL), LT(LAYER_SYST, KC_ENT), KC_NO, MT(MOD_LSFT, KC_COMM), MT(MOD_LALT, KC_DOT), MT(MOD_RCTL, KC_SLSH), MT(MOD_RSFT, KC_ENT), KC_RGHT
  105. ),
  106. /* System Layer
  107. * ,---------------------------------------------------------------------.
  108. * | | | | | | | | | | |
  109. * | Play | Stop | Prev | Next |MsBtn1|MsLeft|MSDown| MsUp |MsRigh|MsBtn2|
  110. * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | Shift|
  111. * |------+------+------+------+-------------+------+------+------+------|
  112. * | | | | | | | | | | |
  113. * |Backsp| Mute | Vol- | Vol+ |MsWhlD| Left | Down | Up | Right|Backsp|
  114. * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
  115. * '------+------+------+------+------+------|------+------+------+------'
  116. * | | | | | | | | |
  117. * | ____ | ____ | Enter| Space| Mute | Vol- | Vol+ | Space|
  118. * | Ctrl | Alt | ____ | ____ | Shift| Alt | Ctrl | ____ |
  119. * '-------------------------------------------------------'
  120. */
  121. [LAYER_SYST] = LAYOUT_ortho_3x10(
  122. KC_MPLY, KC_STOP, KC_MPRV, KC_MNXT, KC_MS_BTN1, KC_MS_LEFT, KC_MS_DOWN, KC_MS_UP, KC_MS_RIGHT, MT(MOD_RSFT, KC_MS_BTN2),
  123. KC_BSPC, KC_DEL, KC_PGDN, KC_PGUP, KC_APP, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_BSPC,
  124. KC_PGDN, MT(KC_LCTL, KC_CAPS), MT(KC_LALT, KC_INS), KC_ENT, KC_SPC, MT(MOD_RSFT, KC_MUTE), MT(MOD_LALT, KC_VOLD), MT(MOD_RCTL, KC_VOLU), KC_SPC, KC_PGUP
  125. ),
  126. /* ArrowPad (mod su Q) /------mouse-------\ /-----cursor-------\
  127. * ,---------------------------------------------------------------------.
  128. * | | | | | | | | | | |
  129. * | | | |MsBtn1| MsUp |MsBtn2| Home | Up | PgUp |Backsp|
  130. * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
  131. * |------+------+------+------+-------------+------+------+------+------|
  132. * | | | | | | | | | | |
  133. * | | | |MsLeft|MsDown|MsRigh| Left | Down | Right| Enter|
  134. * | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
  135. * '------+------+------+------+------+------|------+------+------+------'
  136. * | | | | | | | | |
  137. * | | |MsWhlU|MsDown|MsWhlD| End | PgDn | PgDn |
  138. * | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | ____ |
  139. * '-------------------------------------------------------'
  140. */
  141. [LAYER_ARROWPAD] = LAYOUT_ortho_3x10(
  142. KC_NO, KC_NO, KC_NO, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_HOME, KC_UP, KC_PGUP, KC_BSPC,
  143. KC_LSFT, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_ENT,
  144. XXXXXXX, KC_LCTL, KC_LALT, KC_MS_WH_UP, KC_MS_DOWN, KC_MS_WH_DOWN, KC_END, KC_PGDN, KC_PGDN, XXXXXXX
  145. ),
  146. /* NumPad (mod su W)
  147. * ,---------------------------------------------------------------------.
  148. * | | | | | | | | | | |
  149. * | | | 3 | * | - |Backsp| 7 | 8 | 9 | 0 |
  150. * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
  151. * |------+------+------+------+-------------+------+------+------+------|
  152. * | | | | | | | | | | |
  153. * | | | / | = | + | . | 4 | 5 | 6 | Enter|
  154. * | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
  155. * '------+------+------+------+------+------|------+------+------+------'
  156. * | | | | | | | | |
  157. * | | | | Tab | , | 1 | 2 | 3 |
  158. * | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | ____ |
  159. * '-------------------------------------------------------'
  160. */
  161. [LAYER_NUMPAD] = LAYOUT_ortho_3x10(
  162. KC_NO, KC_NO, KC_3, KC_KP_ASTERISK, KC_KP_MINUS, KC_BSPC, KC_7, KC_8, KC_9, KC_0,
  163. KC_LSFT, KC_NO, KC_KP_SLASH, KC_KP_EQUAL, KC_KP_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ENT,
  164. XXXXXXX, KC_LCTL, KC_LALT, KC_NO, KC_TAB, KC_COMM, KC_1, KC_2, KC_3, XXXXXXX
  165. ),
  166. /* MediaPad (mod su E)
  167. * ,---------------------------------------------------------------------.
  168. * | | | | | | | | | | |
  169. * | | | | | | | | Vol+ | | |
  170. * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
  171. * |------+------+------+------+-------------+------+------+------+------|
  172. * | | | | | | | | | | |
  173. * | | | | | | | Prev | Play | Next | |
  174. * | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
  175. * '------+------+------+------+------+------|------+------+------+------'
  176. * | | | | | | | | |
  177. * | | | | | | Mute | Vol- | |
  178. * | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | ____ |
  179. * '-------------------------------------------------------'
  180. */
  181. [LAYER_MEDIAPAD] = LAYOUT_ortho_3x10(
  182. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLU, KC_NO, KC_NO,
  183. KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO,
  184. XXXXXXX, KC_LCTL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_NO, XXXXXXX
  185. ),
  186. };
  187. void matrix_init_user(void) {
  188. // eeconfig_init(); // reset keyboard to a standard default state; useful when new releases messup with eeprom values
  189. // set num lock on at start (for numonly layer to work)
  190. if (!host_keyboard_led_state().num_lock) {
  191. tap_code(KC_NUM_LOCK);
  192. }
  193. }
  194. void matrix_scan_user(void) {
  195. }
  196. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  197. switch (keycode) {
  198. case CK_TRIPLEZERO:
  199. if (record->event.pressed) {
  200. SEND_STRING("000");
  201. } // else { when released }
  202. break;
  203. }
  204. return true;
  205. };
  206. void keyboard_pre_init_user(void) {
  207. // Set our LED pins as output
  208. setPinOutput(D5);
  209. setPinOutput(B0);
  210. }
  211. bool led_update_user(led_t led_state) {
  212. writePin(D5, !led_state.num_lock);
  213. writePin(B0, !led_state.caps_lock);
  214. return false; // prevent keyboard from processing state
  215. }