diff options
| author | Pablo MartÃnez | 2025-09-30 16:52:43 +0200 |
|---|---|---|
| committer | GitHub | 2025-09-30 16:52:43 +0200 |
| commit | bbd6e8ab340bb4b3f25671fea59fd608397e8a34 (patch) | |
| tree | 0e23e03f465054450bc4a950e427622b881ef9e8 /quantum/action_util.h | |
| parent | 24bc4aef03ea3aec8cdb515ffe0942e4f6939c4a (diff) | |
[Feature] Implement `mod_t` packed struct (#25168)
Diffstat (limited to 'quantum/action_util.h')
| -rw-r--r-- | quantum/action_util.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/quantum/action_util.h b/quantum/action_util.h index d2ecb145be..8b1974cd32 100644 --- a/quantum/action_util.h +++ b/quantum/action_util.h @@ -18,6 +18,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #pragma once #include <stdint.h> + +#include "compiler_support.h" #include "report.h" #include "modifiers.h" @@ -25,6 +27,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. extern "C" { #endif +typedef union { + uint8_t raw; + struct { + bool left_ctrl : 1; + bool left_shift : 1; + bool left_alt : 1; + bool left_gui : 1; + bool right_ctrl : 1; + bool right_shift : 1; + bool right_alt : 1; + bool right_gui : 1; + }; +} PACKED mod_t; +STATIC_ASSERT(sizeof(mod_t) == sizeof(uint8_t), "Invalid size for 'mod_t'"); + extern report_keyboard_t *keyboard_report; #ifdef NKRO_ENABLE extern report_nkro_t *nkro_report; @@ -47,6 +64,7 @@ inline void clear_keys(void) { /* modifier */ uint8_t get_mods(void); +mod_t get_mod_state(void); void add_mods(uint8_t mods); void del_mods(uint8_t mods); void set_mods(uint8_t mods); @@ -54,6 +72,7 @@ void clear_mods(void); /* weak modifier */ uint8_t get_weak_mods(void); +mod_t get_weak_mod_state(void); void add_weak_mods(uint8_t mods); void del_weak_mods(uint8_t mods); void set_weak_mods(uint8_t mods); @@ -61,6 +80,7 @@ void clear_weak_mods(void); /* oneshot modifier */ uint8_t get_oneshot_mods(void); +mod_t get_oneshot_mod_state(void); void add_oneshot_mods(uint8_t mods); void del_oneshot_mods(uint8_t mods); void set_oneshot_mods(uint8_t mods); @@ -68,6 +88,7 @@ void clear_oneshot_mods(void); bool has_oneshot_mods_timed_out(void); uint8_t get_oneshot_locked_mods(void); +mod_t get_oneshot_locked_mod_state(void); void add_oneshot_locked_mods(uint8_t mods); void set_oneshot_locked_mods(uint8_t mods); void clear_oneshot_locked_mods(void); |