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

11 лет назад
11 лет назад
11 лет назад
11 лет назад
12 лет назад
12 лет назад
12 лет назад
12 лет назад
12 лет назад
12 лет назад
12 лет назад
12 лет назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. /*
  2. Copyright 2011 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. /*
  15. * Keymap for PS/2 keyboard
  16. */
  17. #include <stdint.h>
  18. #include <stdbool.h>
  19. #include <avr/pgmspace.h>
  20. #include "keycode.h"
  21. #include "print.h"
  22. #include "debug.h"
  23. #include "util.h"
  24. #include "keymap.h"
  25. // Following macros help you to define a keymap with the form of actual keyboard layout.
  26. /* US layout plus all other various keys */
  27. #define KEYMAP_ALL( \
  28. K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
  29. K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
  30. K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5D, KF1,KE9,KFA, K6C,K75,K7D, \
  31. K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K79, \
  32. K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
  33. K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA, \
  34. \
  35. K61, /* for European ISO */ \
  36. K51, K13, K6A, K64, K67, /* for Japanese JIS */ \
  37. K08, K10, K18, K20, K28, K30, K38, K40, K48, K50, K57, K5F, /* F13-24 */ \
  38. KB7, KBF, KDE, /* System Power, Sleep, Wake */ \
  39. KA3, KB2, KA1, /* Mute, Volume Up, Volume Down */ \
  40. KCD, K95, KBB, KB4, KD0, /* Next, Previous, Stop, Pause, Media Select */ \
  41. KC8, KAB, KC0, /* Mail, Calculator, My Computer */ \
  42. K90, KBA, KB8, KB0, /* WWW Search, Home, Back, Forward */ \
  43. KA8, KA0, K98 /* WWW Stop, Refresh, Favorites */ \
  44. ) { \
  45. { KC_NO, KC_##K01, KC_NO, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
  46. { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_NO }, \
  47. { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_NO }, \
  48. { KC_##K18, KC_NO, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_NO }, \
  49. { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_NO }, \
  50. { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_NO }, \
  51. { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_NO }, \
  52. { KC_##K38, KC_NO, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_NO }, \
  53. { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_NO }, \
  54. { KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_NO }, \
  55. { KC_##K50, KC_##K51, KC_##K52, KC_NO, KC_##K54, KC_##K55, KC_NO, KC_##K57 }, \
  56. { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_NO, KC_##K5D, KC_NO, KC_##K5F }, \
  57. { KC_NO, KC_##K61, KC_NO, KC_NO, KC_##K64, KC_NO, KC_##K66, KC_##K67 }, \
  58. { KC_NO, KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_NO, KC_NO, KC_NO }, \
  59. { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
  60. { KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_##K7C, KC_##K7D, KC_##K7E, KC_NO }, \
  61. { KC_NO, KC_NO, KC_NO, KC_##K83, KC_NO, KC_NO, KC_NO, KC_NO }, \
  62. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
  63. { KC_##K90, KC_##K91, KC_NO, KC_NO, KC_##K94, KC_##K95, KC_NO, KC_NO }, \
  64. { KC_##K98, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K9F }, \
  65. { KC_##KA0, KC_##KA1, KC_NO, KC_##KA3, KC_NO, KC_NO, KC_NO, KC_##KA7 }, \
  66. { KC_##KA8, KC_NO, KC_NO, KC_##KAB, KC_NO, KC_NO, KC_NO, KC_##KAF }, \
  67. { KC_##KB0, KC_NO, KC_##KB2, KC_NO, KC_##KB4, KC_NO, KC_NO, KC_##KB7 }, \
  68. { KC_##KB8, KC_NO, KC_##KBA, KC_##KBB, KC_NO, KC_NO, KC_NO, KC_##KBF }, \
  69. { KC_##KC0, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
  70. { KC_##KC8, KC_NO, KC_##KCA, KC_NO, KC_NO, KC_##KCD, KC_NO, KC_NO }, \
  71. { KC_##KD0, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
  72. { KC_NO, KC_NO, KC_##KDA, KC_NO, KC_NO, KC_NO, KC_##KDE, KC_NO }, \
  73. { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
  74. { KC_NO, KC_##KE9, KC_NO, KC_##KEB, KC_##KEC, KC_NO, KC_NO, KC_NO }, \
  75. { KC_##KF0, KC_##KF1, KC_##KF2, KC_NO, KC_##KF4, KC_##KF5, KC_NO, KC_NO }, \
  76. { KC_NO, KC_NO, KC_##KFA, KC_NO, KC_##KFC, KC_##KFD, KC_##KFE, KC_NO }, \
  77. }
  78. /* US layout */
  79. #define KEYMAP( \
  80. K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
  81. K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
  82. K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5D, KF1,KE9,KFA, K6C,K75,K7D, \
  83. K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K79, \
  84. K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
  85. K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA \
  86. ) \
  87. KEYMAP_ALL( \
  88. K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
  89. K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
  90. K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5D, KF1,KE9,KFA, K6C,K75,K7D, \
  91. K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K79, \
  92. K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
  93. K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA, \
  94. \
  95. NUBS, \
  96. RO, KANA, JYEN, HENK, MHEN, \
  97. F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, \
  98. SYSTEM_POWER, SYSTEM_SLEEP, SYSTEM_WAKE, \
  99. AUDIO_MUTE, AUDIO_VOL_UP, AUDIO_VOL_DOWN, \
  100. MEDIA_NEXT_TRACK, MEDIA_PREV_TRACK, MEDIA_STOP, MEDIA_PLAY_PAUSE, MEDIA_SELECT, \
  101. MAIL, CALCULATOR, MY_COMPUTER, \
  102. WWW_SEARCH, WWW_HOME, WWW_BACK, WWW_FORWARD, \
  103. WWW_STOP, WWW_REFRESH, WWW_FAVORITES \
  104. )
  105. /* ISO layout */
  106. #define KEYMAP_ISO( \
  107. K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
  108. K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
  109. K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B, KF1,KE9,KFA, K6C,K75,K7D, \
  110. K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52,K5D,K5A, K6B,K73,K74,K79, \
  111. K12,K61,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
  112. K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA \
  113. ) \
  114. KEYMAP_ALL( \
  115. K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
  116. K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
  117. K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5D, KF1,KE9,KFA, K6C,K75,K7D, \
  118. K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K79, \
  119. K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
  120. K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA, \
  121. \
  122. K61, \
  123. RO, KANA, JYEN, HENK, MHEN, \
  124. F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, \
  125. SYSTEM_POWER, SYSTEM_SLEEP, SYSTEM_WAKE, \
  126. AUDIO_MUTE, AUDIO_VOL_UP, AUDIO_VOL_DOWN, \
  127. MEDIA_NEXT_TRACK, MEDIA_PREV_TRACK, MEDIA_STOP, MEDIA_PLAY_PAUSE, MEDIA_SELECT, \
  128. MAIL, CALCULATOR, MY_COMPUTER, \
  129. WWW_SEARCH, WWW_HOME, WWW_BACK, WWW_FORWARD, \
  130. WWW_STOP, WWW_REFRESH, WWW_FAVORITES \
  131. )
  132. /* JIS layout */
  133. #define KEYMAP_JIS( \
  134. K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
  135. K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K6A,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
  136. K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B, KF1,KE9,KFA, K6C,K75,K7D, \
  137. K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52,K5D, K5A, K6B,K73,K74,K79, \
  138. K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A,K51, K59, KF5, K69,K72,K7A, \
  139. K14,K9F,K11, K67,K29,K64,K13, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA \
  140. ) \
  141. KEYMAP_ALL( \
  142. K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
  143. K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
  144. K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5D, KF1,KE9,KFA, K6C,K75,K7D, \
  145. K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K79, \
  146. K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
  147. K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA, \
  148. \
  149. NUBS, \
  150. K51, K13, K6A, K64, K67, \
  151. F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, \
  152. SYSTEM_POWER, SYSTEM_SLEEP, SYSTEM_WAKE, \
  153. AUDIO_MUTE, AUDIO_VOL_UP, AUDIO_VOL_DOWN, \
  154. MEDIA_NEXT_TRACK, MEDIA_PREV_TRACK, MEDIA_STOP, MEDIA_PLAY_PAUSE, MEDIA_SELECT, \
  155. MAIL, CALCULATOR, MY_COMPUTER, \
  156. WWW_SEARCH, WWW_HOME, WWW_BACK, WWW_FORWARD, \
  157. WWW_STOP, WWW_REFRESH, WWW_FAVORITES \
  158. )
  159. // Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
  160. static const uint8_t PROGMEM fn_layer[] = {
  161. 5, // Fn0
  162. 6, // Fn1
  163. 0, // Fn2
  164. 0, // Fn3
  165. 0, // Fn4
  166. 0, // Fn5
  167. 0, // Fn6
  168. 0 // Fn7
  169. };
  170. // Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
  171. // See layer.c for details.
  172. static const uint8_t PROGMEM fn_keycode[] = {
  173. KC_SCLN, // Fn0
  174. KC_SLSH, // Fn1
  175. KC_NO, // Fn2
  176. KC_NO, // Fn3
  177. KC_NO, // Fn4
  178. KC_NO, // Fn5
  179. KC_NO, // Fn6
  180. KC_NO // Fn7
  181. };
  182. // The keymap is a 32*8 byte array which convert a PS/2 scan code into a USB keycode.
  183. // See keycode.h for USB keycodes. You should omit a 'KC_' prefix of USB keycodes in keymap macro.
  184. // Use KEYMAP_ISO() or KEYMAP_JIS() instead of KEYMAP() if your keyboard is ISO or JIS.
  185. static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  186. /* 0: default
  187. * ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,-----------.
  188. * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |Pwr|Slp|Wak|
  189. * `---' `---------------' `---------------' `---------------' `-----------' `-----------'
  190. * ,-----------------------------------------------------------. ,-----------. ,---------------.
  191. * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa| |Ins|Hom|PgU| |NmL| /| *| -|
  192. * |-----------------------------------------------------------| |-----------| |---------------|
  193. * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|End|PgD| | 7| 8| 9| |
  194. * |-----------------------------------------------------------| `-----------' |-----------| +|
  195. * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return | | 4| 5| 6| |
  196. * |-----------------------------------------------------------| ,---. |---------------|
  197. * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
  198. * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
  199. * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl| |Lef|Dow|Rig| | 0| .| |
  200. * `-----------------------------------------------------------' `-----------' `---------------'
  201. * ; = Fn0(to Layer 5)
  202. * / = Fn1(to Layer 6)
  203. */
  204. KEYMAP(
  205. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
  206. GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
  207. TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
  208. CAPS,A, S, D, F, G, H, J, K, L, FN0, QUOT, ENT, P4, P5, P6, PPLS,
  209. LSFT,Z, X, C, V, B, N, M, COMM,DOT, FN1, RSFT, UP, P1, P2, P3,
  210. LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
  211. ),
  212. /* 1: plain Qwerty without layer switching
  213. * ,-----------------------------------------------------------.
  214. * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa|
  215. * |-----------------------------------------------------------|
  216. * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
  217. * |-----------------------------------------------------------|
  218. * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return |
  219. * |-----------------------------------------------------------|
  220. * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift |
  221. * |-----------------------------------------------------------|
  222. * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
  223. * `-----------------------------------------------------------'
  224. */
  225. KEYMAP(
  226. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
  227. GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
  228. TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
  229. CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
  230. LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
  231. LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
  232. ),
  233. /* 2: Colemak http://colemak.com
  234. * ,-----------------------------------------------------------.
  235. * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa|
  236. * |-----------------------------------------------------------|
  237. * |Tab | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \|
  238. * |-----------------------------------------------------------|
  239. * |BackSp| A| R| S| T| D| H| N| E| I| O| '|Return |
  240. * |-----------------------------------------------------------|
  241. * |Shift | Z| X| C| V| B| K| M| ,| ,| /|Shift |
  242. * |-----------------------------------------------------------|
  243. * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
  244. * `----------------------------------------------------------'
  245. */
  246. KEYMAP(
  247. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
  248. GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
  249. TAB, Q, W, F, P, G, J, L, U, Y, SCLN,LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
  250. BSPC,A, R, S, T, D, H, N, E, I, O, QUOT, ENT, P4, P5, P6, PPLS,
  251. LSFT,Z, X, C, V, B, K, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
  252. LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
  253. ),
  254. /* 3: Dvorak http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard
  255. * ,-----------------------------------------------------------.
  256. * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]|Backspa|
  257. * |-----------------------------------------------------------|
  258. * |Tab | '| ,| .| P| Y| F| G| C| R| L| /| =| \|
  259. * |-----------------------------------------------------------|
  260. * |BackSp| A| O| E| U| I| D| H| T| N| S| -|Return |
  261. * |-----------------------------------------------------------|
  262. * |Shift | ;| Q| J| K| X| B| M| Wl V| Z|Shift |
  263. * |-----------------------------------------------------------|
  264. * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
  265. * `-----------------------------------------------------------'
  266. */
  267. KEYMAP(
  268. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
  269. GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC,RBRC,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
  270. TAB, QUOT,COMM,DOT, P, Y, F, G, C, R, L, SLSH,EQL, BSLS, DEL, END, PGDN, P7, P8, P9,
  271. CAPS,A, O, E, U, I, D, H, T, N, S, MINS, ENT, P4, P5, P6, PPLS,
  272. LSFT,SCLN,Q, J, K, X, B, M, W, V, Z, RSFT, UP, P1, P2, P3,
  273. LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
  274. ),
  275. /* 4: Workman http://viralintrospection.wordpress.com/2010/09/06/a-different-philosophy-in-designing-keyboard-layouts/
  276. * ,-----------------------------------------------------------.
  277. * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa|
  278. * |-----------------------------------------------------------|
  279. * |Tab | Q| D| R| W| B| J| F| U| P| ;| [| ]| \|
  280. * |-----------------------------------------------------------|
  281. * |CapsLo| A| S| H| T| G| Y| N| E| O| I| '|Return |
  282. * |-----------------------------------------------------------|
  283. * |Shift | Z| X| M| C| V| K| L| ,| ,| /|Shift |
  284. * |-----------------------------------------------------------|
  285. * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
  286. * `-----------------------------------------------------------'
  287. */
  288. KEYMAP(
  289. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
  290. GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
  291. TAB, Q, D, R, W, B, J, F, U, P, SCLN,LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
  292. BSPC,A, S, H, T, G, Y, N, E, O, I, QUOT, ENT, P4, P5, P6, PPLS,
  293. LSFT,Z, X, M, C, V, K, L, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
  294. LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
  295. ),
  296. /* 5: Mouse keys
  297. * ,-----------------------------------------------------------.
  298. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Backspa|
  299. * |-----------------------------------------------------------|
  300. * |Tab |MwL|MwU|McU|WwU|WwR|MwL|MwD|MwU|MwR| | | | \|
  301. * |-----------------------------------------------------------|
  302. * |CapsLo| |McL|McD|McR| |McL|McD|McU|McR|Fn0| |Return |
  303. * |-----------------------------------------------------------|
  304. * |Shift |VoD|VoU|Mut|Mb2|Mb3|Mb2|Mb1|VoD|VoU|Mut|Shift |
  305. * |-----------------------------------------------------------|
  306. * |Ctrl |Gui |Alt | Mb1 |Alt |Gui |Menu|Ctrl|
  307. * `-----------------------------------------------------------'
  308. * Mc = mouse cursor, Mw = mouse wheel, Mb = mouse button
  309. * Vo = Volume, Mut = Mute
  310. */
  311. KEYMAP(
  312. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
  313. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F8, F10, F11, F12, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
  314. TAB, WH_L,WH_D,MS_U,WH_U,WH_R,WH_L,WH_D,WH_U,WH_R,NO, NO, NO, BSLS, DEL, END, PGDN, P7, P8, P9,
  315. CAPS,NO, MS_L,MS_D,MS_R,NO, MS_L,MS_D,MS_U,MS_R,FN0, NO, ENT, P4, P5, P6, PPLS,
  316. LSFT,VOLD,VOLU,MUTE,BTN2,BTN3,BTN2,BTN1,VOLD,VOLU,MUTE, RSFT, UP, P1, P2, P3,
  317. LCTL,LGUI,LALT, BTN1, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
  318. ),
  319. /* 6: Cursor keys
  320. * ,-----------------------------------------------------------.
  321. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Backspa|
  322. * |-----------------------------------------------------------|
  323. * |Tab |Hom|PgU| Up|PgU|End|Hom|PgD|PgU|End| | | | \|
  324. * |-----------------------------------------------------------|
  325. * |CapsLo| |Lef|Dow|Rig| |Lef|Dow| Up|Rig| | |Return |
  326. * |-----------------------------------------------------------|
  327. * |Shift | | | | | |Hom|PgD|PgU|End|Fn1|Shift |
  328. * |-----------------------------------------------------------|
  329. * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
  330. * `-----------------------------------------------------------'
  331. */
  332. KEYMAP(
  333. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
  334. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F8, F10, F11, F12, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
  335. TAB, NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, NO, NO, NO, BSLS, DEL, END, PGDN, P7, P8, P9,
  336. CAPS,NO, NO, NO, NO, NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT, P4, P5, P6, PPLS,
  337. LSFT,VOLD,VOLU,MUTE,NO, NO, HOME,PGDN,PGUP,END, FN1, RSFT, UP, P1, P2, P3,
  338. LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
  339. ),
  340. };
  341. uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
  342. {
  343. return pgm_read_byte(&keymaps[(layer)][(row)][(col)]);
  344. }
  345. uint8_t keymap_fn_layer(uint8_t fn_bits)
  346. {
  347. return pgm_read_byte(&fn_layer[biton(fn_bits)]);
  348. }
  349. uint8_t keymap_fn_keycode(uint8_t fn_bits)
  350. {
  351. return pgm_read_byte(&fn_keycode[(biton(fn_bits))]);
  352. }