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.

279 lines
8.3 KiB

  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. /** \brief Default Layer State
  12. */
  13. layer_state_t default_layer_state = 0;
  14. /** \brief Default Layer State Set At user Level
  15. *
  16. * Run user code on default layer state change
  17. */
  18. __attribute__((weak)) layer_state_t default_layer_state_set_user(layer_state_t state) { return state; }
  19. /** \brief Default Layer State Set At Keyboard Level
  20. *
  21. * Run keyboard code on default layer state change
  22. */
  23. __attribute__((weak)) layer_state_t default_layer_state_set_kb(layer_state_t state) { return default_layer_state_set_user(state); }
  24. /** \brief Default Layer State Set
  25. *
  26. * Static function to set the default layer state, prints debug info and clears keys
  27. */
  28. static void default_layer_state_set(layer_state_t state) {
  29. state = default_layer_state_set_kb(state);
  30. debug("default_layer_state: ");
  31. default_layer_debug();
  32. debug(" to ");
  33. default_layer_state = state;
  34. default_layer_debug();
  35. debug("\n");
  36. #ifdef STRICT_LAYER_RELEASE
  37. clear_keyboard_but_mods(); // To avoid stuck keys
  38. #else
  39. clear_keyboard_but_mods_and_keys(); // Don't reset held keys
  40. #endif
  41. }
  42. /** \brief Default Layer Print
  43. *
  44. * Print out the hex value of the 32-bit default layer state, as well as the value of the highest bit.
  45. */
  46. void default_layer_debug(void) { dprintf("%08lX(%u)", default_layer_state, get_highest_layer(default_layer_state)); }
  47. /** \brief Default Layer Set
  48. *
  49. * Sets the default layer state.
  50. */
  51. void default_layer_set(layer_state_t state) { default_layer_state_set(state); }
  52. #ifndef NO_ACTION_LAYER
  53. /** \brief Default Layer Or
  54. *
  55. * Turns on the default layer based on matching bits between specifed layer and existing layer state
  56. */
  57. void default_layer_or(layer_state_t state) { default_layer_state_set(default_layer_state | state); }
  58. /** \brief Default Layer And
  59. *
  60. * Turns on default layer based on matching enabled bits between specifed layer and existing layer state
  61. */
  62. void default_layer_and(layer_state_t state) { default_layer_state_set(default_layer_state & state); }
  63. /** \brief Default Layer Xor
  64. *
  65. * Turns on default layer based on non-matching bits between specifed layer and existing layer state
  66. */
  67. void default_layer_xor(layer_state_t state) { default_layer_state_set(default_layer_state ^ state); }
  68. #endif
  69. #ifndef NO_ACTION_LAYER
  70. /** \brief Keymap Layer State
  71. */
  72. layer_state_t layer_state = 0;
  73. /** \brief Layer state set user
  74. *
  75. * Runs user code on layer state change
  76. */
  77. __attribute__((weak)) layer_state_t layer_state_set_user(layer_state_t state) { return state; }
  78. /** \brief Layer state set keyboard
  79. *
  80. * Runs keyboard code on layer state change
  81. */
  82. __attribute__((weak)) layer_state_t layer_state_set_kb(layer_state_t state) { return layer_state_set_user(state); }
  83. /** \brief Layer state set
  84. *
  85. * Sets the layer to match the specifed state (a bitmask)
  86. */
  87. void layer_state_set(layer_state_t state) {
  88. state = layer_state_set_kb(state);
  89. dprint("layer_state: ");
  90. layer_debug();
  91. dprint(" to ");
  92. layer_state = state;
  93. layer_debug();
  94. dprintln();
  95. # ifdef STRICT_LAYER_RELEASE
  96. clear_keyboard_but_mods(); // To avoid stuck keys
  97. # else
  98. clear_keyboard_but_mods_and_keys(); // Don't reset held keys
  99. # endif
  100. }
  101. /** \brief Layer clear
  102. *
  103. * Turn off all layers
  104. */
  105. void layer_clear(void) { layer_state_set(0); }
  106. /** \brief Layer state is
  107. *
  108. * Return whether the given state is on (it might still be shadowed by a higher state, though)
  109. */
  110. bool layer_state_is(uint8_t layer) { return layer_state_cmp(layer_state, layer); }
  111. /** \brief Layer state compare
  112. *
  113. * Used for comparing layers {mostly used for unit testing}
  114. */
  115. bool layer_state_cmp(layer_state_t cmp_layer_state, uint8_t layer) {
  116. if (!cmp_layer_state) {
  117. return layer == 0;
  118. }
  119. return (cmp_layer_state & ((layer_state_t)1 << layer)) != 0;
  120. }
  121. /** \brief Layer move
  122. *
  123. * Turns on the given layer and turn off all other layers
  124. */
  125. void layer_move(uint8_t layer) { layer_state_set((layer_state_t)1 << layer); }
  126. /** \brief Layer on
  127. *
  128. * Turns on given layer
  129. */
  130. void layer_on(uint8_t layer) { layer_state_set(layer_state | ((layer_state_t)1 << layer)); }
  131. /** \brief Layer off
  132. *
  133. * Turns off given layer
  134. */
  135. void layer_off(uint8_t layer) { layer_state_set(layer_state & ~((layer_state_t)1 << layer)); }
  136. /** \brief Layer invert
  137. *
  138. * Toggle the given layer (set it if it's unset, or unset it if it's set)
  139. */
  140. void layer_invert(uint8_t layer) { layer_state_set(layer_state ^ ((layer_state_t)1 << layer)); }
  141. /** \brief Layer or
  142. *
  143. * Turns on layers based on matching bits between specifed layer and existing layer state
  144. */
  145. void layer_or(layer_state_t state) { layer_state_set(layer_state | state); }
  146. /** \brief Layer and
  147. *
  148. * Turns on layers based on matching enabled bits between specifed layer and existing layer state
  149. */
  150. void layer_and(layer_state_t state) { layer_state_set(layer_state & state); }
  151. /** \brief Layer xor
  152. *
  153. * Turns on layers based on non-matching bits between specifed layer and existing layer state
  154. */
  155. void layer_xor(layer_state_t state) { layer_state_set(layer_state ^ state); }
  156. /** \brief Layer debug printing
  157. *
  158. * Print out the hex value of the 32-bit layer state, as well as the value of the highest bit.
  159. */
  160. void layer_debug(void) { dprintf("%08lX(%u)", layer_state, get_highest_layer(layer_state)); }
  161. #endif
  162. #if !defined(NO_ACTION_LAYER) && !defined(STRICT_LAYER_RELEASE)
  163. /** \brief source layer cache
  164. */
  165. uint8_t source_layers_cache[(MATRIX_ROWS * MATRIX_COLS + 7) / 8][MAX_LAYER_BITS] = {{0}};
  166. /** \brief update source layers cache
  167. *
  168. * Updates the cached keys when changing layers
  169. */
  170. void update_source_layers_cache(keypos_t key, uint8_t layer) {
  171. const uint8_t key_number = key.col + (key.row * MATRIX_COLS);
  172. const uint8_t storage_row = key_number / 8;
  173. const uint8_t storage_bit = key_number % 8;
  174. for (uint8_t bit_number = 0; bit_number < MAX_LAYER_BITS; bit_number++) {
  175. source_layers_cache[storage_row][bit_number] ^= (-((layer & (1U << bit_number)) != 0) ^ source_layers_cache[storage_row][bit_number]) & (1U << storage_bit);
  176. }
  177. }
  178. /** \brief read source layers cache
  179. *
  180. * reads the cached keys stored when the layer was changed
  181. */
  182. uint8_t read_source_layers_cache(keypos_t key) {
  183. const uint8_t key_number = key.col + (key.row * MATRIX_COLS);
  184. const uint8_t storage_row = key_number / 8;
  185. const uint8_t storage_bit = key_number % 8;
  186. uint8_t layer = 0;
  187. for (uint8_t bit_number = 0; bit_number < MAX_LAYER_BITS; bit_number++) {
  188. layer |= ((source_layers_cache[storage_row][bit_number] & (1U << storage_bit)) != 0) << bit_number;
  189. }
  190. return layer;
  191. }
  192. #endif
  193. /** \brief Store or get action (FIXME: Needs better summary)
  194. *
  195. * Make sure the action triggered when the key is released is the same
  196. * one as the one triggered on press. It's important for the mod keys
  197. * when the layer is switched after the down event but before the up
  198. * event as they may get stuck otherwise.
  199. */
  200. action_t store_or_get_action(bool pressed, keypos_t key) {
  201. #if !defined(NO_ACTION_LAYER) && !defined(STRICT_LAYER_RELEASE)
  202. if (disable_action_cache) {
  203. return layer_switch_get_action(key);
  204. }
  205. uint8_t layer;
  206. if (pressed) {
  207. layer = layer_switch_get_layer(key);
  208. update_source_layers_cache(key, layer);
  209. } else {
  210. layer = read_source_layers_cache(key);
  211. }
  212. return action_for_key(layer, key);
  213. #else
  214. return layer_switch_get_action(key);
  215. #endif
  216. }
  217. /** \brief Layer switch get layer
  218. *
  219. * Gets the layer based on key info
  220. */
  221. uint8_t layer_switch_get_layer(keypos_t key) {
  222. #ifndef NO_ACTION_LAYER
  223. action_t action;
  224. action.code = ACTION_TRANSPARENT;
  225. layer_state_t layers = layer_state | default_layer_state;
  226. /* check top layer first */
  227. for (int8_t i = MAX_LAYER - 1; i >= 0; i--) {
  228. if (layers & ((layer_state_t)1 << i)) {
  229. action = action_for_key(i, key);
  230. if (action.code != ACTION_TRANSPARENT) {
  231. return i;
  232. }
  233. }
  234. }
  235. /* fall back to layer 0 */
  236. return 0;
  237. #else
  238. return get_highest_layer(default_layer_state);
  239. #endif
  240. }
  241. /** \brief Layer switch get layer
  242. *
  243. * Gets action code based on key position
  244. */
  245. action_t layer_switch_get_action(keypos_t key) { return action_for_key(layer_switch_get_layer(key), key); }