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.

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