diff --git a/quantum/action_util.c b/quantum/action_util.c index 9fe17f2124b..a466e213ada 100644 --- a/quantum/action_util.c +++ b/quantum/action_util.c @@ -336,6 +336,13 @@ void send_keyboard_report(void) { uint8_t get_mods(void) { return real_mods; } +/** \brief Get mods + * + * FIXME: needs doc + */ +mod_t get_mod_state(void) { + return (mod_t)get_mods(); +} /** \brief add mods * * FIXME: needs doc @@ -372,6 +379,13 @@ void clear_mods(void) { uint8_t get_weak_mods(void) { return weak_mods; } +/** \brief get weak mods + * + * FIXME: needs doc + */ +mod_t get_weak_mod_state(void) { + return (mod_t)get_weak_mods(); +} /** \brief add weak mods * * FIXME: needs doc @@ -434,6 +448,14 @@ uint8_t get_oneshot_mods(void) { return oneshot_mods; } +/** \brief get oneshot mods + * + * FIXME: needs doc + */ +mod_t get_oneshot_mod_state(void) { + return (mod_t)get_oneshot_mods(); +} + void add_oneshot_mods(uint8_t mods) { if ((oneshot_mods & mods) != mods) { # if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0)) diff --git a/quantum/action_util.h b/quantum/action_util.h index d2ecb145bed..994e2f26268 100644 --- a/quantum/action_util.h +++ b/quantum/action_util.h @@ -25,6 +25,20 @@ along with this program. If not, see . 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; + }; +} mod_t; + extern report_keyboard_t *keyboard_report; #ifdef NKRO_ENABLE extern report_nkro_t *nkro_report; @@ -47,6 +61,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 +69,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 +77,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 +85,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);