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.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

keymap_default.c 6.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. /*
  2. Copyright 2016 Kai Ryu <[email protected]>
  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. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program. If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. #include <avr/pgmspace.h>
  15. #include "keycode.h"
  16. #include "action.h"
  17. #include "action_util.h"
  18. #include "keymap_common.h"
  19. #include "rgb.h"
  20. // Default
  21. #ifdef KEYMAP_SECTION_ENABLE
  22. const uint8_t keymaps[KEYMAPS_COUNT][MATRIX_ROWS][MATRIX_COLS] __attribute__ ((section (".keymap.keymaps"))) = {
  23. #else
  24. const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
  25. #endif
  26. /* Keymap 0: Default Layer
  27. * ,-----------------------------------------------.
  28. * |Fn3| Q| W| E| R| T| Y| U| I| O| P| BS|
  29. * |-----------------------------------------------|
  30. * |Tab | A| S| D| F| G| H| J| K| L|Enter |
  31. * |-----------------------------------------------|
  32. * |Shift | Z| X| C| V| B| N| M| .|RShi|Fn0|
  33. * |-----------------------------------------------|
  34. * |Ctrl |Gui|Alt | Space |Fn1|Ctrl|
  35. * `-----------------------------------------------'
  36. */
  37. KEYMAP(
  38. FN3, Q, W, E, R, T, Y, U, I, O, P, BSPC, \
  39. TAB, A, S, D, F, G, H, J, K, L, ENT, \
  40. LSFT, Z, X, C, V, B, N, M, DOT, RSFT,FN0, \
  41. LCTL,LGUI,LALT, SPC, FN1, RCTL ),
  42. /* Keymap 1: Arrow Keys Overlay
  43. * ,-----------------------------------------------.
  44. * | | |Up | | | | | | | | | |
  45. * |-----------------------------------------------|
  46. * | |Lef|Dow|Rig| | | | | | | |
  47. * |-----------------------------------------------|
  48. * | | | | | | | | | | | |
  49. * |-----------------------------------------------|
  50. * | | | | | | |
  51. * `-----------------------------------------------'
  52. */
  53. KEYMAP(
  54. TRNS,TRNS,UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
  55. TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
  56. TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
  57. TRNS,TRNS,TRNS, TRNS, TRNS,TRNS ),
  58. /* Keymap 2: Fn Layer 1
  59. * ,-----------------------------------------------.
  60. * | 1| 2| 3| 4| 5| 6| 7| 8| 8| 9| -| =|
  61. * |-----------------------------------------------|
  62. * |Caps| | | | | | | | | ;| '|
  63. * |-----------------------------------------------|
  64. * | |Fn7|Fn8|Fn5|Fn4|Fn6| | | ,| /| |
  65. * |-----------------------------------------------|
  66. * | | | | Fn2 | | |
  67. * `-----------------------------------------------'
  68. */
  69. KEYMAP(
  70. 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, \
  71. CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,SCLN, QUOT, \
  72. TRNS, FN7, FN8, FN5, FN4, FN6, TRNS,TRNS,COMM,SLSH,TRNS, \
  73. TRNS,TRNS,TRNS, FN2, TRNS,TRNS ),
  74. /* Keymap 3: Fn Layer 2
  75. * ,-----------------------------------------------.
  76. * |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|
  77. * |-----------------------------------------------|
  78. * |Caps| | | | | | | | [| ]|\ |
  79. * |-----------------------------------------------|
  80. * | |Fn7|Fn8|Fn5|Fn4|Fn6| | | ,| /| |
  81. * |-----------------------------------------------|
  82. * | | | | Fn2 | | |
  83. * `-----------------------------------------------'
  84. */
  85. KEYMAP(
  86. F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, \
  87. CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,LBRC,RBRC, BSLS, \
  88. TRNS, FN7, FN8, FN5, FN4, FN6, TRNS,TRNS,COMM,SLSH,TRNS, \
  89. TRNS,TRNS,TRNS, FN2, TRNS,TRNS ),
  90. };
  91. #ifndef NO_ACTION_FUNCTION
  92. enum function_id {
  93. AF_RGB_TOGGLE = 0,
  94. AF_RGB_DECREASE,
  95. AF_RGB_INCREASE,
  96. AF_RGB_STEP,
  97. AF_TRICKY_ESC
  98. };
  99. #endif
  100. /*
  101. * Fn action definition
  102. */
  103. #ifdef KEYMAP_SECTION_ENABLE
  104. const uint16_t fn_actions[FN_ACTIONS_COUNT] __attribute__ ((section (".keymap.fn_actions"))) = {
  105. #else
  106. const uint16_t fn_actions[] PROGMEM = {
  107. #endif
  108. [0] = ACTION_LAYER_MOMENTARY(2),
  109. [1] = ACTION_LAYER_MOMENTARY(3),
  110. [2] = ACTION_LAYER_TOGGLE(1),
  111. [3] = ACTION_FUNCTION(AF_TRICKY_ESC),
  112. [4] = ACTION_BACKLIGHT_TOGGLE(),
  113. [5] = ACTION_BACKLIGHT_DECREASE(),
  114. [6] = ACTION_BACKLIGHT_INCREASE(),
  115. [7] = ACTION_FUNCTION(AF_RGB_TOGGLE),
  116. [8] = ACTION_FUNCTION(AF_RGB_STEP)
  117. };
  118. #ifdef KEYMAP_IN_EEPROM_ENABLE
  119. uint16_t keys_count(void) {
  120. return sizeof(keymaps) / sizeof(keymaps[0]) * MATRIX_ROWS * MATRIX_COLS;
  121. }
  122. uint16_t fn_actions_count(void) {
  123. return sizeof(fn_actions) / sizeof(fn_actions[0]);
  124. }
  125. #endif
  126. #ifndef NO_ACTION_FUNCTION
  127. #define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
  128. void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
  129. {
  130. #ifdef RGB_LED_ENABLE
  131. if (record->event.pressed) {
  132. switch (id) {
  133. case AF_RGB_TOGGLE:
  134. rgb_toggle();
  135. break;
  136. case AF_RGB_DECREASE:
  137. rgb_decrease();
  138. break;
  139. case AF_RGB_INCREASE:
  140. rgb_increase();
  141. break;
  142. case AF_RGB_STEP:
  143. rgb_step();
  144. break;
  145. }
  146. }
  147. #endif
  148. static uint8_t tricky_esc_registered;
  149. switch (id) {
  150. case AF_TRICKY_ESC:
  151. if (record->event.pressed) {
  152. if (get_mods() & MODS_SHIFT_MASK) {
  153. tricky_esc_registered = KC_GRV;
  154. }
  155. else {
  156. tricky_esc_registered = KC_ESC;
  157. }
  158. register_code(tricky_esc_registered);
  159. send_keyboard_report();
  160. }
  161. else {
  162. unregister_code(tricky_esc_registered);
  163. send_keyboard_report();
  164. }
  165. break;
  166. }
  167. }
  168. #endif