diff options
-rw-r--r-- | src/mm-base-modem.c | 14 | ||||
-rw-r--r-- | src/mm-broadband-modem.c | 17 | ||||
-rw-r--r-- | src/mm-iface-modem.c | 10 |
3 files changed, 35 insertions, 6 deletions
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c index d3be6056..9ded0445 100644 --- a/src/mm-base-modem.c +++ b/src/mm-base-modem.c @@ -151,8 +151,18 @@ initialize_ready (MMBaseModem *self, GError *error = NULL; if (!MM_BASE_MODEM_GET_CLASS (self)->initialize_finish (self, res, &error)) { - mm_warn ("couldn't initialize the modem: '%s'", error->message); - mm_base_modem_set_valid (self, FALSE); + /* Wrong state is returned when modem is found locked */ + if (g_error_matches (error, + MM_CORE_ERROR, + MM_CORE_ERROR_WRONG_STATE)) { + mm_dbg ("Couldn't finish initialization in the current state: '%s'", + error->message); + mm_base_modem_set_valid (self, TRUE); + } else { + mm_warn ("couldn't initialize the modem: '%s'", error->message); + mm_base_modem_set_valid (self, FALSE); + } + g_error_free (error); return; } diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index 88fd7462..52e2f6e7 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -5377,6 +5377,7 @@ enable (MMBaseModem *self, typedef enum { INITIALIZE_STEP_FIRST, INITIALIZE_STEP_IFACE_MODEM, + INITIALIZE_STEP_ABORT_IF_LOCKED, INITIALIZE_STEP_IFACE_3GPP, INITIALIZE_STEP_IFACE_3GPP_USSD, INITIALIZE_STEP_IFACE_CDMA, @@ -5504,6 +5505,22 @@ initialize_step (InitializeContext *ctx) ctx); return; + case INITIALIZE_STEP_ABORT_IF_LOCKED: + /* If we find ourselves in a LOCKED state, we shouldn't keep on + * the initialization sequence. Instead, we will re-initialize once + * we are unlocked. */ + if (ctx->self->priv->modem_state == MM_MODEM_STATE_LOCKED) { + g_simple_async_result_set_error (ctx->result, + MM_CORE_ERROR, + MM_CORE_ERROR_WRONG_STATE, + "Modem is currently locked, " + "cannot fully initialize"); + initialize_context_complete_and_free (ctx); + return; + } + /* Fall down to next step */ + ctx->step++; + case INITIALIZE_STEP_IFACE_3GPP: if (mm_iface_modem_is_3gpp (MM_IFACE_MODEM (ctx->self))) { /* Initialize the 3GPP interface */ diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c index 87a2eeb7..c97905de 100644 --- a/src/mm-iface-modem.c +++ b/src/mm-iface-modem.c @@ -1640,10 +1640,12 @@ unlock_check_context_free (UnlockCheckContext *ctx) static gboolean restart_initialize_idle (MMIfaceModem *self) { - mm_iface_modem_initialize (self, - mm_base_modem_get_port_primary (MM_BASE_MODEM (self)), - NULL, - NULL); + MM_BASE_MODEM_GET_CLASS (self)->initialize ( + MM_BASE_MODEM (self), + mm_base_modem_get_port_primary (MM_BASE_MODEM (self)), + NULL, + NULL, + NULL); return FALSE; } |