Keyboard firmwares for Atmel AVR and Cortex-M
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.

преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. /*
  2. Copyright 2012 Jun Wako <[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 "util.h"
  17. #include "keymap.h"
  18. #define KEYMAP( \
  19. K29,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, \
  20. K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K2A, K49,K4A,K4B, K53,K54,K55,K56, \
  21. K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30,K31, K4C,K4D,K4E, K5F,K60,K61, \
  22. K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, K28, K5C,K5D,K5E,K57, \
  23. KE1,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, KE5, K52, K59,K5A,K5B, \
  24. KE0,KE3,KE2, K2C, KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63,K58 \
  25. ) { \
  26. { KC_NO, KC_NO, KC_NO, KC_NO, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, /* 00-07 */ \
  27. { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, /* 08-0F */ \
  28. { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, /* 10-17 */ \
  29. { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, /* 18-1F */ \
  30. { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, /* 20-27 */ \
  31. { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, /* 28-2F */ \
  32. { KC_##K30, KC_##K31, KC_NO, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, /* 30-37 */ \
  33. { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, /* 38-3F */ \
  34. { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, /* 40-47 */ \
  35. { KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F }, /* 48-4F */ \
  36. { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, /* 50-57 */ \
  37. { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_##K5D, KC_##K5E, KC_##K5F }, /* 58-5F */ \
  38. { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_NO, KC_##K65, KC_NO, KC_NO }, /* 60-67 */ \
  39. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* 68-6F */ \
  40. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* 70-77 */ \
  41. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* 78-7F */ \
  42. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* 80-87 */ \
  43. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* 88-8F */ \
  44. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* 90-97 */ \
  45. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* 98-9F */ \
  46. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* A0-A7 */ \
  47. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* A8-AF */ \
  48. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* B0-B7 */ \
  49. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* B8-BF */ \
  50. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* C0-C7 */ \
  51. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* C8-CF */ \
  52. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* D0-D7 */ \
  53. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* D8-DF */ \
  54. { KC_##KE0, KC_##KE1, KC_##KE2, KC_##KE3, KC_##KE4, KC_##KE5, KC_##KE6, KC_##KE7 }, /* E0-E7 */ \
  55. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* E8-EF */ \
  56. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* F0-F7 */ \
  57. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* F8-FF */ \
  58. }
  59. // Layers to switch by holding Fn key(0-7)
  60. static const uint8_t PROGMEM fn_layer[] = { 5, 6, 5, 0, 0, 0, 0, 0 };
  61. // Codes to register by clicking Fn key(0-7)
  62. static const uint8_t PROGMEM fn_keycode[] = { KC_SCLN, KC_SLSH, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO };
  63. static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  64. /* 0: default
  65. * ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,-----------.
  66. * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |Pwr|Slp|Wak|
  67. * `---' `---------------' `---------------' `---------------' `-----------' `-----------'
  68. * ,-----------------------------------------------------------. ,-----------. ,---------------.
  69. * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa| |Ins|Hom|PgU| |NmL| /| *| -|
  70. * |-----------------------------------------------------------| |-----------| |---------------|
  71. * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|End|PgD| | 7| 8| 9| |
  72. * |-----------------------------------------------------------| `-----------' |-----------| +|
  73. * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return | | 4| 5| 6| |
  74. * |-----------------------------------------------------------| ,---. |---------------|
  75. * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
  76. * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
  77. * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl| |Lef|Dow|Rig| | 0| .| |
  78. * `-----------------------------------------------------------' `-----------' `---------------'
  79. * ; = Fn0(to Layer 5)
  80. * / = Fn1(to Layer 6)
  81. */
  82. KEYMAP(
  83. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS,
  84. ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
  85. TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
  86. FN2, A, S, D, F, G, H, J, K, L, FN0, QUOT, ENT, P4, P5, P6, PPLS,
  87. LSFT,Z, X, C, V, B, N, M, COMM,DOT, FN1, RSFT, UP, P1, P2, P3,
  88. LCTL,LGUI,LALT, SPC, RALT,FN2, FN2, GRV, LEFT,DOWN,RGHT, P0, PDOT,PENT
  89. ),
  90. /* 1: plain Qwerty without layer switching
  91. * ,-----------------------------------------------------------.
  92. * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa|
  93. * |-----------------------------------------------------------|
  94. * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
  95. * |-----------------------------------------------------------|
  96. * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return |
  97. * |-----------------------------------------------------------|
  98. * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift |
  99. * |-----------------------------------------------------------|
  100. * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
  101. * `-----------------------------------------------------------'
  102. */
  103. KEYMAP(
  104. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS,
  105. GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
  106. TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
  107. CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
  108. LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
  109. LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
  110. ),
  111. /* 2: Colemak http://colemak.com
  112. * ,-----------------------------------------------------------.
  113. * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa|
  114. * |-----------------------------------------------------------|
  115. * |Tab | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \|
  116. * |-----------------------------------------------------------|
  117. * |BackSp| A| R| S| T| D| H| N| E| I| O| '|Return |
  118. * |-----------------------------------------------------------|
  119. * |Shift | Z| X| C| V| B| K| M| ,| ,| /|Shift |
  120. * |-----------------------------------------------------------|
  121. * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
  122. * `----------------------------------------------------------'
  123. */
  124. KEYMAP(
  125. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS,
  126. GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
  127. TAB, Q, W, F, P, G, J, L, U, Y, SCLN,LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
  128. BSPC,A, R, S, T, D, H, N, E, I, O, QUOT, ENT, P4, P5, P6, PPLS,
  129. LSFT,Z, X, C, V, B, K, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
  130. LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
  131. ),
  132. /* 3: Dvorak http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard
  133. * ,-----------------------------------------------------------.
  134. * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]|Backspa|
  135. * |-----------------------------------------------------------|
  136. * |Tab | '| ,| .| P| Y| F| G| C| R| L| /| =| \|
  137. * |-----------------------------------------------------------|
  138. * |BackSp| A| O| E| U| I| D| H| T| N| S| -|Return |
  139. * |-----------------------------------------------------------|
  140. * |Shift | ;| Q| J| K| X| B| M| Wl V| Z|Shift |
  141. * |-----------------------------------------------------------|
  142. * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
  143. * `-----------------------------------------------------------'
  144. */
  145. KEYMAP(
  146. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS,
  147. GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC,RBRC,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
  148. TAB, QUOT,COMM,DOT, P, Y, F, G, C, R, L, SLSH,EQL, BSLS, DEL, END, PGDN, P7, P8, P9,
  149. CAPS,A, O, E, U, I, D, H, T, N, S, MINS, ENT, P4, P5, P6, PPLS,
  150. LSFT,SCLN,Q, J, K, X, B, M, W, V, Z, RSFT, UP, P1, P2, P3,
  151. LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
  152. ),
  153. /* 4: Workman http://viralintrospection.wordpress.com/2010/09/06/a-different-philosophy-in-designing-keyboard-layouts/
  154. * ,-----------------------------------------------------------.
  155. * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa|
  156. * |-----------------------------------------------------------|
  157. * |Tab | Q| D| R| W| B| J| F| U| P| ;| [| ]| \|
  158. * |-----------------------------------------------------------|
  159. * |CapsLo| A| S| H| T| G| Y| N| E| O| I| '|Return |
  160. * |-----------------------------------------------------------|
  161. * |Shift | Z| X| M| C| V| K| L| ,| ,| /|Shift |
  162. * |-----------------------------------------------------------|
  163. * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
  164. * `-----------------------------------------------------------'
  165. */
  166. KEYMAP(
  167. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS,
  168. GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
  169. TAB, Q, D, R, W, B, J, F, U, P, SCLN,LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
  170. BSPC,A, S, H, T, G, Y, N, E, O, I, QUOT, ENT, P4, P5, P6, PPLS,
  171. LSFT,Z, X, M, C, V, K, L, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
  172. LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
  173. ),
  174. /* 5: Mouse keys
  175. * ,-----------------------------------------------------------.
  176. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Backspa|
  177. * |-----------------------------------------------------------|
  178. * |Tab |MwL|MwU|McU|WwU|WwR|MwL|MwD|MwU|MwR| | | | \|
  179. * |-----------------------------------------------------------|
  180. * |CapsLo| |McL|McD|McR| |McL|McD|McU|McR|Fn0| |Return |
  181. * |-----------------------------------------------------------|
  182. * |Shift |VoD|VoU|Mut|Mb2|Mb3|Mb2|Mb1|VoD|VoU|Mut|Shift |
  183. * |-----------------------------------------------------------|
  184. * |Ctrl |Gui |Alt | Mb1 |Alt |Gui |Menu|Ctrl|
  185. * `-----------------------------------------------------------'
  186. * Mc = mouse cursor, Mw = mouse wheel, Mb = mouse button
  187. * Vo = Volume, Mut = Mute
  188. */
  189. KEYMAP(
  190. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS,
  191. GRV, F1, F2, F3, F4, F5, F6, F7, F8, F8, F10, F11, F12, DEL, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
  192. CAPS,NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,PSCR,SLCK,PAUS,INS, DEL, END, PGDN, P7, P8, P9,
  193. FN2, VOLD,VOLU,MUTE,NO, NO, MS_L,MS_D,MS_U,MS_R,FN0, NO, ENT, P4, P5, P6, PPLS,
  194. LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,NO, NO, NO, RSFT, UP, P1, P2, P3,
  195. LCTL,LGUI,LALT, BTN1, RALT,FN2, FN2, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
  196. ),
  197. /* 6: Cursor keys
  198. * ,-----------------------------------------------------------.
  199. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Backspa|
  200. * |-----------------------------------------------------------|
  201. * |Tab |Hom|PgU| Up|PgU|End|Hom|PgD|PgU|End| | | | \|
  202. * |-----------------------------------------------------------|
  203. * |CapsLo| |Lef|Dow|Rig| |Lef|Dow| Up|Rig| | |Return |
  204. * |-----------------------------------------------------------|
  205. * |Shift | | | | | |Hom|PgD|PgU|End|Fn1|Shift |
  206. * |-----------------------------------------------------------|
  207. * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
  208. * `-----------------------------------------------------------'
  209. */
  210. KEYMAP(
  211. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS,
  212. GRV, F1, F2, F3, F4, F5, F6, F7, F8, F8, F10, F11, F12, DEL, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
  213. CAPS,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, NO, NO, NO, INS, DEL, END, PGDN, P7, P8, P9,
  214. LCTL,NO, NO, NO, NO, NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT, P4, P5, P6, PPLS,
  215. LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, FN1, RSFT, UP, P1, P2, P3,
  216. LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
  217. ),
  218. };
  219. uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
  220. {
  221. return pgm_read_byte(&keymaps[(layer)][(row)][(col)]);
  222. }
  223. uint8_t keymap_fn_layer(uint8_t fn_bits)
  224. {
  225. return pgm_read_byte(&fn_layer[biton(fn_bits)]);
  226. }
  227. uint8_t keymap_fn_keycode(uint8_t fn_bits)
  228. {
  229. return pgm_read_byte(&fn_keycode[(biton(fn_bits))]);
  230. }