broadband-modem: port modem_cdma_setup_registration_checks to use GTask
This commit is contained in:
@@ -8149,14 +8149,13 @@ typedef struct {
|
|||||||
} SetupRegistrationChecksResults;
|
} SetupRegistrationChecksResults;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
MMBroadbandModem *self;
|
|
||||||
GSimpleAsyncResult *result;
|
|
||||||
gboolean has_qcdm_port;
|
gboolean has_qcdm_port;
|
||||||
gboolean has_sprint_commands;
|
gboolean has_sprint_commands;
|
||||||
} SetupRegistrationChecksContext;
|
} SetupRegistrationChecksContext;
|
||||||
|
|
||||||
static void
|
static SetupRegistrationChecksResults *
|
||||||
setup_registration_checks_context_complete_and_free (SetupRegistrationChecksContext *ctx)
|
setup_registration_checks_results_new (MMBroadbandModem *self,
|
||||||
|
SetupRegistrationChecksContext *ctx)
|
||||||
{
|
{
|
||||||
SetupRegistrationChecksResults *results;
|
SetupRegistrationChecksResults *results;
|
||||||
|
|
||||||
@@ -8169,7 +8168,7 @@ setup_registration_checks_context_complete_and_free (SetupRegistrationChecksCont
|
|||||||
results->skip_qcdm_hdr_step = TRUE;
|
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) {
|
modem_cdma_get_detailed_registration_state) {
|
||||||
/* Skip CDMA1x Serving System check if we have Sprint specific
|
/* Skip CDMA1x Serving System check if we have Sprint specific
|
||||||
* commands AND if the default detailed registration checker
|
* 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);
|
return results;
|
||||||
g_simple_async_result_complete_in_idle (ctx->result);
|
|
||||||
g_object_unref (ctx->result);
|
|
||||||
g_object_unref (ctx->self);
|
|
||||||
g_free (ctx);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@@ -8209,86 +8204,104 @@ modem_cdma_setup_registration_checks_finish (MMIfaceModemCdma *self,
|
|||||||
{
|
{
|
||||||
SetupRegistrationChecksResults *results;
|
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;
|
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_call_manager_step = results->skip_qcdm_call_manager_step;
|
||||||
*skip_qcdm_hdr_step = results->skip_qcdm_hdr_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_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_at_cdma1x_serving_system_step = results->skip_at_cdma1x_serving_system_step;
|
||||||
*skip_detailed_registration_state = results->skip_detailed_registration_state;
|
*skip_detailed_registration_state = results->skip_detailed_registration_state;
|
||||||
|
g_free (results);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
speri_check_ready (MMIfaceModemCdma *self,
|
speri_check_ready (MMIfaceModemCdma *_self,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
SetupRegistrationChecksContext *ctx)
|
GTask *task)
|
||||||
{
|
{
|
||||||
|
MMBroadbandModem *self = MM_BROADBAND_MODEM (_self);
|
||||||
|
SetupRegistrationChecksContext *ctx;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
|
ctx = g_task_get_task_data (task);
|
||||||
|
|
||||||
mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, &error);
|
mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, &error);
|
||||||
if (error)
|
if (error)
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
else
|
else
|
||||||
/* We DO have SPERI */
|
/* We DO have SPERI */
|
||||||
ctx->self->priv->has_speri = TRUE;
|
self->priv->has_speri = TRUE;
|
||||||
|
|
||||||
/* All done */
|
/* All done */
|
||||||
ctx->self->priv->checked_sprint_support = TRUE;
|
self->priv->checked_sprint_support = TRUE;
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
spservice_check_ready (MMIfaceModemCdma *self,
|
spservice_check_ready (MMIfaceModemCdma *_self,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
SetupRegistrationChecksContext *ctx)
|
GTask *task)
|
||||||
{
|
{
|
||||||
|
MMBroadbandModem *self = MM_BROADBAND_MODEM (_self);
|
||||||
|
SetupRegistrationChecksContext *ctx;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
|
ctx = g_task_get_task_data (task);
|
||||||
|
|
||||||
mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, &error);
|
mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, &error);
|
||||||
if (error) {
|
if (error) {
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
ctx->self->priv->checked_sprint_support = TRUE;
|
self->priv->checked_sprint_support = TRUE;
|
||||||
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We DO have SPSERVICE, look for SPERI */
|
/* We DO have SPSERVICE, look for SPERI */
|
||||||
ctx->has_sprint_commands = TRUE;
|
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),
|
mm_base_modem_at_command (MM_BASE_MODEM (self),
|
||||||
"$SPERI?",
|
"$SPERI?",
|
||||||
3,
|
3,
|
||||||
FALSE,
|
FALSE,
|
||||||
(GAsyncReadyCallback)speri_check_ready,
|
(GAsyncReadyCallback)speri_check_ready,
|
||||||
ctx);
|
task);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
modem_cdma_setup_registration_checks (MMIfaceModemCdma *self,
|
modem_cdma_setup_registration_checks (MMIfaceModemCdma *_self,
|
||||||
GAsyncReadyCallback callback,
|
GAsyncReadyCallback callback,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
|
MMBroadbandModem *self = MM_BROADBAND_MODEM (_self);
|
||||||
SetupRegistrationChecksContext *ctx;
|
SetupRegistrationChecksContext *ctx;
|
||||||
|
GTask *task;
|
||||||
|
|
||||||
ctx = g_new0 (SetupRegistrationChecksContext, 1);
|
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 */
|
/* Check if we have a QCDM port */
|
||||||
ctx->has_qcdm_port = !!mm_base_modem_peek_port_qcdm (MM_BASE_MODEM (self));
|
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 we have cached results of Sprint command checking, use them */
|
||||||
if (ctx->self->priv->checked_sprint_support) {
|
if (self->priv->checked_sprint_support) {
|
||||||
ctx->has_sprint_commands = ctx->self->priv->has_spservice;
|
ctx->has_sprint_commands = self->priv->has_spservice;
|
||||||
|
|
||||||
/* Completes in idle */
|
/* 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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8298,7 +8311,7 @@ modem_cdma_setup_registration_checks (MMIfaceModemCdma *self,
|
|||||||
3,
|
3,
|
||||||
FALSE,
|
FALSE,
|
||||||
(GAsyncReadyCallback)spservice_check_ready,
|
(GAsyncReadyCallback)spservice_check_ready,
|
||||||
ctx);
|
task);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
Reference in New Issue
Block a user