keymap.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. // Copyright 2023 Peter.Falken (@PeterFalken)
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "peterfalken.h"
  4. enum keymap_layers {
  5. _L0,
  6. _L1,
  7. _L2,
  8. _L3,
  9. _L4,
  10. _L5,
  11. _L6,
  12. _ADJUST
  13. };
  14. // Shorter custom keycodes
  15. #define CK_UNDO LGUI(KC_Z) // UNDO = CMD + Z
  16. #define CK_REDO SGUI(KC_Z) // REDO = CMD + SHIFT + Z
  17. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  18. [_L0] = LAYOUT(
  19. KC_MPLY, KC_9, KC_0, KC_NO,
  20. KC_5, KC_6, KC_7, KC_8,
  21. KC_1, KC_2, KC_3, KC_4,
  22. TO(1), KC_DOT, KC_COMM, _______
  23. ),
  24. [_L1] = LAYOUT(
  25. KC_1, KC_2, KC_3, KC_4,
  26. KC_5, KC_6, KC_7, KC_8,
  27. KC_9, KC_0, KC_A, KC_B,
  28. TO(2), KC_C, KC_D, KC_E
  29. ),
  30. [_L2] = LAYOUT(
  31. _______, _______, _______, _______,
  32. _______, _______, _______, _______,
  33. _______, _______, _______, _______,
  34. TO(3), _______, _______, _______
  35. ),
  36. [_L3] = LAYOUT(
  37. _______, _______, _______, _______,
  38. _______, _______, _______, _______,
  39. _______, _______, _______, _______,
  40. TO(4), _______, _______, _______
  41. ),
  42. [_L4] = LAYOUT(
  43. _______, _______, _______, _______,
  44. _______, _______, _______, _______,
  45. _______, _______, _______, _______,
  46. TO(5), _______, _______, _______
  47. ),
  48. [_L5] = LAYOUT(
  49. _______, _______, _______, _______,
  50. _______, _______, _______, _______,
  51. _______, _______, _______, _______,
  52. TO(6), _______, _______, _______
  53. ),
  54. [_L6] = LAYOUT(
  55. _______, _______, _______, _______,
  56. _______, _______, _______, _______,
  57. _______, _______, _______, _______,
  58. TO(7), _______, _______, _______
  59. ),
  60. [_ADJUST] = LAYOUT(
  61. QK_BOOT, _______, _______, _______,
  62. _______, _______, _______, _______,
  63. _______, _______, _______, _______,
  64. TO(0), _______, _______, _______
  65. ),
  66. };
  67. typedef union {
  68. uint32_t raw;
  69. struct {
  70. uint8_t led_level : 3;
  71. };
  72. } work_louder_config_t;
  73. work_louder_config_t work_louder_config;
  74. #if defined(ENCODER_MAP_ENABLE)
  75. const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
  76. { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(CK_UNDO, CK_REDO) },
  77. { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
  78. { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
  79. { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
  80. { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
  81. { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
  82. { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
  83. { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
  84. };
  85. #endif // defined(ENCODER_MAP_ENABLE)
  86. layer_state_t layer_state_set_user(layer_state_t state) {
  87. // Get highest layer as number
  88. int layer = get_highest_layer(state);
  89. // Toggle leds based on binary layer number [1 2 3]
  90. layer & 0x04 ? work_louder_micro_led_1_on(): work_louder_micro_led_1_off();
  91. layer & 0x02 ? work_louder_micro_led_2_on(): work_louder_micro_led_2_off();
  92. layer & 0x01 ? work_louder_micro_led_3_on(): work_louder_micro_led_3_off();
  93. return state;
  94. }
  95. void eeconfig_init_user(void) {
  96. work_louder_config.raw = 0;
  97. work_louder_config.led_level = 1;
  98. eeconfig_update_user(work_louder_config.raw);
  99. }
  100. void matrix_init_user(void) {
  101. work_louder_config.raw = eeconfig_read_user();
  102. work_louder_micro_led_all_set((uint8_t)(work_louder_config.led_level * 255 / 4));
  103. }