aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-base-manager.c46
-rw-r--r--src/mm-device.c49
-rw-r--r--src/mm-device.h7
3 files changed, 52 insertions, 50 deletions
diff --git a/src/mm-base-manager.c b/src/mm-base-manager.c
index 0216d9aa..b928820e 100644
--- a/src/mm-base-manager.c
+++ b/src/mm-base-manager.c
@@ -190,48 +190,6 @@ find_device_by_physdev_uid (MMBaseManager *self,
/*****************************************************************************/
-static void
-initialize_ready (MMBaseModem *modem,
- GAsyncResult *res)
-{
- g_autoptr(GError) error = NULL;
-
- if (!mm_base_modem_initialize_finish (modem, res, &error)) {
- if (g_error_matches (error, MM_CORE_ERROR, MM_CORE_ERROR_ABORTED)) {
- /* FATAL error, won't even be exported in DBus */
- mm_obj_err (modem, "fatal error initializing: %s", error->message);
- } else {
- /* non-fatal error */
- mm_obj_warn (modem, "error initializing: %s", error->message);
- mm_base_modem_set_valid (modem, TRUE);
- }
- } else {
- mm_obj_dbg (modem, "modem initialized");
- mm_base_modem_set_valid (modem, TRUE);
- }
-}
-
-static void
-modem_initialize (MMBaseManager *self,
- MMDevice *device)
-{
- MMBaseModem *modem;
-
- modem = mm_device_peek_modem (device);
- if (!modem) {
- mm_obj_warn (self, "cannot initialize modem at device '%s': not found",
- mm_device_get_uid (device));
- return;
- }
-
- mm_obj_dbg (modem, "modem initializing...");
- mm_base_modem_initialize (modem,
- (GAsyncReadyCallback)initialize_ready,
- NULL);
-}
-
-/*****************************************************************************/
-
typedef struct {
MMBaseManager *self;
MMDevice *device;
@@ -264,7 +222,7 @@ dispatcher_modem_setup_ready (MMDispatcherModemSetup *dispatcher,
mm_device_get_uid (ctx->device));
/* launch async modem initialization */
- modem_initialize (ctx->self, ctx->device);
+ mm_device_initialize_modem (ctx->device);
find_device_support_context_free (ctx);
}
@@ -1741,7 +1699,7 @@ handle_set_profile (MmGdbusTest *skeleton,
mm_device_get_uid (device));
/* launch async modem initialization */
- modem_initialize (self, device);
+ mm_device_initialize_modem (device);
out:
diff --git a/src/mm-device.c b/src/mm-device.c
index e6bd36bb..09d15d7a 100644
--- a/src/mm-device.c
+++ b/src/mm-device.c
@@ -402,6 +402,48 @@ export_modem (MMDevice *self)
/*****************************************************************************/
static void
+initialize_ready (MMBaseModem *modem,
+ GAsyncResult *res,
+ MMDevice *_self) /* full reference */
+{
+ g_autoptr(MMDevice) self = _self;
+ g_autoptr(GError) error = NULL;
+
+ if (!mm_base_modem_initialize_finish (modem, res, &error)) {
+ if (g_error_matches (error, MM_CORE_ERROR, MM_CORE_ERROR_ABORTED)) {
+ /* FATAL error, won't even be exported in DBus */
+ mm_obj_err (self, "fatal error initializing: %s", error->message);
+ } else {
+ /* non-fatal error */
+ mm_obj_warn (self, "error initializing: %s", error->message);
+ mm_base_modem_set_valid (modem, TRUE);
+ }
+ } else {
+ mm_obj_dbg (self, "modem initialized");
+ mm_base_modem_set_valid (modem, TRUE);
+ }
+}
+
+void
+mm_device_initialize_modem (MMDevice *self)
+{
+ MMBaseModem *modem;
+
+ modem = mm_device_peek_modem (self);
+ if (!modem) {
+ mm_obj_warn (self, "cannot initialize modem: not found");
+ return;
+ }
+
+ mm_obj_dbg (self, "modem initializing...");
+ mm_base_modem_initialize (modem,
+ (GAsyncReadyCallback)initialize_ready,
+ g_object_ref (self));
+}
+
+/*****************************************************************************/
+
+static void
clear_modem (MMDevice *self)
{
if (self->priv->modem_valid_id) {
@@ -434,16 +476,17 @@ mm_device_remove_modem (MMDevice *self)
static gboolean
reprobe (MMDevice *self)
{
- GError *error = NULL;
+ g_autoptr (GError) error = NULL;
self->priv->reprobe_id = 0;
mm_obj_dbg (self, "Reprobing modem...");
if (!mm_device_create_modem (self, &error)) {
mm_obj_warn (self, "could not recreate modem: %s", error->message);
- g_error_free (error);
- } else
+ } else {
mm_obj_dbg (self, "modem recreated");
+ mm_device_initialize_modem (self);
+ }
return G_SOURCE_REMOVE;
}
diff --git a/src/mm-device.h b/src/mm-device.h
index eb376974..5426ef17 100644
--- a/src/mm-device.h
+++ b/src/mm-device.h
@@ -80,9 +80,10 @@ void mm_device_release_port_name (MMDevice *self,
const gchar *subsystem,
const gchar *name);
-gboolean mm_device_create_modem (MMDevice *self,
- GError **error);
-void mm_device_remove_modem (MMDevice *self);
+gboolean mm_device_create_modem (MMDevice *self,
+ GError **error);
+void mm_device_remove_modem (MMDevice *self);
+void mm_device_initialize_modem (MMDevice *self);
void mm_device_inhibit (MMDevice *self,
GAsyncReadyCallback callback,