diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2016-10-11 16:27:51 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2016-10-12 11:29:52 +0200 |
commit | aca6bb1c02ddc16d88fb8c9fd934466eb7debf5c (patch) | |
tree | 157c9d96d8331e00dfe3b090a89b084e71e98886 /src/mm-broadband-modem.c | |
parent | b34f147ba27b9d328a17bee092d0d21bd20eb200 (diff) |
modem-helpers: new +CFUN? response parser
Diffstat (limited to 'src/mm-broadband-modem.c')
-rw-r--r-- | src/mm-broadband-modem.c | 40 |
1 files changed, 4 insertions, 36 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index 6b3b8e40..86b80ca2 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -3150,46 +3150,14 @@ cfun_query_ready (MMBaseModem *self, GSimpleAsyncResult *simple) { const gchar *result; - guint state; + MMModemPowerState state; GError *error = NULL; result = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, &error); - if (!result) { + if (!result || !mm_3gpp_parse_cfun_query_generic_response (result, &state, &error)) g_simple_async_result_take_error (simple, error); - g_simple_async_result_complete (simple); - g_object_unref (simple); - return; - } - - /* Parse power state reply */ - result = mm_strip_tag (result, "+CFUN:"); - if (!mm_get_uint_from_str (result, &state)) { - g_simple_async_result_set_error (simple, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, - "Failed to parse +CFUN? response '%s'", - result); - } else { - switch (state) { - case 0: - g_simple_async_result_set_op_res_gpointer (simple, GUINT_TO_POINTER (MM_MODEM_POWER_STATE_OFF), NULL); - break; - case 1: - g_simple_async_result_set_op_res_gpointer (simple, GUINT_TO_POINTER (MM_MODEM_POWER_STATE_ON), NULL); - break; - case 4: - g_simple_async_result_set_op_res_gpointer (simple, GUINT_TO_POINTER (MM_MODEM_POWER_STATE_LOW), NULL); - break; - default: - g_simple_async_result_set_error (simple, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, - "Unhandled power state: '%u'", - state); - break; - } - } - + else + g_simple_async_result_set_op_res_gpointer (simple, GUINT_TO_POINTER (state), NULL); g_simple_async_result_complete (simple); g_object_unref (simple); } |