diff options
author | Ben Chan <benchan@chromium.org> | 2018-08-30 13:00:38 -0700 |
---|---|---|
committer | Ben Chan <benchan@chromium.org> | 2018-09-07 08:35:44 -0700 |
commit | fcec3b3355f62e0accccd8b84df8aca2b16181dd (patch) | |
tree | 8e71ea647656c333fa7d54e9d14d60dd9ba50a53 | |
parent | c0607ede9b9743ef20798b34b9257fab2a48a490 (diff) | |
download | ModemManager-fcec3b3355f62e0accccd8b84df8aca2b16181dd.tar.gz |
broadband-modem: port modem_cdma_setup_registration_checks to use GTask
-rw-r--r-- | src/mm-broadband-modem.c | 79 |
1 files changed, 46 insertions, 33 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index 36cd6912f..aba88044c 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -8149,14 +8149,13 @@ typedef struct { } SetupRegistrationChecksResults; typedef struct { - MMBroadbandModem *self; - GSimpleAsyncResult *result; gboolean has_qcdm_port; gboolean has_sprint_commands; } SetupRegistrationChecksContext; -static void -setup_registration_checks_context_complete_and_free (SetupRegistrationChecksContext *ctx) +static SetupRegistrationChecksResults * +setup_registration_checks_results_new (MMBroadbandModem *self, + SetupRegistrationChecksContext *ctx) { SetupRegistrationChecksResults *results; @@ -8169,7 +8168,7 @@ setup_registration_checks_context_complete_and_free (SetupRegistrationChecksCont results->skip_qcdm_hdr_step = TRUE; } - if (MM_IFACE_MODEM_CDMA_GET_INTERFACE (ctx->self)->get_detailed_registration_state == + if (MM_IFACE_MODEM_CDMA_GET_INTERFACE (self)->get_detailed_registration_state == modem_cdma_get_detailed_registration_state) { /* Skip CDMA1x Serving System check if we have Sprint specific * commands AND if the default detailed registration checker @@ -8190,11 +8189,7 @@ setup_registration_checks_context_complete_and_free (SetupRegistrationChecksCont } } - g_simple_async_result_set_op_res_gpointer (ctx->result, results, g_free); - g_simple_async_result_complete_in_idle (ctx->result); - g_object_unref (ctx->result); - g_object_unref (ctx->self); - g_free (ctx); + return results; } static gboolean @@ -8209,86 +8204,104 @@ modem_cdma_setup_registration_checks_finish (MMIfaceModemCdma *self, { SetupRegistrationChecksResults *results; - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) + results = g_task_propagate_pointer (G_TASK (res), error); + if (!results) return FALSE; - results = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res)); *skip_qcdm_call_manager_step = results->skip_qcdm_call_manager_step; *skip_qcdm_hdr_step = results->skip_qcdm_hdr_step; *skip_at_cdma_service_status_step = results->skip_at_cdma_service_status_step; *skip_at_cdma1x_serving_system_step = results->skip_at_cdma1x_serving_system_step; *skip_detailed_registration_state = results->skip_detailed_registration_state; + g_free (results); return TRUE; } static void -speri_check_ready (MMIfaceModemCdma *self, +speri_check_ready (MMIfaceModemCdma *_self, GAsyncResult *res, - SetupRegistrationChecksContext *ctx) + GTask *task) { + MMBroadbandModem *self = MM_BROADBAND_MODEM (_self); + SetupRegistrationChecksContext *ctx; GError *error = NULL; + ctx = g_task_get_task_data (task); + mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, &error); if (error) g_error_free (error); else /* We DO have SPERI */ - ctx->self->priv->has_speri = TRUE; + self->priv->has_speri = TRUE; /* All done */ - ctx->self->priv->checked_sprint_support = TRUE; - setup_registration_checks_context_complete_and_free (ctx); + self->priv->checked_sprint_support = TRUE; + g_task_return_pointer (task, + setup_registration_checks_results_new (self, ctx), + g_free); + g_object_unref (task); } static void -spservice_check_ready (MMIfaceModemCdma *self, +spservice_check_ready (MMIfaceModemCdma *_self, GAsyncResult *res, - SetupRegistrationChecksContext *ctx) + GTask *task) { + MMBroadbandModem *self = MM_BROADBAND_MODEM (_self); + SetupRegistrationChecksContext *ctx; GError *error = NULL; + ctx = g_task_get_task_data (task); + mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, &error); if (error) { g_error_free (error); - ctx->self->priv->checked_sprint_support = TRUE; - setup_registration_checks_context_complete_and_free (ctx); + self->priv->checked_sprint_support = TRUE; + g_task_return_pointer (task, + setup_registration_checks_results_new (self, ctx), + g_free); + g_object_unref (task); return; } /* We DO have SPSERVICE, look for SPERI */ ctx->has_sprint_commands = TRUE; - ctx->self->priv->has_spservice = TRUE; + self->priv->has_spservice = TRUE; mm_base_modem_at_command (MM_BASE_MODEM (self), "$SPERI?", 3, FALSE, (GAsyncReadyCallback)speri_check_ready, - ctx); + task); } static void -modem_cdma_setup_registration_checks (MMIfaceModemCdma *self, +modem_cdma_setup_registration_checks (MMIfaceModemCdma *_self, GAsyncReadyCallback callback, gpointer user_data) { + MMBroadbandModem *self = MM_BROADBAND_MODEM (_self); SetupRegistrationChecksContext *ctx; + GTask *task; ctx = g_new0 (SetupRegistrationChecksContext, 1); - ctx->self = g_object_ref (self); - ctx->result = g_simple_async_result_new (G_OBJECT (self), - callback, - user_data, - modem_cdma_setup_registration_checks); /* Check if we have a QCDM port */ ctx->has_qcdm_port = !!mm_base_modem_peek_port_qcdm (MM_BASE_MODEM (self)); + task = g_task_new (self, NULL, callback, user_data); + g_task_set_task_data (task, ctx, g_free); + /* If we have cached results of Sprint command checking, use them */ - if (ctx->self->priv->checked_sprint_support) { - ctx->has_sprint_commands = ctx->self->priv->has_spservice; + if (self->priv->checked_sprint_support) { + ctx->has_sprint_commands = self->priv->has_spservice; /* Completes in idle */ - setup_registration_checks_context_complete_and_free (ctx); + g_task_return_pointer (task, + setup_registration_checks_results_new (self, ctx), + g_free); + g_object_unref (task); return; } @@ -8298,7 +8311,7 @@ modem_cdma_setup_registration_checks (MMIfaceModemCdma *self, 3, FALSE, (GAsyncReadyCallback)spservice_check_ready, - ctx); + task); } /*****************************************************************************/ |