diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-05-07 18:33:06 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-07-03 16:08:51 +0200 |
commit | 898c4e84429f77b906436c0078f17e8f4b2a6df2 (patch) | |
tree | 59d0ddb02146e65583d085911312281a2edd2b8b /cli/qmicli-wds.c | |
parent | 6b93f91dc56c2d2b01531cf0beebf299129bd27a (diff) | |
download | external_libqmi-898c4e84429f77b906436c0078f17e8f4b2a6df2.zip external_libqmi-898c4e84429f77b906436c0078f17e8f4b2a6df2.tar.gz external_libqmi-898c4e84429f77b906436c0078f17e8f4b2a6df2.tar.bz2 |
cli,wds: new `--wds-get-current-data-bearer-technology' action
Diffstat (limited to 'cli/qmicli-wds.c')
-rw-r--r-- | cli/qmicli-wds.c | 137 |
1 files changed, 136 insertions, 1 deletions
diff --git a/cli/qmicli-wds.c b/cli/qmicli-wds.c index 5a36d34..8c42df5 100644 --- a/cli/qmicli-wds.c +++ b/cli/qmicli-wds.c @@ -49,6 +49,7 @@ static Context *ctx; static gboolean start_network_flag; static gboolean get_packet_service_status_flag; static gboolean get_data_bearer_technology_flag; +static gboolean get_current_data_bearer_technology_flag; static GOptionEntry entries[] = { { "wds-start-network", 0, 0, G_OPTION_ARG_NONE, &start_network_flag, @@ -63,6 +64,10 @@ static GOptionEntry entries[] = { "Get data bearer technology", NULL }, + { "wds-get-current-data-bearer-technology", 0, 0, G_OPTION_ARG_NONE, &get_current_data_bearer_technology_flag, + "Get current data bearer technology", + NULL + }, { NULL } }; @@ -92,7 +97,8 @@ qmicli_wds_options_enabled (void) n_actions = (start_network_flag + get_packet_service_status_flag + - get_data_bearer_technology_flag); + get_data_bearer_technology_flag + + get_current_data_bearer_technology_flag); if (n_actions > 1) { g_printerr ("error: too many WDS actions requested\n"); @@ -362,6 +368,123 @@ get_data_bearer_technology_ready (QmiClientWds *client, } static void +get_current_data_bearer_technology_ready (QmiClientWds *client, + GAsyncResult *res) +{ + GError *error = NULL; + QmiWdsGetCurrentDataBearerTechnologyOutput *output; + gchar *rat_string = NULL; + gchar *so_string = NULL; + + output = qmi_client_wds_get_current_data_bearer_technology_finish (client, res, &error); + if (!output) { + g_printerr ("error: operation failed: %s\n", + error->message); + exit (EXIT_FAILURE); + } + + if (!qmi_wds_get_current_data_bearer_technology_output_get_result (output, &error)) { + g_printerr ("error: couldn't get current data bearer technology: %s\n", error->message); + exit (EXIT_FAILURE); + } + + switch (qmi_wds_get_current_data_bearer_technology_output_get_current_network_type (output)) { + case QMI_WDS_NETWORK_TYPE_UNKNOWN: + break; + case QMI_WDS_NETWORK_TYPE_3GPP: + rat_string = (qmi_wds_rat_3gpp_build_string_from_mask ( + qmi_wds_get_current_data_bearer_technology_output_get_current_rat_3gpp ( + output))); + break; + case QMI_WDS_NETWORK_TYPE_3GPP2: + rat_string = (qmi_wds_rat_3gpp2_build_string_from_mask ( + qmi_wds_get_current_data_bearer_technology_output_get_current_rat_3gpp2 ( + output))); + if (qmi_wds_get_current_data_bearer_technology_output_get_current_rat_3gpp2 (output) & + QMI_WDS_RAT_3GPP2_CDMA1X) { + so_string = (qmi_wds_so_cdma1x_build_string_from_mask ( + qmi_wds_get_current_data_bearer_technology_output_get_current_so_cdma1x ( + output))); + } else if (qmi_wds_get_current_data_bearer_technology_output_get_current_rat_3gpp2 (output) & + QMI_WDS_RAT_3GPP2_EVDO_REVA) { + so_string = (qmi_wds_so_evdo_reva_build_string_from_mask ( + qmi_wds_get_current_data_bearer_technology_output_get_current_so_evdo_reva ( + output))); + } + break; + default: + g_warn_if_reached (); + } + + g_print ("[%s] Data bearer technology (current):\n" + " Network type: '%s'", + qmi_device_get_path_display (ctx->device), + qmi_wds_network_type_get_string ( + qmi_wds_get_current_data_bearer_technology_output_get_current_network_type ( + output))); + if (rat_string) { + g_print (" Radio Access Technology: '%s'", + rat_string); + g_free (rat_string); + } + if (so_string) { + g_print (" Service Option: '%s'", + so_string); + g_free (so_string); + } + + rat_string = NULL; + so_string = NULL; + switch (qmi_wds_get_current_data_bearer_technology_output_get_last_network_type (output)) { + case QMI_WDS_NETWORK_TYPE_UNKNOWN: + break; + case QMI_WDS_NETWORK_TYPE_3GPP: + rat_string = (qmi_wds_rat_3gpp_build_string_from_mask ( + qmi_wds_get_current_data_bearer_technology_output_get_last_rat_3gpp ( + output))); + break; + case QMI_WDS_NETWORK_TYPE_3GPP2: + rat_string = (qmi_wds_rat_3gpp2_build_string_from_mask ( + qmi_wds_get_current_data_bearer_technology_output_get_last_rat_3gpp2 ( + output))); + if (qmi_wds_get_current_data_bearer_technology_output_get_last_rat_3gpp2 (output) & + QMI_WDS_RAT_3GPP2_CDMA1X) { + so_string = (qmi_wds_so_cdma1x_build_string_from_mask ( + qmi_wds_get_current_data_bearer_technology_output_get_last_so_cdma1x ( + output))); + } else if (qmi_wds_get_current_data_bearer_technology_output_get_last_rat_3gpp2 (output) & + QMI_WDS_RAT_3GPP2_EVDO_REVA) { + so_string = (qmi_wds_so_evdo_reva_build_string_from_mask ( + qmi_wds_get_current_data_bearer_technology_output_get_last_so_evdo_reva ( + output))); + } + break; + default: + g_warn_if_reached (); + } + + g_print ("[%s] Data bearer technology (last):\n" + " Network type: '%s'", + qmi_device_get_path_display (ctx->device), + qmi_wds_network_type_get_string ( + qmi_wds_get_current_data_bearer_technology_output_get_last_network_type ( + output))); + if (rat_string) { + g_print (" Radio Access Technology: '%s'", + rat_string); + g_free (rat_string); + } + if (so_string) { + g_print (" Service Option: '%s'", + so_string); + g_free (so_string); + } + + qmi_wds_get_current_data_bearer_technology_output_unref (output); + shutdown (); +} + +static void allocate_client_ready (QmiDevice *device, GAsyncResult *res) { @@ -410,6 +533,18 @@ allocate_client_ready (QmiDevice *device, return; } + /* Request to get current data bearer technology? */ + if (get_current_data_bearer_technology_flag) { + g_debug ("Asynchronously getting current data bearer technology..."); + qmi_client_wds_get_current_data_bearer_technology (ctx->client, + NULL, + 10, + ctx->cancellable, + (GAsyncReadyCallback)get_current_data_bearer_technology_ready, + NULL); + return; + } + g_warn_if_reached (); } |