diff options
author | Ben Chan <benchan@chromium.org> | 2018-04-26 18:03:30 -0700 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2018-06-02 17:56:59 +0200 |
commit | 7d8f0600e6de32721112949b65d48108ea640b51 (patch) | |
tree | 1f9470e35eda22017e141163ee4882aa1cba2ecf | |
parent | 8047f54083371288c4dcf6a089d667fb2d2964d6 (diff) |
broadband-modem-qmi: port signal_load_values to use GTask
-rw-r--r-- | src/mm-broadband-modem-qmi.c | 70 |
1 files changed, 36 insertions, 34 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index ad2577ce..6a6443ad 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -10521,9 +10521,7 @@ typedef struct { } SignalLoadValuesResult; typedef struct { - MMBroadbandModemQmi *self; QmiClientNas *client; - GSimpleAsyncResult *result; SignalLoadValuesStep step; SignalLoadValuesResult *values_result; } SignalLoadValuesContext; @@ -10545,13 +10543,10 @@ signal_load_values_result_free (SignalLoadValuesResult *result) } static void -signal_load_values_context_complete_and_free (SignalLoadValuesContext *ctx) +signal_load_values_context_free (SignalLoadValuesContext *ctx) { - g_simple_async_result_complete (ctx->result); if (ctx->values_result) signal_load_values_result_free (ctx->values_result); - g_object_unref (ctx->result); - g_object_unref (ctx->self); g_slice_free (SignalLoadValuesContext, ctx); } @@ -10586,26 +10581,27 @@ signal_load_values_finish (MMIfaceModemSignal *self, { SignalLoadValuesResult *values_result; - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) + values_result = g_task_propagate_pointer (G_TASK (res), error); + if (!values_result) return FALSE; - values_result = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res)); *cdma = values_result->cdma ? g_object_ref (values_result->cdma) : NULL; *evdo = values_result->evdo ? g_object_ref (values_result->evdo) : NULL; *gsm = values_result->gsm ? g_object_ref (values_result->gsm) : NULL; *umts = values_result->umts ? g_object_ref (values_result->umts) : NULL; *lte = values_result->lte ? g_object_ref (values_result->lte) : NULL; - + signal_load_values_result_free (values_result); return TRUE; } -static void signal_load_values_context_step (SignalLoadValuesContext *ctx); +static void signal_load_values_context_step (GTask *task); static void signal_load_values_get_signal_strength_ready (QmiClientNas *client, GAsyncResult *res, - SignalLoadValuesContext *ctx) + GTask *task) { + SignalLoadValuesContext *ctx; QmiMessageNasGetSignalStrengthOutput *output; GArray *array; gint32 aux_int32; @@ -10614,11 +10610,12 @@ signal_load_values_get_signal_strength_ready (QmiClientNas *client, QmiNasRadioInterface radio_interface; QmiNasEvdoSinrLevel sinr; + ctx = g_task_get_task_data (task); output = qmi_client_nas_get_signal_strength_finish (client, res, NULL); if (!output || !qmi_message_nas_get_signal_strength_output_get_result (output, NULL)) { /* No hard errors, go on to next step */ ctx->step++; - signal_load_values_context_step (ctx); + signal_load_values_context_step (task); if (output) qmi_message_nas_get_signal_strength_output_unref (output); return; @@ -10738,14 +10735,15 @@ signal_load_values_get_signal_strength_ready (QmiClientNas *client, /* Go on */ ctx->step++; - signal_load_values_context_step (ctx); + signal_load_values_context_step (task); } static void signal_load_values_get_signal_info_ready (QmiClientNas *client, GAsyncResult *res, - SignalLoadValuesContext *ctx) + GTask *task) { + SignalLoadValuesContext *ctx; QmiMessageNasGetSignalInfoOutput *output; gint8 rssi; gint16 ecio; @@ -10755,11 +10753,12 @@ signal_load_values_get_signal_info_ready (QmiClientNas *client, gint16 rsrp; gint16 snr; + ctx = g_task_get_task_data (task); output = qmi_client_nas_get_signal_info_finish (client, res, NULL); if (!output || !qmi_message_nas_get_signal_info_output_get_result (output, NULL)) { /* No hard errors, go on to next step */ ctx->step++; - signal_load_values_context_step (ctx); + signal_load_values_context_step (task); if (output) qmi_message_nas_get_signal_info_output_unref (output); return; @@ -10828,12 +10827,13 @@ signal_load_values_get_signal_info_ready (QmiClientNas *client, /* Keep on */ ctx->step++; - signal_load_values_context_step (ctx); + signal_load_values_context_step (task); } static void -signal_load_values_context_step (SignalLoadValuesContext *ctx) +signal_load_values_context_step (GTask *task) { + SignalLoadValuesContext *ctx; #define VALUES_RESULT_LOADED(ctx) \ (ctx->values_result && \ @@ -10843,6 +10843,8 @@ signal_load_values_context_step (SignalLoadValuesContext *ctx) ctx->values_result->umts || \ ctx->values_result->lte)) + ctx = g_task_get_task_data (task); + switch (ctx->step) { case SIGNAL_LOAD_VALUES_STEP_SIGNAL_FIRST: ctx->step++; @@ -10855,7 +10857,7 @@ signal_load_values_context_step (SignalLoadValuesContext *ctx) 5, NULL, (GAsyncReadyCallback)signal_load_values_get_signal_info_ready, - ctx); + task); return; } ctx->step++; @@ -10882,7 +10884,7 @@ signal_load_values_context_step (SignalLoadValuesContext *ctx) 5, NULL, (GAsyncReadyCallback)signal_load_values_get_signal_strength_ready, - ctx); + task); qmi_message_nas_get_signal_strength_input_unref (input); return; } @@ -10892,17 +10894,16 @@ signal_load_values_context_step (SignalLoadValuesContext *ctx) case SIGNAL_LOAD_VALUES_STEP_SIGNAL_LAST: /* If any result is set, succeed */ if (VALUES_RESULT_LOADED (ctx)) { - g_simple_async_result_set_op_res_gpointer (ctx->result, - ctx->values_result, - (GDestroyNotify)signal_load_values_result_free); + g_task_return_pointer (task, + g_memdup (&ctx->values_result, sizeof (ctx->values_result)), + (GDestroyNotify)signal_load_values_result_free); ctx->values_result = NULL; } else { - g_simple_async_result_set_error (ctx->result, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, - "No way to load extended signal information"); + g_task_return_new_error (task, + MM_CORE_ERROR, + MM_CORE_ERROR_FAILED, + "No way to load extended signal information"); } - signal_load_values_context_complete_and_free (ctx); return; } @@ -10918,25 +10919,26 @@ signal_load_values (MMIfaceModemSignal *self, gpointer user_data) { SignalLoadValuesContext *ctx; + GTask *task; QmiClient *client = NULL; mm_dbg ("loading extended signal information..."); - if (!ensure_qmi_client (MM_BROADBAND_MODEM_QMI (self), + if (!assure_qmi_client (MM_BROADBAND_MODEM_QMI (self), QMI_SERVICE_NAS, &client, callback, user_data)) return; ctx = g_slice_new0 (SignalLoadValuesContext); - ctx->self = g_object_ref (self); ctx->client = g_object_ref (client); - ctx->result = g_simple_async_result_new (G_OBJECT (self), - callback, - user_data, - signal_load_values); ctx->step = SIGNAL_LOAD_VALUES_STEP_SIGNAL_FIRST; - signal_load_values_context_step (ctx); + task = g_task_new (self, cancellable, callback, user_data); + g_task_set_task_data (task, + ctx, + (GDestroyNotify)signal_load_values_context_free); + + signal_load_values_context_step (task); } /*****************************************************************************/ |