diff --git a/applications/ReadMe.md b/applications/ReadMe.md index 3bd2aeb06..efc9afd86 100644 --- a/applications/ReadMe.md +++ b/applications/ReadMe.md @@ -25,7 +25,7 @@ Applications for factory testing the Flipper. Applications for main Flipper menu. - `archive` - Archive and file manager -- `bad_usb` - Bad USB application +- `bad_kb` - Bad KB application - `fap_loader` - External applications loader - `gpio` - GPIO application: includes USART bridge and GPIO control - `ibutton` - iButton application, onewire keys and more diff --git a/applications/debug/file_browser_test/file_browser_app.c b/applications/debug/file_browser_test/file_browser_app.c index bf423d34e..1df4891cd 100644 --- a/applications/debug/file_browser_test/file_browser_app.c +++ b/applications/debug/file_browser_test/file_browser_app.c @@ -48,7 +48,7 @@ FileBrowserApp* file_browser_app_alloc(char* arg) { app->file_path = furi_string_alloc(); app->file_browser = file_browser_alloc(app->file_path); - file_browser_configure(app->file_browser, "*", NULL, true, false, &I_badusb_10px, true); + file_browser_configure(app->file_browser, "*", NULL, true, false, &I_badkb_10px, true); view_dispatcher_add_view( app->view_dispatcher, FileBrowserAppViewStart, widget_get_view(app->widget)); diff --git a/applications/debug/file_browser_test/icons/badusb_10px.png b/applications/debug/file_browser_test/icons/badkb_10px.png similarity index 100% rename from applications/debug/file_browser_test/icons/badusb_10px.png rename to applications/debug/file_browser_test/icons/badkb_10px.png diff --git a/applications/debug/file_browser_test/scenes/file_browser_scene_start.c b/applications/debug/file_browser_test/scenes/file_browser_scene_start.c index 9eb26944f..9211ff3bb 100644 --- a/applications/debug/file_browser_test/scenes/file_browser_scene_start.c +++ b/applications/debug/file_browser_test/scenes/file_browser_scene_start.c @@ -19,7 +19,7 @@ bool file_browser_scene_start_on_event(void* context, SceneManagerEvent event) { bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { - furi_string_set(app->file_path, ANY_PATH("badusb/demo_windows.txt")); + furi_string_set(app->file_path, ANY_PATH("badkb/demo_windows.txt")); scene_manager_next_scene(app->scene_manager, FileBrowserSceneBrowser); consumed = true; } else if(event.type == SceneManagerEventTypeTick) { diff --git a/applications/main/application.fam b/applications/main/application.fam index 9820ee3ac..eefb801b3 100644 --- a/applications/main/application.fam +++ b/applications/main/application.fam @@ -9,7 +9,7 @@ App( "lfrfid", "nfc", "subghz", - "bad_usb", + "bad_kb", "u2f", "fap_loader", "sub_playlist", @@ -30,7 +30,7 @@ App( "lfrfid", "nfc", "subghz", - # "bad_usb", + # "bad_kb", # "u2f", "fap_loader", "archive", diff --git a/applications/main/archive/helpers/archive_browser.h b/applications/main/archive/helpers/archive_browser.h index 5b13e98da..ece04ad72 100644 --- a/applications/main/archive/helpers/archive_browser.h +++ b/applications/main/archive/helpers/archive_browser.h @@ -14,7 +14,7 @@ static const char* tab_default_paths[] = { [ArchiveTabSubGhz] = ANY_PATH("subghz"), [ArchiveTabLFRFID] = ANY_PATH("lfrfid"), [ArchiveTabInfrared] = ANY_PATH("infrared"), - [ArchiveTabBadUsb] = ANY_PATH("badusb"), + [ArchiveTabBadKb] = ANY_PATH("badkb"), [ArchiveTabU2f] = "/app:u2f", [ArchiveTabApplications] = ANY_PATH("apps"), [ArchiveTabBrowser] = STORAGE_ANY_PATH_PREFIX, @@ -26,7 +26,7 @@ static const char* known_ext[] = { [ArchiveFileTypeSubGhz] = ".sub", [ArchiveFileTypeLFRFID] = ".rfid", [ArchiveFileTypeInfrared] = ".ir", - [ArchiveFileTypeBadUsb] = ".txt", + [ArchiveFileTypeBadKb] = ".txt", [ArchiveFileTypeU2f] = "?", [ArchiveFileTypeApplication] = ".fap", [ArchiveFileTypeUpdateManifest] = ".fuf", @@ -41,7 +41,7 @@ static const ArchiveFileTypeEnum known_type[] = { [ArchiveTabSubGhz] = ArchiveFileTypeSubGhz, [ArchiveTabLFRFID] = ArchiveFileTypeLFRFID, [ArchiveTabInfrared] = ArchiveFileTypeInfrared, - [ArchiveTabBadUsb] = ArchiveFileTypeBadUsb, + [ArchiveTabBadKb] = ArchiveFileTypeBadKb, [ArchiveTabU2f] = ArchiveFileTypeU2f, [ArchiveTabApplications] = ArchiveFileTypeApplication, [ArchiveTabBrowser] = ArchiveFileTypeUnknown, diff --git a/applications/main/archive/helpers/archive_files.c b/applications/main/archive/helpers/archive_files.c index 5c06c1bda..7e7ab1774 100644 --- a/applications/main/archive/helpers/archive_files.c +++ b/applications/main/archive/helpers/archive_files.c @@ -16,11 +16,11 @@ void archive_set_file_type(ArchiveFile_t* file, const char* path, bool is_folder for(size_t i = 0; i < COUNT_OF(known_ext); i++) { if((known_ext[i][0] == '?') || (known_ext[i][0] == '*')) continue; if(furi_string_search(file->path, known_ext[i], 0) != FURI_STRING_FAILURE) { - if(i == ArchiveFileTypeBadUsb) { + if(i == ArchiveFileTypeBadKb) { if(furi_string_search( - file->path, archive_get_default_path(ArchiveTabBadUsb)) == 0) { + file->path, archive_get_default_path(ArchiveTabBadKb)) == 0) { file->type = i; - return; // *.txt file is a BadUSB script only if it is in BadUSB folder + return; // *.txt file is a BadKB script only if it is in BadKB folder } } else { file->type = i; diff --git a/applications/main/archive/helpers/archive_files.h b/applications/main/archive/helpers/archive_files.h index db624f5b5..62d635461 100644 --- a/applications/main/archive/helpers/archive_files.h +++ b/applications/main/archive/helpers/archive_files.h @@ -15,7 +15,7 @@ typedef enum { ArchiveFileTypeSubGhz, ArchiveFileTypeLFRFID, ArchiveFileTypeInfrared, - ArchiveFileTypeBadUsb, + ArchiveFileTypeBadKb, ArchiveFileTypeU2f, ArchiveFileTypeApplication, ArchiveFileTypeUpdateManifest, diff --git a/applications/main/archive/scenes/archive_scene_browser.c b/applications/main/archive/scenes/archive_scene_browser.c index f88efb0c4..0696647ea 100644 --- a/applications/main/archive/scenes/archive_scene_browser.c +++ b/applications/main/archive/scenes/archive_scene_browser.c @@ -17,7 +17,7 @@ static const char* flipper_app_name[] = { [ArchiveFileTypeSubGhz] = "Sub-GHz", [ArchiveFileTypeLFRFID] = "125 kHz RFID", [ArchiveFileTypeInfrared] = "Infrared", - [ArchiveFileTypeBadUsb] = "Bad USB", + [ArchiveFileTypeBadKb] = "Bad KB", [ArchiveFileTypeU2f] = "U2F", [ArchiveFileTypeApplication] = "Applications", [ArchiveFileTypeUpdateManifest] = "UpdaterApp", diff --git a/applications/main/archive/views/archive_browser_view.c b/applications/main/archive/views/archive_browser_view.c index dce753fde..213d65512 100644 --- a/applications/main/archive/views/archive_browser_view.c +++ b/applications/main/archive/views/archive_browser_view.c @@ -16,7 +16,7 @@ static const char* ArchiveTabNames[] = { [ArchiveTabSubGhz] = "Sub-GHz", [ArchiveTabLFRFID] = "RFID LF", [ArchiveTabInfrared] = "Infrared", - [ArchiveTabBadUsb] = "Bad USB", + [ArchiveTabBadKb] = "Bad KB", [ArchiveTabU2f] = "U2F", [ArchiveTabApplications] = "Apps", [ArchiveTabBrowser] = "Browser", @@ -28,7 +28,7 @@ static const Icon* ArchiveItemIcons[] = { [ArchiveFileTypeSubGhz] = &I_sub1_10px, [ArchiveFileTypeLFRFID] = &I_125_10px, [ArchiveFileTypeInfrared] = &I_ir_10px, - [ArchiveFileTypeBadUsb] = &I_badusb_10px, + [ArchiveFileTypeBadKb] = &I_badkb_10px, [ArchiveFileTypeU2f] = &I_u2f_10px, [ArchiveFileTypeApplication] = &I_Apps_10px, [ArchiveFileTypeUpdateManifest] = &I_update_10px, @@ -109,7 +109,7 @@ static void render_item_menu(Canvas* canvas, ArchiveBrowserViewModel* model) { menu_array_push_raw(model->context_menu), item_pin, ArchiveBrowserEventFileMenuPin); - if(selected->type <= ArchiveFileTypeBadUsb) { + if(selected->type <= ArchiveFileTypeBadKb) { archive_menu_add_item( menu_array_push_raw(model->context_menu), item_show, @@ -129,7 +129,7 @@ static void render_item_menu(Canvas* canvas, ArchiveBrowserViewModel* model) { menu_array_push_raw(model->context_menu), item_info, ArchiveBrowserEventFileMenuInfo); - if(selected->type <= ArchiveFileTypeBadUsb) { + if(selected->type <= ArchiveFileTypeBadKb) { archive_menu_add_item( menu_array_push_raw(model->context_menu), item_show, @@ -157,7 +157,7 @@ static void render_item_menu(Canvas* canvas, ArchiveBrowserViewModel* model) { menu_array_push_raw(model->context_menu), item_info, ArchiveBrowserEventFileMenuInfo); - if(selected->type <= ArchiveFileTypeBadUsb) { + if(selected->type <= ArchiveFileTypeBadKb) { archive_menu_add_item( menu_array_push_raw(model->context_menu), item_show, @@ -588,4 +588,4 @@ void browser_free(ArchiveBrowserView* browser) { view_free(browser->view); free(browser); -} \ No newline at end of file +} diff --git a/applications/main/archive/views/archive_browser_view.h b/applications/main/archive/views/archive_browser_view.h index dfe18d13b..1e6cbf036 100644 --- a/applications/main/archive/views/archive_browser_view.h +++ b/applications/main/archive/views/archive_browser_view.h @@ -25,7 +25,7 @@ typedef enum { ArchiveTabNFC, ArchiveTabInfrared, ArchiveTabIButton, - ArchiveTabBadUsb, + ArchiveTabBadKb, ArchiveTabU2f, ArchiveTabApplications, ArchiveTabBrowser, diff --git a/applications/main/bad_usb/application.fam b/applications/main/bad_kb/application.fam similarity index 55% rename from applications/main/bad_usb/application.fam rename to applications/main/bad_kb/application.fam index 2442dd3aa..09531da81 100644 --- a/applications/main/bad_usb/application.fam +++ b/applications/main/bad_kb/application.fam @@ -1,15 +1,15 @@ App( - appid="bad_usb", - name="Bad USB", + appid="bad_kb", + name="Bad KB", apptype=FlipperAppType.APP, - entry_point="bad_usb_app", - cdefines=["APP_BAD_USB"], + entry_point="bad_kb_app", + cdefines=["APP_BAD_KB"], requires=[ "gui", "dialogs", ], stack_size=2 * 1024, - icon="A_BadUsb_14", + icon="A_BadKb_14", order=70, fap_libs=["assets"], ) diff --git a/applications/main/bad_usb/bad_usb_app.c b/applications/main/bad_kb/bad_kb_app.c similarity index 52% rename from applications/main/bad_usb/bad_usb_app.c rename to applications/main/bad_kb/bad_kb_app.c index 43ed76c37..c62af4733 100644 --- a/applications/main/bad_usb/bad_usb_app.c +++ b/applications/main/bad_kb/bad_kb_app.c @@ -1,5 +1,5 @@ -#include "bad_usb_app_i.h" -#include "bad_usb_settings_filename.h" +#include "bad_kb_app_i.h" +#include "bad_kb_settings_filename.h" #include #include #include @@ -8,29 +8,29 @@ #include #include -#define BAD_USB_SETTINGS_PATH BAD_USB_APP_BASE_FOLDER "/" BAD_USB_SETTINGS_FILE_NAME +#define BAD_KB_SETTINGS_PATH BAD_KB_APP_BASE_FOLDER "/" BAD_KB_SETTINGS_FILE_NAME -static bool bad_usb_app_custom_event_callback(void* context, uint32_t event) { +static bool bad_kb_app_custom_event_callback(void* context, uint32_t event) { furi_assert(context); - BadUsbApp* app = context; + BadKbApp* app = context; return scene_manager_handle_custom_event(app->scene_manager, event); } -static bool bad_usb_app_back_event_callback(void* context) { +static bool bad_kb_app_back_event_callback(void* context) { furi_assert(context); - BadUsbApp* app = context; + BadKbApp* app = context; return scene_manager_handle_back_event(app->scene_manager); } -static void bad_usb_app_tick_event_callback(void* context) { +static void bad_kb_app_tick_event_callback(void* context) { furi_assert(context); - BadUsbApp* app = context; + BadKbApp* app = context; scene_manager_handle_tick_event(app->scene_manager); } -static void bad_usb_load_settings(BadUsbApp* app) { +static void bad_kb_load_settings(BadKbApp* app) { File* settings_file = storage_file_alloc(furi_record_open(RECORD_STORAGE)); - if(storage_file_open(settings_file, BAD_USB_SETTINGS_PATH, FSAM_READ, FSOM_OPEN_EXISTING)) { + if(storage_file_open(settings_file, BAD_KB_SETTINGS_PATH, FSAM_READ, FSOM_OPEN_EXISTING)) { char chr; while((storage_file_read(settings_file, &chr, 1) == 1) && !storage_file_eof(settings_file) && !isspace(chr)) { @@ -41,9 +41,9 @@ static void bad_usb_load_settings(BadUsbApp* app) { storage_file_free(settings_file); } -static void bad_usb_save_settings(BadUsbApp* app) { +static void bad_kb_save_settings(BadKbApp* app) { File* settings_file = storage_file_alloc(furi_record_open(RECORD_STORAGE)); - if(storage_file_open(settings_file, BAD_USB_SETTINGS_PATH, FSAM_WRITE, FSOM_OPEN_ALWAYS)) { + if(storage_file_open(settings_file, BAD_KB_SETTINGS_PATH, FSAM_WRITE, FSOM_OPEN_ALWAYS)) { storage_file_write( settings_file, furi_string_get_cstr(app->keyboard_layout), @@ -54,21 +54,21 @@ static void bad_usb_save_settings(BadUsbApp* app) { storage_file_free(settings_file); } -void bad_usb_set_name(BadUsbApp* app, const char* fmt, ...) { +void bad_kb_set_name(BadKbApp* app, const char* fmt, ...) { furi_assert(app); va_list args; va_start(args, fmt); - vsnprintf(app->name, BAD_USB_ADV_NAME_MAX_LEN, fmt, args); + vsnprintf(app->name, BAD_KB_ADV_NAME_MAX_LEN, fmt, args); va_end(args); } -BadUsbApp* bad_usb_app_alloc(char* arg) { - BadUsbApp* app = malloc(sizeof(BadUsbApp)); +BadKbApp* bad_kb_app_alloc(char* arg) { + BadKbApp* app = malloc(sizeof(BadKbApp)); - app->bad_usb_script = NULL; + app->bad_kb_script = NULL; app->file_path = furi_string_alloc(); app->keyboard_layout = furi_string_alloc(); @@ -76,7 +76,7 @@ BadUsbApp* bad_usb_app_alloc(char* arg) { furi_string_set(app->file_path, arg); } - bad_usb_load_settings(app); + bad_kb_load_settings(app); app->gui = furi_record_open(RECORD_GUI); app->notifications = furi_record_open(RECORD_NOTIFICATION); @@ -85,97 +85,97 @@ BadUsbApp* bad_usb_app_alloc(char* arg) { app->view_dispatcher = view_dispatcher_alloc(); view_dispatcher_enable_queue(app->view_dispatcher); - app->scene_manager = scene_manager_alloc(&bad_usb_scene_handlers, app); + app->scene_manager = scene_manager_alloc(&bad_kb_scene_handlers, app); view_dispatcher_set_event_callback_context(app->view_dispatcher, app); view_dispatcher_set_tick_event_callback( - app->view_dispatcher, bad_usb_app_tick_event_callback, 500); + app->view_dispatcher, bad_kb_app_tick_event_callback, 500); view_dispatcher_set_custom_event_callback( - app->view_dispatcher, bad_usb_app_custom_event_callback); + app->view_dispatcher, bad_kb_app_custom_event_callback); view_dispatcher_set_navigation_event_callback( - app->view_dispatcher, bad_usb_app_back_event_callback); + app->view_dispatcher, bad_kb_app_back_event_callback); Bt* bt = furi_record_open(RECORD_BT); app->bt = bt; const char* adv_name = bt_get_profile_adv_name(bt); - memcpy(app->name, adv_name, BAD_USB_ADV_NAME_MAX_LEN); - memcpy(app->bt_old_config.name, adv_name, BAD_USB_ADV_NAME_MAX_LEN); + memcpy(app->name, adv_name, BAD_KB_ADV_NAME_MAX_LEN); + memcpy(app->bt_old_config.name, adv_name, BAD_KB_ADV_NAME_MAX_LEN); const uint8_t* mac_addr = bt_get_profile_mac_address(bt); - memcpy(app->mac, mac_addr, BAD_USB_MAC_ADDRESS_LEN); - memcpy(app->bt_old_config.mac, mac_addr, BAD_USB_MAC_ADDRESS_LEN); + memcpy(app->mac, mac_addr, BAD_KB_MAC_ADDRESS_LEN); + memcpy(app->bt_old_config.mac, mac_addr, BAD_KB_MAC_ADDRESS_LEN); // Custom Widget app->widget = widget_alloc(); view_dispatcher_add_view( - app->view_dispatcher, BadUsbAppViewError, widget_get_view(app->widget)); + app->view_dispatcher, BadKbAppViewError, widget_get_view(app->widget)); app->var_item_list_bt = variable_item_list_alloc(); view_dispatcher_add_view( - app->view_dispatcher, BadUsbAppViewConfigBt, variable_item_list_get_view(app->var_item_list_bt)); + app->view_dispatcher, BadKbAppViewConfigBt, variable_item_list_get_view(app->var_item_list_bt)); app->var_item_list_usb = variable_item_list_alloc(); view_dispatcher_add_view( - app->view_dispatcher, BadUsbAppViewConfigUsb, variable_item_list_get_view(app->var_item_list_usb)); + app->view_dispatcher, BadKbAppViewConfigUsb, variable_item_list_get_view(app->var_item_list_usb)); - app->bad_usb_view = bad_usb_alloc(); + app->bad_kb_view = bad_kb_alloc(); view_dispatcher_add_view( - app->view_dispatcher, BadUsbAppViewWork, bad_usb_get_view(app->bad_usb_view)); + app->view_dispatcher, BadKbAppViewWork, bad_kb_get_view(app->bad_kb_view)); app->text_input = text_input_alloc(); view_dispatcher_add_view( - app->view_dispatcher, BadUsbAppViewConfigName, text_input_get_view(app->text_input)); + app->view_dispatcher, BadKbAppViewConfigName, text_input_get_view(app->text_input)); app->byte_input = byte_input_alloc(); view_dispatcher_add_view( - app->view_dispatcher, BadUsbAppViewConfigMac, byte_input_get_view(app->byte_input)); + app->view_dispatcher, BadKbAppViewConfigMac, byte_input_get_view(app->byte_input)); view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen); if(furi_hal_usb_is_locked()) { - app->error = BadUsbAppErrorCloseRpc; - scene_manager_next_scene(app->scene_manager, BadUsbSceneError); + app->error = BadKbAppErrorCloseRpc; + scene_manager_next_scene(app->scene_manager, BadKbSceneError); } else { if(!furi_string_empty(app->file_path)) { - app->bad_usb_script = bad_usb_script_open(app->file_path, app->is_bt ? app->bt : NULL); - bad_usb_script_set_keyboard_layout(app->bad_usb_script, app->keyboard_layout); - scene_manager_next_scene(app->scene_manager, BadUsbSceneWork); + app->bad_kb_script = bad_kb_script_open(app->file_path, app->is_bt ? app->bt : NULL); + bad_kb_script_set_keyboard_layout(app->bad_kb_script, app->keyboard_layout); + scene_manager_next_scene(app->scene_manager, BadKbSceneWork); } else { - furi_string_set(app->file_path, BAD_USB_APP_BASE_FOLDER); - scene_manager_next_scene(app->scene_manager, BadUsbSceneFileSelect); + furi_string_set(app->file_path, BAD_KB_APP_BASE_FOLDER); + scene_manager_next_scene(app->scene_manager, BadKbSceneFileSelect); } } return app; } -void bad_usb_app_free(BadUsbApp* app) { +void bad_kb_app_free(BadKbApp* app) { furi_assert(app); - if(app->bad_usb_script) { - bad_usb_script_close(app->bad_usb_script); - app->bad_usb_script = NULL; + if(app->bad_kb_script) { + bad_kb_script_close(app->bad_kb_script); + app->bad_kb_script = NULL; } // Views - view_dispatcher_remove_view(app->view_dispatcher, BadUsbAppViewWork); - bad_usb_free(app->bad_usb_view); + view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewWork); + bad_kb_free(app->bad_kb_view); // Custom Widget - view_dispatcher_remove_view(app->view_dispatcher, BadUsbAppViewError); + view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewError); widget_free(app->widget); // Variable item list - view_dispatcher_remove_view(app->view_dispatcher, BadUsbAppViewConfigBt); + view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewConfigBt); variable_item_list_free(app->var_item_list_bt); - view_dispatcher_remove_view(app->view_dispatcher, BadUsbAppViewConfigUsb); + view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewConfigUsb); variable_item_list_free(app->var_item_list_usb); // Text Input - view_dispatcher_remove_view(app->view_dispatcher, BadUsbAppViewConfigName); + view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewConfigName); text_input_free(app->text_input); // Byte Input - view_dispatcher_remove_view(app->view_dispatcher, BadUsbAppViewConfigMac); + view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewConfigMac); byte_input_free(app->byte_input); // View dispatcher @@ -188,7 +188,7 @@ void bad_usb_app_free(BadUsbApp* app) { if (strcmp(app->bt_old_config.name, app->name) != 0) { furi_hal_bt_set_profile_adv_name(FuriHalBtProfileHidKeyboard, app->bt_old_config.name); } - if (memcmp(app->bt_old_config.mac, app->mac, BAD_USB_MAC_ADDRESS_LEN) != 0) { + if (memcmp(app->bt_old_config.mac, app->mac, BAD_KB_MAC_ADDRESS_LEN) != 0) { furi_hal_bt_set_profile_mac_addr(FuriHalBtProfileHidKeyboard, app->bt_old_config.mac); } @@ -199,7 +199,7 @@ void bad_usb_app_free(BadUsbApp* app) { furi_record_close(RECORD_DIALOGS); furi_record_close(RECORD_BT); - bad_usb_save_settings(app); + bad_kb_save_settings(app); furi_string_free(app->file_path); furi_string_free(app->keyboard_layout); @@ -207,11 +207,11 @@ void bad_usb_app_free(BadUsbApp* app) { free(app); } -int32_t bad_usb_app(void* p) { - BadUsbApp* bad_usb_app = bad_usb_app_alloc((char*)p); +int32_t bad_kb_app(void* p) { + BadKbApp* bad_kb_app = bad_kb_app_alloc((char*)p); - view_dispatcher_run(bad_usb_app->view_dispatcher); + view_dispatcher_run(bad_kb_app->view_dispatcher); - bad_usb_app_free(bad_usb_app); + bad_kb_app_free(bad_kb_app); return 0; } diff --git a/applications/main/bad_kb/bad_kb_app.h b/applications/main/bad_kb/bad_kb_app.h new file mode 100644 index 000000000..e75a94651 --- /dev/null +++ b/applications/main/bad_kb/bad_kb_app.h @@ -0,0 +1,13 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct BadKbApp BadKbApp; + +void bad_kb_set_name(BadKbApp* app, const char* fmt, ...); + +#ifdef __cplusplus +} +#endif diff --git a/applications/main/bad_kb/bad_kb_app_i.h b/applications/main/bad_kb/bad_kb_app_i.h new file mode 100644 index 000000000..913830e72 --- /dev/null +++ b/applications/main/bad_kb/bad_kb_app_i.h @@ -0,0 +1,80 @@ +#pragma once + +#include "bad_kb_app.h" +#include "scenes/bad_kb_scene.h" +#include "bad_kb_script.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "views/bad_kb_view.h" + +#define BAD_KB_APP_BASE_FOLDER ANY_PATH("badkb") +#define BAD_KB_APP_PATH_LAYOUT_FOLDER BAD_KB_APP_BASE_FOLDER "/layouts" +#define BAD_KB_APP_SCRIPT_EXTENSION ".txt" +#define BAD_KB_APP_LAYOUT_EXTENSION ".kl" + +#define BAD_KB_MAC_ADDRESS_LEN 6 // need replace with MAC size maccro +#define BAD_KB_ADV_NAME_MAX_LEN 18 + +typedef enum { + BadKbAppErrorNoFiles, + BadKbAppErrorCloseRpc, +} BadKbAppError; + +typedef enum BadKbCustomEvent { + BadKbAppCustomEventTextEditResult, + BadKbAppCustomEventByteInputDone, + BadKbCustomEventErrorBack +} BadKbCustomEvent; + +typedef struct { + uint8_t mac[BAD_KB_MAC_ADDRESS_LEN]; + char name[BAD_KB_ADV_NAME_MAX_LEN + 1]; + + // number of bt keys before starting the app (all keys added in + // the bt keys file then will be removed) + uint16_t n_keys; +} BadKbBtConfig; + +struct BadKbApp { + Gui* gui; + ViewDispatcher* view_dispatcher; + SceneManager* scene_manager; + NotificationApp* notifications; + DialogsApp* dialogs; + Widget* widget; + VariableItemList* var_item_list_bt; + VariableItemList* var_item_list_usb; + + Bt* bt; + TextInput* text_input; + ByteInput* byte_input; + uint8_t mac[BAD_KB_MAC_ADDRESS_LEN]; + char name[BAD_KB_ADV_NAME_MAX_LEN + 1]; + BadKbBtConfig bt_old_config; + + BadKbAppError error; + FuriString* file_path; + FuriString* keyboard_layout; + BadKb* bad_kb_view; + BadKbScript* bad_kb_script; + + bool is_bt; +}; + +typedef enum { + BadKbAppViewError, + BadKbAppViewWork, + BadKbAppViewConfigBt, + BadKbAppViewConfigUsb, + BadKbAppViewConfigMac, + BadKbAppViewConfigName +} BadKbAppView; diff --git a/applications/main/bad_usb/bad_usb_script.c b/applications/main/bad_kb/bad_kb_script.c similarity index 65% rename from applications/main/bad_usb/bad_usb_script.c rename to applications/main/bad_kb/bad_kb_script.c index 51ce49df9..e63a39c05 100644 --- a/applications/main/bad_usb/bad_usb_script.c +++ b/applications/main/bad_kb/bad_kb_script.c @@ -6,14 +6,14 @@ #include #include #include -#include "bad_usb_script.h" +#include "bad_kb_script.h" #include #include #define HID_BT_KEYS_STORAGE_PATH EXT_PATH("apps/Tools/.bt_hid.keys") -#define TAG "BadUSB" +#define TAG "BadKB" #define WORKER_TAG TAG "Worker" #define FILE_BUFFER_LEN 16 @@ -21,7 +21,7 @@ #define SCRIPT_STATE_END (-2) #define SCRIPT_STATE_NEXT_LINE (-3) -#define BADUSB_ASCII_TO_KEY(script, x) \ +#define BADKB_ASCII_TO_KEY(script, x) \ (((uint8_t)x < 128) ? (script->layout[(uint8_t)x]) : HID_KEYBOARD_NONE) typedef enum { @@ -52,9 +52,9 @@ const uint8_t bt_hid_delays[LevelRssiNum] = { 14, // LevelRssi39_0 }; -struct BadUsbScript { +struct BadKbScript { FuriHalUsbHidConfig hid_cfg; - BadUsbState st; + BadKbState st; FuriString* file_path; FuriString* keyboard_layout; uint32_t defdelay; @@ -230,8 +230,8 @@ static bool ducky_is_line_end(const char chr) { return ((chr == ' ') || (chr == '\0') || (chr == '\r') || (chr == '\n')); } -static void ducky_numlock_on(BadUsbScript* bad_usb) { - if (bad_usb->bt) { +static void ducky_numlock_on(BadKbScript* bad_kb) { + if (bad_kb->bt) { if((furi_hal_hid_get_led_state() & HID_KB_LED_NUM) == 0) { // FIXME bt_hid_hold_while_keyboard_buffer_full(1, -1); furi_hal_bt_hid_kb_press(HID_KEYBOARD_LOCK_NUM_LOCK); @@ -246,12 +246,12 @@ static void ducky_numlock_on(BadUsbScript* bad_usb) { } } -static bool ducky_numpad_press(BadUsbScript* bad_usb, const char num) { +static bool ducky_numpad_press(BadKbScript* bad_kb, const char num) { if((num < '0') || (num > '9')) return false; uint16_t key = numpad_keys[num - '0']; FURI_LOG_I(WORKER_TAG, "Pressing %c\r\n", num); - if (bad_usb->bt) { + if (bad_kb->bt) { bt_hid_hold_while_keyboard_buffer_full(1, -1); furi_hal_bt_hid_kb_press(key); furi_delay_ms(bt_timeout); @@ -264,13 +264,13 @@ static bool ducky_numpad_press(BadUsbScript* bad_usb, const char num) { return true; } -static bool ducky_altchar(BadUsbScript* bad_usb, const char* charcode) { +static bool ducky_altchar(BadKbScript* bad_kb, const char* charcode) { uint8_t i = 0; bool state = false; FURI_LOG_I(WORKER_TAG, "char %s", charcode); - if (bad_usb->bt) { + if (bad_kb->bt) { bt_hid_hold_while_keyboard_buffer_full(1, -1); furi_hal_bt_hid_kb_press(KEY_MOD_LEFT_ALT); } else { @@ -278,12 +278,12 @@ static bool ducky_altchar(BadUsbScript* bad_usb, const char* charcode) { } while(!ducky_is_line_end(charcode[i])) { - state = ducky_numpad_press(bad_usb, charcode[i]); + state = ducky_numpad_press(bad_kb, charcode[i]); if(state == false) break; i++; } - if (bad_usb->bt) { + if (bad_kb->bt) { furi_hal_bt_hid_kb_release(KEY_MOD_LEFT_ALT); } else { furi_hal_hid_kb_release(KEY_MOD_LEFT_ALT); @@ -291,7 +291,7 @@ static bool ducky_altchar(BadUsbScript* bad_usb, const char* charcode) { return state; } -static bool ducky_altstring(BadUsbScript* bad_usb, const char* param) { +static bool ducky_altstring(BadKbScript* bad_kb, const char* param) { uint32_t i = 0; bool state = false; @@ -304,19 +304,19 @@ static bool ducky_altstring(BadUsbScript* bad_usb, const char* param) { char temp_str[4]; snprintf(temp_str, 4, "%u", param[i]); - state = ducky_altchar(bad_usb, temp_str); + state = ducky_altchar(bad_kb, temp_str); if(state == false) break; i++; } return state; } -static bool ducky_string(BadUsbScript* bad_usb, const char* param) { +static bool ducky_string(BadKbScript* bad_kb, const char* param) { uint32_t i = 0; while(param[i] != '\0') { - uint16_t keycode = BADUSB_ASCII_TO_KEY(bad_usb, param[i]); + uint16_t keycode = BADKB_ASCII_TO_KEY(bad_kb, param[i]); if(keycode != HID_KEYBOARD_NONE) { - if (bad_usb->bt) { + if (bad_kb->bt) { bt_hid_hold_while_keyboard_buffer_full(1, -1); furi_hal_bt_hid_kb_press(keycode); furi_delay_ms(bt_timeout); @@ -331,7 +331,7 @@ static bool ducky_string(BadUsbScript* bad_usb, const char* param) { return true; } -static uint16_t ducky_get_keycode(BadUsbScript* bad_usb, const char* param, bool accept_chars) { +static uint16_t ducky_get_keycode(BadKbScript* bad_kb, const char* param, bool accept_chars) { for(size_t i = 0; i < (sizeof(ducky_keys) / sizeof(ducky_keys[0])); i++) { size_t key_cmd_len = strlen(ducky_keys[i].name); if((strncmp(param, ducky_keys[i].name, key_cmd_len) == 0) && @@ -340,13 +340,13 @@ static uint16_t ducky_get_keycode(BadUsbScript* bad_usb, const char* param, bool } } if((accept_chars) && (strlen(param) > 0)) { - return (BADUSB_ASCII_TO_KEY(bad_usb, param[0]) & 0xFF); + return (BADKB_ASCII_TO_KEY(bad_kb, param[0]) & 0xFF); } return 0; } static int32_t - ducky_parse_line(BadUsbScript* bad_usb, FuriString* line, char* error, size_t error_len) { + ducky_parse_line(BadKbScript* bad_kb, FuriString* line, char* error, size_t error_len) { uint32_t line_len = furi_string_size(line); const char* line_tmp = furi_string_get_cstr(line); bool state = false; @@ -384,7 +384,7 @@ static int32_t (strncmp(line_tmp, ducky_cmd_defdelay_2, strlen(ducky_cmd_defdelay_2)) == 0)) { // DEFAULT_DELAY line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - state = ducky_get_number(line_tmp, &bad_usb->defdelay); + state = ducky_get_number(line_tmp, &bad_kb->defdelay); if(!state && error != NULL) { snprintf(error, error_len, "Invalid number %s", line_tmp); } @@ -392,7 +392,7 @@ static int32_t } else if(strncmp(line_tmp, ducky_cmd_string, strlen(ducky_cmd_string)) == 0) { // STRING line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - state = ducky_string(bad_usb, line_tmp); + state = ducky_string(bad_kb, line_tmp); if(!state && error != NULL) { snprintf(error, error_len, "Invalid string %s", line_tmp); } @@ -400,8 +400,8 @@ static int32_t } else if(strncmp(line_tmp, ducky_cmd_altchar, strlen(ducky_cmd_altchar)) == 0) { // ALTCHAR line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - ducky_numlock_on(bad_usb); - state = ducky_altchar(bad_usb, line_tmp); + ducky_numlock_on(bad_kb); + state = ducky_altchar(bad_kb, line_tmp); if(!state && error != NULL) { snprintf(error, error_len, "Invalid altchar %s", line_tmp); } @@ -411,8 +411,8 @@ static int32_t (strncmp(line_tmp, ducky_cmd_altstr_2, strlen(ducky_cmd_altstr_2)) == 0)) { // ALTSTRING line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - ducky_numlock_on(bad_usb); - state = ducky_altstring(bad_usb, line_tmp); + ducky_numlock_on(bad_kb); + state = ducky_altstring(bad_kb, line_tmp); if(!state && error != NULL) { snprintf(error, error_len, "Invalid altstring %s", line_tmp); } @@ -420,7 +420,7 @@ static int32_t } else if(strncmp(line_tmp, ducky_cmd_repeat, strlen(ducky_cmd_repeat)) == 0) { // REPEAT line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - state = ducky_get_number(line_tmp, &bad_usb->repeat_cnt); + state = ducky_get_number(line_tmp, &bad_kb->repeat_cnt); if(!state && error != NULL) { snprintf(error, error_len, "Invalid number %s", line_tmp); } @@ -428,8 +428,8 @@ static int32_t } else if(strncmp(line_tmp, ducky_cmd_sysrq, strlen(ducky_cmd_sysrq)) == 0) { // SYSRQ line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - uint16_t key = ducky_get_keycode(bad_usb, line_tmp, true); - if (bad_usb->bt) { + uint16_t key = ducky_get_keycode(bad_kb, line_tmp, true); + if (bad_kb->bt) { bt_hid_hold_while_keyboard_buffer_full(1, -1); furi_hal_bt_hid_kb_press(KEY_MOD_LEFT_ALT | HID_KEYBOARD_PRINT_SCREEN); furi_hal_bt_hid_kb_press(key); @@ -444,7 +444,7 @@ static int32_t return (0); } else { // Special keys + modifiers - uint16_t key = ducky_get_keycode(bad_usb, line_tmp, false); + uint16_t key = ducky_get_keycode(bad_kb, line_tmp, false); if(key == HID_KEYBOARD_NONE) { if(error != NULL) { snprintf(error, error_len, "No keycode defined for %s", line_tmp); @@ -454,9 +454,9 @@ static int32_t if((key & 0xFF00) != 0) { // It's a modifier key line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1]; - key |= ducky_get_keycode(bad_usb, line_tmp, true); + key |= ducky_get_keycode(bad_kb, line_tmp, true); } - if (bad_usb->bt) { + if (bad_kb->bt) { furi_hal_bt_hid_kb_press(key); furi_delay_ms(bt_timeout); furi_hal_bt_hid_kb_release(key); @@ -468,231 +468,231 @@ static int32_t } } -static bool ducky_set_usb_id(BadUsbScript* bad_usb, const char* line) { - if(sscanf(line, "%lX:%lX", &bad_usb->hid_cfg.vid, &bad_usb->hid_cfg.pid) == 2) { - bad_usb->hid_cfg.manuf[0] = '\0'; - bad_usb->hid_cfg.product[0] = '\0'; +static bool ducky_set_usb_id(BadKbScript* bad_kb, const char* line) { + if(sscanf(line, "%lX:%lX", &bad_kb->hid_cfg.vid, &bad_kb->hid_cfg.pid) == 2) { + bad_kb->hid_cfg.manuf[0] = '\0'; + bad_kb->hid_cfg.product[0] = '\0'; uint8_t id_len = ducky_get_command_len(line); if(!ducky_is_line_end(line[id_len + 1])) { sscanf( &line[id_len + 1], "%31[^\r\n:]:%31[^\r\n]", - bad_usb->hid_cfg.manuf, - bad_usb->hid_cfg.product); + bad_kb->hid_cfg.manuf, + bad_kb->hid_cfg.product); } FURI_LOG_D( WORKER_TAG, "set id: %04lX:%04lX mfr:%s product:%s", - bad_usb->hid_cfg.vid, - bad_usb->hid_cfg.pid, - bad_usb->hid_cfg.manuf, - bad_usb->hid_cfg.product); + bad_kb->hid_cfg.vid, + bad_kb->hid_cfg.pid, + bad_kb->hid_cfg.manuf, + bad_kb->hid_cfg.product); return true; } return false; } -static bool ducky_script_preload(BadUsbScript* bad_usb, File* script_file) { +static bool ducky_script_preload(BadKbScript* bad_kb, File* script_file) { uint8_t ret = 0; uint32_t line_len = 0; - furi_string_reset(bad_usb->line); + furi_string_reset(bad_kb->line); do { - ret = storage_file_read(script_file, bad_usb->file_buf, FILE_BUFFER_LEN); + ret = storage_file_read(script_file, bad_kb->file_buf, FILE_BUFFER_LEN); for(uint16_t i = 0; i < ret; i++) { - if(bad_usb->file_buf[i] == '\n' && line_len > 0) { - bad_usb->st.line_nb++; + if(bad_kb->file_buf[i] == '\n' && line_len > 0) { + bad_kb->st.line_nb++; line_len = 0; } else { - if(bad_usb->st.line_nb == 0) { // Save first line - furi_string_push_back(bad_usb->line, bad_usb->file_buf[i]); + if(bad_kb->st.line_nb == 0) { // Save first line + furi_string_push_back(bad_kb->line, bad_kb->file_buf[i]); } line_len++; } } if(storage_file_eof(script_file)) { if(line_len > 0) { - bad_usb->st.line_nb++; + bad_kb->st.line_nb++; break; } } } while(ret > 0); - if (!bad_usb->bt) { - const char* line_tmp = furi_string_get_cstr(bad_usb->line); + if (!bad_kb->bt) { + const char* line_tmp = furi_string_get_cstr(bad_kb->line); bool id_set = false; // Looking for ID command at first line if(strncmp(line_tmp, ducky_cmd_id, strlen(ducky_cmd_id)) == 0) { - id_set = ducky_set_usb_id(bad_usb, &line_tmp[strlen(ducky_cmd_id) + 1]); + id_set = ducky_set_usb_id(bad_kb, &line_tmp[strlen(ducky_cmd_id) + 1]); } if(id_set) { - furi_check(furi_hal_usb_set_config(&usb_hid, &bad_usb->hid_cfg)); + furi_check(furi_hal_usb_set_config(&usb_hid, &bad_kb->hid_cfg)); } else { furi_check(furi_hal_usb_set_config(&usb_hid, NULL)); } } storage_file_seek(script_file, 0, true); - furi_string_reset(bad_usb->line); + furi_string_reset(bad_kb->line); return true; } -static int32_t ducky_script_execute_next(BadUsbScript* bad_usb, File* script_file) { +static int32_t ducky_script_execute_next(BadKbScript* bad_kb, File* script_file) { int32_t delay_val = 0; - if(bad_usb->repeat_cnt > 0) { - bad_usb->repeat_cnt--; + if(bad_kb->repeat_cnt > 0) { + bad_kb->repeat_cnt--; delay_val = ducky_parse_line( - bad_usb, bad_usb->line_prev, bad_usb->st.error, sizeof(bad_usb->st.error)); + bad_kb, bad_kb->line_prev, bad_kb->st.error, sizeof(bad_kb->st.error)); if(delay_val == SCRIPT_STATE_NEXT_LINE) { // Empty line return 0; } else if(delay_val < 0) { // Script error - bad_usb->st.error_line = bad_usb->st.line_cur - 1; - FURI_LOG_E(WORKER_TAG, "Unknown command at line %u", bad_usb->st.line_cur - 1U); + bad_kb->st.error_line = bad_kb->st.line_cur - 1; + FURI_LOG_E(WORKER_TAG, "Unknown command at line %u", bad_kb->st.line_cur - 1U); return SCRIPT_STATE_ERROR; } else { - return (delay_val + bad_usb->defdelay); + return (delay_val + bad_kb->defdelay); } } - furi_string_set(bad_usb->line_prev, bad_usb->line); - furi_string_reset(bad_usb->line); + furi_string_set(bad_kb->line_prev, bad_kb->line); + furi_string_reset(bad_kb->line); while(1) { - if(bad_usb->buf_len == 0) { - bad_usb->buf_len = storage_file_read(script_file, bad_usb->file_buf, FILE_BUFFER_LEN); + if(bad_kb->buf_len == 0) { + bad_kb->buf_len = storage_file_read(script_file, bad_kb->file_buf, FILE_BUFFER_LEN); if(storage_file_eof(script_file)) { - if((bad_usb->buf_len < FILE_BUFFER_LEN) && (bad_usb->file_end == false)) { - bad_usb->file_buf[bad_usb->buf_len] = '\n'; - bad_usb->buf_len++; - bad_usb->file_end = true; + if((bad_kb->buf_len < FILE_BUFFER_LEN) && (bad_kb->file_end == false)) { + bad_kb->file_buf[bad_kb->buf_len] = '\n'; + bad_kb->buf_len++; + bad_kb->file_end = true; } } - bad_usb->buf_start = 0; - if(bad_usb->buf_len == 0) return SCRIPT_STATE_END; + bad_kb->buf_start = 0; + if(bad_kb->buf_len == 0) return SCRIPT_STATE_END; } - for(uint8_t i = bad_usb->buf_start; i < (bad_usb->buf_start + bad_usb->buf_len); i++) { - if(bad_usb->file_buf[i] == '\n' && furi_string_size(bad_usb->line) > 0) { - bad_usb->st.line_cur++; - bad_usb->buf_len = bad_usb->buf_len + bad_usb->buf_start - (i + 1); - bad_usb->buf_start = i + 1; - furi_string_trim(bad_usb->line); + for(uint8_t i = bad_kb->buf_start; i < (bad_kb->buf_start + bad_kb->buf_len); i++) { + if(bad_kb->file_buf[i] == '\n' && furi_string_size(bad_kb->line) > 0) { + bad_kb->st.line_cur++; + bad_kb->buf_len = bad_kb->buf_len + bad_kb->buf_start - (i + 1); + bad_kb->buf_start = i + 1; + furi_string_trim(bad_kb->line); delay_val = ducky_parse_line( - bad_usb, bad_usb->line, bad_usb->st.error, sizeof(bad_usb->st.error)); + bad_kb, bad_kb->line, bad_kb->st.error, sizeof(bad_kb->st.error)); if(delay_val == SCRIPT_STATE_NEXT_LINE) { // Empty line return 0; } else if(delay_val < 0) { - bad_usb->st.error_line = bad_usb->st.line_cur; + bad_kb->st.error_line = bad_kb->st.line_cur; if(delay_val == SCRIPT_STATE_NEXT_LINE) { snprintf( - bad_usb->st.error, sizeof(bad_usb->st.error), "Forbidden empty line"); + bad_kb->st.error, sizeof(bad_kb->st.error), "Forbidden empty line"); FURI_LOG_E( - WORKER_TAG, "Forbidden empty line at line %u", bad_usb->st.line_cur); + WORKER_TAG, "Forbidden empty line at line %u", bad_kb->st.line_cur); } else { - FURI_LOG_E(WORKER_TAG, "Unknown command at line %u", bad_usb->st.line_cur); + FURI_LOG_E(WORKER_TAG, "Unknown command at line %u", bad_kb->st.line_cur); } return SCRIPT_STATE_ERROR; } else { - return (delay_val + bad_usb->defdelay); + return (delay_val + bad_kb->defdelay); } } else { - furi_string_push_back(bad_usb->line, bad_usb->file_buf[i]); + furi_string_push_back(bad_kb->line, bad_kb->file_buf[i]); } } - bad_usb->buf_len = 0; - if(bad_usb->file_end) return SCRIPT_STATE_END; + bad_kb->buf_len = 0; + if(bad_kb->file_end) return SCRIPT_STATE_END; } return 0; } -static void bad_usb_bt_hid_state_callback(BtStatus status, void* context) { +static void bad_kb_bt_hid_state_callback(BtStatus status, void* context) { furi_assert(context); - BadUsbScript* bad_usb = (BadUsbScript*)context; + BadKbScript* bad_kb = (BadKbScript*)context; bool state = (status == BtStatusConnected); if(state == true) { - LevelRssiRange r = bt_remote_rssi_range(bad_usb->bt); + LevelRssiRange r = bt_remote_rssi_range(bad_kb->bt); if(r != LevelRssiError) { bt_timeout = bt_hid_delays[r]; } - furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtConnect); + furi_thread_flags_set(furi_thread_get_id(bad_kb->thread), WorkerEvtConnect); } else - furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtDisconnect); + furi_thread_flags_set(furi_thread_get_id(bad_kb->thread), WorkerEvtDisconnect); } -static void bad_usb_usb_hid_state_callback(bool state, void* context) { +static void bad_kb_usb_hid_state_callback(bool state, void* context) { furi_assert(context); - BadUsbScript* bad_usb = context; + BadKbScript* bad_kb = context; if(state == true) - furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtConnect); + furi_thread_flags_set(furi_thread_get_id(bad_kb->thread), WorkerEvtConnect); else - furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtDisconnect); + furi_thread_flags_set(furi_thread_get_id(bad_kb->thread), WorkerEvtDisconnect); } -static int32_t bad_usb_worker(void* context) { - BadUsbScript* bad_usb = context; +static int32_t bad_kb_worker(void* context) { + BadKbScript* bad_kb = context; - BadUsbWorkerState worker_state = BadUsbStateInit; + BadKbWorkerState worker_state = BadKbStateInit; int32_t delay_val = 0; FuriHalUsbInterface* usb_mode_prev = NULL; GapPairing old_pairing_method = GapPairingNone; - if (bad_usb->bt) { + if (bad_kb->bt) { bt_timeout = bt_hid_delays[LevelRssi39_0]; - bt_disconnect(bad_usb->bt); + bt_disconnect(bad_kb->bt); furi_delay_ms(200); - bt_keys_storage_set_storage_path(bad_usb->bt, HID_BT_KEYS_STORAGE_PATH); - if (!bt_set_profile(bad_usb->bt, BtProfileHidKeyboard)) { + bt_keys_storage_set_storage_path(bad_kb->bt, HID_BT_KEYS_STORAGE_PATH); + if (!bt_set_profile(bad_kb->bt, BtProfileHidKeyboard)) { FURI_LOG_E(TAG, "Failed to switch to HID profile"); return -1; } - old_pairing_method = bt_get_profile_pairing_method(bad_usb->bt); - bt_set_profile_pairing_method(bad_usb->bt, GapPairingNone); + old_pairing_method = bt_get_profile_pairing_method(bad_kb->bt); + bt_set_profile_pairing_method(bad_kb->bt, GapPairingNone); furi_hal_bt_start_advertising(); - bt_set_status_changed_callback(bad_usb->bt, bad_usb_bt_hid_state_callback, bad_usb); + bt_set_status_changed_callback(bad_kb->bt, bad_kb_bt_hid_state_callback, bad_kb); } else { usb_mode_prev = furi_hal_usb_get_config(); - furi_hal_hid_set_state_callback(bad_usb_usb_hid_state_callback, bad_usb); + furi_hal_hid_set_state_callback(bad_kb_usb_hid_state_callback, bad_kb); } FURI_LOG_I(WORKER_TAG, "Init"); File* script_file = storage_file_alloc(furi_record_open(RECORD_STORAGE)); - bad_usb->line = furi_string_alloc(); - bad_usb->line_prev = furi_string_alloc(); + bad_kb->line = furi_string_alloc(); + bad_kb->line_prev = furi_string_alloc(); while(1) { - if(worker_state == BadUsbStateInit) { // State: initialization + if(worker_state == BadKbStateInit) { // State: initialization if(storage_file_open( script_file, - furi_string_get_cstr(bad_usb->file_path), + furi_string_get_cstr(bad_kb->file_path), FSAM_READ, FSOM_OPEN_EXISTING)) { - if((ducky_script_preload(bad_usb, script_file)) && (bad_usb->st.line_nb > 0)) { - if (bad_usb->bt) { - worker_state = BadUsbStateNotConnected; // Ready to run + if((ducky_script_preload(bad_kb, script_file)) && (bad_kb->st.line_nb > 0)) { + if (bad_kb->bt) { + worker_state = BadKbStateNotConnected; // Ready to run } else { if(furi_hal_hid_is_connected()) { - worker_state = BadUsbStateIdle; // Ready to run + worker_state = BadKbStateIdle; // Ready to run } else { - worker_state = BadUsbStateNotConnected; // USB not connected + worker_state = BadKbStateNotConnected; // USB not connected } } } else { - worker_state = BadUsbStateScriptError; // Script preload error + worker_state = BadKbStateScriptError; // Script preload error } } else { FURI_LOG_E(WORKER_TAG, "File open error"); - worker_state = BadUsbStateFileError; // File open error + worker_state = BadKbStateFileError; // File open error } - bad_usb->st.state = worker_state; + bad_kb->st.state = worker_state; - } else if(worker_state == BadUsbStateNotConnected) { // State: USB not connected + } else if(worker_state == BadKbStateNotConnected) { // State: USB not connected uint32_t flags = furi_thread_flags_wait( WorkerEvtEnd | WorkerEvtConnect | WorkerEvtToggle, FuriFlagWaitAny, @@ -701,13 +701,13 @@ static int32_t bad_usb_worker(void* context) { if(flags & WorkerEvtEnd) { break; } else if(flags & WorkerEvtConnect) { - worker_state = BadUsbStateIdle; // Ready to run + worker_state = BadKbStateIdle; // Ready to run } else if(flags & WorkerEvtToggle) { - worker_state = BadUsbStateWillRun; // Will run when USB is connected + worker_state = BadKbStateWillRun; // Will run when USB is connected } - bad_usb->st.state = worker_state; + bad_kb->st.state = worker_state; - } else if(worker_state == BadUsbStateIdle) { // State: ready to start + } else if(worker_state == BadKbStateIdle) { // State: ready to start uint32_t flags = furi_thread_flags_wait( WorkerEvtEnd | WorkerEvtToggle | WorkerEvtDisconnect, FuriFlagWaitAny, @@ -716,22 +716,22 @@ static int32_t bad_usb_worker(void* context) { if(flags & WorkerEvtEnd) { break; } else if(flags & WorkerEvtToggle) { // Start executing script - DOLPHIN_DEED(DolphinDeedBadUsbPlayScript); + DOLPHIN_DEED(DolphinDeedBadKbPlayScript); delay_val = 0; - bad_usb->buf_len = 0; - bad_usb->st.line_cur = 0; - bad_usb->defdelay = 0; - bad_usb->repeat_cnt = 0; - bad_usb->file_end = false; + bad_kb->buf_len = 0; + bad_kb->st.line_cur = 0; + bad_kb->defdelay = 0; + bad_kb->repeat_cnt = 0; + bad_kb->file_end = false; storage_file_seek(script_file, 0, true); - bad_usb_script_set_keyboard_layout(bad_usb, bad_usb->keyboard_layout); - worker_state = BadUsbStateRunning; + bad_kb_script_set_keyboard_layout(bad_kb, bad_kb->keyboard_layout); + worker_state = BadKbStateRunning; } else if(flags & WorkerEvtDisconnect) { - worker_state = BadUsbStateNotConnected; // USB disconnected + worker_state = BadKbStateNotConnected; // USB disconnected } - bad_usb->st.state = worker_state; + bad_kb->st.state = worker_state; - } else if(worker_state == BadUsbStateWillRun) { // State: start on connection + } else if(worker_state == BadKbStateWillRun) { // State: start on connection uint32_t flags = furi_thread_flags_wait( WorkerEvtEnd | WorkerEvtConnect | WorkerEvtToggle, FuriFlagWaitAny, @@ -740,28 +740,28 @@ static int32_t bad_usb_worker(void* context) { if(flags & WorkerEvtEnd) { break; } else if(flags & WorkerEvtConnect) { // Start executing script - DOLPHIN_DEED(DolphinDeedBadUsbPlayScript); + DOLPHIN_DEED(DolphinDeedBadKbPlayScript); delay_val = 0; - bad_usb->buf_len = 0; - bad_usb->st.line_cur = 0; - bad_usb->defdelay = 0; - bad_usb->repeat_cnt = 0; - bad_usb->file_end = false; + bad_kb->buf_len = 0; + bad_kb->st.line_cur = 0; + bad_kb->defdelay = 0; + bad_kb->repeat_cnt = 0; + bad_kb->file_end = false; storage_file_seek(script_file, 0, true); // extra time for PC to recognize Flipper as keyboard furi_thread_flags_wait(0, FuriFlagWaitAny, 1500); - if (bad_usb->bt) { - update_bt_timeout(bad_usb->bt); + if (bad_kb->bt) { + update_bt_timeout(bad_kb->bt); FURI_LOG_I(WORKER_TAG, "BLE Key timeout : %u", bt_timeout); } - bad_usb_script_set_keyboard_layout(bad_usb, bad_usb->keyboard_layout); - worker_state = BadUsbStateRunning; + bad_kb_script_set_keyboard_layout(bad_kb, bad_kb->keyboard_layout); + worker_state = BadKbStateRunning; } else if(flags & WorkerEvtToggle) { // Cancel scheduled execution - worker_state = BadUsbStateNotConnected; + worker_state = BadKbStateNotConnected; } - bad_usb->st.state = worker_state; + bad_kb->st.state = worker_state; - } else if(worker_state == BadUsbStateRunning) { // State: running + } else if(worker_state == BadKbStateRunning) { // State: running uint16_t delay_cur = (delay_val > 1000) ? (1000) : (delay_val); uint32_t flags = furi_thread_flags_wait( WorkerEvtEnd | WorkerEvtToggle | WorkerEvtDisconnect, FuriFlagWaitAny, delay_cur); @@ -770,56 +770,56 @@ static int32_t bad_usb_worker(void* context) { if(flags & WorkerEvtEnd) { break; } else if(flags & WorkerEvtToggle) { - worker_state = BadUsbStateIdle; // Stop executing script - if (bad_usb->bt) { + worker_state = BadKbStateIdle; // Stop executing script + if (bad_kb->bt) { furi_hal_bt_hid_kb_release_all(); } else { furi_hal_hid_kb_release_all(); } } else if(flags & WorkerEvtDisconnect) { - worker_state = BadUsbStateNotConnected; // USB disconnected - if (bad_usb->bt) { + worker_state = BadKbStateNotConnected; // USB disconnected + if (bad_kb->bt) { furi_hal_bt_hid_kb_release_all(); } else { furi_hal_hid_kb_release_all(); } } - bad_usb->st.state = worker_state; + bad_kb->st.state = worker_state; continue; } else if( (flags == (unsigned)FuriFlagErrorTimeout) || (flags == (unsigned)FuriFlagErrorResource)) { if(delay_val > 0) { - bad_usb->st.delay_remain--; + bad_kb->st.delay_remain--; continue; } - bad_usb->st.state = BadUsbStateRunning; - delay_val = ducky_script_execute_next(bad_usb, script_file); + bad_kb->st.state = BadKbStateRunning; + delay_val = ducky_script_execute_next(bad_kb, script_file); if(delay_val == SCRIPT_STATE_ERROR) { // Script error delay_val = 0; - worker_state = BadUsbStateScriptError; - bad_usb->st.state = worker_state; + worker_state = BadKbStateScriptError; + bad_kb->st.state = worker_state; } else if(delay_val == SCRIPT_STATE_END) { // End of script delay_val = 0; - worker_state = BadUsbStateIdle; - bad_usb->st.state = BadUsbStateDone; - if (bad_usb->bt) { + worker_state = BadKbStateIdle; + bad_kb->st.state = BadKbStateDone; + if (bad_kb->bt) { furi_hal_bt_hid_kb_release_all(); } else { furi_hal_hid_kb_release_all(); } continue; } else if(delay_val > 1000) { - bad_usb->st.state = BadUsbStateDelay; // Show long delays - bad_usb->st.delay_remain = delay_val / 1000; + bad_kb->st.state = BadKbStateDelay; // Show long delays + bad_kb->st.delay_remain = delay_val / 1000; } } else { furi_check((flags & FuriFlagError) == 0); } } else if( - (worker_state == BadUsbStateFileError) || - (worker_state == BadUsbStateScriptError)) { // State: error + (worker_state == BadKbStateFileError) || + (worker_state == BadKbStateScriptError)) { // State: error uint32_t flags = furi_thread_flags_wait( WorkerEvtEnd, FuriFlagWaitAny, FuriWaitForever); // Waiting for exit command furi_check((flags & FuriFlagError) == 0); @@ -827,31 +827,31 @@ static int32_t bad_usb_worker(void* context) { break; } } - if (bad_usb->bt) { - update_bt_timeout(bad_usb->bt); + if (bad_kb->bt) { + update_bt_timeout(bad_kb->bt); FURI_LOG_D(WORKER_TAG, "BLE Key timeout : %u", bt_timeout); } } - if (bad_usb->bt) { + if (bad_kb->bt) { // release all keys bt_hid_hold_while_keyboard_buffer_full(6, 3000); // stop ble - bt_set_status_changed_callback(bad_usb->bt, NULL, NULL); + bt_set_status_changed_callback(bad_kb->bt, NULL, NULL); - bt_disconnect(bad_usb->bt); + bt_disconnect(bad_kb->bt); // Wait 2nd core to update nvm storage furi_delay_ms(200); - bt_keys_storage_set_default_path(bad_usb->bt); + bt_keys_storage_set_default_path(bad_kb->bt); - bt_set_profile_pairing_method(bad_usb->bt, old_pairing_method); + bt_set_profile_pairing_method(bad_kb->bt, old_pairing_method); // fails if ble radio stack isn't ready when switching profile // if it happens, maybe we should increase the delay after bt_disconnect - bt_set_profile(bad_usb->bt, BtProfileSerial); + bt_set_profile(bad_kb->bt, BtProfileSerial); } else { furi_hal_hid_set_state_callback(NULL, NULL); @@ -860,82 +860,82 @@ static int32_t bad_usb_worker(void* context) { storage_file_close(script_file); storage_file_free(script_file); - furi_string_free(bad_usb->line); - furi_string_free(bad_usb->line_prev); + furi_string_free(bad_kb->line); + furi_string_free(bad_kb->line_prev); FURI_LOG_I(WORKER_TAG, "End"); return 0; } -static void bad_usb_script_set_default_keyboard_layout(BadUsbScript* bad_usb) { - furi_assert(bad_usb); - furi_string_set_str(bad_usb->keyboard_layout, ""); - memset(bad_usb->layout, HID_KEYBOARD_NONE, sizeof(bad_usb->layout)); - memcpy(bad_usb->layout, hid_asciimap, MIN(sizeof(hid_asciimap), sizeof(bad_usb->layout))); +static void bad_kb_script_set_default_keyboard_layout(BadKbScript* bad_kb) { + furi_assert(bad_kb); + furi_string_set_str(bad_kb->keyboard_layout, ""); + memset(bad_kb->layout, HID_KEYBOARD_NONE, sizeof(bad_kb->layout)); + memcpy(bad_kb->layout, hid_asciimap, MIN(sizeof(hid_asciimap), sizeof(bad_kb->layout))); } -BadUsbScript* bad_usb_script_open(FuriString* file_path, Bt* bt) { +BadKbScript* bad_kb_script_open(FuriString* file_path, Bt* bt) { furi_assert(file_path); - BadUsbScript* bad_usb = malloc(sizeof(BadUsbScript)); - bad_usb->file_path = furi_string_alloc(); - furi_string_set(bad_usb->file_path, file_path); - bad_usb->keyboard_layout = furi_string_alloc(); - bad_usb_script_set_default_keyboard_layout(bad_usb); + BadKbScript* bad_kb = malloc(sizeof(BadKbScript)); + bad_kb->file_path = furi_string_alloc(); + furi_string_set(bad_kb->file_path, file_path); + bad_kb->keyboard_layout = furi_string_alloc(); + bad_kb_script_set_default_keyboard_layout(bad_kb); - bad_usb->st.state = BadUsbStateInit; - bad_usb->st.error[0] = '\0'; + bad_kb->st.state = BadKbStateInit; + bad_kb->st.error[0] = '\0'; - bad_usb->bt = bt; + bad_kb->bt = bt; - bad_usb->thread = furi_thread_alloc_ex("BadUsbWorker", 2048, bad_usb_worker, bad_usb); - furi_thread_start(bad_usb->thread); - return bad_usb; + bad_kb->thread = furi_thread_alloc_ex("BadKbWorker", 2048, bad_kb_worker, bad_kb); + furi_thread_start(bad_kb->thread); + return bad_kb; } //-V773 -void bad_usb_script_close(BadUsbScript* bad_usb) { - furi_assert(bad_usb); +void bad_kb_script_close(BadKbScript* bad_kb) { + furi_assert(bad_kb); furi_record_close(RECORD_STORAGE); - furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtEnd); - furi_thread_join(bad_usb->thread); - furi_thread_free(bad_usb->thread); - furi_string_free(bad_usb->file_path); - furi_string_free(bad_usb->keyboard_layout); - free(bad_usb); + furi_thread_flags_set(furi_thread_get_id(bad_kb->thread), WorkerEvtEnd); + furi_thread_join(bad_kb->thread); + furi_thread_free(bad_kb->thread); + furi_string_free(bad_kb->file_path); + furi_string_free(bad_kb->keyboard_layout); + free(bad_kb); } -void bad_usb_script_set_keyboard_layout(BadUsbScript* bad_usb, FuriString* layout_path) { - furi_assert(bad_usb); +void bad_kb_script_set_keyboard_layout(BadKbScript* bad_kb, FuriString* layout_path) { + furi_assert(bad_kb); - if((bad_usb->st.state == BadUsbStateRunning) || (bad_usb->st.state == BadUsbStateDelay)) { + if((bad_kb->st.state == BadKbStateRunning) || (bad_kb->st.state == BadKbStateDelay)) { // do not update keyboard layout while a script is running return; } File* layout_file = storage_file_alloc(furi_record_open(RECORD_STORAGE)); if(!furi_string_empty(layout_path)) { - furi_string_set(bad_usb->keyboard_layout, layout_path); + furi_string_set(bad_kb->keyboard_layout, layout_path); if(storage_file_open( layout_file, furi_string_get_cstr(layout_path), FSAM_READ, FSOM_OPEN_EXISTING)) { uint16_t layout[128]; if(storage_file_read(layout_file, layout, sizeof(layout)) == sizeof(layout)) { - memcpy(bad_usb->layout, layout, sizeof(layout)); + memcpy(bad_kb->layout, layout, sizeof(layout)); } } storage_file_close(layout_file); } else { - bad_usb_script_set_default_keyboard_layout(bad_usb); + bad_kb_script_set_default_keyboard_layout(bad_kb); } storage_file_free(layout_file); } -void bad_usb_script_toggle(BadUsbScript* bad_usb) { - furi_assert(bad_usb); - furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtToggle); +void bad_kb_script_toggle(BadKbScript* bad_kb) { + furi_assert(bad_kb); + furi_thread_flags_set(furi_thread_get_id(bad_kb->thread), WorkerEvtToggle); } -BadUsbState* bad_usb_script_get_state(BadUsbScript* bad_usb) { - furi_assert(bad_usb); - return &(bad_usb->st); +BadKbState* bad_kb_script_get_state(BadKbScript* bad_kb) { + furi_assert(bad_kb); + return &(bad_kb->st); } diff --git a/applications/main/bad_kb/bad_kb_script.h b/applications/main/bad_kb/bad_kb_script.h new file mode 100644 index 000000000..35c57c112 --- /dev/null +++ b/applications/main/bad_kb/bad_kb_script.h @@ -0,0 +1,49 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +typedef struct BadKbScript BadKbScript; + +typedef enum { + BadKbStateInit, + BadKbStateNotConnected, + BadKbStateIdle, + BadKbStateWillRun, + BadKbStateRunning, + BadKbStateDelay, + BadKbStateDone, + BadKbStateScriptError, + BadKbStateFileError, +} BadKbWorkerState; + +typedef struct { + BadKbWorkerState state; + uint16_t line_cur; + uint16_t line_nb; + uint32_t delay_remain; + uint16_t error_line; + char error[64]; +} BadKbState; + +BadKbScript* bad_kb_script_open(FuriString* file_path, Bt* bt); + +void bad_kb_script_close(BadKbScript* bad_kb); + +void bad_kb_script_set_keyboard_layout(BadKbScript* bad_kb, FuriString* layout_path); + +void bad_kb_script_start(BadKbScript* bad_kb); + +void bad_kb_script_stop(BadKbScript* bad_kb); + +void bad_kb_script_toggle(BadKbScript* bad_kb); + +BadKbState* bad_kb_script_get_state(BadKbScript* bad_kb); + +#ifdef __cplusplus +} +#endif diff --git a/applications/main/bad_kb/bad_kb_settings_filename.h b/applications/main/bad_kb/bad_kb_settings_filename.h new file mode 100644 index 000000000..3eb7d3c0a --- /dev/null +++ b/applications/main/bad_kb/bad_kb_settings_filename.h @@ -0,0 +1,3 @@ +#pragma once + +#define BAD_KB_SETTINGS_FILE_NAME ".badkb.settings" diff --git a/applications/main/bad_kb/scenes/bad_kb_scene.c b/applications/main/bad_kb/scenes/bad_kb_scene.c new file mode 100644 index 000000000..f90d23a77 --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene.c @@ -0,0 +1,30 @@ +#include "bad_kb_scene.h" + +// Generate scene on_enter handlers array +#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_enter, +void (*const bad_kb_scene_on_enter_handlers[])(void*) = { +#include "bad_kb_scene_config.h" +}; +#undef ADD_SCENE + +// Generate scene on_event handlers array +#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_event, +bool (*const bad_kb_scene_on_event_handlers[])(void* context, SceneManagerEvent event) = { +#include "bad_kb_scene_config.h" +}; +#undef ADD_SCENE + +// Generate scene on_exit handlers array +#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_exit, +void (*const bad_kb_scene_on_exit_handlers[])(void* context) = { +#include "bad_kb_scene_config.h" +}; +#undef ADD_SCENE + +// Initialize scene handlers configuration structure +const SceneManagerHandlers bad_kb_scene_handlers = { + .on_enter_handlers = bad_kb_scene_on_enter_handlers, + .on_event_handlers = bad_kb_scene_on_event_handlers, + .on_exit_handlers = bad_kb_scene_on_exit_handlers, + .scene_num = BadKbSceneNum, +}; diff --git a/applications/main/bad_usb/scenes/bad_usb_scene.h b/applications/main/bad_kb/scenes/bad_kb_scene.h similarity index 68% rename from applications/main/bad_usb/scenes/bad_usb_scene.h rename to applications/main/bad_kb/scenes/bad_kb_scene.h index 68a753210..82db02873 100644 --- a/applications/main/bad_usb/scenes/bad_usb_scene.h +++ b/applications/main/bad_kb/scenes/bad_kb_scene.h @@ -3,27 +3,27 @@ #include // Generate scene id and total number -#define ADD_SCENE(prefix, name, id) BadUsbScene##id, +#define ADD_SCENE(prefix, name, id) BadKbScene##id, typedef enum { -#include "bad_usb_scene_config.h" - BadUsbSceneNum, -} BadUsbScene; +#include "bad_kb_scene_config.h" + BadKbSceneNum, +} BadKbScene; #undef ADD_SCENE -extern const SceneManagerHandlers bad_usb_scene_handlers; +extern const SceneManagerHandlers bad_kb_scene_handlers; // Generate scene on_enter handlers declaration #define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_enter(void*); -#include "bad_usb_scene_config.h" +#include "bad_kb_scene_config.h" #undef ADD_SCENE // Generate scene on_event handlers declaration #define ADD_SCENE(prefix, name, id) \ bool prefix##_scene_##name##_on_event(void* context, SceneManagerEvent event); -#include "bad_usb_scene_config.h" +#include "bad_kb_scene_config.h" #undef ADD_SCENE // Generate scene on_exit handlers declaration #define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_exit(void* context); -#include "bad_usb_scene_config.h" +#include "bad_kb_scene_config.h" #undef ADD_SCENE diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config.h b/applications/main/bad_kb/scenes/bad_kb_scene_config.h new file mode 100644 index 000000000..794468eba --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config.h @@ -0,0 +1,8 @@ +ADD_SCENE(bad_kb, file_select, FileSelect) +ADD_SCENE(bad_kb, work, Work) +ADD_SCENE(bad_kb, error, Error) +ADD_SCENE(bad_kb, config_bt, ConfigBt) +ADD_SCENE(bad_kb, config_usb, ConfigUsb) +ADD_SCENE(bad_kb, config_layout, ConfigLayout) +ADD_SCENE(bad_kb, config_name, ConfigName) +ADD_SCENE(bad_kb, config_mac, ConfigMac) diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c new file mode 100644 index 000000000..fc1d19e76 --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c @@ -0,0 +1,84 @@ +#include "../bad_kb_app_i.h" +#include "furi_hal_power.h" +#include "furi_hal_usb.h" + +enum VarItemListIndex { + VarItemListIndexConnection, + VarItemListIndexKeyboardLayout, + VarItemListIndexAdvertisementName, + VarItemListIndexMacAddress, +}; + +void bad_kb_scene_config_bt_connection_callback(VariableItem* item) { + BadKbApp* bad_kb = variable_item_get_context(item); + bad_kb->is_bt = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexConnection); +} + +void bad_kb_scene_config_bt_var_item_list_callback(void* context, uint32_t index) { + BadKbApp* bad_kb = context; + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, index); +} + +void bad_kb_scene_config_bt_on_enter(void* context) { + BadKbApp* bad_kb = context; + VariableItemList* var_item_list = bad_kb->var_item_list_bt; + VariableItem* item; + + item = variable_item_list_add( + var_item_list, "Connection", 2, bad_kb_scene_config_bt_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, "Keyboard layout", 0, NULL, bad_kb); + + item = variable_item_list_add( + var_item_list, "Change adv name", 0, NULL, bad_kb); + + item = variable_item_list_add( + var_item_list, "Change MAC address", 0, NULL, bad_kb); + + variable_item_list_set_enter_callback(var_item_list, bad_kb_scene_config_bt_var_item_list_callback, bad_kb); + + view_dispatcher_switch_to_view(bad_kb->view_dispatcher, BadKbAppViewConfigBt); +} + +bool bad_kb_scene_config_bt_on_event(void* context, SceneManagerEvent event) { + BadKbApp* bad_kb = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + scene_manager_set_scene_state(bad_kb->scene_manager, BadKbSceneConfigBt, event.event); + consumed = true; + if(event.event == VarItemListIndexKeyboardLayout) { + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigLayout); + } else if(event.event == VarItemListIndexConnection) { + bad_kb_script_close(bad_kb->bad_kb_script); + bad_kb->bad_kb_script = bad_kb_script_open(bad_kb->file_path, bad_kb->is_bt ? bad_kb->bt : NULL); + bad_kb_script_set_keyboard_layout(bad_kb->bad_kb_script, bad_kb->keyboard_layout); + scene_manager_previous_scene(bad_kb->scene_manager); + if (bad_kb->is_bt) { + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigBt); + } else { + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigUsb); + } + } else if(event.event == VarItemListIndexAdvertisementName) { + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigName); + } else if(event.event == VarItemListIndexMacAddress) { + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigMac); + // } else { + // furi_crash("Unknown key type"); + } + } + + return consumed; +} + +void bad_kb_scene_config_bt_on_exit(void* context) { + BadKbApp* bad_kb = context; + VariableItemList* var_item_list = bad_kb->var_item_list_bt; + + variable_item_list_reset(var_item_list); +} diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_layout.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_layout.c new file mode 100644 index 000000000..006ad31bd --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config_layout.c @@ -0,0 +1,48 @@ +#include "../bad_kb_app_i.h" +#include "furi_hal_power.h" +#include "furi_hal_usb.h" +#include + +static bool bad_kb_layout_select(BadKbApp* bad_kb) { + furi_assert(bad_kb); + + FuriString* predefined_path; + predefined_path = furi_string_alloc(); + if(!furi_string_empty(bad_kb->keyboard_layout)) { + furi_string_set(predefined_path, bad_kb->keyboard_layout); + } else { + furi_string_set(predefined_path, BAD_KB_APP_PATH_LAYOUT_FOLDER); + } + + DialogsFileBrowserOptions browser_options; + dialog_file_browser_set_basic_options( + &browser_options, BAD_KB_APP_LAYOUT_EXTENSION, &I_keyboard_10px); + + // Input events and views are managed by file_browser + bool res = dialog_file_browser_show( + bad_kb->dialogs, bad_kb->keyboard_layout, predefined_path, &browser_options); + + furi_string_free(predefined_path); + return res; +} + +void bad_kb_scene_config_layout_on_enter(void* context) { + BadKbApp* bad_kb = context; + + if(bad_kb_layout_select(bad_kb)) { + bad_kb_script_set_keyboard_layout(bad_kb->bad_kb_script, bad_kb->keyboard_layout); + } + scene_manager_previous_scene(bad_kb->scene_manager); +} + +bool bad_kb_scene_config_layout_on_event(void* context, SceneManagerEvent event) { + UNUSED(context); + UNUSED(event); + // BadKbApp* bad_kb = context; + return false; +} + +void bad_kb_scene_config_layout_on_exit(void* context) { + UNUSED(context); + // BadKbApp* bad_kb = context; +} diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_mac.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_mac.c new file mode 100644 index 000000000..0dc4be10a --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config_mac.c @@ -0,0 +1,57 @@ +#include "../bad_kb_app_i.h" + +#define TAG "BadKbConfigMac" + +static uint8_t* reverse_mac_addr(uint8_t* mac) { + uint8_t tmp; + for(int i = 0; i < 3; i++) { + tmp = mac[i]; + mac[i] = mac[5 - i]; + mac[5 - i] = tmp; + } + return mac; +} + +void bad_kb_scene_config_mac_byte_input_callback(void* context) { + BadKbApp* bad_kb = context; + + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, BadKbAppCustomEventByteInputDone); +} + +void bad_kb_scene_config_mac_on_enter(void* context) { + BadKbApp* bad_kb = context; + + // Setup view + ByteInput* byte_input = bad_kb->byte_input; + byte_input_set_header_text(byte_input, "Enter new MAC address"); + byte_input_set_result_callback( + byte_input, + bad_kb_scene_config_mac_byte_input_callback, + NULL, + bad_kb, + reverse_mac_addr(bad_kb->mac), + GAP_MAC_ADDR_SIZE); + view_dispatcher_switch_to_view(bad_kb->view_dispatcher, BadKbAppViewConfigMac); +} + +bool bad_kb_scene_config_mac_on_event(void* context, SceneManagerEvent event) { + BadKbApp* bad_kb = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == BadKbAppCustomEventByteInputDone) { + bt_set_profile_mac_address(bad_kb->bt, reverse_mac_addr(bad_kb->mac)); + scene_manager_previous_scene(bad_kb->scene_manager); + consumed = true; + } + } + return consumed; +} + +void bad_kb_scene_config_mac_on_exit(void* context) { + BadKbApp* bad_kb = context; + + // Clear view + byte_input_set_result_callback(bad_kb->byte_input, NULL, NULL, NULL, NULL, 0); + byte_input_set_header_text(bad_kb->byte_input, ""); +} diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_name.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_name.c new file mode 100644 index 000000000..d3d7628b1 --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config_name.c @@ -0,0 +1,46 @@ +#include "../bad_kb_app_i.h" + +static void bad_kb_scene_config_name_text_input_callback(void* context) { + BadKbApp* bad_kb = context; + + view_dispatcher_send_custom_event( + bad_kb->view_dispatcher, BadKbAppCustomEventTextEditResult); +} + +void bad_kb_scene_config_name_on_enter(void* context) { + BadKbApp* bad_kb = context; + TextInput* text_input = bad_kb->text_input; + + text_input_set_header_text(text_input, "Set BLE adv name"); + + text_input_set_result_callback( + text_input, + bad_kb_scene_config_name_text_input_callback, + bad_kb, + bad_kb->name, + BAD_KB_ADV_NAME_MAX_LEN, + true); + + view_dispatcher_switch_to_view(bad_kb->view_dispatcher, BadKbAppViewConfigName); +} + +bool bad_kb_scene_config_name_on_event(void* context, SceneManagerEvent event) { + BadKbApp* bad_kb = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + consumed = true; + if(event.event == BadKbAppCustomEventTextEditResult) { + bt_set_profile_adv_name(bad_kb->bt, bad_kb->name); + } + scene_manager_previous_scene(bad_kb->scene_manager); + } + return consumed; +} + +void bad_kb_scene_config_name_on_exit(void* context) { + BadKbApp* bad_kb = context; + TextInput* text_input = bad_kb->text_input; + + text_input_reset(text_input); +} diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c new file mode 100644 index 000000000..35c5ab8d2 --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config_usb.c @@ -0,0 +1,72 @@ +#include "../bad_kb_app_i.h" +#include "furi_hal_power.h" +#include "furi_hal_usb.h" + +enum VarItemListIndex { + VarItemListIndexConnection, + VarItemListIndexKeyboardLayout, +}; + +void bad_kb_scene_config_usb_connection_callback(VariableItem* item) { + BadKbApp* bad_kb = variable_item_get_context(item); + bad_kb->is_bt = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexConnection); +} + +void bad_kb_scene_config_usb_var_item_list_callback(void* context, uint32_t index) { + BadKbApp* bad_kb = context; + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, index); +} + +void bad_kb_scene_config_usb_on_enter(void* context) { + BadKbApp* bad_kb = context; + VariableItemList* var_item_list = bad_kb->var_item_list_usb; + VariableItem* item; + + item = variable_item_list_add( + var_item_list, "Connection", 2, bad_kb_scene_config_usb_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, "Keyboard layout", 0, NULL, bad_kb); + + variable_item_list_set_enter_callback(var_item_list, bad_kb_scene_config_usb_var_item_list_callback, bad_kb); + + view_dispatcher_switch_to_view(bad_kb->view_dispatcher, BadKbAppViewConfigUsb); +} + +bool bad_kb_scene_config_usb_on_event(void* context, SceneManagerEvent event) { + BadKbApp* bad_kb = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + scene_manager_set_scene_state(bad_kb->scene_manager, BadKbSceneConfigUsb, event.event); + consumed = true; + if(event.event == VarItemListIndexKeyboardLayout) { + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigLayout); + } else if(event.event == VarItemListIndexConnection) { + bad_kb_script_close(bad_kb->bad_kb_script); + bad_kb->bad_kb_script = bad_kb_script_open(bad_kb->file_path, bad_kb->is_bt ? bad_kb->bt : NULL); + bad_kb_script_set_keyboard_layout(bad_kb->bad_kb_script, bad_kb->keyboard_layout); + scene_manager_previous_scene(bad_kb->scene_manager); + if (bad_kb->is_bt) { + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigBt); + } else { + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigUsb); + } + // } else { + // furi_crash("Unknown key type"); + } + } + + return consumed; +} + +void bad_kb_scene_config_usb_on_exit(void* context) { + BadKbApp* bad_kb = context; + VariableItemList* var_item_list = bad_kb->var_item_list_usb; + + variable_item_list_reset(var_item_list); +} diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_error.c b/applications/main/bad_kb/scenes/bad_kb_scene_error.c similarity index 70% rename from applications/main/bad_usb/scenes/bad_usb_scene_error.c rename to applications/main/bad_kb/scenes/bad_kb_scene_error.c index d1290e0e0..bd1796d7a 100644 --- a/applications/main/bad_usb/scenes/bad_usb_scene_error.c +++ b/applications/main/bad_kb/scenes/bad_kb_scene_error.c @@ -1,20 +1,20 @@ -#include "../bad_usb_app_i.h" +#include "../bad_kb_app_i.h" #include "../../../settings/xtreme_settings/xtreme_settings.h" static void - bad_usb_scene_error_event_callback(GuiButtonType result, InputType type, void* context) { + bad_kb_scene_error_event_callback(GuiButtonType result, InputType type, void* context) { furi_assert(context); - BadUsbApp* app = context; + BadKbApp* app = context; if((result == GuiButtonTypeLeft) && (type == InputTypeShort)) { - view_dispatcher_send_custom_event(app->view_dispatcher, BadUsbCustomEventErrorBack); + view_dispatcher_send_custom_event(app->view_dispatcher, BadKbCustomEventErrorBack); } } -void bad_usb_scene_error_on_enter(void* context) { - BadUsbApp* app = context; +void bad_kb_scene_error_on_enter(void* context) { + BadKbApp* app = context; - if(app->error == BadUsbAppErrorNoFiles) { + if(app->error == BadKbAppErrorNoFiles) { widget_add_icon_element(app->widget, 0, 0, &I_SDQuestion_35x43); widget_add_string_multiline_element( app->widget, @@ -25,8 +25,8 @@ void bad_usb_scene_error_on_enter(void* context) { FontSecondary, "No SD card or\napp data found.\nThis app will not\nwork without\nrequired files."); widget_add_button_element( - app->widget, GuiButtonTypeLeft, "Back", bad_usb_scene_error_event_callback, app); - } else if(app->error == BadUsbAppErrorCloseRpc) { + app->widget, GuiButtonTypeLeft, "Back", bad_kb_scene_error_event_callback, app); + } else if(app->error == BadKbAppErrorCloseRpc) { widget_add_icon_element(app->widget, 78, 0, &I_ActiveConnection_50x64); if(XTREME_SETTINGS()->nsfw_mode) { widget_add_string_multiline_element( @@ -53,15 +53,15 @@ void bad_usb_scene_error_on_enter(void* context) { } } - view_dispatcher_switch_to_view(app->view_dispatcher, BadUsbAppViewError); + view_dispatcher_switch_to_view(app->view_dispatcher, BadKbAppViewError); } -bool bad_usb_scene_error_on_event(void* context, SceneManagerEvent event) { - BadUsbApp* app = context; +bool bad_kb_scene_error_on_event(void* context, SceneManagerEvent event) { + BadKbApp* app = context; bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { - if(event.event == BadUsbCustomEventErrorBack) { + if(event.event == BadKbCustomEventErrorBack) { view_dispatcher_stop(app->view_dispatcher); consumed = true; } @@ -69,7 +69,7 @@ bool bad_usb_scene_error_on_event(void* context, SceneManagerEvent event) { return consumed; } -void bad_usb_scene_error_on_exit(void* context) { - BadUsbApp* app = context; +void bad_kb_scene_error_on_exit(void* context) { + BadKbApp* app = context; widget_reset(app->widget); } diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_file_select.c b/applications/main/bad_kb/scenes/bad_kb_scene_file_select.c new file mode 100644 index 000000000..44012f68d --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_file_select.c @@ -0,0 +1,52 @@ +#include "../bad_kb_app_i.h" +#include "furi_hal_power.h" +#include "furi_hal_usb.h" +#include + +static bool bad_kb_file_select(BadKbApp* bad_kb) { + furi_assert(bad_kb); + + DialogsFileBrowserOptions browser_options; + dialog_file_browser_set_basic_options( + &browser_options, BAD_KB_APP_SCRIPT_EXTENSION, &I_badkb_10px); + browser_options.base_path = BAD_KB_APP_BASE_FOLDER; + browser_options.skip_assets = true; + + // Input events and views are managed by file_browser + bool res = dialog_file_browser_show( + bad_kb->dialogs, bad_kb->file_path, bad_kb->file_path, &browser_options); + + return res; +} + +void bad_kb_scene_file_select_on_enter(void* context) { + BadKbApp* bad_kb = context; + + furi_hal_usb_disable(); + if(bad_kb->bad_kb_script) { + bad_kb_script_close(bad_kb->bad_kb_script); + bad_kb->bad_kb_script = NULL; + } + + if(bad_kb_file_select(bad_kb)) { + bad_kb->bad_kb_script = bad_kb_script_open(bad_kb->file_path, bad_kb->is_bt ? bad_kb->bt : NULL); + bad_kb_script_set_keyboard_layout(bad_kb->bad_kb_script, bad_kb->keyboard_layout); + + scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneWork); + } else { + furi_hal_usb_enable(); + view_dispatcher_stop(bad_kb->view_dispatcher); + } +} + +bool bad_kb_scene_file_select_on_event(void* context, SceneManagerEvent event) { + UNUSED(context); + UNUSED(event); + // BadKbApp* bad_kb = context; + return false; +} + +void bad_kb_scene_file_select_on_exit(void* context) { + UNUSED(context); + // BadKbApp* bad_kb = context; +} diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_work.c b/applications/main/bad_kb/scenes/bad_kb_scene_work.c new file mode 100644 index 000000000..a7eac1786 --- /dev/null +++ b/applications/main/bad_kb/scenes/bad_kb_scene_work.c @@ -0,0 +1,58 @@ +#include "../bad_kb_script.h" +#include "../bad_kb_app_i.h" +#include "../views/bad_kb_view.h" +#include "furi_hal.h" +#include "toolbox/path.h" + +void bad_kb_scene_work_button_callback(InputKey key, void* context) { + furi_assert(context); + BadKbApp* app = context; + view_dispatcher_send_custom_event(app->view_dispatcher, key); +} + +bool bad_kb_scene_work_on_event(void* context, SceneManagerEvent event) { + BadKbApp* app = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == InputKeyLeft) { + if (app->is_bt) { + scene_manager_next_scene(app->scene_manager, BadKbSceneConfigBt); + } else { + scene_manager_next_scene(app->scene_manager, BadKbSceneConfigUsb); + } + consumed = true; + } else if(event.event == InputKeyOk) { + bad_kb_script_toggle(app->bad_kb_script); + consumed = true; + } + } else if(event.type == SceneManagerEventTypeTick) { + bad_kb_set_state(app->bad_kb_view, bad_kb_script_get_state(app->bad_kb_script)); + } + return consumed; +} + +void bad_kb_scene_work_on_enter(void* context) { + BadKbApp* app = context; + + FuriString* file_name; + file_name = furi_string_alloc(); + path_extract_filename(app->file_path, file_name, true); + bad_kb_set_file_name(app->bad_kb_view, furi_string_get_cstr(file_name)); + furi_string_free(file_name); + + FuriString* layout; + layout = furi_string_alloc(); + path_extract_filename(app->keyboard_layout, layout, true); + bad_kb_set_layout(app->bad_kb_view, furi_string_get_cstr(layout)); + furi_string_free(layout); + + bad_kb_set_state(app->bad_kb_view, bad_kb_script_get_state(app->bad_kb_script)); + + bad_kb_set_button_callback(app->bad_kb_view, bad_kb_scene_work_button_callback, app); + view_dispatcher_switch_to_view(app->view_dispatcher, BadKbAppViewWork); +} + +void bad_kb_scene_work_on_exit(void* context) { + UNUSED(context); +} diff --git a/applications/main/bad_usb/views/bad_usb_view.c b/applications/main/bad_kb/views/bad_kb_view.c similarity index 70% rename from applications/main/bad_usb/views/bad_usb_view.c rename to applications/main/bad_kb/views/bad_kb_view.c index ad889cd1c..a0fb39f88 100644 --- a/applications/main/bad_usb/views/bad_usb_view.c +++ b/applications/main/bad_kb/views/bad_kb_view.c @@ -1,5 +1,5 @@ -#include "bad_usb_view.h" -#include "../bad_usb_script.h" +#include "bad_kb_view.h" +#include "../bad_kb_script.h" #include #include #include @@ -7,21 +7,21 @@ #define MAX_NAME_LEN 64 -struct BadUsb { +struct BadKb { View* view; - BadUsbButtonCallback callback; + BadKbButtonCallback callback; void* context; }; typedef struct { char file_name[MAX_NAME_LEN]; char layout[MAX_NAME_LEN]; - BadUsbState state; + BadKbState state; uint8_t anim_frame; -} BadUsbModel; +} BadKbModel; -static void bad_usb_draw_callback(Canvas* canvas, void* _model) { - BadUsbModel* model = _model; +static void bad_kb_draw_callback(Canvas* canvas, void* _model) { + BadKbModel* model = _model; FuriString* disp_str; disp_str = furi_string_alloc_set(model->file_name); @@ -47,25 +47,25 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { canvas_draw_icon(canvas, 22, 24, &I_UsbTree_48x22); - if((model->state.state == BadUsbStateIdle) || (model->state.state == BadUsbStateDone) || - (model->state.state == BadUsbStateNotConnected)) { + if((model->state.state == BadKbStateIdle) || (model->state.state == BadKbStateDone) || + (model->state.state == BadKbStateNotConnected)) { if(xtreme_settings->nsfw_mode) { elements_button_center(canvas, "Cum"); } else { elements_button_center(canvas, "Start"); } - } else if((model->state.state == BadUsbStateRunning) || (model->state.state == BadUsbStateDelay)) { + } else if((model->state.state == BadKbStateRunning) || (model->state.state == BadKbStateDelay)) { elements_button_center(canvas, "Stop"); - } else if(model->state.state == BadUsbStateWillRun) { + } else if(model->state.state == BadKbStateWillRun) { elements_button_center(canvas, "Cancel"); } - if((model->state.state == BadUsbStateNotConnected) || - (model->state.state == BadUsbStateIdle) || (model->state.state == BadUsbStateDone)) { + if((model->state.state == BadKbStateNotConnected) || + (model->state.state == BadKbStateIdle) || (model->state.state == BadKbStateDone)) { elements_button_left(canvas, "Config"); } - if(model->state.state == BadUsbStateNotConnected) { + if(model->state.state == BadKbStateNotConnected) { canvas_draw_icon(canvas, 4, 26, &I_Clock_18x18); canvas_set_font(canvas, FontPrimary); if(xtreme_settings->nsfw_mode) { @@ -75,7 +75,7 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { canvas_draw_str_aligned(canvas, 127, 31, AlignRight, AlignBottom, "Connect to"); canvas_draw_str_aligned(canvas, 127, 43, AlignRight, AlignBottom, "a device"); } - } else if(model->state.state == BadUsbStateWillRun) { + } else if(model->state.state == BadKbStateWillRun) { canvas_draw_icon(canvas, 4, 26, &I_Clock_18x18); canvas_set_font(canvas, FontPrimary); if(xtreme_settings->nsfw_mode) { @@ -84,12 +84,12 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { canvas_draw_str_aligned(canvas, 127, 31, AlignRight, AlignBottom, "Will run"); } canvas_draw_str_aligned(canvas, 127, 43, AlignRight, AlignBottom, "on connect"); - } else if(model->state.state == BadUsbStateFileError) { + } else if(model->state.state == BadKbStateFileError) { canvas_draw_icon(canvas, 4, 26, &I_Error_18x18); canvas_set_font(canvas, FontPrimary); canvas_draw_str_aligned(canvas, 127, 31, AlignRight, AlignBottom, "File"); canvas_draw_str_aligned(canvas, 127, 43, AlignRight, AlignBottom, "ERROR"); - } else if(model->state.state == BadUsbStateScriptError) { + } else if(model->state.state == BadKbStateScriptError) { canvas_draw_icon(canvas, 4, 26, &I_Error_18x18); canvas_set_font(canvas, FontPrimary); canvas_draw_str_aligned(canvas, 127, 33, AlignRight, AlignBottom, "ERROR:"); @@ -99,12 +99,12 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { canvas, 127, 46, AlignRight, AlignBottom, furi_string_get_cstr(disp_str)); furi_string_reset(disp_str); canvas_draw_str_aligned(canvas, 127, 56, AlignRight, AlignBottom, model->state.error); - } else if(model->state.state == BadUsbStateIdle) { + } else if(model->state.state == BadKbStateIdle) { canvas_draw_icon(canvas, 4, 26, &I_Smile_18x18); canvas_set_font(canvas, FontBigNumbers); canvas_draw_str_aligned(canvas, 114, 40, AlignRight, AlignBottom, "0"); canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14); - } else if(model->state.state == BadUsbStateRunning) { + } else if(model->state.state == BadKbStateRunning) { if(model->anim_frame == 0) { canvas_draw_icon(canvas, 4, 23, &I_EviSmile1_18x21); } else { @@ -117,13 +117,13 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { canvas, 114, 40, AlignRight, AlignBottom, furi_string_get_cstr(disp_str)); furi_string_reset(disp_str); canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14); - } else if(model->state.state == BadUsbStateDone) { + } else if(model->state.state == BadKbStateDone) { canvas_draw_icon(canvas, 4, 23, &I_EviSmile1_18x21); canvas_set_font(canvas, FontBigNumbers); canvas_draw_str_aligned(canvas, 114, 40, AlignRight, AlignBottom, "100"); furi_string_reset(disp_str); canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14); - } else if(model->state.state == BadUsbStateDelay) { + } else if(model->state.state == BadKbStateDelay) { if(model->anim_frame == 0) { canvas_draw_icon(canvas, 4, 23, &I_EviWaiting1_18x21); } else { @@ -148,84 +148,84 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { furi_string_free(disp_str); } -static bool bad_usb_input_callback(InputEvent* event, void* context) { +static bool bad_kb_input_callback(InputEvent* event, void* context) { furi_assert(context); - BadUsb* bad_usb = context; + BadKb* bad_kb = context; bool consumed = false; if(event->type == InputTypeShort) { if((event->key == InputKeyLeft) || (event->key == InputKeyOk)) { consumed = true; - furi_assert(bad_usb->callback); - bad_usb->callback(event->key, bad_usb->context); + furi_assert(bad_kb->callback); + bad_kb->callback(event->key, bad_kb->context); } } return consumed; } -BadUsb* bad_usb_alloc() { - BadUsb* bad_usb = malloc(sizeof(BadUsb)); +BadKb* bad_kb_alloc() { + BadKb* bad_kb = malloc(sizeof(BadKb)); - bad_usb->view = view_alloc(); - view_allocate_model(bad_usb->view, ViewModelTypeLocking, sizeof(BadUsbModel)); - view_set_context(bad_usb->view, bad_usb); - view_set_draw_callback(bad_usb->view, bad_usb_draw_callback); - view_set_input_callback(bad_usb->view, bad_usb_input_callback); + bad_kb->view = view_alloc(); + view_allocate_model(bad_kb->view, ViewModelTypeLocking, sizeof(BadKbModel)); + view_set_context(bad_kb->view, bad_kb); + view_set_draw_callback(bad_kb->view, bad_kb_draw_callback); + view_set_input_callback(bad_kb->view, bad_kb_input_callback); - return bad_usb; + return bad_kb; } -void bad_usb_free(BadUsb* bad_usb) { - furi_assert(bad_usb); - view_free(bad_usb->view); - free(bad_usb); +void bad_kb_free(BadKb* bad_kb) { + furi_assert(bad_kb); + view_free(bad_kb->view); + free(bad_kb); } -View* bad_usb_get_view(BadUsb* bad_usb) { - furi_assert(bad_usb); - return bad_usb->view; +View* bad_kb_get_view(BadKb* bad_kb) { + furi_assert(bad_kb); + return bad_kb->view; } -void bad_usb_set_button_callback(BadUsb* bad_usb, BadUsbButtonCallback callback, void* context) { - furi_assert(bad_usb); +void bad_kb_set_button_callback(BadKb* bad_kb, BadKbButtonCallback callback, void* context) { + furi_assert(bad_kb); furi_assert(callback); with_view_model( - bad_usb->view, - BadUsbModel * model, + bad_kb->view, + BadKbModel * model, { UNUSED(model); - bad_usb->callback = callback; - bad_usb->context = context; + bad_kb->callback = callback; + bad_kb->context = context; }, true); } -void bad_usb_set_file_name(BadUsb* bad_usb, const char* name) { +void bad_kb_set_file_name(BadKb* bad_kb, const char* name) { furi_assert(name); with_view_model( - bad_usb->view, - BadUsbModel * model, + bad_kb->view, + BadKbModel * model, { strlcpy(model->file_name, name, MAX_NAME_LEN); }, true); } -void bad_usb_set_layout(BadUsb* bad_usb, const char* layout) { +void bad_kb_set_layout(BadKb* bad_kb, const char* layout) { furi_assert(layout); with_view_model( - bad_usb->view, - BadUsbModel * model, + bad_kb->view, + BadKbModel * model, { strlcpy(model->layout, layout, MAX_NAME_LEN); }, true); } -void bad_usb_set_state(BadUsb* bad_usb, BadUsbState* st) { +void bad_kb_set_state(BadKb* bad_kb, BadKbState* st) { furi_assert(st); with_view_model( - bad_usb->view, - BadUsbModel * model, + bad_kb->view, + BadKbModel * model, { - memcpy(&(model->state), st, sizeof(BadUsbState)); + memcpy(&(model->state), st, sizeof(BadKbState)); model->anim_frame ^= 1; }, true); diff --git a/applications/main/bad_kb/views/bad_kb_view.h b/applications/main/bad_kb/views/bad_kb_view.h new file mode 100644 index 000000000..24fdf4792 --- /dev/null +++ b/applications/main/bad_kb/views/bad_kb_view.h @@ -0,0 +1,21 @@ +#pragma once + +#include +#include "../bad_kb_script.h" + +typedef struct BadKb BadKb; +typedef void (*BadKbButtonCallback)(InputKey key, void* context); + +BadKb* bad_kb_alloc(); + +void bad_kb_free(BadKb* bad_kb); + +View* bad_kb_get_view(BadKb* bad_kb); + +void bad_kb_set_button_callback(BadKb* bad_kb, BadKbButtonCallback callback, void* context); + +void bad_kb_set_file_name(BadKb* bad_kb, const char* name); + +void bad_kb_set_layout(BadKb* bad_kb, const char* layout); + +void bad_kb_set_state(BadKb* bad_kb, BadKbState* st); diff --git a/applications/main/bad_usb/bad_usb_app.h b/applications/main/bad_usb/bad_usb_app.h deleted file mode 100644 index 4192a59c9..000000000 --- a/applications/main/bad_usb/bad_usb_app.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct BadUsbApp BadUsbApp; - -void bad_usb_set_name(BadUsbApp* app, const char* fmt, ...); - -#ifdef __cplusplus -} -#endif diff --git a/applications/main/bad_usb/bad_usb_app_i.h b/applications/main/bad_usb/bad_usb_app_i.h deleted file mode 100644 index abd252bb4..000000000 --- a/applications/main/bad_usb/bad_usb_app_i.h +++ /dev/null @@ -1,80 +0,0 @@ -#pragma once - -#include "bad_usb_app.h" -#include "scenes/bad_usb_scene.h" -#include "bad_usb_script.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "views/bad_usb_view.h" - -#define BAD_USB_APP_BASE_FOLDER ANY_PATH("badusb") -#define BAD_USB_APP_PATH_LAYOUT_FOLDER BAD_USB_APP_BASE_FOLDER "/layouts" -#define BAD_USB_APP_SCRIPT_EXTENSION ".txt" -#define BAD_USB_APP_LAYOUT_EXTENSION ".kl" - -#define BAD_USB_MAC_ADDRESS_LEN 6 // need replace with MAC size maccro -#define BAD_USB_ADV_NAME_MAX_LEN 18 - -typedef enum { - BadUsbAppErrorNoFiles, - BadUsbAppErrorCloseRpc, -} BadUsbAppError; - -typedef enum BadUsbCustomEvent { - BadUsbAppCustomEventTextEditResult, - BadUsbAppCustomEventByteInputDone, - BadUsbCustomEventErrorBack -} BadUsbCustomEvent; - -typedef struct { - uint8_t mac[BAD_USB_MAC_ADDRESS_LEN]; - char name[BAD_USB_ADV_NAME_MAX_LEN + 1]; - - // number of bt keys before starting the app (all keys added in - // the bt keys file then will be removed) - uint16_t n_keys; -} BadUsbBtConfig; - -struct BadUsbApp { - Gui* gui; - ViewDispatcher* view_dispatcher; - SceneManager* scene_manager; - NotificationApp* notifications; - DialogsApp* dialogs; - Widget* widget; - VariableItemList* var_item_list_bt; - VariableItemList* var_item_list_usb; - - Bt* bt; - TextInput* text_input; - ByteInput* byte_input; - uint8_t mac[BAD_USB_MAC_ADDRESS_LEN]; - char name[BAD_USB_ADV_NAME_MAX_LEN + 1]; - BadUsbBtConfig bt_old_config; - - BadUsbAppError error; - FuriString* file_path; - FuriString* keyboard_layout; - BadUsb* bad_usb_view; - BadUsbScript* bad_usb_script; - - bool is_bt; -}; - -typedef enum { - BadUsbAppViewError, - BadUsbAppViewWork, - BadUsbAppViewConfigBt, - BadUsbAppViewConfigUsb, - BadUsbAppViewConfigMac, - BadUsbAppViewConfigName -} BadUsbAppView; diff --git a/applications/main/bad_usb/bad_usb_script.h b/applications/main/bad_usb/bad_usb_script.h deleted file mode 100644 index 5c37bcec2..000000000 --- a/applications/main/bad_usb/bad_usb_script.h +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -typedef struct BadUsbScript BadUsbScript; - -typedef enum { - BadUsbStateInit, - BadUsbStateNotConnected, - BadUsbStateIdle, - BadUsbStateWillRun, - BadUsbStateRunning, - BadUsbStateDelay, - BadUsbStateDone, - BadUsbStateScriptError, - BadUsbStateFileError, -} BadUsbWorkerState; - -typedef struct { - BadUsbWorkerState state; - uint16_t line_cur; - uint16_t line_nb; - uint32_t delay_remain; - uint16_t error_line; - char error[64]; -} BadUsbState; - -BadUsbScript* bad_usb_script_open(FuriString* file_path, Bt* bt); - -void bad_usb_script_close(BadUsbScript* bad_usb); - -void bad_usb_script_set_keyboard_layout(BadUsbScript* bad_usb, FuriString* layout_path); - -void bad_usb_script_start(BadUsbScript* bad_usb); - -void bad_usb_script_stop(BadUsbScript* bad_usb); - -void bad_usb_script_toggle(BadUsbScript* bad_usb); - -BadUsbState* bad_usb_script_get_state(BadUsbScript* bad_usb); - -#ifdef __cplusplus -} -#endif diff --git a/applications/main/bad_usb/bad_usb_settings_filename.h b/applications/main/bad_usb/bad_usb_settings_filename.h deleted file mode 100644 index 12ba8f31c..000000000 --- a/applications/main/bad_usb/bad_usb_settings_filename.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#define BAD_USB_SETTINGS_FILE_NAME ".badusb.settings" diff --git a/applications/main/bad_usb/scenes/bad_usb_scene.c b/applications/main/bad_usb/scenes/bad_usb_scene.c deleted file mode 100644 index 03c7c4471..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "bad_usb_scene.h" - -// Generate scene on_enter handlers array -#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_enter, -void (*const bad_usb_scene_on_enter_handlers[])(void*) = { -#include "bad_usb_scene_config.h" -}; -#undef ADD_SCENE - -// Generate scene on_event handlers array -#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_event, -bool (*const bad_usb_scene_on_event_handlers[])(void* context, SceneManagerEvent event) = { -#include "bad_usb_scene_config.h" -}; -#undef ADD_SCENE - -// Generate scene on_exit handlers array -#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_exit, -void (*const bad_usb_scene_on_exit_handlers[])(void* context) = { -#include "bad_usb_scene_config.h" -}; -#undef ADD_SCENE - -// Initialize scene handlers configuration structure -const SceneManagerHandlers bad_usb_scene_handlers = { - .on_enter_handlers = bad_usb_scene_on_enter_handlers, - .on_event_handlers = bad_usb_scene_on_event_handlers, - .on_exit_handlers = bad_usb_scene_on_exit_handlers, - .scene_num = BadUsbSceneNum, -}; diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_config.h b/applications/main/bad_usb/scenes/bad_usb_scene_config.h deleted file mode 100644 index 2524464f1..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene_config.h +++ /dev/null @@ -1,8 +0,0 @@ -ADD_SCENE(bad_usb, file_select, FileSelect) -ADD_SCENE(bad_usb, work, Work) -ADD_SCENE(bad_usb, error, Error) -ADD_SCENE(bad_usb, config_bt, ConfigBt) -ADD_SCENE(bad_usb, config_usb, ConfigUsb) -ADD_SCENE(bad_usb, config_layout, ConfigLayout) -ADD_SCENE(bad_usb, config_name, ConfigName) -ADD_SCENE(bad_usb, config_mac, ConfigMac) diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_config_bt.c b/applications/main/bad_usb/scenes/bad_usb_scene_config_bt.c deleted file mode 100644 index 7071e748e..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene_config_bt.c +++ /dev/null @@ -1,84 +0,0 @@ -#include "../bad_usb_app_i.h" -#include "furi_hal_power.h" -#include "furi_hal_usb.h" - -enum VarItemListIndex { - VarItemListIndexConnection, - VarItemListIndexKeyboardLayout, - VarItemListIndexAdvertisementName, - VarItemListIndexMacAddress, -}; - -void bad_usb_scene_config_bt_connection_callback(VariableItem* item) { - BadUsbApp* bad_usb = variable_item_get_context(item); - bad_usb->is_bt = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, bad_usb->is_bt ? "BT" : "USB"); - view_dispatcher_send_custom_event(bad_usb->view_dispatcher, VarItemListIndexConnection); -} - -void bad_usb_scene_config_bt_var_item_list_callback(void* context, uint32_t index) { - BadUsbApp* bad_usb = context; - view_dispatcher_send_custom_event(bad_usb->view_dispatcher, index); -} - -void bad_usb_scene_config_bt_on_enter(void* context) { - BadUsbApp* bad_usb = context; - VariableItemList* var_item_list = bad_usb->var_item_list_bt; - VariableItem* item; - - item = variable_item_list_add( - var_item_list, "Connection", 2, bad_usb_scene_config_bt_connection_callback, bad_usb); - variable_item_set_current_value_index(item, bad_usb->is_bt); - variable_item_set_current_value_text(item, bad_usb->is_bt ? "BT" : "USB"); - - item = variable_item_list_add( - var_item_list, "Keyboard layout", 0, NULL, bad_usb); - - item = variable_item_list_add( - var_item_list, "Change adv name", 0, NULL, bad_usb); - - item = variable_item_list_add( - var_item_list, "Change MAC address", 0, NULL, bad_usb); - - variable_item_list_set_enter_callback(var_item_list, bad_usb_scene_config_bt_var_item_list_callback, bad_usb); - - view_dispatcher_switch_to_view(bad_usb->view_dispatcher, BadUsbAppViewConfigBt); -} - -bool bad_usb_scene_config_bt_on_event(void* context, SceneManagerEvent event) { - BadUsbApp* bad_usb = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - scene_manager_set_scene_state(bad_usb->scene_manager, BadUsbSceneConfigBt, event.event); - consumed = true; - if(event.event == VarItemListIndexKeyboardLayout) { - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneConfigLayout); - } else if(event.event == VarItemListIndexConnection) { - bad_usb_script_close(bad_usb->bad_usb_script); - bad_usb->bad_usb_script = bad_usb_script_open(bad_usb->file_path, bad_usb->is_bt ? bad_usb->bt : NULL); - bad_usb_script_set_keyboard_layout(bad_usb->bad_usb_script, bad_usb->keyboard_layout); - scene_manager_previous_scene(bad_usb->scene_manager); - if (bad_usb->is_bt) { - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneConfigBt); - } else { - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneConfigUsb); - } - } else if(event.event == VarItemListIndexAdvertisementName) { - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneConfigName); - } else if(event.event == VarItemListIndexMacAddress) { - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneConfigMac); - // } else { - // furi_crash("Unknown key type"); - } - } - - return consumed; -} - -void bad_usb_scene_config_bt_on_exit(void* context) { - BadUsbApp* bad_usb = context; - VariableItemList* var_item_list = bad_usb->var_item_list_bt; - - variable_item_list_reset(var_item_list); -} diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_config_layout.c b/applications/main/bad_usb/scenes/bad_usb_scene_config_layout.c deleted file mode 100644 index 44dcd55af..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene_config_layout.c +++ /dev/null @@ -1,48 +0,0 @@ -#include "../bad_usb_app_i.h" -#include "furi_hal_power.h" -#include "furi_hal_usb.h" -#include - -static bool bad_usb_layout_select(BadUsbApp* bad_usb) { - furi_assert(bad_usb); - - FuriString* predefined_path; - predefined_path = furi_string_alloc(); - if(!furi_string_empty(bad_usb->keyboard_layout)) { - furi_string_set(predefined_path, bad_usb->keyboard_layout); - } else { - furi_string_set(predefined_path, BAD_USB_APP_PATH_LAYOUT_FOLDER); - } - - DialogsFileBrowserOptions browser_options; - dialog_file_browser_set_basic_options( - &browser_options, BAD_USB_APP_LAYOUT_EXTENSION, &I_keyboard_10px); - - // Input events and views are managed by file_browser - bool res = dialog_file_browser_show( - bad_usb->dialogs, bad_usb->keyboard_layout, predefined_path, &browser_options); - - furi_string_free(predefined_path); - return res; -} - -void bad_usb_scene_config_layout_on_enter(void* context) { - BadUsbApp* bad_usb = context; - - if(bad_usb_layout_select(bad_usb)) { - bad_usb_script_set_keyboard_layout(bad_usb->bad_usb_script, bad_usb->keyboard_layout); - } - scene_manager_previous_scene(bad_usb->scene_manager); -} - -bool bad_usb_scene_config_layout_on_event(void* context, SceneManagerEvent event) { - UNUSED(context); - UNUSED(event); - // BadUsbApp* bad_usb = context; - return false; -} - -void bad_usb_scene_config_layout_on_exit(void* context) { - UNUSED(context); - // BadUsbApp* bad_usb = context; -} diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_config_mac.c b/applications/main/bad_usb/scenes/bad_usb_scene_config_mac.c deleted file mode 100644 index 597cbcbd7..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene_config_mac.c +++ /dev/null @@ -1,57 +0,0 @@ -#include "../bad_usb_app_i.h" - -#define TAG "BadUsbConfigMac" - -static uint8_t* reverse_mac_addr(uint8_t* mac) { - uint8_t tmp; - for(int i = 0; i < 3; i++) { - tmp = mac[i]; - mac[i] = mac[5 - i]; - mac[5 - i] = tmp; - } - return mac; -} - -void bad_usb_scene_config_mac_byte_input_callback(void* context) { - BadUsbApp* bad_usb = context; - - view_dispatcher_send_custom_event(bad_usb->view_dispatcher, BadUsbAppCustomEventByteInputDone); -} - -void bad_usb_scene_config_mac_on_enter(void* context) { - BadUsbApp* bad_usb = context; - - // Setup view - ByteInput* byte_input = bad_usb->byte_input; - byte_input_set_header_text(byte_input, "Enter new MAC address"); - byte_input_set_result_callback( - byte_input, - bad_usb_scene_config_mac_byte_input_callback, - NULL, - bad_usb, - reverse_mac_addr(bad_usb->mac), - GAP_MAC_ADDR_SIZE); - view_dispatcher_switch_to_view(bad_usb->view_dispatcher, BadUsbAppViewConfigMac); -} - -bool bad_usb_scene_config_mac_on_event(void* context, SceneManagerEvent event) { - BadUsbApp* bad_usb = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - if(event.event == BadUsbAppCustomEventByteInputDone) { - bt_set_profile_mac_address(bad_usb->bt, reverse_mac_addr(bad_usb->mac)); - scene_manager_previous_scene(bad_usb->scene_manager); - consumed = true; - } - } - return consumed; -} - -void bad_usb_scene_config_mac_on_exit(void* context) { - BadUsbApp* bad_usb = context; - - // Clear view - byte_input_set_result_callback(bad_usb->byte_input, NULL, NULL, NULL, NULL, 0); - byte_input_set_header_text(bad_usb->byte_input, ""); -} diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_config_name.c b/applications/main/bad_usb/scenes/bad_usb_scene_config_name.c deleted file mode 100644 index c22558d58..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene_config_name.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "../bad_usb_app_i.h" - -static void bad_usb_scene_config_name_text_input_callback(void* context) { - BadUsbApp* bad_usb = context; - - view_dispatcher_send_custom_event( - bad_usb->view_dispatcher, BadUsbAppCustomEventTextEditResult); -} - -void bad_usb_scene_config_name_on_enter(void* context) { - BadUsbApp* bad_usb = context; - TextInput* text_input = bad_usb->text_input; - - text_input_set_header_text(text_input, "Set BLE adv name"); - - text_input_set_result_callback( - text_input, - bad_usb_scene_config_name_text_input_callback, - bad_usb, - bad_usb->name, - BAD_USB_ADV_NAME_MAX_LEN, - true); - - view_dispatcher_switch_to_view(bad_usb->view_dispatcher, BadUsbAppViewConfigName); -} - -bool bad_usb_scene_config_name_on_event(void* context, SceneManagerEvent event) { - BadUsbApp* bad_usb = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - consumed = true; - if(event.event == BadUsbAppCustomEventTextEditResult) { - bt_set_profile_adv_name(bad_usb->bt, bad_usb->name); - } - scene_manager_previous_scene(bad_usb->scene_manager); - } - return consumed; -} - -void bad_usb_scene_config_name_on_exit(void* context) { - BadUsbApp* bad_usb = context; - TextInput* text_input = bad_usb->text_input; - - text_input_reset(text_input); -} diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_config_usb.c b/applications/main/bad_usb/scenes/bad_usb_scene_config_usb.c deleted file mode 100644 index af7abd570..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene_config_usb.c +++ /dev/null @@ -1,72 +0,0 @@ -#include "../bad_usb_app_i.h" -#include "furi_hal_power.h" -#include "furi_hal_usb.h" - -enum VarItemListIndex { - VarItemListIndexConnection, - VarItemListIndexKeyboardLayout, -}; - -void bad_usb_scene_config_usb_connection_callback(VariableItem* item) { - BadUsbApp* bad_usb = variable_item_get_context(item); - bad_usb->is_bt = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, bad_usb->is_bt ? "BT" : "USB"); - view_dispatcher_send_custom_event(bad_usb->view_dispatcher, VarItemListIndexConnection); -} - -void bad_usb_scene_config_usb_var_item_list_callback(void* context, uint32_t index) { - BadUsbApp* bad_usb = context; - view_dispatcher_send_custom_event(bad_usb->view_dispatcher, index); -} - -void bad_usb_scene_config_usb_on_enter(void* context) { - BadUsbApp* bad_usb = context; - VariableItemList* var_item_list = bad_usb->var_item_list_usb; - VariableItem* item; - - item = variable_item_list_add( - var_item_list, "Connection", 2, bad_usb_scene_config_usb_connection_callback, bad_usb); - variable_item_set_current_value_index(item, bad_usb->is_bt); - variable_item_set_current_value_text(item, bad_usb->is_bt ? "BT" : "USB"); - - item = variable_item_list_add( - var_item_list, "Keyboard layout", 0, NULL, bad_usb); - - variable_item_list_set_enter_callback(var_item_list, bad_usb_scene_config_usb_var_item_list_callback, bad_usb); - - view_dispatcher_switch_to_view(bad_usb->view_dispatcher, BadUsbAppViewConfigUsb); -} - -bool bad_usb_scene_config_usb_on_event(void* context, SceneManagerEvent event) { - BadUsbApp* bad_usb = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - scene_manager_set_scene_state(bad_usb->scene_manager, BadUsbSceneConfigUsb, event.event); - consumed = true; - if(event.event == VarItemListIndexKeyboardLayout) { - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneConfigLayout); - } else if(event.event == VarItemListIndexConnection) { - bad_usb_script_close(bad_usb->bad_usb_script); - bad_usb->bad_usb_script = bad_usb_script_open(bad_usb->file_path, bad_usb->is_bt ? bad_usb->bt : NULL); - bad_usb_script_set_keyboard_layout(bad_usb->bad_usb_script, bad_usb->keyboard_layout); - scene_manager_previous_scene(bad_usb->scene_manager); - if (bad_usb->is_bt) { - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneConfigBt); - } else { - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneConfigUsb); - } - // } else { - // furi_crash("Unknown key type"); - } - } - - return consumed; -} - -void bad_usb_scene_config_usb_on_exit(void* context) { - BadUsbApp* bad_usb = context; - VariableItemList* var_item_list = bad_usb->var_item_list_usb; - - variable_item_list_reset(var_item_list); -} diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_file_select.c b/applications/main/bad_usb/scenes/bad_usb_scene_file_select.c deleted file mode 100644 index eb72f1765..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene_file_select.c +++ /dev/null @@ -1,52 +0,0 @@ -#include "../bad_usb_app_i.h" -#include "furi_hal_power.h" -#include "furi_hal_usb.h" -#include - -static bool bad_usb_file_select(BadUsbApp* bad_usb) { - furi_assert(bad_usb); - - DialogsFileBrowserOptions browser_options; - dialog_file_browser_set_basic_options( - &browser_options, BAD_USB_APP_SCRIPT_EXTENSION, &I_badusb_10px); - browser_options.base_path = BAD_USB_APP_BASE_FOLDER; - browser_options.skip_assets = true; - - // Input events and views are managed by file_browser - bool res = dialog_file_browser_show( - bad_usb->dialogs, bad_usb->file_path, bad_usb->file_path, &browser_options); - - return res; -} - -void bad_usb_scene_file_select_on_enter(void* context) { - BadUsbApp* bad_usb = context; - - furi_hal_usb_disable(); - if(bad_usb->bad_usb_script) { - bad_usb_script_close(bad_usb->bad_usb_script); - bad_usb->bad_usb_script = NULL; - } - - if(bad_usb_file_select(bad_usb)) { - bad_usb->bad_usb_script = bad_usb_script_open(bad_usb->file_path, bad_usb->is_bt ? bad_usb->bt : NULL); - bad_usb_script_set_keyboard_layout(bad_usb->bad_usb_script, bad_usb->keyboard_layout); - - scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneWork); - } else { - furi_hal_usb_enable(); - view_dispatcher_stop(bad_usb->view_dispatcher); - } -} - -bool bad_usb_scene_file_select_on_event(void* context, SceneManagerEvent event) { - UNUSED(context); - UNUSED(event); - // BadUsbApp* bad_usb = context; - return false; -} - -void bad_usb_scene_file_select_on_exit(void* context) { - UNUSED(context); - // BadUsbApp* bad_usb = context; -} diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_work.c b/applications/main/bad_usb/scenes/bad_usb_scene_work.c deleted file mode 100644 index 03a8114e0..000000000 --- a/applications/main/bad_usb/scenes/bad_usb_scene_work.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "../bad_usb_script.h" -#include "../bad_usb_app_i.h" -#include "../views/bad_usb_view.h" -#include "furi_hal.h" -#include "toolbox/path.h" - -void bad_usb_scene_work_button_callback(InputKey key, void* context) { - furi_assert(context); - BadUsbApp* app = context; - view_dispatcher_send_custom_event(app->view_dispatcher, key); -} - -bool bad_usb_scene_work_on_event(void* context, SceneManagerEvent event) { - BadUsbApp* app = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - if(event.event == InputKeyLeft) { - if (app->is_bt) { - scene_manager_next_scene(app->scene_manager, BadUsbSceneConfigBt); - } else { - scene_manager_next_scene(app->scene_manager, BadUsbSceneConfigUsb); - } - consumed = true; - } else if(event.event == InputKeyOk) { - bad_usb_script_toggle(app->bad_usb_script); - consumed = true; - } - } else if(event.type == SceneManagerEventTypeTick) { - bad_usb_set_state(app->bad_usb_view, bad_usb_script_get_state(app->bad_usb_script)); - } - return consumed; -} - -void bad_usb_scene_work_on_enter(void* context) { - BadUsbApp* app = context; - - FuriString* file_name; - file_name = furi_string_alloc(); - path_extract_filename(app->file_path, file_name, true); - bad_usb_set_file_name(app->bad_usb_view, furi_string_get_cstr(file_name)); - furi_string_free(file_name); - - FuriString* layout; - layout = furi_string_alloc(); - path_extract_filename(app->keyboard_layout, layout, true); - bad_usb_set_layout(app->bad_usb_view, furi_string_get_cstr(layout)); - furi_string_free(layout); - - bad_usb_set_state(app->bad_usb_view, bad_usb_script_get_state(app->bad_usb_script)); - - bad_usb_set_button_callback(app->bad_usb_view, bad_usb_scene_work_button_callback, app); - view_dispatcher_switch_to_view(app->view_dispatcher, BadUsbAppViewWork); -} - -void bad_usb_scene_work_on_exit(void* context) { - UNUSED(context); -} diff --git a/applications/main/bad_usb/views/bad_usb_view.h b/applications/main/bad_usb/views/bad_usb_view.h deleted file mode 100644 index 8447fb055..000000000 --- a/applications/main/bad_usb/views/bad_usb_view.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include -#include "../bad_usb_script.h" - -typedef struct BadUsb BadUsb; -typedef void (*BadUsbButtonCallback)(InputKey key, void* context); - -BadUsb* bad_usb_alloc(); - -void bad_usb_free(BadUsb* bad_usb); - -View* bad_usb_get_view(BadUsb* bad_usb); - -void bad_usb_set_button_callback(BadUsb* bad_usb, BadUsbButtonCallback callback, void* context); - -void bad_usb_set_file_name(BadUsb* bad_usb, const char* name); - -void bad_usb_set_layout(BadUsb* bad_usb, const char* layout); - -void bad_usb_set_state(BadUsb* bad_usb, BadUsbState* st); diff --git a/applications/plugins/dolphinbackup/storage_DolphinBackup.c b/applications/plugins/dolphinbackup/storage_DolphinBackup.c index 02baddc0f..7e7bd8f36 100644 --- a/applications/plugins/dolphinbackup/storage_DolphinBackup.c +++ b/applications/plugins/dolphinbackup/storage_DolphinBackup.c @@ -16,7 +16,7 @@ static const char* app_dirsDolphinBackup[] = { "nfc", "infrared", "ibutton", - "badusb", + "badkb", ".bt.settings", ".desktop.settings", ".dolphin.state", diff --git a/applications/plugins/mousejacker/icons/badusb_10px.png b/applications/plugins/mousejacker/icons/badkb_10px.png similarity index 100% rename from applications/plugins/mousejacker/icons/badusb_10px.png rename to applications/plugins/mousejacker/icons/badkb_10px.png diff --git a/applications/plugins/mousejacker/images/badusb_10px.png b/applications/plugins/mousejacker/images/badkb_10px.png similarity index 100% rename from applications/plugins/mousejacker/images/badusb_10px.png rename to applications/plugins/mousejacker/images/badkb_10px.png diff --git a/applications/plugins/mousejacker/mousejacker.c b/applications/plugins/mousejacker/mousejacker.c index c45b0e502..3bd772889 100644 --- a/applications/plugins/mousejacker/mousejacker.c +++ b/applications/plugins/mousejacker/mousejacker.c @@ -112,7 +112,7 @@ static bool open_ducky_script(Stream* stream, PluginState* plugin_state) { DialogsFileBrowserOptions browser_options; dialog_file_browser_set_basic_options( - &browser_options, MOUSEJACKER_APP_PATH_EXTENSION, &I_badusb_10px); + &browser_options, MOUSEJACKER_APP_PATH_EXTENSION, &I_badkb_10px); browser_options.hide_ext = false; bool ret = dialog_file_browser_show(dialogs, path, path, &browser_options); @@ -396,4 +396,4 @@ int32_t mousejacker_app(void* p) { free(plugin_state); return 0; -} \ No newline at end of file +} diff --git a/applications/plugins/totp/services/config/config.c b/applications/plugins/totp/services/config/config.c index cd19d19d4..c5193ac2e 100644 --- a/applications/plugins/totp/services/config/config.c +++ b/applications/plugins/totp/services/config/config.c @@ -132,7 +132,7 @@ static TotpConfigFileOpenResult totp_open_config_file(Storage* storage, FlipperF flipper_format_write_comment_cstr(fff_data_file, " "); flipper_format_write_comment_cstr( fff_data_file, - "How to notify user when new token is generated or badusb mode is activated (possible values: 0 - do not notify, 1 - sound, 2 - vibro, 3 sound and vibro)"); + "How to notify user when new token is generated or badkb mode is activated (possible values: 0 - do not notify, 1 - sound, 2 - vibro, 3 sound and vibro)"); flipper_format_write_uint32( fff_data_file, TOTP_CONFIG_KEY_NOTIFICATION_METHOD, &tmp_uint32, 1); @@ -769,4 +769,4 @@ void totp_config_file_reset() { Storage* storage = totp_open_storage(); storage_simply_remove(storage, CONFIG_FILE_PATH); totp_close_storage(); -} \ No newline at end of file +} diff --git a/applications/plugins/totp/ui/scenes/generate_token/totp_scene_generate_token.c b/applications/plugins/totp/ui/scenes/generate_token/totp_scene_generate_token.c index 41c52b435..18d1791f4 100644 --- a/applications/plugins/totp/ui/scenes/generate_token/totp_scene_generate_token.c +++ b/applications/plugins/totp/ui/scenes/generate_token/totp_scene_generate_token.c @@ -24,7 +24,7 @@ typedef struct { uint32_t last_token_gen_time; TotpTypeCodeWorkerContext* type_code_worker_context; NotificationMessage const** notification_sequence_new_token; - NotificationMessage const** notification_sequence_badusb; + NotificationMessage const** notification_sequence_badkb; } SceneState; static const NotificationSequence* @@ -69,8 +69,8 @@ static const NotificationSequence* } static const NotificationSequence* - get_notification_sequence_badusb(const PluginState* plugin_state, SceneState* scene_state) { - if(scene_state->notification_sequence_badusb == NULL) { + get_notification_sequence_badkb(const PluginState* plugin_state, SceneState* scene_state) { + if(scene_state->notification_sequence_badkb == NULL) { uint8_t i = 0; uint8_t length = 3; if(plugin_state->notification_method & NotificationMethodVibro) { @@ -81,36 +81,36 @@ static const NotificationSequence* length += 6; } - scene_state->notification_sequence_badusb = malloc(sizeof(void*) * length); - furi_check(scene_state->notification_sequence_badusb != NULL); + scene_state->notification_sequence_badkb = malloc(sizeof(void*) * length); + furi_check(scene_state->notification_sequence_badkb != NULL); - scene_state->notification_sequence_badusb[i++] = &message_blue_255; + scene_state->notification_sequence_badkb[i++] = &message_blue_255; if(plugin_state->notification_method & NotificationMethodVibro) { - scene_state->notification_sequence_badusb[i++] = &message_vibro_on; + scene_state->notification_sequence_badkb[i++] = &message_vibro_on; } if(plugin_state->notification_method & NotificationMethodSound) { - scene_state->notification_sequence_badusb[i++] = &message_note_d5; //-V525 - scene_state->notification_sequence_badusb[i++] = &message_delay_50; - scene_state->notification_sequence_badusb[i++] = &message_note_e4; - scene_state->notification_sequence_badusb[i++] = &message_delay_50; - scene_state->notification_sequence_badusb[i++] = &message_note_f3; + scene_state->notification_sequence_badkb[i++] = &message_note_d5; //-V525 + scene_state->notification_sequence_badkb[i++] = &message_delay_50; + scene_state->notification_sequence_badkb[i++] = &message_note_e4; + scene_state->notification_sequence_badkb[i++] = &message_delay_50; + scene_state->notification_sequence_badkb[i++] = &message_note_f3; } - scene_state->notification_sequence_badusb[i++] = &message_delay_50; + scene_state->notification_sequence_badkb[i++] = &message_delay_50; if(plugin_state->notification_method & NotificationMethodVibro) { - scene_state->notification_sequence_badusb[i++] = &message_vibro_off; + scene_state->notification_sequence_badkb[i++] = &message_vibro_off; } if(plugin_state->notification_method & NotificationMethodSound) { - scene_state->notification_sequence_badusb[i++] = &message_sound_off; + scene_state->notification_sequence_badkb[i++] = &message_sound_off; } - scene_state->notification_sequence_badusb[i++] = NULL; + scene_state->notification_sequence_badkb[i++] = NULL; } - return (NotificationSequence*)scene_state->notification_sequence_badusb; + return (NotificationSequence*)scene_state->notification_sequence_badkb; } static void int_token_to_str(uint32_t i_token_code, char* str, TokenDigitsCount len) { @@ -340,7 +340,7 @@ bool totp_scene_generate_token_handle_event( scene_state->type_code_worker_context, TotpTypeCodeWorkerEventType); notification_message( plugin_state->notification_app, - get_notification_sequence_badusb(plugin_state, scene_state)); + get_notification_sequence_badkb(plugin_state, scene_state)); return true; } @@ -399,8 +399,8 @@ void totp_scene_generate_token_deactivate(PluginState* plugin_state) { free(scene_state->notification_sequence_new_token); } - if(scene_state->notification_sequence_badusb != NULL) { - free(scene_state->notification_sequence_badusb); + if(scene_state->notification_sequence_badkb != NULL) { + free(scene_state->notification_sequence_badkb); } free(scene_state); diff --git a/applications/services/dolphin/helpers/dolphin_deed.c b/applications/services/dolphin/helpers/dolphin_deed.c index 51db56fdf..4b9f11599 100644 --- a/applications/services/dolphin/helpers/dolphin_deed.c +++ b/applications/services/dolphin/helpers/dolphin_deed.c @@ -34,7 +34,7 @@ static const DolphinDeedWeight dolphin_deed_weights[] = { {2, DolphinAppIbutton}, // DolphinDeedIbuttonEmulate {2, DolphinAppIbutton}, // DolphinDeedIbuttonAdd - {3, DolphinAppBadusb}, // DolphinDeedBadUsbPlayScript + {3, DolphinAppBadKb}, // DolphinDeedBadKbPlayScript {3, DolphinAppPlugin}, // DolphinDeedU2fAuthorized {1, DolphinAppPlugin}, // DolphinDeedGpioUartBridge @@ -50,7 +50,7 @@ static uint8_t dolphin_deed_limits[] = { 20, // DolphinAppNfc 20, // DolphinAppIr 20, // DolphinAppIbutton - 20, // DolphinAppBadusb + 20, // DolphinAppBadKb 20, // DolphinAppPlugin }; diff --git a/applications/services/dolphin/helpers/dolphin_deed.h b/applications/services/dolphin/helpers/dolphin_deed.h index c9cd18f31..51adf6b20 100644 --- a/applications/services/dolphin/helpers/dolphin_deed.h +++ b/applications/services/dolphin/helpers/dolphin_deed.h @@ -12,7 +12,7 @@ typedef enum { DolphinAppNfc, DolphinAppIr, DolphinAppIbutton, - DolphinAppBadusb, + DolphinAppBadKb, DolphinAppPlugin, DolphinAppMAX, } DolphinApp; @@ -50,7 +50,7 @@ typedef enum { DolphinDeedIbuttonEmulate, DolphinDeedIbuttonAdd, - DolphinDeedBadUsbPlayScript, + DolphinDeedBadKbPlayScript, DolphinDeedU2fAuthorized, DolphinDeedGpioUartBridge, diff --git a/applications/services/gui/modules/file_browser_worker.c b/applications/services/gui/modules/file_browser_worker.c index 4386fdfd0..ce67e789c 100644 --- a/applications/services/gui/modules/file_browser_worker.c +++ b/applications/services/gui/modules/file_browser_worker.c @@ -12,7 +12,7 @@ #define TAG "BrowserWorker" #define ASSETS_DIR "assets" -#define BADUSB_LAYOUTS_DIR "layouts" +#define BADKB_LAYOUTS_DIR "layouts" #define SUBGHZ_TEMP_DIR "tmp_history" #define BROWSER_ROOT STORAGE_ANY_PATH_PREFIX #define FILE_NAME_LEN_MAX 256 @@ -90,7 +90,7 @@ static bool browser_filter_by_name(BrowserWorker* browser, FuriString* name, boo // Skip assets folders (if enabled) if(browser->skip_assets) { return ((furi_string_cmp_str(name, ASSETS_DIR) == 0) ? (false) : (true)) && - ((furi_string_cmp_str(name, BADUSB_LAYOUTS_DIR) == 0) ? (false) : (true)) && + ((furi_string_cmp_str(name, BADKB_LAYOUTS_DIR) == 0) ? (false) : (true)) && ((furi_string_cmp_str(name, SUBGHZ_TEMP_DIR) == 0) ? (false) : (true)); } else { return true; diff --git a/assets/icons/Archive/badusb_10px.png b/assets/icons/Archive/badkb_10px.png similarity index 100% rename from assets/icons/Archive/badusb_10px.png rename to assets/icons/Archive/badkb_10px.png diff --git a/assets/icons/BadUsb/Clock_18x18.png b/assets/icons/BadKb/Clock_18x18.png similarity index 100% rename from assets/icons/BadUsb/Clock_18x18.png rename to assets/icons/BadKb/Clock_18x18.png diff --git a/assets/icons/BadUsb/Error_18x18.png b/assets/icons/BadKb/Error_18x18.png similarity index 100% rename from assets/icons/BadUsb/Error_18x18.png rename to assets/icons/BadKb/Error_18x18.png diff --git a/assets/icons/BadUsb/EviSmile1_18x21.png b/assets/icons/BadKb/EviSmile1_18x21.png similarity index 100% rename from assets/icons/BadUsb/EviSmile1_18x21.png rename to assets/icons/BadKb/EviSmile1_18x21.png diff --git a/assets/icons/BadUsb/EviSmile2_18x21.png b/assets/icons/BadKb/EviSmile2_18x21.png similarity index 100% rename from assets/icons/BadUsb/EviSmile2_18x21.png rename to assets/icons/BadKb/EviSmile2_18x21.png diff --git a/assets/icons/BadUsb/EviWaiting1_18x21.png b/assets/icons/BadKb/EviWaiting1_18x21.png similarity index 100% rename from assets/icons/BadUsb/EviWaiting1_18x21.png rename to assets/icons/BadKb/EviWaiting1_18x21.png diff --git a/assets/icons/BadUsb/EviWaiting2_18x21.png b/assets/icons/BadKb/EviWaiting2_18x21.png similarity index 100% rename from assets/icons/BadUsb/EviWaiting2_18x21.png rename to assets/icons/BadKb/EviWaiting2_18x21.png diff --git a/assets/icons/BadUsb/Percent_10x14.png b/assets/icons/BadKb/Percent_10x14.png similarity index 100% rename from assets/icons/BadUsb/Percent_10x14.png rename to assets/icons/BadKb/Percent_10x14.png diff --git a/assets/icons/BadUsb/Smile_18x18.png b/assets/icons/BadKb/Smile_18x18.png similarity index 100% rename from assets/icons/BadUsb/Smile_18x18.png rename to assets/icons/BadKb/Smile_18x18.png diff --git a/assets/icons/BadUsb/UsbTree_48x22.png b/assets/icons/BadKb/UsbTree_48x22.png similarity index 100% rename from assets/icons/BadUsb/UsbTree_48x22.png rename to assets/icons/BadKb/UsbTree_48x22.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_01.png b/assets/icons/MainMenu/BadKb_14/frame_01.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_01.png rename to assets/icons/MainMenu/BadKb_14/frame_01.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_02.png b/assets/icons/MainMenu/BadKb_14/frame_02.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_02.png rename to assets/icons/MainMenu/BadKb_14/frame_02.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_03.png b/assets/icons/MainMenu/BadKb_14/frame_03.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_03.png rename to assets/icons/MainMenu/BadKb_14/frame_03.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_04.png b/assets/icons/MainMenu/BadKb_14/frame_04.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_04.png rename to assets/icons/MainMenu/BadKb_14/frame_04.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_05.png b/assets/icons/MainMenu/BadKb_14/frame_05.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_05.png rename to assets/icons/MainMenu/BadKb_14/frame_05.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_06.png b/assets/icons/MainMenu/BadKb_14/frame_06.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_06.png rename to assets/icons/MainMenu/BadKb_14/frame_06.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_07.png b/assets/icons/MainMenu/BadKb_14/frame_07.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_07.png rename to assets/icons/MainMenu/BadKb_14/frame_07.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_08.png b/assets/icons/MainMenu/BadKb_14/frame_08.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_08.png rename to assets/icons/MainMenu/BadKb_14/frame_08.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_09.png b/assets/icons/MainMenu/BadKb_14/frame_09.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_09.png rename to assets/icons/MainMenu/BadKb_14/frame_09.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_10.png b/assets/icons/MainMenu/BadKb_14/frame_10.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_10.png rename to assets/icons/MainMenu/BadKb_14/frame_10.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_11.png b/assets/icons/MainMenu/BadKb_14/frame_11.png similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_11.png rename to assets/icons/MainMenu/BadKb_14/frame_11.png diff --git a/assets/icons/MainMenu/BadUsb_14/frame_rate b/assets/icons/MainMenu/BadKb_14/frame_rate similarity index 100% rename from assets/icons/MainMenu/BadUsb_14/frame_rate rename to assets/icons/MainMenu/BadKb_14/frame_rate diff --git a/assets/resources/badkb/.badkb.settings b/assets/resources/badkb/.badkb.settings new file mode 100644 index 000000000..4841c2ded --- /dev/null +++ b/assets/resources/badkb/.badkb.settings @@ -0,0 +1 @@ +/any/badkb/layouts/en-US.kl diff --git a/assets/resources/badusb/Kiosk-Evasion-Bruteforce.txt b/assets/resources/badkb/Kiosk-Evasion-Bruteforce.txt similarity index 100% rename from assets/resources/badusb/Kiosk-Evasion-Bruteforce.txt rename to assets/resources/badkb/Kiosk-Evasion-Bruteforce.txt diff --git a/assets/resources/badusb/Wifi-Stealer_ORG.txt b/assets/resources/badkb/Wifi-Stealer_ORG.txt similarity index 100% rename from assets/resources/badusb/Wifi-Stealer_ORG.txt rename to assets/resources/badkb/Wifi-Stealer_ORG.txt diff --git a/assets/resources/badusb/demo_macos.txt b/assets/resources/badkb/demo_macos.txt similarity index 92% rename from assets/resources/badusb/demo_macos.txt rename to assets/resources/badkb/demo_macos.txt index 82543b28f..1fd4544b3 100644 --- a/assets/resources/badusb/demo_macos.txt +++ b/assets/resources/badkb/demo_macos.txt @@ -2,7 +2,7 @@ ID 1234:5678 Apple:Keyboard REM You can change these values to VID/PID of original Apple keyboard REM to bypass Keyboard Setup Assistant -REM This is BadUSB demo script for macOS +REM This is BadKB demo script for macOS REM Open terminal window DELAY 1000 @@ -75,7 +75,7 @@ ENTER HOME ENTER -STRING Flipper Zero BadUSB feature is compatible with USB Rubber Ducky script format +STRING Flipper Zero BadKB feature is compatible with USB Rubber Ducky script format ENTER STRING More information about script syntax can be found here: ENTER diff --git a/assets/resources/badusb/demo_windows.txt b/assets/resources/badkb/demo_windows.txt similarity index 92% rename from assets/resources/badusb/demo_windows.txt rename to assets/resources/badkb/demo_windows.txt index 2ed33b3c0..f3b1309d1 100644 --- a/assets/resources/badusb/demo_windows.txt +++ b/assets/resources/badkb/demo_windows.txt @@ -1,4 +1,4 @@ -REM This is BadUSB demo script for windows +REM This is BadKB demo script for windows REM Open windows notepad DELAY 1000 @@ -76,7 +76,7 @@ ENTER HOME ENTER -STRING Flipper Zero BadUSB feature is compatible with USB Rubber Ducky script format +STRING Flipper Zero BadKB feature is compatible with USB Rubber Ducky script format ENTER STRING More information about script syntax can be found here: ENTER diff --git a/assets/resources/badusb/layouts/ba-BA.kl b/assets/resources/badkb/layouts/ba-BA.kl similarity index 100% rename from assets/resources/badusb/layouts/ba-BA.kl rename to assets/resources/badkb/layouts/ba-BA.kl diff --git a/assets/resources/badusb/layouts/cz_CS.kl b/assets/resources/badkb/layouts/cz_CS.kl similarity index 100% rename from assets/resources/badusb/layouts/cz_CS.kl rename to assets/resources/badkb/layouts/cz_CS.kl diff --git a/assets/resources/badusb/layouts/da-DA.kl b/assets/resources/badkb/layouts/da-DA.kl similarity index 100% rename from assets/resources/badusb/layouts/da-DA.kl rename to assets/resources/badkb/layouts/da-DA.kl diff --git a/assets/resources/badusb/layouts/de-CH.kl b/assets/resources/badkb/layouts/de-CH.kl similarity index 100% rename from assets/resources/badusb/layouts/de-CH.kl rename to assets/resources/badkb/layouts/de-CH.kl diff --git a/assets/resources/badusb/layouts/de-DE.kl b/assets/resources/badkb/layouts/de-DE.kl similarity index 100% rename from assets/resources/badusb/layouts/de-DE.kl rename to assets/resources/badkb/layouts/de-DE.kl diff --git a/assets/resources/badusb/layouts/dvorak.kl b/assets/resources/badkb/layouts/dvorak.kl similarity index 100% rename from assets/resources/badusb/layouts/dvorak.kl rename to assets/resources/badkb/layouts/dvorak.kl diff --git a/assets/resources/badusb/layouts/en-UK.kl b/assets/resources/badkb/layouts/en-UK.kl similarity index 100% rename from assets/resources/badusb/layouts/en-UK.kl rename to assets/resources/badkb/layouts/en-UK.kl diff --git a/assets/resources/badusb/layouts/en-US.kl b/assets/resources/badkb/layouts/en-US.kl similarity index 100% rename from assets/resources/badusb/layouts/en-US.kl rename to assets/resources/badkb/layouts/en-US.kl diff --git a/assets/resources/badusb/layouts/es-ES.kl b/assets/resources/badkb/layouts/es-ES.kl similarity index 100% rename from assets/resources/badusb/layouts/es-ES.kl rename to assets/resources/badkb/layouts/es-ES.kl diff --git a/assets/resources/badusb/layouts/fr-BE.kl b/assets/resources/badkb/layouts/fr-BE.kl similarity index 100% rename from assets/resources/badusb/layouts/fr-BE.kl rename to assets/resources/badkb/layouts/fr-BE.kl diff --git a/assets/resources/badusb/layouts/fr-CH.kl b/assets/resources/badkb/layouts/fr-CH.kl similarity index 100% rename from assets/resources/badusb/layouts/fr-CH.kl rename to assets/resources/badkb/layouts/fr-CH.kl diff --git a/assets/resources/badusb/layouts/fr-FR.kl b/assets/resources/badkb/layouts/fr-FR.kl similarity index 100% rename from assets/resources/badusb/layouts/fr-FR.kl rename to assets/resources/badkb/layouts/fr-FR.kl diff --git a/assets/resources/badusb/layouts/hr-HR.kl b/assets/resources/badkb/layouts/hr-HR.kl similarity index 100% rename from assets/resources/badusb/layouts/hr-HR.kl rename to assets/resources/badkb/layouts/hr-HR.kl diff --git a/assets/resources/badusb/layouts/hu-HU.kl b/assets/resources/badkb/layouts/hu-HU.kl similarity index 100% rename from assets/resources/badusb/layouts/hu-HU.kl rename to assets/resources/badkb/layouts/hu-HU.kl diff --git a/assets/resources/badusb/layouts/it-IT.kl b/assets/resources/badkb/layouts/it-IT.kl similarity index 100% rename from assets/resources/badusb/layouts/it-IT.kl rename to assets/resources/badkb/layouts/it-IT.kl diff --git a/assets/resources/badusb/layouts/nb-NO.kl b/assets/resources/badkb/layouts/nb-NO.kl similarity index 100% rename from assets/resources/badusb/layouts/nb-NO.kl rename to assets/resources/badkb/layouts/nb-NO.kl diff --git a/assets/resources/badusb/layouts/nl-NL.kl b/assets/resources/badkb/layouts/nl-NL.kl similarity index 100% rename from assets/resources/badusb/layouts/nl-NL.kl rename to assets/resources/badkb/layouts/nl-NL.kl diff --git a/assets/resources/badusb/layouts/pt-BR.kl b/assets/resources/badkb/layouts/pt-BR.kl similarity index 100% rename from assets/resources/badusb/layouts/pt-BR.kl rename to assets/resources/badkb/layouts/pt-BR.kl diff --git a/assets/resources/badusb/layouts/pt-PT.kl b/assets/resources/badkb/layouts/pt-PT.kl similarity index 100% rename from assets/resources/badusb/layouts/pt-PT.kl rename to assets/resources/badkb/layouts/pt-PT.kl diff --git a/assets/resources/badusb/layouts/si-SI.kl b/assets/resources/badkb/layouts/si-SI.kl similarity index 100% rename from assets/resources/badusb/layouts/si-SI.kl rename to assets/resources/badkb/layouts/si-SI.kl diff --git a/assets/resources/badusb/layouts/sk-SK.kl b/assets/resources/badkb/layouts/sk-SK.kl similarity index 100% rename from assets/resources/badusb/layouts/sk-SK.kl rename to assets/resources/badkb/layouts/sk-SK.kl diff --git a/assets/resources/badusb/layouts/sv-SE.kl b/assets/resources/badkb/layouts/sv-SE.kl similarity index 100% rename from assets/resources/badusb/layouts/sv-SE.kl rename to assets/resources/badkb/layouts/sv-SE.kl diff --git a/assets/resources/badusb/layouts/tr-TR.kl b/assets/resources/badkb/layouts/tr-TR.kl similarity index 100% rename from assets/resources/badusb/layouts/tr-TR.kl rename to assets/resources/badkb/layouts/tr-TR.kl diff --git a/assets/resources/badusb/.badusb.settings b/assets/resources/badusb/.badusb.settings deleted file mode 100644 index 34330a3c0..000000000 --- a/assets/resources/badusb/.badusb.settings +++ /dev/null @@ -1 +0,0 @@ -/any/badusb/layouts/en-US.kl