aboutsummaryrefslogtreecommitdiff
path: root/src/mm-iface-modem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-iface-modem.c')
-rw-r--r--src/mm-iface-modem.c69
1 files changed, 38 insertions, 31 deletions
diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c
index cd9f4fe7..97c50c24 100644
--- a/src/mm-iface-modem.c
+++ b/src/mm-iface-modem.c
@@ -2426,22 +2426,25 @@ sim_new_ready (GAsyncInitable *initable,
MMSim *sim;
GError *error = NULL;
- sim = mm_sim_new_finish (initable, res, &error);
+ sim = MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->create_sim_finish (ctx->self, res, &error);
if (!sim) {
+ /* FATAL */
mm_warn ("couldn't create SIM: '%s'",
error ? error->message : "Unknown error");
- g_clear_error (&error);
- } else {
- g_object_bind_property (sim, MM_SIM_PATH,
- ctx->skeleton, "sim",
- G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
-
- g_object_set (ctx->self,
- MM_IFACE_MODEM_SIM, sim,
- NULL);
- g_object_unref (sim);
+ g_simple_async_result_take_error (ctx->result, error);
+ initialization_context_complete_and_free (ctx);
+ return;
}
+ g_object_bind_property (sim, MM_SIM_PATH,
+ ctx->skeleton, "sim",
+ G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
+
+ g_object_set (ctx->self,
+ MM_IFACE_MODEM_SIM, sim,
+ NULL);
+ g_object_unref (sim);
+
/* Go on to next step */
ctx->step++;
interface_initialization_step (ctx);
@@ -2685,30 +2688,34 @@ interface_initialization_step (InitializationContext *ctx)
/* Fall down to next step */
ctx->step++;
- case INITIALIZATION_STEP_SIM: {
- MMSim *sim = NULL;
+ case INITIALIZATION_STEP_SIM:
+ /* If the modem doesn't need any SIM, skip */
+ if (MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->create_sim &&
+ MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->create_sim_finish) {
+ MMSim *sim = NULL;
- g_object_get (ctx->self,
- MM_IFACE_MODEM_SIM, &sim,
- NULL);
- if (!sim) {
- mm_sim_new (MM_BASE_MODEM (ctx->self),
- NULL, /* TODO: cancellable */
- (GAsyncReadyCallback)sim_new_ready,
- ctx);
+ g_object_get (ctx->self,
+ MM_IFACE_MODEM_SIM, &sim,
+ NULL);
+ if (!sim) {
+ MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->create_sim (
+ MM_IFACE_MODEM (ctx->self),
+ (GAsyncReadyCallback)sim_new_ready,
+ ctx);
+ return;
+ }
+
+ /* If already available the sim object, relaunch initialization.
+ * This will try to load any missing property value that couldn't be
+ * retrieved before due to having the SIM locked. */
+ mm_sim_initialize (sim,
+ NULL, /* TODO: cancellable */
+ (GAsyncReadyCallback)sim_reinit_ready,
+ ctx);
+ g_object_unref (sim);
return;
}
- /* If already available the sim object, relaunch initialization.
- * This will try to load any missing property value that couldn't be
- * retrieved before due to having the SIM locked. */
- mm_sim_initialize (sim,
- NULL, /* TODO: cancellable */
- (GAsyncReadyCallback)sim_reinit_ready,
- ctx);
- return;
- }
-
case INITIALIZATION_STEP_SUPPORTED_MODES:
g_assert (MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->load_supported_modes != NULL);
g_assert (MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->load_supported_modes_finish != NULL);