mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-25 03:29:58 -07:00
Merge remote-tracking branch 'ofw/dev' into mntm-dev
This commit is contained in:
@@ -42,11 +42,8 @@ static const uint8_t numpad_keys[10] = {
|
||||
};
|
||||
|
||||
uint32_t ducky_get_command_len(const char* line) {
|
||||
uint32_t len = strlen(line);
|
||||
for(uint32_t i = 0; i < len; i++) {
|
||||
if(line[i] == ' ') return i;
|
||||
}
|
||||
return 0;
|
||||
char* first_space = strchr(line, ' ');
|
||||
return first_space ? (first_space - line) : 0;
|
||||
}
|
||||
|
||||
bool ducky_is_line_end(const char chr) {
|
||||
@@ -182,42 +179,46 @@ static bool ducky_string_next(BadUsbScript* bad_usb) {
|
||||
|
||||
static int32_t ducky_parse_line(BadUsbScript* bad_usb, FuriString* line) {
|
||||
uint32_t line_len = furi_string_size(line);
|
||||
const char* line_tmp = furi_string_get_cstr(line);
|
||||
const char* line_cstr = furi_string_get_cstr(line);
|
||||
|
||||
if(line_len == 0) {
|
||||
return SCRIPT_STATE_NEXT_LINE; // Skip empty lines
|
||||
}
|
||||
FURI_LOG_D(WORKER_TAG, "line:%s", line_tmp);
|
||||
FURI_LOG_D(WORKER_TAG, "line:%s", line_cstr);
|
||||
|
||||
// Ducky Lang Functions
|
||||
int32_t cmd_result = ducky_execute_cmd(bad_usb, line_tmp);
|
||||
int32_t cmd_result = ducky_execute_cmd(bad_usb, line_cstr);
|
||||
if(cmd_result != SCRIPT_STATE_CMD_UNKNOWN) {
|
||||
return cmd_result;
|
||||
}
|
||||
|
||||
// Mouse Keys
|
||||
uint16_t key = ducky_get_mouse_keycode_by_name(line_tmp);
|
||||
uint16_t key = ducky_get_mouse_keycode_by_name(line_cstr);
|
||||
if(key != HID_MOUSE_INVALID) {
|
||||
bad_usb->hid->mouse_press(bad_usb->hid_inst, key);
|
||||
bad_usb->hid->mouse_release(bad_usb->hid_inst, key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Special keys + modifiers
|
||||
key = ducky_get_keycode(bad_usb, line_tmp, false);
|
||||
if(key == HID_KEYBOARD_NONE) {
|
||||
return ducky_error(bad_usb, "No keycode defined for %s", line_tmp);
|
||||
}
|
||||
if((key & 0xFF00) != 0) {
|
||||
// It's a modifier key
|
||||
uint32_t offset = ducky_get_command_len(line_tmp) + 1;
|
||||
// ducky_get_command_len() returns 0 without space, so check for != 1
|
||||
if(offset != 1 && line_len > offset) {
|
||||
// It's also a key combination
|
||||
line_tmp = &line_tmp[offset];
|
||||
key |= ducky_get_keycode(bad_usb, line_tmp, true);
|
||||
}
|
||||
// Parse chain of modifiers linked by spaces and hyphens
|
||||
uint16_t modifiers = 0;
|
||||
while(1) {
|
||||
key = ducky_get_next_modifier_keycode_by_name(&line_cstr);
|
||||
if(key == HID_KEYBOARD_NONE) break;
|
||||
|
||||
modifiers |= key;
|
||||
char next_char = *line_cstr;
|
||||
if(next_char == ' ' || next_char == '-') line_cstr++;
|
||||
}
|
||||
|
||||
// Main key
|
||||
char next_char = *line_cstr;
|
||||
uint16_t main_key = ducky_get_keycode_by_name(line_cstr);
|
||||
if(!main_key && next_char) main_key = BADUSB_ASCII_TO_KEY(bad_usb, next_char);
|
||||
key = modifiers | main_key;
|
||||
|
||||
if(key == 0 && next_char) ducky_error(bad_usb, "No keycode defined for %s", line_cstr);
|
||||
|
||||
bad_usb->hid->kb_press(bad_usb->hid_inst, key);
|
||||
bad_usb->hid->kb_release(bad_usb->hid_inst, key);
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user