logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

action_layer.c (11215B)


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