@ -29,6 +29,7 @@ static inline void del_key_bit(uint8_t code);
static uint8_t real_mods = 0 ;
static uint8_t real_mods = 0 ;
static uint8_t weak_mods = 0 ;
static uint8_t weak_mods = 0 ;
static uint8_t macro_mods = 0 ;
# ifdef USB_6KRO_ENABLE
# ifdef USB_6KRO_ENABLE
# define RO_ADD(a, b) ((a + b) % KEYBOARD_REPORT_KEYS)
# define RO_ADD(a, b) ((a + b) % KEYBOARD_REPORT_KEYS)
@ -55,6 +56,7 @@ static int16_t oneshot_time = 0;
void send_keyboard_report ( void ) {
void send_keyboard_report ( void ) {
keyboard_report - > mods = real_mods ;
keyboard_report - > mods = real_mods ;
keyboard_report - > mods | = weak_mods ;
keyboard_report - > mods | = weak_mods ;
keyboard_report - > mods | = macro_mods ;
# ifndef NO_ACTION_ONESHOT
# ifndef NO_ACTION_ONESHOT
if ( oneshot_mods ) {
if ( oneshot_mods ) {
# if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
# if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
@ -118,6 +120,13 @@ void del_weak_mods(uint8_t mods) { weak_mods &= ~mods; }
void set_weak_mods ( uint8_t mods ) { weak_mods = mods ; }
void set_weak_mods ( uint8_t mods ) { weak_mods = mods ; }
void clear_weak_mods ( void ) { weak_mods = 0 ; }
void clear_weak_mods ( void ) { weak_mods = 0 ; }
/* macro modifier */
uint8_t get_macro_mods ( void ) { return macro_mods ; }
void add_macro_mods ( uint8_t mods ) { macro_mods | = mods ; }
void del_macro_mods ( uint8_t mods ) { macro_mods & = ~ mods ; }
void set_macro_mods ( uint8_t mods ) { macro_mods = mods ; }
void clear_macro_mods ( void ) { macro_mods = 0 ; }
/* Oneshot modifier */
/* Oneshot modifier */
# ifndef NO_ACTION_ONESHOT
# ifndef NO_ACTION_ONESHOT
void set_oneshot_mods ( uint8_t mods )
void set_oneshot_mods ( uint8_t mods )