Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[usb_moded] Expose mode switch as "busy" during transition
Especially switch to mtp_mode can take a long time to finish.

Use transitional "busy" mode as an enabler for ui showing a spinner when
mode change takes long enough to cause confusion for users.

Signed-off-by: Simo Piiroinen <simo.piiroinen@jollamobile.com>
  • Loading branch information
spiiroin committed Aug 24, 2018
1 parent 041d46d commit f8d0985
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 7 deletions.
1 change: 1 addition & 0 deletions src/usb_moded-modes.h
Expand Up @@ -47,6 +47,7 @@
# define MODE_ADB "adb_mode"
# define MODE_PC_SUITE "pc_suite"
# define MODE_CHARGING "charging_only"
# define MODE_BUSY "busy"

/**
*
Expand Down
23 changes: 16 additions & 7 deletions src/usb_moded.c
Expand Up @@ -182,6 +182,7 @@ const char *usbmoded_get_hardware_mode (void);
static void usbmoded_update_hardware_mode (void);

const char *usbmoded_get_external_mode (void);
static void usbmoded_set_external_mode (const char *mode);
static void usbmoded_update_external_mode (void);

const char *usbmoded_get_usb_mode (void);
Expand Down Expand Up @@ -690,19 +691,16 @@ const char *usbmoded_get_external_mode(void)
return current_mode.external_mode ?: MODE_UNDEFINED;
}

static void usbmoded_update_external_mode(void)
static void usbmoded_set_external_mode(const char *mode)
{
const char *internal_mode = usbmoded_get_usb_mode();
const char *external_mode = usbmoded_map_mode_to_external(internal_mode);

gchar *previous = current_mode.external_mode;
if( !g_strcmp0(previous, external_mode) )
if( !g_strcmp0(previous, mode) )
goto EXIT;

log_debug("external_mode: %s -> %s",
previous, external_mode);
previous, mode);

current_mode.external_mode = g_strdup(external_mode);
current_mode.external_mode = g_strdup(mode);
g_free(previous);

// DO THE DBUS BROADCAST
Expand All @@ -719,6 +717,14 @@ static void usbmoded_update_external_mode(void)
return;
}

static void usbmoded_update_external_mode(void)
{
const char *internal_mode = usbmoded_get_usb_mode();
const char *external_mode = usbmoded_map_mode_to_external(internal_mode);

usbmoded_set_external_mode(external_mode);
}

/** get the usb mode
*
* @return the currently set mode
Expand All @@ -745,6 +751,9 @@ void usbmoded_set_usb_mode(const char *mode)
current_mode.internal_mode = g_strdup(mode);
g_free(previous);

/* Invalidate current mode for the duration of mode transition */
usbmoded_set_external_mode(MODE_BUSY);

// PROPAGATE DOWN TO GADGET CONFIG
usbmoded_update_hardware_mode();

Expand Down

0 comments on commit f8d0985

Please sign in to comment.