logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

keymap.c (3405B)


  1. #include QMK_KEYBOARD_H
  2. #include "led.h"
  3. // This is the 21-key keypad to 2x11 element matrix mapping
  4. #define LAYOUT_pad21( \
  5. k00, k01, k02, k03, \
  6. k10, k11, k12, k13, \
  7. k04, k05, k06, \
  8. k14, k15, k16, k07, \
  9. k08, k09, k0A, \
  10. k19, k1A, k17 \
  11. ) { \
  12. { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A }, \
  13. { k10, k11, k12, k13, k14, k15, k16, k17, KC_NO, k19, k1A } \
  14. }
  15. enum layers {
  16. LAYER_BASE,
  17. LAYER_EDIT,
  18. LAYER_FUNCTION
  19. };
  20. enum custom_keycodes {
  21. M_COPY = SAFE_RANGE, // KC_FN5: MACRO_COPY_CUT
  22. M_SHFCT, // KC_FN6: MACRO_SHIFT_CONTROL
  23. M_CTALT // KC_FN7: MACRO_CONTROL_ALT
  24. };
  25. #define SC_UNDO LCTL(KC_Z)
  26. #define SC_REDO LCTL(KC_Y)
  27. #define SC_CUT LCTL(KC_X)
  28. #define SC_COPY LCTL(KC_C)
  29. #define SC_PSTE LCTL(KC_V)
  30. #define SC_SELA LCTL(KC_A)
  31. #define SC_SAVE LCTL(KC_S)
  32. #define SC_OPEN LCTL(KC_O)
  33. #define SC_ACLS LALT(KC_F4)
  34. #define SC_CCLS LCTL(KC_F4)
  35. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  36. [LAYER_BASE] = LAYOUT_pad21(
  37. KC_ESC, KC_TAB, KC_BSLS, MO(2),
  38. KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
  39. KC_P7, KC_P8, KC_P9,
  40. KC_P4, KC_P5, KC_P6, KC_PPLS,
  41. KC_P1, KC_P2, KC_P3,
  42. KC_P0, KC_PDOT, KC_PENT ),
  43. [LAYER_EDIT] = LAYOUT_pad21(
  44. KC_ESC, KC_TAB, KC_SPC, _______,
  45. TG(1), SC_PSTE, SC_REDO, SC_UNDO,
  46. KC_HOME, KC_UP, KC_PGUP,
  47. KC_LEFT, M_COPY, KC_RGHT, M_CTALT,
  48. KC_END, KC_DOWN, KC_PGDN,
  49. KC_BSPC, KC_DEL, M_SHFCT),
  50. [LAYER_FUNCTION] = LAYOUT_pad21(
  51. BL_TOGG, BL_UP, BL_DOWN, _______,
  52. TG(1), _______, _______, _______,
  53. _______, _______, _______,
  54. _______, _______, _______, _______,
  55. _______, _______, _______,
  56. QK_BOOT, _______, _______ ),
  57. };
  58. bool process_record_user(uint16_t keycode, keyrecord_t * record) {
  59. // MACRODOWN only works in this function
  60. switch (keycode) {
  61. case M_COPY:
  62. if (record->event.pressed) {
  63. register_code(KC_LCTL);
  64. if (record->tap.count == 1) {
  65. register_code(KC_C);
  66. unregister_code(KC_C);
  67. } else if (record->tap.count == 2) {
  68. register_code(KC_X);
  69. unregister_code(KC_X);
  70. }
  71. unregister_code(KC_LCTL);
  72. }
  73. break;
  74. case M_SHFCT:
  75. if (record->event.pressed) {
  76. if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
  77. if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
  78. if (record->tap.count == 3) register_code(KC_PENT);;
  79. } else {
  80. unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
  81. unregister_code(KC_PENT);
  82. }
  83. break;
  84. case M_CTALT:
  85. if (record->event.pressed) {
  86. if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
  87. if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
  88. } else {
  89. unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
  90. }
  91. break;
  92. }
  93. return true;
  94. }
  95. bool led_update_user(led_t led_state)
  96. {
  97. if (led_state.caps_lock) {
  98. // output high
  99. gpio_set_pin_output(D6);
  100. gpio_write_pin_high(D6);
  101. } else {
  102. // Hi-Z
  103. gpio_set_pin_input(D6);
  104. }
  105. if (led_state.num_lock) {
  106. // output low
  107. gpio_set_pin_output(C7);
  108. gpio_write_pin_low(C7);
  109. } else {
  110. // Hi-Z
  111. gpio_set_pin_input(C7);
  112. }
  113. return false;
  114. }