aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-broadband-modem.c63
-rw-r--r--src/mm-iface-modem-3gpp.c27
-rw-r--r--src/mm-iface-modem-cdma.c25
3 files changed, 63 insertions, 52 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index 90b5780d..d2bfd913 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -8463,6 +8463,59 @@ enabling_started (MMBroadbandModem *self,
}
/*****************************************************************************/
+/* First registration checks */
+
+static void
+modem_3gpp_run_registration_checks_ready (MMIfaceModem3gpp *self,
+ GAsyncResult *res)
+{
+ GError *error = NULL;
+
+ if (!mm_iface_modem_3gpp_run_registration_checks_finish (self, res, &error)) {
+ mm_warn ("Initial 3GPP registration check failed: %s", error->message);
+ g_error_free (error);
+ return;
+ }
+ mm_dbg ("Initial 3GPP registration checks finished");
+}
+
+static void
+modem_cdma_run_registration_checks_ready (MMIfaceModemCdma *self,
+ GAsyncResult *res)
+{
+ GError *error = NULL;
+
+ if (!mm_iface_modem_cdma_run_registration_checks_finish (self, res, &error)) {
+ mm_warn ("Initial CDMA registration check failed: %s", error->message);
+ g_error_free (error);
+ return;
+ }
+ mm_dbg ("Initial CDMA registration checks finished");
+}
+
+static gboolean
+schedule_initial_registration_checks_cb (MMBroadbandModem *self)
+{
+ if (mm_iface_modem_is_3gpp (MM_IFACE_MODEM (self)))
+ mm_iface_modem_3gpp_run_registration_checks (MM_IFACE_MODEM_3GPP (self),
+ (GAsyncReadyCallback) modem_3gpp_run_registration_checks_ready,
+ NULL);
+ if (mm_iface_modem_is_cdma (MM_IFACE_MODEM (self)))
+ mm_iface_modem_cdma_run_registration_checks (MM_IFACE_MODEM_CDMA (self),
+ (GAsyncReadyCallback) modem_cdma_run_registration_checks_ready,
+ NULL);
+ /* We got a full reference, so balance it out here */
+ g_object_unref (self);
+ return FALSE;
+}
+
+static void
+schedule_initial_registration_checks (MMBroadbandModem *self)
+{
+ g_idle_add ((GSourceFunc) schedule_initial_registration_checks_cb, g_object_ref (self));
+}
+
+/*****************************************************************************/
typedef enum {
DISABLING_STEP_FIRST,
@@ -9173,6 +9226,16 @@ enabling_step (EnablingContext *ctx)
case ENABLING_STEP_LAST:
ctx->enabled = TRUE;
+
+ /* Once all interfaces have been enabled, trigger registration checks in
+ * 3GPP and CDMA modems. We have to do this at this point so that e.g.
+ * location interface gets proper registration related info reported.
+ *
+ * We do this in an idle so that we don't mess up the logs at this point
+ * with the new requests being triggered.
+ */
+ schedule_initial_registration_checks (ctx->self);
+
/* All enabled without errors! */
g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE);
enabling_context_complete_and_free (ctx);
diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c
index 199b880f..c8f3c2e7 100644
--- a/src/mm-iface-modem-3gpp.c
+++ b/src/mm-iface-modem-3gpp.c
@@ -1551,7 +1551,6 @@ typedef enum {
ENABLING_STEP_ENABLE_UNSOLICITED_EVENTS,
ENABLING_STEP_SETUP_UNSOLICITED_REGISTRATION_EVENTS,
ENABLING_STEP_ENABLE_UNSOLICITED_REGISTRATION_EVENTS,
- ENABLING_STEP_RUN_REGISTRATION_CHECKS,
ENABLING_STEP_LAST
} EnablingStep;
@@ -1690,25 +1689,6 @@ enable_unsolicited_registration_events_ready (MMIfaceModem3gpp *self,
}
static void
-run_all_registration_checks_ready (MMIfaceModem3gpp *self,
- GAsyncResult *res,
- EnablingContext *ctx)
-{
- GError *error = NULL;
-
- mm_iface_modem_3gpp_run_registration_checks_finish (self, res, &error);
- if (error) {
- g_simple_async_result_take_error (ctx->result, error);
- enabling_context_complete_and_free (ctx);
- return;
- }
-
- /* Go on to next step */
- ctx->step++;
- interface_enabling_step (ctx);
-}
-
-static void
interface_enabling_step (EnablingContext *ctx)
{
/* Don't run new steps if we're cancelled */
@@ -1782,13 +1762,6 @@ interface_enabling_step (EnablingContext *ctx)
ctx->step++;
}
- case ENABLING_STEP_RUN_REGISTRATION_CHECKS:
- mm_iface_modem_3gpp_run_registration_checks (
- ctx->self,
- (GAsyncReadyCallback)run_all_registration_checks_ready,
- ctx);
- return;
-
case ENABLING_STEP_LAST:
/* We are done without errors! */
g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE);
diff --git a/src/mm-iface-modem-cdma.c b/src/mm-iface-modem-cdma.c
index 853f1dbc..67d360a1 100644
--- a/src/mm-iface-modem-cdma.c
+++ b/src/mm-iface-modem-cdma.c
@@ -1414,7 +1414,6 @@ typedef enum {
ENABLING_STEP_FIRST,
ENABLING_STEP_SETUP_UNSOLICITED_EVENTS,
ENABLING_STEP_ENABLE_UNSOLICITED_EVENTS,
- ENABLING_STEP_RUN_REGISTRATION_CHECKS,
ENABLING_STEP_PERIODIC_REGISTRATION_CHECKS,
ENABLING_STEP_LAST
} EnablingStep;
@@ -1500,24 +1499,6 @@ enable_unsolicited_events_ready (MMIfaceModemCdma *self,
}
static void
-run_registration_checks_ready (MMIfaceModemCdma *self,
- GAsyncResult *res,
- EnablingContext *ctx)
-{
- GError *error = NULL;
-
- if (!mm_iface_modem_cdma_run_registration_checks_finish (self, res, &error)) {
- g_simple_async_result_take_error (ctx->result, error);
- enabling_context_complete_and_free (ctx);
- return;
- }
-
- /* Go on to next step */
- ctx->step++;
- interface_enabling_step (ctx);
-}
-
-static void
interface_enabling_step (EnablingContext *ctx)
{
/* Don't run new steps if we're cancelled */
@@ -1553,12 +1534,6 @@ interface_enabling_step (EnablingContext *ctx)
/* Fall down to next step */
ctx->step++;
- case ENABLING_STEP_RUN_REGISTRATION_CHECKS:
- mm_iface_modem_cdma_run_registration_checks (ctx->self,
- (GAsyncReadyCallback)run_registration_checks_ready,
- ctx);
- return;
-
case ENABLING_STEP_PERIODIC_REGISTRATION_CHECKS:
periodic_registration_check_enable (ctx->self);
/* Fall down to next step */