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

13 роки тому
14 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
14 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
14 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /*
  2. * Keymap for Macway mod
  3. */
  4. #include <stdint.h>
  5. #include <stdbool.h>
  6. #include <avr/pgmspace.h>
  7. #include <avr/interrupt.h>
  8. #include "usb_keyboard.h"
  9. #include "usb_keycodes.h"
  10. #include "print.h"
  11. #include "debug.h"
  12. #include "util.h"
  13. #include "controller.h"
  14. #include "keymap_skel.h"
  15. #define KEYMAP( \
  16. R1C1, R1C0, R2C0, R3C0, R4C0, R4C1, R5C1, R5C0, R6C0, R7C0, R8C0, R8C1, R6C1, R0C2, \
  17. R1C2, R1C3, R2C3, R3C3, R4C3, R4C2, R5C2, R5C3, R6C3, R7C3, R8C3, R8C2, R6C2, \
  18. R1C5, R1C4, R2C4, R3C4, R4C4, R4C5, R5C5, R5C4, R6C4, R7C4, R8C4, R8C5, R0C6, \
  19. R6C7, R1C6, R2C6, R3C6, R4C6, R4C7, R5C7, R5C6, R6C6, R7C6, R8C7, R3C2, R3C5, \
  20. R7C5, R2C2, R0C0, R0C7, R2C1, R0C4, R3C7, R2C7, R1C7 \
  21. ) { \
  22. { R0C0, KB_NO, R0C2, KB_NO, R0C4, KB_NO, R0C6, R0C7 }, \
  23. { R1C0, R1C1, R1C2, R1C3, R1C4, R1C5, R1C6, R1C7 }, \
  24. { R2C0, R2C1, R2C2, R2C3, R2C4, KB_NO, R2C6, R2C7 }, \
  25. { R3C0, KB_NO, R3C2, R3C3, R3C4, R3C5, R3C6, R3C7 }, \
  26. { R4C0, R4C1, R4C2, R4C3, R4C4, R4C5, R4C6, R4C7 }, \
  27. { R5C0, R5C1, R5C2, R5C3, R5C4, R5C5, R5C6, R5C7 }, \
  28. { R6C0, R6C1, R6C2, R6C3, R6C4, KB_NO, R6C6, R6C7 }, \
  29. { R7C0, KB_NO, KB_NO, R7C3, R7C4, R7C5, R7C6, KB_NO }, \
  30. { R8C0, R8C1, R8C2, R8C3, R8C4, R8C5, KB_NO, R8C7 } \
  31. }
  32. #define KEYCODE(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)]))
  33. static const uint8_t PROGMEM fn_layer[] = { 0, 1, 2, 3, 4, 0, 2, 3 };
  34. static const uint8_t PROGMEM fn_keycode[] = {
  35. KB_NO, // FN_0 [NOT USED]
  36. KB_NO, // FN_1 layer 1
  37. KB_QUOTE, // FN_2 layer 2
  38. KB_SCOLON, // FN_3 layer 3
  39. KB_SPACE, // FN_4 layer 4
  40. KB_NO, // FN_5 [NOT USED]
  41. KB_NO, // FN_6 layer 2
  42. KB_NO // FN_7 layer 3
  43. };
  44. static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  45. /* Layer 0: Default Layer
  46. * ,-----------------------------------------------------------.
  47. * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
  48. * |-----------------------------------------------------------|
  49. * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| |
  50. * |-----------------------------------------------------' |
  51. * |Contro| A| S| D| F| G| H| J| K| L|Fn3|Fn2|Return |
  52. * |-----------------------------------------------------------|
  53. * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn1|
  54. * |-----------------------------------------------------------|
  55. * |Fn7|Gui |Alt |Fn4 |Fn6 |\ |` | | |
  56. * `-----------------------------------------------------------'
  57. */
  58. KEYMAP(KB_ESC, KB_1, KB_2, KB_3, KB_4, KB_5, KB_6, KB_7, KB_8, KB_9, KB_0, KB_MINS,KB_EQL, KB_BSPC, \
  59. KB_TAB, KB_Q, KB_W, KB_E, KB_R, KB_T, KB_Y, KB_U, KB_I, KB_O, KB_P, KB_LBRC,KB_RBRC, \
  60. KB_LCTL,KB_A, KB_S, KB_D, KB_F, KB_G, KB_H, KB_J, KB_K, KB_L, FN_3, FN_2, KB_ENT, \
  61. KB_LSFT,KB_Z, KB_X, KB_C, KB_V, KB_B, KB_N, KB_M, KB_COMM,KB_DOT, KB_SLSH,KB_RSFT,FN_1, \
  62. FN_7, KB_LGUI,KB_LALT,FN_4, FN_6, KB_BSLS,KB_GRV, KB_NO, KB_NO),
  63. /* Layer 1: HHKB mode (HHKB Fn)
  64. * ,-----------------------------------------------------------.
  65. * |Pow| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
  66. * |-----------------------------------------------------------|
  67. * |Caps | | | | | | | |Psc|Slk|Pus|Up | | |
  68. * |-----------------------------------------------------' |
  69. * |Contro| | | | | | *| /|Hom|PgU|Lef|Rig|Enter |
  70. * |-----------------------------------------------------------|
  71. * |Shift | | | | | | +| -|End|PgD|Dow|Shift |xxx|
  72. * |-----------------------------------------------------------|
  73. * | |Gui |Alt | |Alt | | | | |
  74. * `-----------------------------------------------------------'
  75. */
  76. KEYMAP(KB_PWR, KB_F1, KB_F2, KB_F3, KB_F4, KB_F5, KB_F6, KB_F7, KB_F8, KB_F9, KB_F10, KB_F11, KB_F12, KB_DEL, \
  77. KB_CAPS,KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_PSCR,KB_SLCK,KB_BRK, KB_UP, KB_NO, \
  78. KB_LCTL,KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KP_ASTR,KP_SLSH,KB_HOME,KB_PGUP,KB_LEFT,KB_RGHT,KB_ENT, \
  79. KB_LSFT,KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KP_PLUS,KP_MINS,KB_END, KB_PGDN,KB_DOWN,KB_RSFT,FN_1, \
  80. KB_NO, KB_LGUI,KB_LALT,KB_SPC, KB_RALT,KB_NO, KB_NO, KB_NO, KB_NO),
  81. /* Layer 2: Vi mode (Quote/Rmeta)
  82. * ,-----------------------------------------------------------.
  83. * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| ` |
  84. * |-----------------------------------------------------------|
  85. * | \ |Hom|PgD|Up |PgU|End|Hom|PgD|PgU|End| | | | |
  86. * |-----------------------------------------------------' |
  87. * |Contro| |Lef|Dow|Rig| |Lef|Dow|Up |Rig| |xxx| \ |
  88. * |-----------------------------------------------------------|
  89. * |Shift | | | | | |Hom|PgD|PgU|End| |Shift | |
  90. * |-----------------------------------------------------------|
  91. * | |Gui |Alt |Space |xxxxx| | | | |
  92. * `-----------------------------------------------------------'
  93. */
  94. KEYMAP(KB_GRV, KB_F1, KB_F2, KB_F3, KB_F4, KB_F5, KB_F6, KB_F7, KB_F8, KB_F9, KB_F10, KB_F11, KB_F12, KB_GRV, \
  95. KB_BSLS,KB_HOME,KB_PGDN,KB_UP, KB_PGUP,KB_END, KB_HOME,KB_PGDN,KB_PGUP,KB_END, KB_NO, KB_NO, KB_NO, \
  96. KB_LCTL,KB_NO, KB_LEFT,KB_DOWN,KB_RGHT,KB_NO, KB_LEFT,KB_DOWN,KB_UP, KB_RGHT,KB_NO, FN_2, KB_BSLS, \
  97. KB_LSFT,KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_RSFT,KB_NO, \
  98. KB_NO, KB_LGUI,KB_LALT,KB_SPC, FN_6, KB_NO, KB_NO, KB_NO, KB_NO),
  99. /* Layer 3: Mouse mode (Semicolon)
  100. * ,-------------------------------------------------------- --.
  101. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
  102. * |-----------------------------------------------------------|
  103. * |Tab |MwL|MwD|McU|MwU|MwR|MwL|MwD|MwU|MwR| | | | |
  104. * |-----------------------------------------------------' |
  105. * |Contro| |McL|McD|McR| |McL|McD|McU|McR|xxx| |Return |
  106. * |-----------------------------------------------------------|
  107. * |Shift | | |Mb1|Mb2|Mb3|Mb2|Mb1| | | |Shift | |
  108. * |-----------------------------------------------------------|
  109. * |xxx|Gui |Alt |Mb1 |Alt | | | | |
  110. * `-----------------------------------------------------------'
  111. * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
  112. */
  113. KEYMAP(KB_ESC, KB_F1, KB_F2, KB_F3, KB_F4, KB_F5, KB_F6, KB_F7, KB_F8, KB_F9, KB_F10, KB_F11, KB_F12, KB_DEL, \
  114. KB_TAB, MS_WH_L,MS_WH_D,MS_UP, MS_WH_U,MS_WH_R,MS_WH_L,MS_WH_D,MS_WH_U,MS_WH_R,KB_NO, KB_NO, KB_NO, \
  115. KB_LCTL,KB_NO, MS_LEFT,MS_DOWN,MS_RGHT,KB_NO, MS_LEFT,MS_DOWN,MS_UP, MS_RGHT,FN_3, KB_NO, KB_ENT, \
  116. KB_LSFT,KB_NO, KB_NO, MS_BTN1,MS_BTN2,MS_BTN3,MS_BTN2,MS_BTN1,KB_NO, KB_NO, KB_NO, KB_RSFT,KB_NO, \
  117. FN_7, KB_LGUI,KB_LALT,MS_BTN1,KB_RALT,KB_NO, KB_NO, KB_NO, KB_NO),
  118. /* Layer 4: Matias half keyboard style (Space)
  119. * ,-----------------------------------------------------------.
  120. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
  121. * |-----------------------------------------------------------|
  122. * |Backs| P| O| I| U| Y| T| R| E| W| Q|Tab|Tab| |
  123. * |-----------------------------------------------------' |
  124. * |Contro| ;| L| K| J| H| G| F| D| S| A|Con|Control |
  125. * |-----------------------------------------------------------|
  126. * |Shift | /| .| ,| M| N| B| V| C| X| Z|Shift | |
  127. * |-----------------------------------------------------------|
  128. * | |Gui |Alt |xxxxxxxxxxxxxxxxxxxxxx|Alt | | | | |
  129. * `-----------------------------------------------------------'
  130. */
  131. KEYMAP(KB_MINS,KB_0, KB_9, KB_8, KB_7, KB_6, KB_5, KB_4, KB_3, KB_2, KB_1, KB_NO, KB_NO, KB_ESC, \
  132. KB_BSPC,KB_P, KB_O, KB_I, KB_U, KB_Y, KB_T, KB_R, KB_E, KB_W, KB_Q, KB_TAB, KB_TAB, \
  133. KB_LCTL,KB_SCLN,KB_L, KB_K, KB_J, KB_H, KB_G, KB_F, KB_D, KB_S, KB_A, KB_RCTL,KB_RCTL, \
  134. KB_LSFT,KB_SLSH,KB_DOT, KB_COMM,KB_M, KB_N, KB_B, KB_V, KB_C, KB_X, KB_Z, KB_RSFT,KB_NO, \
  135. KB_NO, KB_LGUI,KB_LALT,FN_4, KB_RALT,KB_NO, KB_NO, KB_NO, KB_NO),
  136. };
  137. uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
  138. {
  139. return KEYCODE(layer, row, col);
  140. }
  141. int keymap_fn_layer(uint8_t fn_bits)
  142. {
  143. return pgm_read_byte(&fn_layer[biton(fn_bits)]);
  144. }
  145. uint8_t keymap_fn_keycode(uint8_t fn_bits)
  146. {
  147. return pgm_read_byte(&fn_keycode[(biton(fn_bits))]);
  148. }
  149. bool keymap_is_special_mode(uint8_t fn_bits)
  150. {
  151. return (usb_keyboard_mods == (BIT_LCTRL | BIT_LSHIFT | BIT_LALT | BIT_LGUI));
  152. }