diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2011-11-30 13:29:58 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-15 14:14:30 +0100 |
commit | 3c3a2b811a3be982ec0f9893d7edc5cb31e70454 (patch) | |
tree | ab02d15d109e3ed4c21d8acf369c8a905ad2346e /src | |
parent | 8ecb80b553d8b60ceeaa78af92a7163e9db8f10a (diff) |
broadband-modem: implement network scan
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-broadband-modem.c | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index 695f0457..abf2a732 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -1391,6 +1391,48 @@ setup_unsolicited_registration (MMIfaceModem3gpp *self, } /*****************************************************************************/ +/* Scan networks (3GPP) */ + +static GList * +scan_networks_finish (MMIfaceModem3gpp *self, + GAsyncResult *res, + GError **error) +{ + GVariant *reply; + GList *info_list; + + reply = mm_at_command_finish (G_OBJECT (self), res, error); + if (!reply) + return NULL; + + info_list = mm_3gpp_parse_scan_response (g_variant_get_string (reply, NULL), + error); + g_variant_unref (reply); + return info_list; +} + +static void +scan_networks (MMIfaceModem3gpp *self, + GAsyncReadyCallback callback, + gpointer user_data) +{ + /* It is mandatory to have a callback here right now, otherwise we may leak + * the info list */ + g_assert (callback != NULL); + + mm_at_command (G_OBJECT (self), + mm_base_modem_get_port_primary (MM_BASE_MODEM (self)), + "+COPS=?", + 120, + (MMAtResponseProcessor)common_parse_string_reply, + NULL, /* response processor context */ + "s", /* reply signature */ + NULL, /* cancellable */ + callback, + user_data); +} + +/*****************************************************************************/ /* Register in network (3GPP) */ static void run_all_registration_checks_ready (MMBroadbandModem *self, @@ -1419,7 +1461,6 @@ static void clear_previous_registration_request (MMBroadbandModem *self, gboolean complete_with_cancel) { - if (self->priv->pending_reg_id) { /* Clear the registration timeout handler */ g_source_remove (self->priv->pending_reg_id); @@ -2483,6 +2524,8 @@ iface_modem_3gpp_init (MMIfaceModem3gpp *iface) iface->run_ps_registration_check_finish = run_ps_registration_check_finish; iface->register_in_network = register_in_network; iface->register_in_network_finish = register_in_network_finish; + iface->scan_networks = scan_networks; + iface->scan_networks_finish = scan_networks_finish; } static void |