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.

пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /*
  2. * SpaceFN
  3. * http://geekhack.org/index.php?topic=51069.0
  4. */
  5. #include "keymap_common.h"
  6. const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  7. /* Layer 0: Default Layer
  8. * ,-----------------------------------------------------------.
  9. * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp|
  10. * |-----------------------------------------------------------|
  11. * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
  12. * |-----------------------------------------------------------|
  13. * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter |
  14. * |-----------------------------------------------------------|
  15. * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0|
  16. * `-----------------------------------------------------------'
  17. * |Gui|Alt | SpaceFN |Alt |Gui|
  18. * `-------------------------------------------'
  19. */
  20. KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, GRV, BSPC, \
  21. TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
  22. LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
  23. LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT,FN0, \
  24. LGUI,LALT, FN1, RALT,RGUI),
  25. /* Layer 1: HHKB mode (HHKB Fn)
  26. * ,-----------------------------------------------------------.
  27. * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
  28. * |-----------------------------------------------------------|
  29. * |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs|
  30. * |-----------------------------------------------------------|
  31. * | |VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter |
  32. * |-----------------------------------------------------------|
  33. * | | | | | | | +| -|End|PgD|Dow| | |
  34. * `-----------------------------------------------------------'
  35. * | | | | | |
  36. * `-------------------------------------------'
  37. */
  38. KEYMAP(PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
  39. CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS, UP, TRNS, BSPC, \
  40. TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT,PENT, \
  41. TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN,TRNS,TRNS, \
  42. TRNS,TRNS, SPC, TRNS,TRNS),
  43. /* Layer 2: SpaceFN
  44. * ,-----------------------------------------------------------.
  45. * |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| |Del|
  46. * |-----------------------------------------------------------|
  47. * | | | |Esc| | | |Hom|Up |End|Psc|Slk|Pau|Ins |
  48. * |-----------------------------------------------------------|
  49. * | | | | | | |PgU|Lef|Dow|Rig| | | |
  50. * |-----------------------------------------------------------|
  51. * | | | | | |Spc|PgD|` |~ | | | | |
  52. * `-----------------------------------------------------------'
  53. * | | | | | |
  54. * `-------------------------------------------'
  55. */
  56. KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,DEL, \
  57. TRNS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,FN3, END, PSCR,SLCK,PAUS,INS, \
  58. TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS, \
  59. TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN2, TRNS,TRNS,TRNS,NO, \
  60. TRNS,TRNS, TRNS, TRNS,TRNS),
  61. };
  62. /*
  63. * user defined action function
  64. */
  65. enum function_id {
  66. CTRL_SPACE_I, // Ctrl + Up(SpaceFN) -> PgUp
  67. };
  68. void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
  69. {
  70. # define MODS_CTRL_MASK (MOD_BIT(KC_LCTRL)|MOD_BIT(KC_RCTRL))
  71. static uint8_t ctrl_space_i_prev_ctrl;
  72. switch (id) {
  73. // Ctrl + Up(SpaceFN) -> PgUp
  74. case CTRL_SPACE_I:
  75. ctrl_space_i_prev_ctrl = get_mods()&MODS_CTRL_MASK;
  76. if (record->event.pressed) {
  77. if (ctrl_space_i_prev_ctrl) {
  78. del_mods(ctrl_space_i_prev_ctrl); // remove Ctrl
  79. add_key(KC_PGUP);
  80. send_keyboard_report(); // send PgUp without Ctrl
  81. add_mods(ctrl_space_i_prev_ctrl); // return Ctrl but not sent
  82. } else {
  83. add_key(KC_UP);
  84. send_keyboard_report();
  85. }
  86. } else {
  87. if (ctrl_space_i_prev_ctrl) {
  88. del_key(KC_PGUP);
  89. send_keyboard_report();
  90. } else {
  91. del_key(KC_UP);
  92. send_keyboard_report();
  93. }
  94. }
  95. break;
  96. }
  97. }
  98. /*
  99. * Fn action definition
  100. */
  101. const action_t PROGMEM fn_actions[] = {
  102. [0] = ACTION_LAYER_MOMENTARY(1),
  103. [1] = ACTION_LAYER_TAP_KEY(2, KC_SPACE),
  104. [2] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // tilde
  105. [3] = ACTION_FUNCTION(CTRL_SPACE_I), // Ctrl + Up(SpaceFN) -> PgUp
  106. };