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.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 10 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 10 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
преди 10 години
преди 11 години
преди 11 години
преди 11 години
преди 11 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #include <stdint.h>
  2. #include "keyboard.h"
  3. #include "action.h"
  4. #include "util.h"
  5. #include "action_layer.h"
  6. #ifdef DEBUG_ACTION
  7. #include "debug.h"
  8. #else
  9. #include "nodebug.h"
  10. #endif
  11. /*
  12. * Default Layer State
  13. */
  14. uint32_t default_layer_state = 0;
  15. static void default_layer_state_set(uint32_t state)
  16. {
  17. debug("default_layer_state: ");
  18. default_layer_debug(); debug(" to ");
  19. default_layer_state = state;
  20. default_layer_debug(); debug("\n");
  21. #ifdef LEDMAP_ENABLE
  22. default_layer_state_change(state);
  23. #endif
  24. clear_keyboard_but_mods(); // To avoid stuck keys
  25. }
  26. void default_layer_debug(void)
  27. {
  28. dprintf("%08lX(%u)", default_layer_state, biton32(default_layer_state));
  29. }
  30. void default_layer_set(uint32_t state)
  31. {
  32. default_layer_state_set(state);
  33. }
  34. #ifndef NO_ACTION_LAYER
  35. void default_layer_or(uint32_t state)
  36. {
  37. default_layer_state_set(default_layer_state | state);
  38. }
  39. void default_layer_and(uint32_t state)
  40. {
  41. default_layer_state_set(default_layer_state & state);
  42. }
  43. void default_layer_xor(uint32_t state)
  44. {
  45. default_layer_state_set(default_layer_state ^ state);
  46. }
  47. #endif
  48. #ifndef NO_ACTION_LAYER
  49. /*
  50. * Keymap Layer State
  51. */
  52. uint32_t layer_state = 0;
  53. static void layer_state_set(uint32_t state)
  54. {
  55. dprint("layer_state: ");
  56. layer_debug(); dprint(" to ");
  57. layer_state = state;
  58. layer_debug(); dprintln();
  59. #ifdef LEDMAP_ENABLE
  60. layer_state_change(state);
  61. #endif
  62. clear_keyboard_but_mods(); // To avoid stuck keys
  63. }
  64. void layer_clear(void)
  65. {
  66. layer_state_set(0);
  67. }
  68. void layer_move(uint8_t layer)
  69. {
  70. layer_state_set(1UL<<layer);
  71. }
  72. void layer_on(uint8_t layer)
  73. {
  74. layer_state_set(layer_state | (1UL<<layer));
  75. }
  76. void layer_off(uint8_t layer)
  77. {
  78. layer_state_set(layer_state & ~(1UL<<layer));
  79. }
  80. void layer_invert(uint8_t layer)
  81. {
  82. layer_state_set(layer_state ^ (1UL<<layer));
  83. }
  84. void layer_or(uint32_t state)
  85. {
  86. layer_state_set(layer_state | state);
  87. }
  88. void layer_and(uint32_t state)
  89. {
  90. layer_state_set(layer_state & state);
  91. }
  92. void layer_xor(uint32_t state)
  93. {
  94. layer_state_set(layer_state ^ state);
  95. }
  96. void layer_debug(void)
  97. {
  98. dprintf("%08lX(%u)", layer_state, biton32(layer_state));
  99. }
  100. #endif
  101. action_t layer_switch_get_action(keypos_t key)
  102. {
  103. action_t action;
  104. action.code = ACTION_TRANSPARENT;
  105. #ifndef NO_ACTION_LAYER
  106. uint32_t layers = layer_state | default_layer_state;
  107. /* check top layer first */
  108. for (int8_t i = 31; i >= 0; i--) {
  109. if (layers & (1UL<<i)) {
  110. action = action_for_key(i, key);
  111. if (action.code != ACTION_TRANSPARENT) {
  112. return action;
  113. }
  114. }
  115. }
  116. /* fall back to layer 0 */
  117. action = action_for_key(0, key);
  118. return action;
  119. #else
  120. action = action_for_key(biton32(default_layer_state), key);
  121. return action;
  122. #endif
  123. }