From 68746193a0d7ccd24910fb193d39e1cc73ae9927 Mon Sep 17 00:00:00 2001 From: oldip Date: Mon, 18 Mar 2024 16:01:13 +0800 Subject: [PATCH] Fix dynamic construction of NUMPAD keycodes in altPrintln --- .../system/js_app/modules/js_badusb.c | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/applications/system/js_app/modules/js_badusb.c b/applications/system/js_app/modules/js_badusb.c index e26919593..c2acd553a 100644 --- a/applications/system/js_app/modules/js_badusb.c +++ b/applications/system/js_app/modules/js_badusb.c @@ -412,20 +412,24 @@ static void js_badusb_altPrintln(struct mjs* mjs) { for(size_t i = 0; i < str_len; ++i) { uint8_t ascii_code = (uint8_t)str[i]; - // Convert each character's ASCII code to a series of Numpad key presses with ALT key - char ascii_str[5]; // Enough to hold up to 4 digits plus a null terminator + // Convert the ASCII code of each character into a string of digits + char ascii_str[5]; // Sufficient to hold up to 4 digits plus a null terminator snprintf(ascii_str, sizeof(ascii_str), "%u", ascii_code); - // For each digit of the ASCII code, simulate pressing ALT + Numpad key - furi_hal_hid_kb_press(KEY_MOD_LEFT_ALT); for(size_t j = 0; ascii_str[j] != '\0'; ++j) { - uint16_t keycode = get_keycode_by_name((const char[]){"NUMPAD_", ascii_str[j], '\0'}, 3); + // Construct the keycode name string for the current digit + char keycode_name[11]; // "NUMPAD_" + one digit + '\0' + snprintf(keycode_name, sizeof(keycode_name), "NUMPAD_%c", ascii_str[j]); + + // Find the corresponding keycode for the Numpad key + uint16_t keycode = get_keycode_by_name(keycode_name, strlen(keycode_name)); if(keycode != HID_KEYBOARD_NONE) { - furi_hal_hid_kb_press(keycode); // Press the Numpad key - furi_hal_hid_kb_release(keycode); // Release the Numpad key + furi_hal_hid_kb_press(KEY_MOD_LEFT_ALT); // Press the ALT key + furi_hal_hid_kb_press(keycode); // Press the Numpad key + furi_hal_hid_kb_release(keycode); // Release the Numpad key + furi_hal_hid_kb_release(KEY_MOD_LEFT_ALT); // Release the ALT key } } - furi_hal_hid_kb_release(KEY_MOD_LEFT_ALT); // Release the ALT key after each character } // Simulate pressing the Enter key to mimic println behavior