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.

пре 13 година
пре 13 година
пре 13 година
пре 13 година
пре 13 година
пре 13 година
пре 13 година
пре 13 година
пре 13 година
пре 13 година
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /*
  2. * Keymap for ADB keyboard
  3. */
  4. #include <stdint.h>
  5. #include <stdbool.h>
  6. #include <avr/pgmspace.h>
  7. #include "usb_keyboard.h"
  8. #include "usb_keycodes.h"
  9. #include "print.h"
  10. #include "debug.h"
  11. #include "util.h"
  12. #include "keymap_skel.h"
  13. #define KEYCODE(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)]))
  14. // Convert physical keyboard layout to matrix array.
  15. // This is a macro to define keymap easily in keyboard layout form.
  16. /* Apple Extended Keyboard */
  17. #define KEYMAP( \
  18. K35, K7A,K78,K63,K76, K60,K61,K62,K64, K65,K6D,K67,K6F, K69,K6B,K71, K7F, \
  19. K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K72,K73,K74, K47,K51,K4B,K43, \
  20. K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, K75,K77,K79, K59,K5B,K5C,K4E, \
  21. K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K45, \
  22. K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K3E, K53,K54,K55, \
  23. K36,K3A,K37, K31, K3B,K3D,K3C, K52, K41,K4C \
  24. ) { \
  25. { KB_##K00, KB_##K01, KB_##K02, KB_##K03, KB_##K04, KB_##K05, KB_##K06, KB_##K07 }, \
  26. { KB_##K08, KB_##K09, KB_NO, KB_##K0B, KB_##K0C, KB_##K0D, KB_##K0E, KB_##K0F }, \
  27. { KB_##K10, KB_##K11, KB_##K12, KB_##K13, KB_##K14, KB_##K15, KB_##K16, KB_##K17 }, \
  28. { KB_##K18, KB_##K19, KB_##K1A, KB_##K1B, KB_##K1C, KB_##K1D, KB_##K1E, KB_##K1F }, \
  29. { KB_##K20, KB_##K21, KB_##K22, KB_##K23, KB_##K24, KB_##K25, KB_##K26, KB_##K27 }, \
  30. { KB_##K28, KB_##K29, KB_##K2A, KB_##K2B, KB_##K2C, KB_##K2D, KB_##K2E, KB_##K2F }, \
  31. { KB_##K30, KB_##K31, KB_##K32, KB_##K33, KB_NO, KB_##K35, KB_##K36, KB_##K37 }, \
  32. { KB_##K38, KB_##K39, KB_##K3A, KB_##K3B, KB_##K3C, KB_##K3D, KB_##K3E, KB_NO }, \
  33. { KB_NO, KB_##K41, KB_NO, KB_##K43, KB_NO, KB_##K45, KB_NO, KB_##K47 }, \
  34. { KB_NO, KB_NO, KB_NO, KB_##K4B, KB_##K4C, KB_NO, KB_##K4E, KB_NO }, \
  35. { KB_NO, KB_##K51, KB_##K52, KB_##K53, KB_##K54, KB_##K55, KB_##K56, KB_##K57 }, \
  36. { KB_##K58, KB_##K59, KB_NO, KB_##K5B, KB_##K5C, KB_NO, KB_NO, KB_NO }, \
  37. { KB_##K60, KB_##K61, KB_##K62, KB_##K63, KB_##K64, KB_##K65, KB_NO, KB_##K67 }, \
  38. { KB_NO, KB_##K69, KB_NO, KB_##K6B, KB_NO, KB_##K6D, KB_NO, KB_##K6F }, \
  39. { KB_NO, KB_##K71, KB_##K72, KB_##K73, KB_##K74, KB_##K75, KB_##K76, KB_##K77 }, \
  40. { KB_##K78, KB_##K79, KB_##K7A, KB_##K7B, KB_NO, KB_NO, KB_NO, KB_##K7F } \
  41. }
  42. /* plain keymap
  43. {
  44. { KB_A, KB_S, KB_D, KB_F, KB_H, KB_G, KB_Z, KB_X }, // 00-07
  45. { KB_C, KB_V, KB_NO, KB_B, KB_Q, KB_W, KB_E, KB_R }, // 08-0F
  46. { KB_Y, KB_T, KB_1, KB_2, KB_3, KB_4, KB_6, KB_5 }, // 10-17
  47. { KB_EQL, KB_9, KB_7, KB_MINS,KB_8, KB_0, KB_RBRC,KB_O }, // 18-1F
  48. { KB_U, KB_LBRC,KB_I, KB_P, KB_ENT, KB_L, KB_J, KB_QUOT}, // 20-27
  49. { KB_K, KB_SCLN,KB_BSLS,KB_COMM,KB_SLSH,KB_N, KB_M, KB_DOT }, // 28-2F
  50. { KB_TAB, KB_SPC, KB_GRV, KB_BSPC,KB_NO, KB_ESC, KB_LCTL,KB_LGUI}, // 30-37
  51. { KB_LSFT,KB_CAPS,KB_LALT,KB_LEFT,KB_RGHT,KB_DOWN,KB_UP, KB_NO }, // 38-3F
  52. { KB_NO, KB_PDOT,KB_NO, KB_PAST,KB_NO, KB_PPLS,KB_NO, KB_NLCK}, // 40-47
  53. { KB_NO, KB_NO, KB_NO, KB_PSLS,KB_PENT,KB_NO, KB_PMNS,KB_NO }, // 48-4F
  54. { KB_NO, KB_PEQL,KB_P0, KB_P1, KB_P2, KB_P3, KB_P4, KB_P5 }, // 50-57
  55. { KB_P6, KB_P7, KB_NO, KB_P8, KB_P9, KB_NO, KB_NO, KB_NO }, // 58-5F
  56. { KB_F5, KB_F6, KB_F7, KB_F3, KB_F8, KB_F9, KB_NO, KB_F11 }, // 60-67
  57. { KB_NO, KB_PSCR,KB_NO, KB_SLCK,KB_NO, KB_F10, KB_NO, KB_F12 }, // 68-6F
  58. { KB_NO, KB_BRK, KB_INS, KB_HOME,KB_PGUP,KB_DEL, KB_F4, KB_END }, // 70-77
  59. { KB_F2, KB_PGDN,KB_F1, KB_RSFT,KB_NO, KB_NO, KB_NO, KB_PWR }, // 78-7F
  60. },
  61. */
  62. // Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
  63. static const uint8_t PROGMEM fn_layer[] = {
  64. 0, // Fn0
  65. 0, // Fn1
  66. 0, // Fn2
  67. 0, // Fn3
  68. 0, // Fn4
  69. 0, // Fn5
  70. 0, // Fn6
  71. 0 // Fn7
  72. };
  73. // Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
  74. // See layer.c for details.
  75. static const uint8_t PROGMEM fn_keycode[] = {
  76. KB_NO, // Fn0
  77. KB_NO, // Fn1
  78. KB_NO, // Fn2
  79. KB_NO, // Fn3
  80. KB_NO, // Fn4
  81. KB_NO, // Fn5
  82. KB_NO, // Fn6
  83. KB_NO // Fn7
  84. };
  85. static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  86. /* Default Layer: plain keymap
  87. * ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---.
  88. * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |Pwr|
  89. * `---' `---------------' `---------------' `---------------' `-----------' `---'
  90. * ,-----------------------------------------------------------. ,-----------. ,---------------.
  91. * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa| |Ins|Hom|PgU| |NmL| =| /| *|
  92. * |-----------------------------------------------------------| |-----------| |---------------|
  93. * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|End|PgD| | 7| 8| 9| -|
  94. * |-----------------------------------------------------------| `-----------' |---------------|
  95. * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return | | 4| 5| 6| +|
  96. * |-----------------------------------------------------------| ,---. |---------------|
  97. * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
  98. * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
  99. * |Ctrl |Gui |Alt | Space | | | | |Lef|Dow|Rig| | 0| .| |
  100. * `-----------------------------------------------------------' `-----------' `---------------'
  101. */
  102. KEYMAP(
  103. ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, PWR,
  104. GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,EQL, PSLS,PAST,
  105. TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9, PMNS,
  106. CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
  107. LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
  108. LCTL,LGUI,LALT, SPC, LEFT,DOWN,RGHT, P0, PDOT,PENT
  109. ),
  110. };
  111. uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
  112. {
  113. return KEYCODE(layer, row, col);
  114. }
  115. uint8_t keymap_fn_layer(uint8_t fn_bits)
  116. {
  117. return pgm_read_byte(&fn_layer[biton(fn_bits)]);
  118. }
  119. uint8_t keymap_fn_keycode(uint8_t fn_bits)
  120. {
  121. return pgm_read_byte(&fn_keycode[(biton(fn_bits))]);
  122. }
  123. // define a condition to enter special function mode
  124. bool keymap_is_special_mode(uint8_t fn_bits)
  125. {
  126. //return (usb_keyboard_mods == (BIT_LCTRL | BIT_LSHIFT | BIT_LALT | BIT_LGUI));
  127. return (usb_keyboard_mods == (BIT_RSHIFT));
  128. }