From 46fa15c6034ba4d1444a0b04a0f6e4c2f479eda0 Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Mon, 26 Mar 2012 12:54:17 +0200 Subject: [PATCH] broadband-modem: initialize the Simple interface even if unlocked We should be able to unlock the modem during Simple Connect(). --- src/mm-broadband-modem.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index ec13e495..eb617154 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -6384,6 +6384,7 @@ typedef struct { InitializeStep step; MMAtSerialPort *port; gboolean close_port; + gboolean abort_if_locked; } InitializeContext; static void initialize_step (InitializeContext *ctx); @@ -6551,12 +6552,10 @@ initialize_step (InitializeContext *ctx) * 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); + /* Jump to the Simple interface */ + ctx->abort_if_locked = TRUE; + ctx->step = INITIALIZE_STEP_IFACE_SIMPLE; + initialize_step (ctx); return; } /* Fall down to next step */ @@ -6636,14 +6635,23 @@ initialize_step (InitializeContext *ctx) ctx->step++; case INITIALIZE_STEP_LAST: - /* All initialized without errors! */ + if (ctx->abort_if_locked) { + /* We're locked :-/ */ + g_simple_async_result_set_error (ctx->result, + MM_CORE_ERROR, + MM_CORE_ERROR_WRONG_STATE, + "Modem is currently locked, " + "cannot fully initialize"); + } else { + /* All initialized without errors! + * Set as disabled (a.k.a. initialized) */ + mm_iface_modem_update_state (MM_IFACE_MODEM (ctx->self), + MM_MODEM_STATE_DISABLED, + MM_MODEM_STATE_CHANGE_REASON_UNKNOWN); - /* Set as disabled (a.k.a. initialized) */ - mm_iface_modem_update_state (MM_IFACE_MODEM (ctx->self), - MM_MODEM_STATE_DISABLED, - MM_MODEM_STATE_CHANGE_REASON_UNKNOWN); + g_simple_async_result_set_op_res_gboolean (G_SIMPLE_ASYNC_RESULT (ctx->result), TRUE); + } - g_simple_async_result_set_op_res_gboolean (G_SIMPLE_ASYNC_RESULT (ctx->result), TRUE); initialize_context_complete_and_free (ctx); return; }