aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Chan <benchan@chromium.org>2017-09-12 04:27:46 -0700
committerAleksander Morgado <aleksander@aleksander.es>2017-09-13 16:36:49 +0200
commitb14a3be4f1ae26620ee9bf57c73eff9e888d917c (patch)
tree0df1118dee24cb2aa031c5a8b4b2903f251b5699
parentb25b7723ec8c2981aaf993542817c859967d72f8 (diff)
novatel: port load_current_modes to use GTask
-rw-r--r--plugins/novatel/mm-broadband-modem-novatel.c82
1 files changed, 38 insertions, 44 deletions
diff --git a/plugins/novatel/mm-broadband-modem-novatel.c b/plugins/novatel/mm-broadband-modem-novatel.c
index 9c251573..f98fb4d0 100644
--- a/plugins/novatel/mm-broadband-modem-novatel.c
+++ b/plugins/novatel/mm-broadband-modem-novatel.c
@@ -149,22 +149,23 @@ load_current_modes_finish (MMIfaceModem *self,
{
LoadCurrentModesResult *result;
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error))
+ result = g_task_propagate_pointer (G_TASK (res), error);
+ if (!result)
return FALSE;
- /* When a valid result is given, we never complete in idle */
- result = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res));
*allowed = result->allowed;
*preferred = result->preferred;
+ g_free (result);
+
return TRUE;
}
static void
nwrat_query_ready (MMBaseModem *self,
GAsyncResult *res,
- GSimpleAsyncResult *simple)
+ GTask *task)
{
- LoadCurrentModesResult result;
+ LoadCurrentModesResult *result;
GError *error = NULL;
const gchar *response;
GRegex *r;
@@ -174,9 +175,8 @@ nwrat_query_ready (MMBaseModem *self,
response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, &error);
if (!response) {
- g_simple_async_result_take_error (simple, error);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
+ g_task_return_error (task, error);
+ g_object_unref (task);
return;
}
@@ -186,15 +186,14 @@ nwrat_query_ready (MMBaseModem *self,
if (!g_regex_match_full (r, response, strlen (response), 0, 0, &match_info, &error)) {
if (error)
- g_simple_async_result_take_error (simple, error);
+ g_task_return_error (task, error);
else
- g_simple_async_result_set_error (simple,
- MM_CORE_ERROR,
- MM_CORE_ERROR_FAILED,
- "Couldn't match NWRAT reply: %s",
- response);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
+ g_task_return_new_error (task,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_FAILED,
+ "Couldn't match NWRAT reply: %s",
+ response);
+ g_object_unref (task);
g_match_info_free (match_info);
g_regex_unref (r);
return;
@@ -204,40 +203,41 @@ nwrat_query_ready (MMBaseModem *self,
!mm_get_int_from_match_info (match_info, 2, &b) ||
a < 0 || a > 2 ||
b < 1 || b > 2) {
- g_simple_async_result_set_error (
- simple,
+ g_task_return_new_error (
+ task,
MM_CORE_ERROR,
MM_CORE_ERROR_FAILED,
"Failed to parse mode/tech response '%s': invalid modes reported",
response);
+ g_object_unref (task);
g_match_info_free (match_info);
g_regex_unref (r);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
return;
}
+ result = g_new0 (LoadCurrentModesResult, 1);
+
switch (a) {
case 0:
- result.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G);
- result.preferred = MM_MODEM_MODE_NONE;
+ result->allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G);
+ result->preferred = MM_MODEM_MODE_NONE;
break;
case 1:
if (b == 1) {
- result.allowed = MM_MODEM_MODE_2G;
- result.preferred = MM_MODEM_MODE_NONE;
+ result->allowed = MM_MODEM_MODE_2G;
+ result->preferred = MM_MODEM_MODE_NONE;
} else /* b == 2 */ {
- result.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G);
- result.preferred = MM_MODEM_MODE_2G;
+ result->allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G);
+ result->preferred = MM_MODEM_MODE_2G;
}
break;
case 2:
if (b == 1) {
- result.allowed = MM_MODEM_MODE_3G;
- result.preferred = MM_MODEM_MODE_NONE;
+ result->allowed = MM_MODEM_MODE_3G;
+ result->preferred = MM_MODEM_MODE_NONE;
} else /* b == 2 */ {
- result.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G);
- result.preferred = MM_MODEM_MODE_3G;
+ result->allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G);
+ result->preferred = MM_MODEM_MODE_3G;
}
break;
default:
@@ -249,10 +249,8 @@ nwrat_query_ready (MMBaseModem *self,
g_match_info_free (match_info);
g_regex_unref (r);
- /* When a valid result is given, we never complete in idle */
- g_simple_async_result_set_op_res_gpointer (simple, &result, NULL);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
+ g_task_return_pointer (task, result, g_free);
+ g_object_unref (task);
}
static void
@@ -260,22 +258,18 @@ load_current_modes (MMIfaceModem *self,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *result;
+ GTask *task;
- result = g_simple_async_result_new (G_OBJECT (self),
- callback,
- user_data,
- load_current_modes);
+ task = g_task_new (self, NULL, callback, user_data);
/* Load allowed modes only in 3GPP modems */
if (!mm_iface_modem_is_3gpp (self)) {
- g_simple_async_result_set_error (
- result,
+ g_task_return_new_error (
+ task,
MM_CORE_ERROR,
MM_CORE_ERROR_UNSUPPORTED,
"Loading allowed modes not supported in CDMA-only modems");
- g_simple_async_result_complete_in_idle (result);
- g_object_unref (result);
+ g_object_unref (task);
return;
}
@@ -284,7 +278,7 @@ load_current_modes (MMIfaceModem *self,
3,
FALSE,
(GAsyncReadyCallback)nwrat_query_ready,
- result);
+ task);
}
/*****************************************************************************/