summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/settings.c4
-rw-r--r--apps/settings_list.c2
-rw-r--r--firmware/export/usb.h7
-rw-r--r--firmware/usb.c7
4 files changed, 16 insertions, 4 deletions
diff --git a/apps/settings.c b/apps/settings.c
index b72808b510..59cb480c95 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -1025,6 +1025,10 @@ void settings_apply(bool read_disk)
usb_charging_enable(global_settings.usb_charging);
#endif
+#ifdef HAVE_USB_POWER
+ usb_set_mode(global_settings.usb_mode);
+#endif
+
#ifdef HAVE_TOUCHSCREEN
touchscreen_set_mode(global_settings.touch_mode);
memcpy(&calibration_parameters, &global_settings.ts_calibration_data, sizeof(struct touchscreen_parameter));
diff --git a/apps/settings_list.c b/apps/settings_list.c
index 17720b5145..71085906ce 100644
--- a/apps/settings_list.c
+++ b/apps/settings_list.c
@@ -2161,7 +2161,7 @@ const struct settings_list settings[] = {
CHOICE_SETTING(0,
usb_mode,
LANG_USB_MODE,
- USB_MODE_MASS_STORAGE,
+ USBMODE_DEFAULT,
"usb mode",
"ask,mass storage,charge"
#if defined(DX50) || defined(DX90)
diff --git a/firmware/export/usb.h b/firmware/export/usb.h
index edc37bd5b6..2bcd95ef81 100644
--- a/firmware/export/usb.h
+++ b/firmware/export/usb.h
@@ -145,6 +145,13 @@ enum
#if !defined(USBPOWER_BTN_IGNORE)
#define USBPOWER_BTN_IGNORE 0
#endif
+
+#if defined(BOOTLOADER)
+#define USBMODE_DEFAULT USB_MODE_MASS_STORAGE
+#else
+#define USBMODE_DEFAULT USB_MODE_MASS_STORAGE
+#endif
+
#endif
#ifdef HAVE_USBSTACK
diff --git a/firmware/usb.c b/firmware/usb.c
index aca2683d58..8c6eae9b3f 100644
--- a/firmware/usb.c
+++ b/firmware/usb.c
@@ -95,8 +95,8 @@ static bool usb_host_present = false;
static int usb_num_acks_to_expect = 0;
static long usb_last_broadcast_tick = 0;
#ifdef HAVE_USB_POWER
-static int usb_mode = USB_MODE_ASK;
-static int new_usbmode = USB_MODE_ASK;
+static int usb_mode = USBMODE_DEFAULT;
+static int new_usbmode = USBMODE_DEFAULT;
#endif
static int usb_release_exclusive_storage(void);
@@ -476,6 +476,7 @@ static void NORETURN_ATTR usb_thread(void)
/* Power (charging-only) button */
#ifdef HAVE_USB_POWER
+ new_usbmode = usb_mode;
switch (usb_mode) {
case USB_MODE_CHARGE:
case USB_MODE_ADB:
@@ -491,7 +492,7 @@ static void NORETURN_ATTR usb_thread(void)
case USB_MODE_MASS_STORAGE:
if (button_status() & ~USBPOWER_BTN_IGNORE)
new_usbmode = USB_MODE_CHARGE;
- break;
+ break;
}
#ifndef BOOTLOADER