aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-iface-modem.c69
-rw-r--r--src/mm-iface-modem.h9
2 files changed, 47 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);
diff --git a/src/mm-iface-modem.h b/src/mm-iface-modem.h
index 4a82cbb8..e86b0da6 100644
--- a/src/mm-iface-modem.h
+++ b/src/mm-iface-modem.h
@@ -22,6 +22,7 @@
#include "mm-charsets.h"
#include "mm-at-serial-port.h"
#include "mm-bearer.h"
+#include "mm-sim.h"
#define MM_TYPE_IFACE_MODEM (mm_iface_modem_get_type ())
#define MM_IFACE_MODEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_IFACE_MODEM, MMIfaceModem))
@@ -253,6 +254,14 @@ struct _MMIfaceModem {
GAsyncResult *res,
GError **error);
+ /* Create SIM */
+ void (*create_sim) (MMIfaceModem *self,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+ MMSim * (*create_sim_finish) (MMIfaceModem *self,
+ GAsyncResult *res,
+ GError **error);
+
/* Create bearer */
void (*create_bearer) (MMIfaceModem *self,
MMCommonBearerProperties *properties,