diff options
author | Ben Chan <benchan@chromium.org> | 2017-09-12 04:27:46 -0700 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2017-09-13 16:36:49 +0200 |
commit | b14a3be4f1ae26620ee9bf57c73eff9e888d917c (patch) | |
tree | 0df1118dee24cb2aa031c5a8b4b2903f251b5699 | |
parent | b25b7723ec8c2981aaf993542817c859967d72f8 (diff) |
novatel: port load_current_modes to use GTask
-rw-r--r-- | plugins/novatel/mm-broadband-modem-novatel.c | 82 |
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); } /*****************************************************************************/ |