diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-07-18 21:13:58 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-08-06 20:07:25 +0200 |
commit | 7163f4fe5fa2927e702a5d034e1852a03e5f4bf1 (patch) | |
tree | 7779d04ea2868add775edf5e4934e1ca125bd9d7 /plugins | |
parent | 8ddd6e097d4980fadafd872c38551a39081c8293 (diff) |
icera: implement loading access technologies
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/icera/mm-iface-icera.c | 69 | ||||
-rw-r--r-- | plugins/icera/mm-iface-icera.h | 9 |
2 files changed, 78 insertions, 0 deletions
diff --git a/plugins/icera/mm-iface-icera.c b/plugins/icera/mm-iface-icera.c index ff2bf8b8..fcd2c268 100644 --- a/plugins/icera/mm-iface-icera.c +++ b/plugins/icera/mm-iface-icera.c @@ -358,6 +358,75 @@ mm_iface_icera_modem_set_unsolicited_events_handlers (MMBroadbandModem *self, } /*****************************************************************************/ +/* Load access technologies (Modem interface) */ + +gboolean +mm_iface_icera_modem_load_access_technologies_finish (MMIfaceModem *self, + GAsyncResult *res, + MMModemAccessTechnology *access_technologies, + guint *mask, + GError **error) +{ + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) + return FALSE; + + *access_technologies = ((MMModemAccessTechnology) GPOINTER_TO_UINT ( + g_simple_async_result_get_op_res_gpointer ( + G_SIMPLE_ASYNC_RESULT (res)))); + *mask = MM_MODEM_ACCESS_TECHNOLOGY_ANY; + return TRUE; +} + +static void +nwstate_query_ready (MMBaseModem *self, + GAsyncResult *res, + GSimpleAsyncResult *operation_result) +{ + GError *error = NULL; + + mm_base_modem_at_command_finish (self, res, &error); + if (error) { + mm_dbg ("Couldn't query access technology: '%s'", error->message); + g_simple_async_result_take_error (operation_result, error); + } else { + IceraContext *ctx; + + /* + * The unsolicited message handler will already have run and + * removed the NWSTATE response, so we use the result from there. + */ + ctx = get_icera_context (MM_BROADBAND_MODEM (self)); + g_simple_async_result_set_op_res_gpointer (operation_result, + GUINT_TO_POINTER (ctx->last_act), + NULL); + } + + g_simple_async_result_complete (operation_result); + g_object_unref (operation_result); +} + +void +mm_iface_icera_modem_load_access_technologies (MMIfaceModem *self, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GSimpleAsyncResult *result; + + result = g_simple_async_result_new (G_OBJECT (self), + callback, + user_data, + mm_iface_icera_modem_load_access_technologies); + + mm_base_modem_at_command ( + MM_BASE_MODEM (self), + "%NWSTATE", + 3, + FALSE, + (GAsyncReadyCallback)nwstate_query_ready, + result); +} + +/*****************************************************************************/ static void iface_icera_init (gpointer g_iface) diff --git a/plugins/icera/mm-iface-icera.h b/plugins/icera/mm-iface-icera.h index d00d13c6..7ab90051 100644 --- a/plugins/icera/mm-iface-icera.h +++ b/plugins/icera/mm-iface-icera.h @@ -57,4 +57,13 @@ gboolean mm_iface_icera_modem_set_allowed_modes_finish (MMIfaceModem *self, void mm_iface_icera_modem_set_unsolicited_events_handlers (MMBroadbandModem *self, gboolean enable); +void mm_iface_icera_modem_load_access_technologies (MMIfaceModem *self, + GAsyncReadyCallback callback, + gpointer user_data); +gboolean mm_iface_icera_modem_load_access_technologies_finish (MMIfaceModem *self, + GAsyncResult *res, + MMModemAccessTechnology *access_technologies, + guint *mask, + GError **error); + #endif /* MM_IFACE_ICERA_H */ |