cli: new actions to setup or gather CDMA BS location source

This commit is contained in:
Aleksander Morgado
2012-10-31 12:35:01 +01:00
parent d9241d08db
commit b508316a5a
2 changed files with 82 additions and 16 deletions

View File

@@ -55,6 +55,9 @@ static gboolean get_gps_nmea_flag;
static gboolean enable_gps_raw_flag;
static gboolean disable_gps_raw_flag;
static gboolean get_gps_raw_flag;
static gboolean enable_cdma_bs_flag;
static gboolean disable_cdma_bs_flag;
static gboolean get_cdma_bs_flag;
static gboolean get_all_flag;
static GOptionEntry entries[] = {
@@ -102,6 +105,18 @@ static GOptionEntry entries[] = {
"Get raw GPS location.",
NULL
},
{ "location-enable-cdma-bs", 0, 0, G_OPTION_ARG_NONE, &enable_cdma_bs_flag,
"Enable CDMA base station location gathering.",
NULL
},
{ "location-disable-cdma-bs", 0, 0, G_OPTION_ARG_NONE, &disable_cdma_bs_flag,
"Disable CDMA base station location gathering.",
NULL
},
{ "location-get-cdma-bs", 0, 0, G_OPTION_ARG_NONE, &get_cdma_bs_flag,
"Get CDMA base station location.",
NULL
},
{ NULL }
};
@@ -131,7 +146,8 @@ mmcli_modem_location_options_enabled (void)
if ((enable_3gpp_flag && disable_3gpp_flag) ||
(enable_gps_nmea_flag && disable_gps_nmea_flag) ||
(enable_gps_raw_flag && disable_gps_raw_flag)) {
(enable_gps_raw_flag && disable_gps_raw_flag) ||
(enable_cdma_bs_flag && disable_cdma_bs_flag)) {
g_printerr ("error: cannot enable and disable the same source\n");
exit (EXIT_FAILURE);
}
@@ -140,6 +156,7 @@ mmcli_modem_location_options_enabled (void)
get_3gpp_flag = TRUE;
get_gps_nmea_flag = TRUE;
get_gps_raw_flag = TRUE;
get_cdma_bs_flag = TRUE;
}
n_actions = (status_flag +
@@ -148,10 +165,13 @@ mmcli_modem_location_options_enabled (void)
enable_gps_nmea_flag +
disable_gps_nmea_flag +
enable_gps_raw_flag +
disable_gps_raw_flag) +
disable_gps_raw_flag +
enable_cdma_bs_flag +
disable_cdma_bs_flag) +
!!(get_3gpp_flag +
get_gps_nmea_flag +
get_gps_raw_flag));
get_gps_raw_flag +
get_cdma_bs_flag));
if (n_actions > 1) {
g_printerr ("error: too many Location actions requested\n");
@@ -277,6 +297,11 @@ build_sources_from_flags (void)
if (disable_gps_raw_flag)
sources &= ~MM_MODEM_LOCATION_SOURCE_GPS_RAW;
if (enable_cdma_bs_flag)
sources |= MM_MODEM_LOCATION_SOURCE_CDMA_BS;
if (disable_cdma_bs_flag)
sources &= ~MM_MODEM_LOCATION_SOURCE_CDMA_BS;
return sources;
}
@@ -284,6 +309,7 @@ static void
get_location_process_reply (MMLocation3gpp *location_3gpp,
MMLocationGpsNmea *location_gps_nmea,
MMLocationGpsRaw *location_gps_raw,
MMLocationCdmaBs *location_cdma_bs,
const GError *error)
{
/* First, check for failures */
@@ -308,6 +334,12 @@ get_location_process_reply (MMLocation3gpp *location_3gpp,
exit_error = TRUE;
}
if (get_cdma_bs_flag && !location_cdma_bs) {
g_printerr ("error: couldn't get CDMA base station location from the modem: '%s'\n",
error ? error->message : "not available");
exit_error = TRUE;
}
if (exit_error)
exit (EXIT_FAILURE);
} else if (error) {
@@ -372,12 +404,26 @@ get_location_process_reply (MMLocation3gpp *location_3gpp,
" Raw GPS | Not available\n");
}
if (get_cdma_bs_flag) {
if (location_cdma_bs)
g_print (" -------------------------\n"
" CDMA BS | Longitude: '%lf'\n"
" | Latitude: '%lf'\n",
mm_location_cdma_bs_get_longitude (location_cdma_bs),
mm_location_cdma_bs_get_latitude (location_cdma_bs));
else
g_print (" -------------------------\n"
" CDMA BS | Not available\n");
}
if (location_3gpp)
g_object_unref (location_3gpp);
if (location_gps_nmea)
g_object_unref (location_gps_nmea);
if (location_gps_raw)
g_object_unref (location_gps_raw);
if (location_cdma_bs)
g_object_unref (location_cdma_bs);
}
static void
@@ -387,6 +433,7 @@ get_location_ready (MMModemLocation *modem_location,
MMLocation3gpp *location_3gpp = NULL;
MMLocationGpsNmea *location_gps_nmea = NULL;
MMLocationGpsRaw *location_gps_raw = NULL;
MMLocationCdmaBs *location_cdma_bs = NULL;
GError *error = NULL;
mm_modem_location_get_full_finish (modem_location,
@@ -394,8 +441,9 @@ get_location_ready (MMModemLocation *modem_location,
get_3gpp_flag ? &location_3gpp : NULL,
get_gps_nmea_flag ? &location_gps_nmea : NULL,
get_gps_raw_flag ? &location_gps_raw : NULL,
get_cdma_bs_flag ? &location_cdma_bs : NULL,
&error);
get_location_process_reply (location_3gpp, location_gps_nmea, location_gps_raw, error);
get_location_process_reply (location_3gpp, location_gps_nmea, location_gps_raw, location_cdma_bs, error);
mmcli_async_operation_done ();
}
@@ -423,7 +471,9 @@ get_modem_ready (GObject *source,
enable_gps_nmea_flag ||
disable_gps_nmea_flag ||
enable_gps_raw_flag ||
disable_gps_raw_flag) {
disable_gps_raw_flag ||
enable_cdma_bs_flag ||
disable_cdma_bs_flag) {
g_debug ("Asynchronously setting up location gathering...");
mm_modem_location_setup (ctx->modem_location,
build_sources_from_flags (),
@@ -437,7 +487,8 @@ get_modem_ready (GObject *source,
/* Request to get location from the modem? */
if (get_3gpp_flag ||
get_gps_nmea_flag ||
get_gps_raw_flag) {
get_gps_raw_flag ||
get_cdma_bs_flag) {
g_debug ("Asynchronously getting location from the modem...");
mm_modem_location_get_full (ctx->modem_location,
ctx->cancellable,
@@ -497,7 +548,9 @@ mmcli_modem_location_run_synchronous (GDBusConnection *connection)
enable_gps_nmea_flag ||
disable_gps_nmea_flag ||
enable_gps_raw_flag ||
disable_gps_raw_flag) {
disable_gps_raw_flag ||
enable_cdma_bs_flag ||
disable_cdma_bs_flag) {
gboolean result;
g_debug ("Synchronously setting up location gathering...");
@@ -513,19 +566,22 @@ mmcli_modem_location_run_synchronous (GDBusConnection *connection)
/* Request to get location from the modem? */
if (get_3gpp_flag ||
get_gps_nmea_flag ||
get_gps_raw_flag) {
get_gps_raw_flag ||
get_cdma_bs_flag) {
MMLocation3gpp *location_3gpp = NULL;
MMLocationGpsNmea *location_gps_nmea = NULL;
MMLocationGpsRaw *location_gps_raw = NULL;
MMLocationCdmaBs *location_cdma_bs = NULL;
g_debug ("Synchronously getting location from the modem...");
mm_modem_location_get_full_sync (ctx->modem_location,
get_3gpp_flag ? &location_3gpp : NULL,
get_gps_nmea_flag ? &location_gps_nmea : NULL,
get_gps_raw_flag ? &location_gps_raw : NULL,
get_cdma_bs_flag ? &location_cdma_bs : NULL,
NULL,
&error);
get_location_process_reply (location_3gpp, location_gps_nmea, location_gps_raw, error);
get_location_process_reply (location_3gpp, location_gps_nmea, location_gps_raw, location_cdma_bs, error);
return;
}

View File

@@ -317,9 +317,8 @@ Display the status of the given modem.
.SH LOCATION OPTIONS
These options detail how to discover your location using Global
Positioning System (GPS), 3rd Generation Partnership Project
(3GPP) and National Marine Electronics Association (NMEA)
technologies.
Positioning System (GPS) or directly from your mobile network infrastructure
(either 3GPP or 3GPP2).
All location options must be used with \fB\-\-modem\fR or \fB\-m\fR.
@@ -331,13 +330,13 @@ Show the current status for discovering our location.
Show all location information available.
.TP
.B \-\-location\-enable\-3gpp
Enable location discovery using 3GPP.
Enable location discovery using the 3GPP network.
.TP
.B \-\-location\-disable\-3gpp
Disable location discovery using 3GPP.
Disable location discovery using the 3GPP network.
.TP
.B \-\-location\-get\-3gpp
Show 3GPP based location information.
Show 3GPP based location information (MCC, MNC, LAC, CI).
.TP
.B \-\-location\-enable\-gps\-nmea
Enable location discovery using GPS and reported with NMEA traces.
@@ -356,7 +355,16 @@ longitude/latitude) values.
Disable location discovery using GPS and raw values.
.TP
.B \-\-location\-get\-gps\-raw
Show GPS based location information with raw values.
Show GPS based location information with raw values (e.g. latitude, longitude).
.TP
.B \-\-location\-enable\-cdma-bs
Enable location discovery using the 3GPP2 network.
.TP
.B \-\-location\-disable\-cdma-bs
Disable location discovery using the 3GPP2 network.
.TP
.B \-\-location\-get\-cdma-bs
Show 3GPP2 based location information (location of the CDMA base station).
.SH MESSAGING OPTIONS
All messaging options must be used with \fB\-\-modem\fR or \fB\-m\fR.
@@ -705,6 +713,8 @@ You can query location source specific information with
| $GPVTG,,T,,M,,N,,K,N*2C
-------------------------
Raw GPS | Not available
-------------------------
CDMA BS | Not available
.Ed
An example of RAW GPS location information: