Keyboard firmwares for Atmel AVR and Cortex-M
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

13 роки тому
10 роки тому
13 роки тому
10 роки тому
13 роки тому
10 роки тому
10 роки тому
11 роки тому
11 роки тому
11 роки тому
11 роки тому
11 роки тому
13 роки тому
11 роки тому
11 роки тому
11 роки тому
9 роки тому
9 роки тому
13 роки тому
11 роки тому
11 роки тому
11 роки тому
11 роки тому
11 роки тому
11 роки тому
11 роки тому
11 роки тому
11 роки тому
13 роки тому
11 роки тому
10 роки тому
11 роки тому
11 роки тому
11 роки тому
11 роки тому
11 роки тому
11 роки тому
11 роки тому
10 роки тому
10 роки тому
11 роки тому
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. /*
  2. * Hasu: my personal keymap
  3. */
  4. #include "keymap_common.h"
  5. #ifdef KEYMAP_SECTION_ENABLE
  6. const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] __attribute__ ((section (".keymap.keymaps"))) = {
  7. #else
  8. const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
  9. #endif
  10. /* Layer 0: Default Layer
  11. * ,-----------------------------------------------------------.
  12. * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|
  13. * |-----------------------------------------------------------|
  14. * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs|
  15. * |-----------------------------------------------------------|
  16. * |Contro| A| S| D| F| G| H| J| K| L|Fn3| '|Fn6 |
  17. * |-----------------------------------------------------------|
  18. * |Fn7 | Z| X| C| V| B| N| M| ,| .|Fn2|Shift |Fn1|
  19. * `-----------------------------------------------------------'
  20. * |Gui|Alt | Fn4 |Fn5 |Gui|
  21. * `-------------------------------------------'
  22. */
  23. [0] = \
  24. KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV, \
  25. TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
  26. LCTL,A, S, D, F, G, H, J, K, L, FN3, QUOT,FN6, \
  27. FN7, Z, X, C, V, B, N, M, COMM,DOT, FN2, RSFT,FN1, \
  28. LGUI,LALT, FN4, FN5, RGUI),
  29. /* Layer 1: HHKB mode[HHKB Fn]
  30. * ,-----------------------------------------------------------.
  31. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
  32. * |-----------------------------------------------------------|
  33. * |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs|
  34. * |-----------------------------------------------------------|
  35. * |Contro|VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter |
  36. * |-----------------------------------------------------------|
  37. * |Shift | | | | | | +| -|End|PgD|Dow|Shift | |
  38. * `-----------------------------------------------------------'
  39. * |Gui|Alt | Space |Alt |Gui|
  40. * `-------------------------------------------'
  41. */
  42. [1] = \
  43. KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
  44. CAPS,NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,PAUS, UP, NO, BSPC, \
  45. LCTL,VOLD,VOLU,MUTE,NO, NO, PAST,PSLS,HOME,PGUP,LEFT,RGHT,ENT, \
  46. LSFT,NO, NO, NO, NO, NO, PPLS,PMNS,END, PGDN,DOWN,RSFT,TRNS, \
  47. LGUI,LALT, TRNS, RALT,RGUI),
  48. /* Layer 2: Vi mode[Slash]
  49. * ,-----------------------------------------------------------.
  50. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
  51. * |-----------------------------------------------------------|
  52. * |Tab |Hom|PgD|Up |PgU|End|Hom|PgD|PgUlEnd| | | |Backs|
  53. * |-----------------------------------------------------------|
  54. * |Contro| |Lef|Dow|Rig| |Lef|Dow|Up |Rig| | |Return |
  55. * |-----------------------------------------------------------|
  56. * |Shift | | | | | |Hom|PgD|PgUlEnd|Fn0|Shift | |
  57. * `-----------------------------------------------------------'
  58. * |Gui|Alt | Space |Alt |Gui|
  59. * `-------------------------------------------'
  60. */
  61. [2] = \
  62. KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
  63. TAB, HOME,PGDN,UP, PGUP,END, HOME,PGDN,PGUP,END, NO, NO, NO, BSPC, \
  64. LCTL,NO, LEFT,DOWN,RGHT,NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT, \
  65. LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, FN2, RSFT,TRNS, \
  66. LGUI,LALT, SPC, RALT,RGUI),
  67. /* Layer 3: Mouse mode(IJKL)[Semicolon]
  68. * ,-----------------------------------------------------------.
  69. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
  70. * |-----------------------------------------------------------|
  71. * |Tab | | | | | |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T|
  72. * |-----------------------------------------------------------|
  73. * |Contro| | | | | |Mb2|McL|McD|McR|Fn | |Return |
  74. * |-----------------------------------------------------------|
  75. * |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | |
  76. * `-----------------------------------------------------------'
  77. * |Gui |Alt | Mb1 |Fn |Fn |
  78. * `--------------------------------------------'
  79. * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
  80. */
  81. [3] = \
  82. KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
  83. FN8, NO, NO, NO, NO, NO, WH_L,WH_D,MS_U,WH_U,WH_R,FN9, FN10,FN8, \
  84. LCTL,ACL0,ACL1,ACL2,ACL2,NO, NO, MS_L,MS_D,MS_R,FN3, NO, ENT, \
  85. LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,FN9, FN10,NO, RSFT,TRNS, \
  86. LGUI,LALT, BTN1, TRNS,TRNS),
  87. /* Layer 4: Mouse mode(IJKL)[Space]
  88. * ,-----------------------------------------------------------.
  89. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
  90. * |-----------------------------------------------------------|
  91. * |Tab | | | | | |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T|
  92. * |-----------------------------------------------------------|
  93. * |Contro| | | | | |Mb2|McL|McD|McR|Mb1| |Return |
  94. * |-----------------------------------------------------------|
  95. * |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | |
  96. * `-----------------------------------------------------------'
  97. * |Gui |Alt | Mb1 |Fn |Fn |
  98. * `--------------------------------------------'
  99. * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
  100. */
  101. [4] = \
  102. KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
  103. FN8, NO, NO, NO, NO, NO, WH_L,WH_D,MS_U,WH_U,WH_R,BTN4,BTN5,FN8, \
  104. LCTL,VOLD,VOLU,MUTE,NO, NO, NO, MS_L,MS_D,MS_R,BTN1,NO, ENT, \
  105. LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,FN9, FN10,NO, RSFT,TRNS, \
  106. LGUI,LALT, TRNS, TRNS,TRNS),
  107. #if 0
  108. /* Layer 3: Mouse mode(HJKL)[Semicolon]
  109. * ,-----------------------------------------------------------.
  110. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
  111. * |-----------------------------------------------------------|
  112. * |Tab | | | | | |MwL|MwD|MwU|MwR| | | |Backs|
  113. * |-----------------------------------------------------------|
  114. * |Contro| | | | | |McL|McD|McU|McR|Fn0| |Return |
  115. * |-----------------------------------------------------------|
  116. * |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | |
  117. * `-----------------------------------------------------------'
  118. * |Gui |Alt | Mb1 |Alt |Fn0|
  119. * `--------------------------------------------'
  120. * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
  121. */
  122. KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
  123. TAB, NO, NO, NO, NO, NO, NO, WH_D,WH_U,RGHT,NO, NO, NO, BSPC, \
  124. LCTL,NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,TRNS,QUOT,ENT, \
  125. LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,FN9, FN10,SLSH,RSFT,NO, \
  126. LGUI,LALT, BTN1, RALT,TRNS),
  127. /* Layer4: Mouse mode(HJKL)[Space]
  128. * ,-----------------------------------------------------------.
  129. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
  130. * |-----------------------------------------------------------|
  131. * |Tab | | | | | |MwL|MwD|MwU|MwR| |Wbk|Wfr|Alt-T|
  132. * |-----------------------------------------------------------|
  133. * |Contro| | | | | |McL|McD|McU|McR|Fn0| |Return |
  134. * |-----------------------------------------------------------|
  135. * |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | |
  136. * `-----------------------------------------------------------'
  137. * |Gui |Alt | Fn0 |Alt |Fn0|
  138. * `--------------------------------------------'
  139. * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
  140. */
  141. KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
  142. FN8, NO, NO, NO, NO, NO, NO, WH_D,WH_U,RGHT,NO, FN9, FN10,FN8, \
  143. LCTL,NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,BTN1,NO, ENT, \
  144. LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,FN9, FN10,NO, RSFT,NO, \
  145. LGUI,LALT, TRNS, RALT,RGUI),
  146. #endif
  147. #if 0
  148. /* Layer x: Matias half-qwerty keyboard style[Space]
  149. * ,-----------------------------------------------------------.
  150. * | -| 0| 9| 8| 7| 6| 5| 4| 3| 2| 1| | | |Esc|
  151. * |-----------------------------------------------------------|
  152. * |Backs| P| O| I| U| Y| T| R| E| W| Q| | |Tab |
  153. * |-----------------------------------------------------------|
  154. * |Contro| ;| L| K| J| H| G| F| D| S| A|Con|Control |
  155. * |-----------------------------------------------------------|
  156. * |Shift | /| .| ,| M| N| B| V| C| X| Z|Shift | |
  157. * `-----------------------------------------------------------'
  158. * |Gui |Alt | Fn0 |Alt |Gui|
  159. * `--------------------------------------------'
  160. */
  161. KEYMAP(MINS,0, 9, 8, 7, 6, 5, 4, 3, 2, 1, NO, NO, NO, ESC, \
  162. BSPC,P, O, I, U, Y, T, R, E, W, Q, NO, NO, TAB, \
  163. LCTL,SCLN,L, K, J, H, G, F, D, S, A, RCTL,RCTL, \
  164. LSFT,SLSH,DOT, COMM,M, N, B, V, C, X, Z, RSFT,NO, \
  165. LGUI,LALT, TRNS, RALT,RGUI),
  166. #endif
  167. };
  168. /* id for user defined functions */
  169. enum function_id {
  170. LSHIFT_LPAREN,
  171. };
  172. enum macro_id {
  173. HELLO,
  174. VOLUP,
  175. ALT_TAB,
  176. };
  177. /*
  178. * Fn action definition
  179. */
  180. #ifdef KEYMAP_SECTION_ENABLE
  181. const action_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
  182. #else
  183. const action_t fn_actions[] PROGMEM = {
  184. #endif
  185. [0] = ACTION_DEFAULT_LAYER_SET(0), // Default layer(not used)
  186. [1] = ACTION_LAYER_TAP_TOGGLE(1), // HHKB layer(toggle with 5 taps)
  187. [2] = ACTION_LAYER_TAP_KEY(2, KC_SLASH), // Cursor layer with Slash*
  188. [3] = ACTION_LAYER_TAP_KEY(3, KC_SCLN), // Mousekey layer with Semicolon*
  189. [4] = ACTION_LAYER_TAP_KEY(4, KC_SPC), // Mousekey layer with Space
  190. [5] = ACTION_LAYER_MOMENTARY(4), // Mousekey layer(IJKL)
  191. [6] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT), // RControl with tap Enter
  192. [7] = ACTION_MODS_ONESHOT(MOD_LSFT), // Oneshot Shift
  193. [8] = ACTION_MACRO(ALT_TAB), // Application switching
  194. [9] = ACTION_MODS_KEY(MOD_LALT, KC_LEFT),
  195. [10] = ACTION_MODS_KEY(MOD_LALT, KC_RIGHT),
  196. // [x] = ACTION_LMOD_TAP_KEY(KC_LCTL, KC_BSPC), // LControl with tap Backspace
  197. // [x] = ACTION_LMOD_TAP_KEY(KC_LCTL, KC_ESC), // LControl with tap Esc
  198. // [x] = ACTION_FUNCTION_TAP(LSHIFT_LPAREN), // Function: LShift with tap '('
  199. // [x] = ACTION_MACRO(HELLO), // Macro: say hello
  200. // [x] = ACTION_MACRO(VOLUP), // Macro: media key
  201. };
  202. /*
  203. * Macro definition
  204. */
  205. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  206. {
  207. switch (id) {
  208. case HELLO:
  209. return (record->event.pressed ?
  210. MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) :
  211. MACRO_NONE );
  212. case VOLUP:
  213. return (record->event.pressed ?
  214. MACRO( D(VOLU), U(VOLU), END ) :
  215. MACRO_NONE );
  216. case ALT_TAB:
  217. return (record->event.pressed ?
  218. MACRO( D(LALT), D(TAB), END ) :
  219. MACRO( U(TAB), END ));
  220. }
  221. return MACRO_NONE;
  222. }
  223. /*
  224. * user defined action function
  225. */
  226. void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
  227. {
  228. if (record->event.pressed) dprint("P"); else dprint("R");
  229. dprintf("%d", record->tap.count);
  230. if (record->tap.interrupted) dprint("i");
  231. dprint("\n");
  232. switch (id) {
  233. case LSHIFT_LPAREN:
  234. // Shift parentheses example: LShft + tap '('
  235. // http://stevelosh.com/blog/2012/10/a-modern-space-cadet/#shift-parentheses
  236. // http://geekhack.org/index.php?topic=41989.msg1304899#msg1304899
  237. if (record->event.pressed) {
  238. if (record->tap.count > 0 && !record->tap.interrupted) {
  239. if (record->tap.interrupted) {
  240. dprint("tap interrupted\n");
  241. register_mods(MOD_BIT(KC_LSHIFT));
  242. }
  243. } else {
  244. register_mods(MOD_BIT(KC_LSHIFT));
  245. }
  246. } else {
  247. if (record->tap.count > 0 && !(record->tap.interrupted)) {
  248. add_weak_mods(MOD_BIT(KC_LSHIFT));
  249. send_keyboard_report();
  250. register_code(KC_9);
  251. unregister_code(KC_9);
  252. del_weak_mods(MOD_BIT(KC_LSHIFT));
  253. send_keyboard_report();
  254. record->tap.count = 0; // ad hoc: cancel tap
  255. } else {
  256. unregister_mods(MOD_BIT(KC_LSHIFT));
  257. }
  258. }
  259. break;
  260. }
  261. }