Keyboard firmwares for Atmel AVR and Cortex-M
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
vor 13 Jahren
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. /*
  2. * Keymap for PFU HHKB Pro
  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. // Convert physical keyboard layout to matrix array.
  14. // This is a macro to define keymap easily in keyboard layout form.
  15. #define KEYMAP( \
  16. R3C1, R3C0, R0C0, R1C0, R1C1, R2C0, R2C1, R4C0, R4C1, R6C0, R6C1, R7C0, R7C1, R5C0, R5C1, \
  17. R3C2, R0C1, R0C2, R1C3, R1C2, R2C3, R2C2, R4C2, R4C3, R6C2, R6C3, R7C3, R7C2, R5C2, \
  18. R3C3, R0C4, R0C3, R1C4, R1C5, R2C4, R2C5, R4C5, R4C4, R6C5, R6C4, R7C4, R5C3, \
  19. R3C4, R0C5, R0C6, R0C7, R1C6, R1C7, R2C6, R4C6, R6C6, R7C6, R7C5, R5C5, R5C4, \
  20. R3C5, R3C6, R3C7, R5C7, R5C6 \
  21. ) \
  22. { \
  23. { R0C0, R0C1, R0C2, R0C3, R0C4, R0C5, R0C6, R0C7 }, \
  24. { R1C0, R1C1, R1C2, R1C3, R1C4, R1C5, R1C6, R1C7 }, \
  25. { R2C0, R2C1, R2C2, R2C3, R2C4, R2C5, R2C6, KB_NO }, \
  26. { R3C0, R3C1, R3C2, R3C3, R3C4, R3C5, R3C6, R3C7 }, \
  27. { R4C0, R4C1, R4C2, R4C3, R4C4, R4C5, R4C6, KB_NO }, \
  28. { R5C0, R5C1, R5C2, R5C3, R5C4, R5C5, R5C6, R5C7 }, \
  29. { R6C0, R6C1, R6C2, R6C3, R6C4, R6C5, R6C6, KB_NO }, \
  30. { R7C0, R7C1, R7C2, R7C3, R7C4, R7C5, R7C6, KB_NO } \
  31. }
  32. #define KEYCODE(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)]))
  33. // Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
  34. static const uint8_t PROGMEM fn_layer[] = {
  35. 0, // Fn0
  36. 1, // Fn1
  37. 2, // Fn2
  38. 3, // Fn3
  39. 4, // Fn4
  40. 0, // Fn5
  41. 0, // Fn6
  42. 1 // Fn7
  43. };
  44. // Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
  45. // See layer.c for details.
  46. static const uint8_t PROGMEM fn_keycode[] = {
  47. KB_NO, // Fn0
  48. KB_NO, // Fn1
  49. KB_SLSH, // Fn2
  50. KB_SCLN, // Fn3
  51. KB_SPC, // Fn4
  52. KB_NO, // Fn5
  53. KB_NO, // Fn6
  54. KB_NO // Fn7
  55. };
  56. static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  57. /* Layer 0: Default Layer
  58. * ,-----------------------------------------------------------.
  59. * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|
  60. * |-----------------------------------------------------------|
  61. * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs|
  62. * |-----------------------------------------------------------|
  63. * |Contro| A| S| D| F| G| H| J| K| L|Fn3| '|Return |
  64. * |-----------------------------------------------------------|
  65. * |Shift | Z| X| C| V| B| N| M| ,| .|Fn2|Shift |Fn1|
  66. * `-----------------------------------------------------------'
  67. * |Gui|Alt |Fn4 |Alt |Fn7|
  68. * `-------------------------------------------'
  69. */
  70. 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_BSLS,KB_GRV, \
  71. 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,KB_BSPC, \
  72. KB_LCTL,KB_A, KB_S, KB_D, KB_F, KB_G, KB_H, KB_J, KB_K, KB_L, KB_FN3, KB_QUOT,KB_ENT, \
  73. KB_LSFT,KB_Z, KB_X, KB_C, KB_V, KB_B, KB_N, KB_M, KB_COMM,KB_DOT, KB_FN2, KB_RSFT,KB_FN1, \
  74. KB_LGUI,KB_LALT,KB_FN4, KB_RALT,KB_RGUI),
  75. /* Layer 1: HHKB mode (HHKB Fn)
  76. * ,-----------------------------------------------------------.
  77. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
  78. * |-----------------------------------------------------------|
  79. * |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs|
  80. * |-----------------------------------------------------------|
  81. * |Contro|VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter |
  82. * |-----------------------------------------------------------|
  83. * |Shift | | | | | | +| -|End|PgD|Dow|Shift |xxx|
  84. * `-----------------------------------------------------------'
  85. * |Gui |Alt |Space |Alt |xxx|
  86. * `--------------------------------------------'
  87. */
  88. 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_INS, KB_DEL, \
  89. 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, KB_BSPC, \
  90. KB_LCTL,KB_VOLD,KB_VOLU,KB_MUTE,KB_NO, KB_NO, KB_PAST,KB_PSLS,KB_HOME,KB_PGUP,KB_LEFT,KB_RGHT,KB_ENT, \
  91. KB_LSFT,KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_PPLS,KB_PMNS,KB_END, KB_PGDN,KB_DOWN,KB_RSFT,KB_FN1, \
  92. KB_LGUI,KB_LALT,KB_SPC, KB_RALT,KB_FN7),
  93. /* Layer 2: Vi mode (Slash)
  94. * ,-----------------------------------------------------------.
  95. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
  96. * |-----------------------------------------------------------|
  97. * |Tab |Hom|PgD|Up |PgU|End|Hom|PgD|PgUlEnd| | | |Backs|
  98. * |-----------------------------------------------------------|
  99. * |Contro| |Lef|Dow|Rig| |Lef|Dow|Up |Rig| | |Return |
  100. * |-----------------------------------------------------------|
  101. * |Shift | | | | | |Hom|PgD|PgUlEnd|xxx|Shift | |
  102. * `-----------------------------------------------------------'
  103. * |Gui|Alt |Space |Alt |Gui|
  104. * `-------------------------------------------'
  105. */
  106. 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_INS, KB_DEL, \
  107. KB_TAB, KB_HOME,KB_PGDN,KB_UP, KB_PGUP,KB_END, KB_HOME,KB_PGDN,KB_PGUP,KB_END, KB_NO, KB_NO, KB_NO, KB_BSPC, \
  108. KB_LCTL,KB_NO, KB_LEFT,KB_DOWN,KB_RGHT,KB_NO, KB_LEFT,KB_DOWN,KB_UP, KB_RGHT,KB_NO, KB_NO, KB_ENT, \
  109. KB_LSFT,KB_NO, KB_NO, KB_NO, KB_NO, KB_NO, KB_HOME,KB_PGDN,KB_PGUP,KB_END, KB_FN2, KB_RSFT,KB_NO, \
  110. KB_LGUI,KB_LALT,KB_SPC, KB_RALT,KB_RGUI),
  111. /* Layer 3: Mouse mode (Semicolon)
  112. * ,-----------------------------------------------------------.
  113. * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
  114. * |-----------------------------------------------------------|
  115. * |Tab |MwL|MwU|McU|MwD|MwR|MwL|MwD|MwU|MwR| | | |Backs|
  116. * |-----------------------------------------------------------|
  117. * |Contro| |McL|McD|McR| |McL|McD|McU|McR|xxx| |Return |
  118. * |-----------------------------------------------------------|
  119. * |Shift |Mb4|Mb5|Mb1|Mb2|Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | |
  120. * `-----------------------------------------------------------'
  121. * |Gui |Alt |Mb1 |Alt |Gui|
  122. * `--------------------------------------------'
  123. * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
  124. */
  125. 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_INS, KB_DEL, \
  126. KB_TAB, KB_WH_L,KB_WH_U,KB_MS_U,KB_WH_D,KB_WH_R,KB_WH_L,KB_WH_D,KB_WH_U,KB_WH_R,KB_NO, KB_NO, KB_NO, KB_BSPC, \
  127. KB_LCTL,KB_NO, KB_MS_L,KB_MS_D,KB_MS_R,KB_NO, KB_MS_L,KB_MS_D,KB_MS_U,KB_MS_R,KB_FN3, KB_NO, KB_ENT, \
  128. KB_LSFT,KB_BTN4,KB_BTN5,KB_BTN1,KB_BTN2,KB_BTN3,KB_BTN2,KB_BTN1,KB_BTN4,KB_BTN5,KB_NO, KB_RSFT,KB_NO, \
  129. KB_LGUI,KB_LALT,KB_BTN1,KB_RALT,KB_RGUI),
  130. /* Layer 4: Matias half keyboard style (Space)
  131. * ,-----------------------------------------------------------.
  132. * | -| 0| 9| 8| 7| 6| 5| 4| 3| 2| 1| | | |Esc|
  133. * |-----------------------------------------------------------|
  134. * |Backs| P| O| I| U| Y| T| R| E| W| Q| | |Tab |
  135. * |-----------------------------------------------------------|
  136. * |Contro| ;| L| K| J| H| G| F| D| S| A|Con|Control |
  137. * |-----------------------------------------------------------|
  138. * |Shift | /| .| ,| M| N| B| V| C| X| Z|Shift | |
  139. * `-----------------------------------------------------------'
  140. * |Gui |Alt |xxxxxxxxxxxxxxxxxxxxxxx|Alt |Gui|
  141. * `--------------------------------------------'
  142. */
  143. 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_NO, KB_ESC, \
  144. KB_BSPC,KB_P, KB_O, KB_I, KB_U, KB_Y, KB_T, KB_R, KB_E, KB_W, KB_Q, KB_NO, KB_NO, KB_TAB, \
  145. 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, \
  146. 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, \
  147. KB_LGUI,KB_LALT,KB_FN4, KB_RALT,KB_RGUI)
  148. };
  149. uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
  150. {
  151. return KEYCODE(layer, row, col);
  152. }
  153. uint8_t keymap_fn_layer(uint8_t fn_bits)
  154. {
  155. return pgm_read_byte(&fn_layer[biton(fn_bits)]);
  156. }
  157. uint8_t keymap_fn_keycode(uint8_t fn_bits)
  158. {
  159. return pgm_read_byte(&fn_keycode[(biton(fn_bits))]);
  160. }
  161. // define a condition to enter special function mode
  162. bool keymap_is_special_mode(uint8_t fn_bits)
  163. {
  164. return (usb_keyboard_mods == (BIT_LCTRL | BIT_LSHIFT | BIT_LALT | BIT_LGUI));
  165. }