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.

357 lines
9.9 KiB

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