diff --git a/applications/main/bad_kb/bad_kb_app.c b/applications/main/bad_kb/bad_kb_app.c index e93644a3f..03b941cd3 100644 --- a/applications/main/bad_kb/bad_kb_app.c +++ b/applications/main/bad_kb/bad_kb_app.c @@ -102,9 +102,13 @@ int32_t bad_kb_config_switch_mode(BadKbApp* app) { XTREME_SETTINGS_SAVE(); bad_kb_reload_worker(app); if(app->is_bt) furi_hal_bt_start_advertising(); + bad_kb_config_refresh_menu(app); + return 0; +} + +void bad_kb_config_refresh_menu(BadKbApp* app) { scene_manager_next_scene(app->scene_manager, BadKbSceneConfig); scene_manager_previous_scene(app->scene_manager); - return 0; } void bad_kb_config_switch_remember_mode(BadKbApp* app) { diff --git a/applications/main/bad_kb/helpers/ducky_script.c b/applications/main/bad_kb/helpers/ducky_script.c index 0c2bbf5d6..99754c5fe 100644 --- a/applications/main/bad_kb/helpers/ducky_script.c +++ b/applications/main/bad_kb/helpers/ducky_script.c @@ -386,9 +386,11 @@ static bool ducky_script_preload(BadKbScript* bad_kb, File* script_file) { bad_kb->app->switch_mode_thread = NULL; } // Looking for ID or BT_ID command at first line - bool usb_id = false; - bool bt_id = false; - if(strncmp(line_tmp, ducky_cmd_id, strlen(ducky_cmd_id)) == 0) { + bad_kb->set_usb_id = false; + bad_kb->set_bt_id = false; + bad_kb->has_usb_id = strncmp(line_tmp, ducky_cmd_id, strlen(ducky_cmd_id)) == 0; + bad_kb->has_bt_id = strncmp(line_tmp, ducky_cmd_bt_id, strlen(ducky_cmd_bt_id)) == 0; + if(bad_kb->has_usb_id) { if(bad_kb->bt) { bad_kb->app->is_bt = false; bad_kb->app->switch_mode_thread = furi_thread_alloc_ex( @@ -399,8 +401,8 @@ static bool ducky_script_preload(BadKbScript* bad_kb, File* script_file) { furi_thread_start(bad_kb->app->switch_mode_thread); return false; } - usb_id = ducky_set_usb_id(bad_kb, &line_tmp[strlen(ducky_cmd_id) + 1]); - } else if(strncmp(line_tmp, ducky_cmd_bt_id, strlen(ducky_cmd_bt_id)) == 0) { + bad_kb->set_usb_id = ducky_set_usb_id(bad_kb, &line_tmp[strlen(ducky_cmd_id) + 1]); + } else if(bad_kb->has_bt_id) { if(!bad_kb->bt) { bad_kb->app->is_bt = true; bad_kb->app->switch_mode_thread = furi_thread_alloc_ex( @@ -412,12 +414,13 @@ static bool ducky_script_preload(BadKbScript* bad_kb, File* script_file) { return false; } if(!bad_kb->app->bt_remember) { - bt_id = ducky_set_bt_id(bad_kb, &line_tmp[strlen(ducky_cmd_bt_id) + 1]); + bad_kb->set_bt_id = ducky_set_bt_id(bad_kb, &line_tmp[strlen(ducky_cmd_bt_id) + 1]); } } + bad_kb_config_refresh_menu(bad_kb->app); if(bad_kb->bt) { - if(!bt_id) { + if(!bad_kb->set_bt_id) { const char* bt_name = bad_kb->app->config.bt_name; const uint8_t* bt_mac = bad_kb->app->bt_remember ? (uint8_t*)&BAD_KB_BOUND_MAC_ADDRESS : @@ -440,7 +443,7 @@ static bool ducky_script_preload(BadKbScript* bad_kb, File* script_file) { } } } else { - if(usb_id) { + if(bad_kb->set_usb_id) { furi_check(furi_hal_usb_set_config(&usb_hid, &bad_kb->hid_cfg)); } else { furi_check(furi_hal_usb_set_config(&usb_hid, NULL)); diff --git a/applications/main/bad_kb/helpers/ducky_script.h b/applications/main/bad_kb/helpers/ducky_script.h index 015586b2e..6c0098524 100644 --- a/applications/main/bad_kb/helpers/ducky_script.h +++ b/applications/main/bad_kb/helpers/ducky_script.h @@ -82,6 +82,11 @@ typedef struct { FuriString* string_print; size_t string_print_pos; + bool set_usb_id; + bool set_bt_id; + bool has_usb_id; + bool has_bt_id; + Bt* bt; BadKbApp* app; } BadKbScript; @@ -147,6 +152,8 @@ struct BadKbApp { int32_t bad_kb_config_switch_mode(BadKbApp* app); +void bad_kb_config_refresh_menu(BadKbApp* app); + #ifdef __cplusplus } #endif diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config.c b/applications/main/bad_kb/scenes/bad_kb_scene_config.c index 3f16a4c48..e029d052e 100644 --- a/applications/main/bad_kb/scenes/bad_kb_scene_config.c +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config.c @@ -45,28 +45,36 @@ void bad_kb_scene_config_on_enter(void* context) { var_item_list, "Connection", 2, bad_kb_scene_config_connection_callback, bad_kb); variable_item_set_current_value_index(item, bad_kb->is_bt); variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); - - item = variable_item_list_add( - var_item_list, "BT Remember", 2, bad_kb_scene_config_bt_remember_callback, bad_kb); - variable_item_set_current_value_index(item, bad_kb->bt_remember); - variable_item_set_current_value_text(item, bad_kb->bt_remember ? "ON" : "OFF"); - variable_item_set_locked(item, !bad_kb->is_bt, "Only in\nBT mode!"); - - item = variable_item_list_add(var_item_list, "BT Device Name", 0, NULL, bad_kb); - variable_item_set_locked(item, !bad_kb->is_bt, "Only in\nBT mode!"); - - item = variable_item_list_add(var_item_list, "BT MAC Address", 0, NULL, bad_kb); - if(!bad_kb->is_bt) { - variable_item_set_locked(item, true, "Only in\nBT mode!"); - } else if(bad_kb->bt_remember) { - variable_item_set_locked(item, true, "Remember\nmust be Off!"); + if(bad_kb->bad_kb_script->has_usb_id) { + variable_item_set_locked(item, true, "Script has\nID cmd!\nLocked to\nUSB Mode!"); + } else if(bad_kb->bad_kb_script->has_bt_id) { + variable_item_set_locked(item, true, "Script has\nBT_ID cmd!\nLocked to\nBT Mode!"); } - item = variable_item_list_add(var_item_list, "Randomize BT MAC", 0, NULL, bad_kb); - if(!bad_kb->is_bt) { - variable_item_set_locked(item, true, "Only in\nBT mode!"); - } else if(bad_kb->bt_remember) { - variable_item_set_locked(item, true, "Remember\nmust be Off!"); + if(bad_kb->is_bt) { + item = variable_item_list_add( + var_item_list, "BT Remember", 2, bad_kb_scene_config_bt_remember_callback, bad_kb); + variable_item_set_current_value_index(item, bad_kb->bt_remember); + variable_item_set_current_value_text(item, bad_kb->bt_remember ? "ON" : "OFF"); + + item = variable_item_list_add(var_item_list, "BT Device Name", 0, NULL, bad_kb); + if(bad_kb->bad_kb_script->set_bt_id) { + variable_item_set_locked(item, true, "Script has\nBT_ID cmd!\nLocked to\nset Name!"); + } + + item = variable_item_list_add(var_item_list, "BT MAC Address", 0, NULL, bad_kb); + if(bad_kb->bt_remember) { + variable_item_set_locked(item, true, "Remember\nmust be Off!"); + } else if(bad_kb->bad_kb_script->set_bt_id) { + variable_item_set_locked(item, true, "Script has\nBT_ID cmd!\nLocked to\nset MAC!"); + } + + item = variable_item_list_add(var_item_list, "Randomize BT MAC", 0, NULL, bad_kb); + if(bad_kb->bt_remember) { + variable_item_set_locked(item, true, "Remember\nmust be Off!"); + } else if(bad_kb->bad_kb_script->set_bt_id) { + variable_item_set_locked(item, true, "Script has\nBT_ID cmd!\nLocked to\nset MAC!"); + } } variable_item_list_set_enter_callback(