aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-03-26 12:54:17 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-03-26 12:54:17 +0200
commit46fa15c6034ba4d1444a0b04a0f6e4c2f479eda0 (patch)
treeb715c5b8a0bc6790f98456e6854269cc52e93fd8
parent467b8892ae4c5107247fb2dc030bbf2becb07cac (diff)
broadband-modem: initialize the Simple interface even if unlocked
We should be able to unlock the modem during Simple Connect().
-rw-r--r--src/mm-broadband-modem.c32
1 files 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;
}