aboutsummaryrefslogtreecommitdiff
path: root/cli/mmcli-modem-location.c
diff options
context:
space:
mode:
Diffstat (limited to 'cli/mmcli-modem-location.c')
-rw-r--r--cli/mmcli-modem-location.c54
1 files changed, 53 insertions, 1 deletions
diff --git a/cli/mmcli-modem-location.c b/cli/mmcli-modem-location.c
index 1205aad3..2865b69c 100644
--- a/cli/mmcli-modem-location.c
+++ b/cli/mmcli-modem-location.c
@@ -65,6 +65,7 @@ static gboolean disable_gps_unmanaged_flag;
static gboolean set_enable_signal_flag;
static gboolean set_disable_signal_flag;
static gboolean get_flag;
+static gboolean monitor_flag;
static gchar *set_supl_server_str;
static gchar *inject_assistance_data_str;
static gchar *set_gps_refresh_rate_str;
@@ -78,6 +79,10 @@ static GOptionEntry entries[] = {
"Get all available location information.",
NULL
},
+ { "location-monitor", 0, 0, G_OPTION_ARG_NONE, &monitor_flag,
+ "Monitor all available location information.",
+ NULL
+ },
{ "location-enable-3gpp", 0, 0, G_OPTION_ARG_NONE, &enable_3gpp_flag,
"Enable 3GPP location gathering.",
NULL
@@ -210,6 +215,7 @@ mmcli_modem_location_options_enabled (void)
n_actions = (status_flag +
any_location_setup_flag +
get_flag +
+ monitor_flag +
!!set_supl_server_str +
!!inject_assistance_data_str +
!!set_gps_refresh_rate_str);
@@ -219,7 +225,9 @@ mmcli_modem_location_options_enabled (void)
exit (EXIT_FAILURE);
}
- if (status_flag)
+ if (monitor_flag)
+ mmcli_force_async_operation ();
+ else if (status_flag)
mmcli_force_sync_operation ();
checked = TRUE;
@@ -576,6 +584,34 @@ get_location_process_reply (MMLocation3gpp *location_3gpp,
}
static void
+cancelled (GCancellable *cancellable)
+{
+ mmcli_async_operation_done ();
+}
+
+static void
+print_signaled_location (MMModemLocation *modem_location)
+{
+ MMLocation3gpp *location_3gpp;
+ MMLocationGpsNmea *location_gps_nmea;
+ MMLocationGpsRaw *location_gps_raw;
+ MMLocationCdmaBs *location_cdma_bs;
+
+ location_3gpp = mm_modem_location_get_signaled_3gpp (modem_location);
+ location_gps_nmea = mm_modem_location_get_signaled_gps_nmea (modem_location);
+ location_gps_raw = mm_modem_location_get_signaled_gps_raw (modem_location);
+ location_cdma_bs = mm_modem_location_get_signaled_cdma_bs (modem_location);
+
+ get_location_process_reply (location_3gpp, location_gps_nmea, location_gps_raw, location_cdma_bs, NULL);
+}
+
+static void
+signaled_location_updated (MMModemLocation *modem_location)
+{
+ print_signaled_location (modem_location);
+}
+
+static void
get_location_ready (MMModemLocation *modem_location,
GAsyncResult *result)
{
@@ -635,6 +671,22 @@ get_modem_ready (GObject *source,
return;
}
+ /* Request to monitor location? */
+ if (monitor_flag) {
+ print_signaled_location (ctx->modem_location);
+ g_signal_connect (ctx->modem_location,
+ "notify::location",
+ G_CALLBACK (signaled_location_updated),
+ NULL);
+
+ /* If we get cancelled, operation done */
+ g_cancellable_connect (ctx->cancellable,
+ G_CALLBACK (cancelled),
+ NULL,
+ NULL);
+ return;
+ }
+
/* Request to set SUPL server? */
if (set_supl_server_str) {
g_debug ("Asynchronously setting SUPL server...");