MX 1 год назад
Родитель
Сommit
ca26d688e6

+ 34 - 25
base_pack/bad_kb/bad_kb_app.c

@@ -28,7 +28,7 @@ static void bad_kb_app_tick_event_callback(void* context) {
     scene_manager_handle_tick_event(app->scene_manager);
     scene_manager_handle_tick_event(app->scene_manager);
 }
 }
 
 
-static void bad_kb_load_settings(BadKbApp* app) {
+void bad_kb_load_settings(BadKbApp* app) {
     furi_string_reset(app->keyboard_layout);
     furi_string_reset(app->keyboard_layout);
     BadKbConfig* cfg = &app->config;
     BadKbConfig* cfg = &app->config;
 
 
@@ -36,41 +36,59 @@ static void bad_kb_load_settings(BadKbApp* app) {
     FlipperFormat* file = flipper_format_file_alloc(storage);
     FlipperFormat* file = flipper_format_file_alloc(storage);
     if(flipper_format_file_open_existing(file, BAD_KB_SETTINGS_PATH)) {
     if(flipper_format_file_open_existing(file, BAD_KB_SETTINGS_PATH)) {
         FuriString* tmp_str = furi_string_alloc();
         FuriString* tmp_str = furi_string_alloc();
+
         if(!flipper_format_read_string(file, "Keyboard_Layout", app->keyboard_layout)) {
         if(!flipper_format_read_string(file, "Keyboard_Layout", app->keyboard_layout)) {
             furi_string_reset(app->keyboard_layout);
             furi_string_reset(app->keyboard_layout);
+            flipper_format_rewind(file);
+        }
+
+        if(!flipper_format_read_bool(file, "Is_Bt", &app->is_bt, 1)) {
+            app->is_bt = false;
+            flipper_format_rewind(file);
+        }
+
+        if(!flipper_format_read_bool(file, "Bt_Remember", &app->bt_remember, 1)) {
+            app->bt_remember = false;
+            flipper_format_rewind(file);
         }
         }
-        if(flipper_format_read_string(file, "Bt_Name", tmp_str) && !furi_string_empty(tmp_str)) {
+
+        if(flipper_format_read_string(file, "Bt_Name", tmp_str)) {
             strlcpy(cfg->ble.name, furi_string_get_cstr(tmp_str), sizeof(cfg->ble.name));
             strlcpy(cfg->ble.name, furi_string_get_cstr(tmp_str), sizeof(cfg->ble.name));
         } else {
         } else {
-            strcpy(cfg->ble.name, "");
+            cfg->ble.name[0] = '\0';
+            flipper_format_rewind(file);
         }
         }
+
         if(!flipper_format_read_hex(
         if(!flipper_format_read_hex(
                file, "Bt_Mac", (uint8_t*)&cfg->ble.mac, sizeof(cfg->ble.mac))) {
                file, "Bt_Mac", (uint8_t*)&cfg->ble.mac, sizeof(cfg->ble.mac))) {
             memset(cfg->ble.mac, 0, sizeof(cfg->ble.mac));
             memset(cfg->ble.mac, 0, sizeof(cfg->ble.mac));
+            flipper_format_rewind(file);
         }
         }
-        if(flipper_format_read_string(file, "Usb_Manuf", tmp_str) && !furi_string_empty(tmp_str)) {
+
+        if(flipper_format_read_string(file, "Usb_Manuf", tmp_str)) {
             strlcpy(cfg->usb.manuf, furi_string_get_cstr(tmp_str), sizeof(cfg->usb.manuf));
             strlcpy(cfg->usb.manuf, furi_string_get_cstr(tmp_str), sizeof(cfg->usb.manuf));
         } else {
         } else {
-            strcpy(cfg->usb.manuf, "");
+            cfg->usb.manuf[0] = '\0';
+            flipper_format_rewind(file);
         }
         }
-        if(flipper_format_read_string(file, "Usb_Product", tmp_str) &&
-           !furi_string_empty(tmp_str)) {
+
+        if(flipper_format_read_string(file, "Usb_Product", tmp_str)) {
             strlcpy(cfg->usb.product, furi_string_get_cstr(tmp_str), sizeof(cfg->usb.product));
             strlcpy(cfg->usb.product, furi_string_get_cstr(tmp_str), sizeof(cfg->usb.product));
         } else {
         } else {
-            strcpy(cfg->usb.product, "");
+            cfg->usb.product[0] = '\0';
+            flipper_format_rewind(file);
         }
         }
+
         if(!flipper_format_read_uint32(file, "Usb_Vid", &cfg->usb.vid, 1)) {
         if(!flipper_format_read_uint32(file, "Usb_Vid", &cfg->usb.vid, 1)) {
             cfg->usb.vid = 0;
             cfg->usb.vid = 0;
+            flipper_format_rewind(file);
         }
         }
+
         if(!flipper_format_read_uint32(file, "Usb_Pid", &cfg->usb.pid, 1)) {
         if(!flipper_format_read_uint32(file, "Usb_Pid", &cfg->usb.pid, 1)) {
             cfg->usb.pid = 0;
             cfg->usb.pid = 0;
+            flipper_format_rewind(file);
         }
         }
-        if(!flipper_format_read_bool(file, "Bt_Remember", &cfg->bt_remember, 1)) {
-            cfg->bt_remember = false;
-        }
-        if(!flipper_format_read_bool(file, "Is_Ble", &cfg->is_ble, 1)) {
-            cfg->is_ble = false;
-        }
+
         furi_string_free(tmp_str);
         furi_string_free(tmp_str);
         flipper_format_file_close(file);
         flipper_format_file_close(file);
     }
     }
@@ -98,14 +116,14 @@ static void bad_kb_save_settings(BadKbApp* app) {
     FlipperFormat* file = flipper_format_file_alloc(storage);
     FlipperFormat* file = flipper_format_file_alloc(storage);
     if(flipper_format_file_open_always(file, BAD_KB_SETTINGS_PATH)) {
     if(flipper_format_file_open_always(file, BAD_KB_SETTINGS_PATH)) {
         flipper_format_write_string(file, "Keyboard_Layout", app->keyboard_layout);
         flipper_format_write_string(file, "Keyboard_Layout", app->keyboard_layout);
+        flipper_format_write_bool(file, "Is_Bt", &app->is_bt, 1);
+        flipper_format_write_bool(file, "Bt_Remember", &app->bt_remember, 1);
         flipper_format_write_string_cstr(file, "Bt_Name", cfg->ble.name);
         flipper_format_write_string_cstr(file, "Bt_Name", cfg->ble.name);
         flipper_format_write_hex(file, "Bt_Mac", (uint8_t*)&cfg->ble.mac, sizeof(cfg->ble.mac));
         flipper_format_write_hex(file, "Bt_Mac", (uint8_t*)&cfg->ble.mac, sizeof(cfg->ble.mac));
         flipper_format_write_string_cstr(file, "Usb_Manuf", cfg->usb.manuf);
         flipper_format_write_string_cstr(file, "Usb_Manuf", cfg->usb.manuf);
         flipper_format_write_string_cstr(file, "Usb_Product", cfg->usb.product);
         flipper_format_write_string_cstr(file, "Usb_Product", cfg->usb.product);
         flipper_format_write_uint32(file, "Usb_Vid", &cfg->usb.vid, 1);
         flipper_format_write_uint32(file, "Usb_Vid", &cfg->usb.vid, 1);
         flipper_format_write_uint32(file, "Usb_Pid", &cfg->usb.pid, 1);
         flipper_format_write_uint32(file, "Usb_Pid", &cfg->usb.pid, 1);
-        flipper_format_write_bool(file, "Bt_Remember", &cfg->bt_remember, 1);
-        flipper_format_write_bool(file, "Is_Ble", &cfg->is_ble, 1);
         flipper_format_file_close(file);
         flipper_format_file_close(file);
     }
     }
     flipper_format_free(file);
     flipper_format_free(file);
@@ -272,13 +290,6 @@ void bad_kb_config_refresh(BadKbApp* app) {
     // Reload config page
     // Reload config page
     scene_manager_next_scene(app->scene_manager, BadKbSceneConfig);
     scene_manager_next_scene(app->scene_manager, BadKbSceneConfig);
     scene_manager_previous_scene(app->scene_manager);
     scene_manager_previous_scene(app->scene_manager);
-
-    // Update settings
-    if((app->config.bt_remember != app->bt_remember) || (app->config.is_ble != app->is_bt)) {
-        app->config.bt_remember = app->bt_remember;
-        app->config.is_ble = app->is_bt;
-        bad_kb_save_settings(app);
-    }
 }
 }
 
 
 BadKbApp* bad_kb_app_alloc(char* arg) {
 BadKbApp* bad_kb_app_alloc(char* arg) {
@@ -314,8 +325,6 @@ BadKbApp* bad_kb_app_alloc(char* arg) {
     Bt* bt = furi_record_open(RECORD_BT);
     Bt* bt = furi_record_open(RECORD_BT);
     app->bt = bt;
     app->bt = bt;
     app->bt->suppress_pin_screen = true;
     app->bt->suppress_pin_screen = true;
-    app->is_bt = app->config.is_ble;
-    app->bt_remember = app->config.bt_remember;
     bad_kb_config_adjust(&app->config);
     bad_kb_config_adjust(&app->config);
 
 
     // Save prev config
     // Save prev config

+ 2 - 2
base_pack/bad_kb/bad_kb_app_i.h

@@ -39,8 +39,6 @@ typedef enum {
 typedef struct {
 typedef struct {
     BleProfileHidParams ble;
     BleProfileHidParams ble;
     FuriHalUsbHidConfig usb;
     FuriHalUsbHidConfig usb;
-    bool bt_remember;
-    bool is_ble;
 } BadKbConfig;
 } BadKbConfig;
 
 
 typedef enum {
 typedef enum {
@@ -104,6 +102,8 @@ typedef enum {
 
 
 void bad_kb_app_show_loading_popup(BadKbApp* app, bool show);
 void bad_kb_app_show_loading_popup(BadKbApp* app, bool show);
 
 
+void bad_kb_load_settings(BadKbApp* app);
+
 int32_t bad_kb_conn_apply(BadKbApp* app);
 int32_t bad_kb_conn_apply(BadKbApp* app);
 
 
 void bad_kb_conn_reset(BadKbApp* app);
 void bad_kb_conn_reset(BadKbApp* app);

+ 3 - 2
base_pack/bad_kb/helpers/ducky_script.c

@@ -382,11 +382,12 @@ static void ducky_script_preload(BadKbScript* bad_kb, File* script_file) {
     app->has_usb_id = strncmp(line_tmp, ducky_cmd_id, strlen(ducky_cmd_id)) == 0;
     app->has_usb_id = strncmp(line_tmp, ducky_cmd_id, strlen(ducky_cmd_id)) == 0;
     app->has_bt_id = strncmp(line_tmp, ducky_cmd_bt_id, strlen(ducky_cmd_bt_id)) == 0;
     app->has_bt_id = strncmp(line_tmp, ducky_cmd_bt_id, strlen(ducky_cmd_bt_id)) == 0;
 
 
+    // Auto-switch to mode chosen with ID/BT_ID, can override manually in config screen
     if(app->has_usb_id) {
     if(app->has_usb_id) {
-        //app->is_bt = false;
+        app->is_bt = false;
         app->set_usb_id = ducky_set_usb_id(bad_kb, &line_tmp[strlen(ducky_cmd_id) + 1]);
         app->set_usb_id = ducky_set_usb_id(bad_kb, &line_tmp[strlen(ducky_cmd_id) + 1]);
     } else if(app->has_bt_id) {
     } else if(app->has_bt_id) {
-        //app->is_bt = true;
+        app->is_bt = true;
         app->set_bt_id = ducky_set_bt_id(bad_kb, &line_tmp[strlen(ducky_cmd_bt_id) + 1]);
         app->set_bt_id = ducky_set_bt_id(bad_kb, &line_tmp[strlen(ducky_cmd_bt_id) + 1]);
     }
     }
 
 

+ 14 - 24
base_pack/bad_kb/scenes/bad_kb_scene_config.c

@@ -51,11 +51,6 @@ void bad_kb_scene_config_on_enter(void* context) {
         var_item_list, "Connection", 2, bad_kb_scene_config_connection_callback, bad_kb);
         var_item_list, "Connection", 2, bad_kb_scene_config_connection_callback, bad_kb);
     variable_item_set_current_value_index(item, bad_kb->is_bt);
     variable_item_set_current_value_index(item, bad_kb->is_bt);
     variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB");
     variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB");
-    /*if(bad_kb->has_usb_id) {
-        variable_item_set_locked(item, true, "Script has\nID cmd!\nLocked to\nUSB Mode!");
-    } else if(bad_kb->has_bt_id) {
-        variable_item_set_locked(item, true, "Script has\nBT_ID cmd!\nLocked to\nBT Mode!");
-    }*/
 
 
     if(bad_kb->is_bt) {
     if(bad_kb->is_bt) {
         item = variable_item_list_add(
         item = variable_item_list_add(
@@ -64,43 +59,24 @@ void bad_kb_scene_config_on_enter(void* context) {
         variable_item_set_current_value_text(item, bad_kb->bt_remember ? "ON" : "OFF");
         variable_item_set_current_value_text(item, bad_kb->bt_remember ? "ON" : "OFF");
 
 
         item = variable_item_list_add(var_item_list, "BT Device Name", 0, NULL, bad_kb);
         item = variable_item_list_add(var_item_list, "BT Device Name", 0, NULL, bad_kb);
-        if(bad_kb->set_bt_id) {
-            variable_item_set_locked(item, true, "Script has\nBT_ID cmd!\nLocked to\nset Name!");
-        }
 
 
         item = variable_item_list_add(var_item_list, "BT MAC Address", 0, NULL, bad_kb);
         item = variable_item_list_add(var_item_list, "BT MAC Address", 0, NULL, bad_kb);
         if(bad_kb->bt_remember) {
         if(bad_kb->bt_remember) {
             variable_item_set_locked(item, true, "Remember\nmust be Off!");
             variable_item_set_locked(item, true, "Remember\nmust be Off!");
-        } else if(bad_kb->set_bt_id) {
-            variable_item_set_locked(item, true, "Script has\nBT_ID cmd!\nLocked to\nset MAC!");
         }
         }
 
 
         item = variable_item_list_add(var_item_list, "Randomize BT MAC", 0, NULL, bad_kb);
         item = variable_item_list_add(var_item_list, "Randomize BT MAC", 0, NULL, bad_kb);
         if(bad_kb->bt_remember) {
         if(bad_kb->bt_remember) {
             variable_item_set_locked(item, true, "Remember\nmust be Off!");
             variable_item_set_locked(item, true, "Remember\nmust be Off!");
-        } else if(bad_kb->set_bt_id) {
-            variable_item_set_locked(item, true, "Script has\nBT_ID cmd!\nLocked to\nset MAC!");
         }
         }
     } else {
     } else {
         item = variable_item_list_add(var_item_list, "USB Manufacturer", 0, NULL, bad_kb);
         item = variable_item_list_add(var_item_list, "USB Manufacturer", 0, NULL, bad_kb);
-        if(bad_kb->set_usb_id) {
-            variable_item_set_locked(item, true, "Script has\nID cmd!\nLocked to\nset Mname!");
-        }
 
 
         item = variable_item_list_add(var_item_list, "USB Product Name", 0, NULL, bad_kb);
         item = variable_item_list_add(var_item_list, "USB Product Name", 0, NULL, bad_kb);
-        if(bad_kb->set_usb_id) {
-            variable_item_set_locked(item, true, "Script has\nID cmd!\nLocked to\nset Pname!");
-        }
 
 
         item = variable_item_list_add(var_item_list, "USB VID and PID", 0, NULL, bad_kb);
         item = variable_item_list_add(var_item_list, "USB VID and PID", 0, NULL, bad_kb);
-        if(bad_kb->set_usb_id) {
-            variable_item_set_locked(item, true, "Script has\nID cmd!\nLocked to\nset IDs!");
-        }
 
 
         item = variable_item_list_add(var_item_list, "Randomize USB VID:PID", 0, NULL, bad_kb);
         item = variable_item_list_add(var_item_list, "Randomize USB VID:PID", 0, NULL, bad_kb);
-        if(bad_kb->set_usb_id) {
-            variable_item_set_locked(item, true, "Script has\nID cmd!\nLocked to\nset IDs!");
-        }
     }
     }
 
 
     variable_item_list_set_enter_callback(
     variable_item_list_set_enter_callback(
@@ -141,7 +117,15 @@ bool bad_kb_scene_config_on_event(void* context, SceneManagerEvent event) {
                 scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigBtMac);
                 scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigBtMac);
                 break;
                 break;
             case VarItemListIndexBtRandomizeMac:
             case VarItemListIndexBtRandomizeMac:
+                // Set user config and remember
                 furi_hal_random_fill_buf(bad_kb->config.ble.mac, sizeof(bad_kb->config.ble.mac));
                 furi_hal_random_fill_buf(bad_kb->config.ble.mac, sizeof(bad_kb->config.ble.mac));
+                // Apply to ID config so its temporarily overridden
+                if(bad_kb->set_bt_id) {
+                    memcpy(
+                        bad_kb->id_config.ble.mac,
+                        bad_kb->config.ble.mac,
+                        sizeof(bad_kb->id_config.ble.mac));
+                }
                 bad_kb_config_refresh(bad_kb);
                 bad_kb_config_refresh(bad_kb);
                 break;
                 break;
             default:
             default:
@@ -165,8 +149,14 @@ bool bad_kb_scene_config_on_event(void* context, SceneManagerEvent event) {
             case VarItemListIndexUsbRandomizeVidPid:
             case VarItemListIndexUsbRandomizeVidPid:
                 furi_hal_random_fill_buf(
                 furi_hal_random_fill_buf(
                     (void*)bad_kb->usb_vidpid_buf, sizeof(bad_kb->usb_vidpid_buf));
                     (void*)bad_kb->usb_vidpid_buf, sizeof(bad_kb->usb_vidpid_buf));
+                // Set user config and remember
                 bad_kb->config.usb.vid = bad_kb->usb_vidpid_buf[0];
                 bad_kb->config.usb.vid = bad_kb->usb_vidpid_buf[0];
                 bad_kb->config.usb.pid = bad_kb->usb_vidpid_buf[1];
                 bad_kb->config.usb.pid = bad_kb->usb_vidpid_buf[1];
+                // Apply to ID config so its temporarily overridden
+                if(bad_kb->set_usb_id) {
+                    bad_kb->id_config.usb.vid = bad_kb->config.usb.vid;
+                    bad_kb->id_config.usb.pid = bad_kb->config.usb.pid;
+                }
                 bad_kb_config_refresh(bad_kb);
                 bad_kb_config_refresh(bad_kb);
                 break;
                 break;
             default:
             default:

+ 12 - 1
base_pack/bad_kb/scenes/bad_kb_scene_config_bt_mac.c

@@ -10,7 +10,10 @@ void bad_kb_scene_config_bt_mac_on_enter(void* context) {
     BadKbApp* bad_kb = context;
     BadKbApp* bad_kb = context;
     ByteInput* byte_input = bad_kb->byte_input;
     ByteInput* byte_input = bad_kb->byte_input;
 
 
-    memcpy(bad_kb->bt_mac_buf, bad_kb->config.ble.mac, sizeof(bad_kb->bt_mac_buf));
+    memcpy(
+        bad_kb->bt_mac_buf,
+        bad_kb->set_bt_id ? bad_kb->id_config.ble.mac : bad_kb->config.ble.mac,
+        sizeof(bad_kb->bt_mac_buf));
     furi_hal_bt_reverse_mac_addr(bad_kb->bt_mac_buf);
     furi_hal_bt_reverse_mac_addr(bad_kb->bt_mac_buf);
     byte_input_set_header_text(byte_input, "Set BT MAC address");
     byte_input_set_header_text(byte_input, "Set BT MAC address");
 
 
@@ -33,7 +36,15 @@ bool bad_kb_scene_config_bt_mac_on_event(void* context, SceneManagerEvent event)
         consumed = true;
         consumed = true;
         if(event.event == BadKbAppCustomEventByteInputDone) {
         if(event.event == BadKbAppCustomEventByteInputDone) {
             furi_hal_bt_reverse_mac_addr(bad_kb->bt_mac_buf);
             furi_hal_bt_reverse_mac_addr(bad_kb->bt_mac_buf);
+            // Set user config and remember
             memcpy(bad_kb->config.ble.mac, bad_kb->bt_mac_buf, sizeof(bad_kb->config.ble.mac));
             memcpy(bad_kb->config.ble.mac, bad_kb->bt_mac_buf, sizeof(bad_kb->config.ble.mac));
+            // Apply to ID config so its temporarily overridden
+            if(bad_kb->set_bt_id) {
+                memcpy(
+                    bad_kb->id_config.ble.mac,
+                    bad_kb->bt_mac_buf,
+                    sizeof(bad_kb->id_config.ble.mac));
+            }
             bad_kb_config_refresh(bad_kb);
             bad_kb_config_refresh(bad_kb);
         }
         }
         scene_manager_previous_scene(bad_kb->scene_manager);
         scene_manager_previous_scene(bad_kb->scene_manager);

+ 12 - 1
base_pack/bad_kb/scenes/bad_kb_scene_config_bt_name.c

@@ -10,7 +10,10 @@ void bad_kb_scene_config_bt_name_on_enter(void* context) {
     BadKbApp* bad_kb = context;
     BadKbApp* bad_kb = context;
     TextInput* text_input = bad_kb->text_input;
     TextInput* text_input = bad_kb->text_input;
 
 
-    strlcpy(bad_kb->bt_name_buf, bad_kb->config.ble.name, sizeof(bad_kb->bt_name_buf));
+    strlcpy(
+        bad_kb->bt_name_buf,
+        bad_kb->set_bt_id ? bad_kb->id_config.ble.name : bad_kb->config.ble.name,
+        sizeof(bad_kb->bt_name_buf));
     text_input_set_header_text(text_input, "Set BT device name");
     text_input_set_header_text(text_input, "Set BT device name");
 
 
     text_input_set_result_callback(
     text_input_set_result_callback(
@@ -31,7 +34,15 @@ bool bad_kb_scene_config_bt_name_on_event(void* context, SceneManagerEvent event
     if(event.type == SceneManagerEventTypeCustom) {
     if(event.type == SceneManagerEventTypeCustom) {
         consumed = true;
         consumed = true;
         if(event.event == BadKbAppCustomEventTextInputDone) {
         if(event.event == BadKbAppCustomEventTextInputDone) {
+            // Set user config and remember
             strlcpy(bad_kb->config.ble.name, bad_kb->bt_name_buf, sizeof(bad_kb->config.ble.name));
             strlcpy(bad_kb->config.ble.name, bad_kb->bt_name_buf, sizeof(bad_kb->config.ble.name));
+            // Apply to ID config so its temporarily overridden
+            if(bad_kb->set_bt_id) {
+                strlcpy(
+                    bad_kb->id_config.ble.name,
+                    bad_kb->bt_name_buf,
+                    sizeof(bad_kb->id_config.ble.name));
+            }
             bad_kb_config_refresh(bad_kb);
             bad_kb_config_refresh(bad_kb);
         }
         }
         scene_manager_previous_scene(bad_kb->scene_manager);
         scene_manager_previous_scene(bad_kb->scene_manager);

+ 25 - 3
base_pack/bad_kb/scenes/bad_kb_scene_config_usb_name.c

@@ -11,10 +11,16 @@ void bad_kb_scene_config_usb_name_on_enter(void* context) {
     TextInput* text_input = bad_kb->text_input;
     TextInput* text_input = bad_kb->text_input;
 
 
     if(scene_manager_get_scene_state(bad_kb->scene_manager, BadKbSceneConfigUsbName)) {
     if(scene_manager_get_scene_state(bad_kb->scene_manager, BadKbSceneConfigUsbName)) {
-        strlcpy(bad_kb->usb_name_buf, bad_kb->config.usb.manuf, sizeof(bad_kb->usb_name_buf));
+        strlcpy(
+            bad_kb->usb_name_buf,
+            bad_kb->set_usb_id ? bad_kb->id_config.usb.manuf : bad_kb->config.usb.manuf,
+            sizeof(bad_kb->usb_name_buf));
         text_input_set_header_text(text_input, "Set USB manufacturer name");
         text_input_set_header_text(text_input, "Set USB manufacturer name");
     } else {
     } else {
-        strlcpy(bad_kb->usb_name_buf, bad_kb->config.usb.product, sizeof(bad_kb->usb_name_buf));
+        strlcpy(
+            bad_kb->usb_name_buf,
+            bad_kb->set_usb_id ? bad_kb->id_config.usb.product : bad_kb->config.usb.product,
+            sizeof(bad_kb->usb_name_buf));
         text_input_set_header_text(text_input, "Set USB product name");
         text_input_set_header_text(text_input, "Set USB product name");
     }
     }
 
 
@@ -37,15 +43,31 @@ bool bad_kb_scene_config_usb_name_on_event(void* context, SceneManagerEvent even
         consumed = true;
         consumed = true;
         if(event.event == BadKbAppCustomEventTextInputDone) {
         if(event.event == BadKbAppCustomEventTextInputDone) {
             if(scene_manager_get_scene_state(bad_kb->scene_manager, BadKbSceneConfigUsbName)) {
             if(scene_manager_get_scene_state(bad_kb->scene_manager, BadKbSceneConfigUsbName)) {
+                // Set user config and remember
                 strlcpy(
                 strlcpy(
                     bad_kb->config.usb.manuf,
                     bad_kb->config.usb.manuf,
                     bad_kb->usb_name_buf,
                     bad_kb->usb_name_buf,
-                    sizeof(bad_kb->config.usb.product));
+                    sizeof(bad_kb->config.usb.manuf));
+                // Apply to ID config so its temporarily overridden
+                if(bad_kb->set_usb_id) {
+                    strlcpy(
+                        bad_kb->id_config.usb.manuf,
+                        bad_kb->usb_name_buf,
+                        sizeof(bad_kb->id_config.usb.manuf));
+                }
             } else {
             } else {
+                // Set user config and remember
                 strlcpy(
                 strlcpy(
                     bad_kb->config.usb.product,
                     bad_kb->config.usb.product,
                     bad_kb->usb_name_buf,
                     bad_kb->usb_name_buf,
                     sizeof(bad_kb->config.usb.product));
                     sizeof(bad_kb->config.usb.product));
+                // Apply to ID config so its temporarily overridden
+                if(bad_kb->set_usb_id) {
+                    strlcpy(
+                        bad_kb->id_config.usb.product,
+                        bad_kb->usb_name_buf,
+                        sizeof(bad_kb->id_config.usb.product));
+                }
             }
             }
             bad_kb_config_refresh(bad_kb);
             bad_kb_config_refresh(bad_kb);
         }
         }

+ 13 - 2
base_pack/bad_kb/scenes/bad_kb_scene_config_usb_vidpid.c

@@ -10,8 +10,13 @@ void bad_kb_scene_config_usb_vidpid_on_enter(void* context) {
     BadKbApp* bad_kb = context;
     BadKbApp* bad_kb = context;
     ByteInput* byte_input = bad_kb->byte_input;
     ByteInput* byte_input = bad_kb->byte_input;
 
 
-    bad_kb->usb_vidpid_buf[0] = __REVSH(bad_kb->config.usb.vid);
-    bad_kb->usb_vidpid_buf[1] = __REVSH(bad_kb->config.usb.pid);
+    if(bad_kb->set_usb_id) {
+        bad_kb->usb_vidpid_buf[0] = __REVSH(bad_kb->id_config.usb.vid);
+        bad_kb->usb_vidpid_buf[1] = __REVSH(bad_kb->id_config.usb.pid);
+    } else {
+        bad_kb->usb_vidpid_buf[0] = __REVSH(bad_kb->config.usb.vid);
+        bad_kb->usb_vidpid_buf[1] = __REVSH(bad_kb->config.usb.pid);
+    }
     byte_input_set_header_text(byte_input, "Set USB VID:PID");
     byte_input_set_header_text(byte_input, "Set USB VID:PID");
 
 
     byte_input_set_result_callback(
     byte_input_set_result_callback(
@@ -32,8 +37,14 @@ bool bad_kb_scene_config_usb_vidpid_on_event(void* context, SceneManagerEvent ev
     if(event.type == SceneManagerEventTypeCustom) {
     if(event.type == SceneManagerEventTypeCustom) {
         consumed = true;
         consumed = true;
         if(event.event == BadKbAppCustomEventByteInputDone) {
         if(event.event == BadKbAppCustomEventByteInputDone) {
+            // Set user config and remember
             bad_kb->config.usb.vid = __REVSH(bad_kb->usb_vidpid_buf[0]);
             bad_kb->config.usb.vid = __REVSH(bad_kb->usb_vidpid_buf[0]);
             bad_kb->config.usb.pid = __REVSH(bad_kb->usb_vidpid_buf[1]);
             bad_kb->config.usb.pid = __REVSH(bad_kb->usb_vidpid_buf[1]);
+            // Apply to ID config so its temporarily overridden
+            if(bad_kb->set_usb_id) {
+                bad_kb->id_config.usb.vid = bad_kb->config.usb.vid;
+                bad_kb->id_config.usb.pid = bad_kb->config.usb.pid;
+            }
             bad_kb_config_refresh(bad_kb);
             bad_kb_config_refresh(bad_kb);
         }
         }
         scene_manager_previous_scene(bad_kb->scene_manager);
         scene_manager_previous_scene(bad_kb->scene_manager);