diff options
Diffstat (limited to 'tmk_core/common/report.c')
-rw-r--r-- | tmk_core/common/report.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/tmk_core/common/report.c b/tmk_core/common/report.c index f4758b48ec..f4cdca7281 100644 --- a/tmk_core/common/report.c +++ b/tmk_core/common/report.c @@ -68,6 +68,32 @@ uint8_t get_first_key(report_keyboard_t* keyboard_report) { #endif } +/** \brief Checks if a key is pressed in the report + * + * Returns true if the keyboard_report reports that the key is pressed, otherwise false + * Note: The function doesn't support modifers currently, and it returns false for KC_NO + */ +bool is_key_pressed(report_keyboard_t* keyboard_report, uint8_t key) { + if (key == KC_NO) { + return false; + } +#ifdef NKRO_ENABLE + if (keyboard_protocol && keymap_config.nkro) { + if ((key>>3) < KEYBOARD_REPORT_BITS) { + return keyboard_report->nkro.bits[key>>3] & 1<<(key&7); + } else { + return false; + } + } +#endif + for (int i=0; i < KEYBOARD_REPORT_KEYS; i++) { + if (keyboard_report->keys[i] == key) { + return true; + } + } + return false; +} + /** \brief add key byte * * FIXME: Needs doc |