diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-05-30 13:05:43 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-07-03 16:08:57 +0200 |
commit | 2a28bb9548815705854b0bfb6273e0b83974b667 (patch) | |
tree | 7234733885a4d76d4b3dce1177775145d58a62de | |
parent | 55c6f8eda1b760f5bfdd8f120ccb26deb675f8e3 (diff) |
cli: new `--dms-get-power-state' action
-rw-r--r-- | cli/qmicli-dms.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/cli/qmicli-dms.c b/cli/qmicli-dms.c index 8f3616c..3be966a 100644 --- a/cli/qmicli-dms.c +++ b/cli/qmicli-dms.c @@ -47,6 +47,7 @@ static gboolean get_manufacturer_flag; static gboolean get_model_flag; static gboolean get_revision_flag; static gboolean get_msisdn_flag; +static gboolean get_power_state_flag; static gboolean noop_flag; static GOptionEntry entries[] = { @@ -74,6 +75,10 @@ static GOptionEntry entries[] = { "Get MSISDN", NULL }, + { "dms-get-power-state", 0, 0, G_OPTION_ARG_NONE, &get_power_state_flag, + "Get power state", + NULL + }, { "dms-noop", 0, 0, G_OPTION_ARG_NONE, &noop_flag, "Just allocate or release a DMS client. Use with `--client-no-release-cid' and/or `--client-cid'", NULL @@ -111,6 +116,7 @@ qmicli_dms_options_enabled (void) get_model_flag + get_revision_flag + get_msisdn_flag + + get_power_state_flag + noop_flag); if (n_actions > 1) { @@ -399,6 +405,47 @@ get_msisdn_ready (QmiClientDms *client, qmi_message_dms_get_msisdn_output_unref (output); shutdown (TRUE); } + +static void +get_power_state_ready (QmiClientDms *client, + GAsyncResult *res) +{ + gchar *power_state_str; + QmiMessageDmsGetPowerStateOutputInfo info; + QmiMessageDmsGetPowerStateOutput *output; + GError *error = NULL; + + output = qmi_client_dms_get_power_state_finish (client, res, &error); + if (!output) { + g_printerr ("error: operation failed: %s\n", error->message); + g_error_free (error); + shutdown (FALSE); + return; + } + + if (!qmi_message_dms_get_power_state_output_get_result (output, &error)) { + g_printerr ("error: couldn't get power state: %s\n", error->message); + g_error_free (error); + qmi_message_dms_get_power_state_output_unref (output); + shutdown (FALSE); + return; + } + + qmi_message_dms_get_power_state_output_get_info (output, &info, NULL); + power_state_str = qmi_dms_power_state_build_string_from_mask ((QmiDmsPowerState)info.power_state_flags); + + g_print ("[%s] Device power state retrieved:\n" + "\tPower state: '%s'\n" + "\tBattery level: '%u %%'\n", + qmi_device_get_path_display (ctx->device), + power_state_str, + (guint)info.battery_level); + + g_free (power_state_str); + qmi_message_dms_get_power_state_output_unref (output); + shutdown (TRUE); +} + static gboolean noop_cb (gpointer unused) { @@ -490,6 +537,18 @@ qmicli_dms_run (QmiDevice *device, return; } + /* Request to get power status? */ + if (get_power_state_flag) { + g_debug ("Asynchronously getting power status..."); + qmi_client_dms_get_power_state (ctx->client, + NULL, + 10, + ctx->cancellable, + (GAsyncReadyCallback)get_power_state_ready, + NULL); + return; + } + /* Just client allocate/release? */ if (noop_flag) { g_idle_add (noop_cb, NULL); |