Merge remote-tracking branch 'qmk/master' into merge-2023-12-16

This commit is contained in:
Ilya Zhuravlev
2023-12-16 10:48:34 -06:00
6566 changed files with 124240 additions and 243032 deletions

View File

@ -36,6 +36,9 @@ static uint8_t suppressed_mods = 0;
// TODO: pointer variable is not needed
// report_keyboard_t keyboard_report = {};
report_keyboard_t *keyboard_report = &(report_keyboard_t){};
#ifdef NKRO_ENABLE
report_nkro_t *nkro_report = &(report_nkro_t){};
#endif
extern inline void add_key(uint8_t key);
extern inline void del_key(uint8_t key);
@ -237,34 +240,36 @@ bool is_oneshot_enabled(void) {
#endif
/** \brief Send keyboard report
*
* FIXME: needs doc
*/
void send_keyboard_report(void) {
keyboard_report->mods = real_mods;
keyboard_report->mods |= weak_mods;
static uint8_t get_mods_for_report(void) {
uint8_t mods = real_mods | weak_mods;
#ifndef NO_ACTION_ONESHOT
if (oneshot_mods) {
if (QS_oneshot_timeout > 0 && has_oneshot_mods_timed_out()) {
if (QS_oneshot_timeout > 0) {
if (has_oneshot_mods_timed_out()) {
dprintf("Oneshot: timeout\n");
clear_oneshot_mods();
}
keyboard_report->mods |= oneshot_mods;
if (has_anykey(keyboard_report)) {
}
mods |= oneshot_mods;
if (has_anykey()) {
clear_oneshot_mods();
}
}
#endif
#ifdef KEY_OVERRIDE_ENABLE
// These need to be last to be able to properly control key overrides
keyboard_report->mods &= ~suppressed_mods;
keyboard_report->mods |= weak_override_mods;
mods &= ~suppressed_mods;
mods |= weak_override_mods;
#endif
return mods;
}
void send_6kro_report(void) {
keyboard_report->mods = get_mods_for_report();
#ifdef PROTOCOL_VUSB
host_keyboard_send(keyboard_report);
#else
@ -278,6 +283,36 @@ void send_keyboard_report(void) {
#endif
}
#ifdef NKRO_ENABLE
void send_nkro_report(void) {
nkro_report->mods = get_mods_for_report();
static report_nkro_t last_report;
/* Only send the report if there are changes to propagate to the host. */
if (memcmp(nkro_report, &last_report, sizeof(report_nkro_t)) != 0) {
memcpy(&last_report, nkro_report, sizeof(report_nkro_t));
host_nkro_send(nkro_report);
}
}
#endif
/** \brief Send keyboard report
*
* FIXME: needs doc
*/
void send_keyboard_report(void) {
#ifdef NKRO_ENABLE
if (keyboard_protocol && keymap_config.nkro) {
send_nkro_report();
} else {
send_6kro_report();
}
#else
send_6kro_report();
#endif
}
/** \brief Get mods
*
* FIXME: needs doc